PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IR-Fernsteuerung für NIKON-Spiegelreflex (ML-L3-Clone)



oberallgeier
02.11.2011, 14:55
Einen ML-L3_Clone hatte ich als kleines, nützliches Projektchen am ersten November zusammengebaut. Das ist eine IR-Fernsteuerung für Spiegelreflexkameras von Nikon (vermutlich für so ziemlich alle digitalen). Das wollte ich schon lange, hatte aber erst vor wenigen Tagen das notwendige originale ML-L3 Timing gefunden (klick).
(http://www.bigmike.it/ircontrol/main-old.html)
Wozu ist so ein Dingens gut? Für Selbstschüsse reicht (meist) der Selbstauslöser, das ist meist auch recht lustig. Der Fernauslöser ist für eher heikle Aufgaben, wenn der Fotoapparat bei der Aufgabe möglichst nicht erschüttert werden soll (Spiegelvorauslösung!! einschalten). Ausserdem - der Besitz alleine beruhigt ja auch schon.

Der Tiny13 ist total überfordert mit dieser Aufgabe, sodass er die meisten seiner acht Beinchen unbeschaltet in die Luft strecken muss. Mal zuerst der Schaltplan.

......20443

Aufgebaut war das schnell, der Code war schon nicht sooo einfach zu erstellen. Erst eine genaue Nachrechnung ergab, das die fast PWM ohne Prescaler bei 9,6 MHz (interner Takt - kein Quarz - für die Aufgabe ausreichend genau und eben um drei Bauteile weniger) einen Takt von 37,5 kHz ergibt. Die Nikon will 40 kHz - da wird sie wohl mit den knapp 95% auch zufrieden sein!? Also ausprobiert - und mit nem Vorschaltwiderstand von 80Ω (2X163// - meine Kleinsten) schafft die LD 274 locker an die 12 m. Bei 5V. Bei 2,8 V sinds nur noch so 2 m.

Hier eine Zusammenstellung. Rechts oben ist das eigentliche Wunschziel mit 3 LR41 und einer LED Ø5mm. Dazu warte ich noch auf den Controller in SO8 - eine erste Überprüfung hatte ergeben, dass die gesamte Schaltung hineinpasst - unter den Mikrotaster (klar - bei DER Bauteilanzahl). Links oben ist der Funktionsaufbau mit nem Tiny13 in einer Flash+Experimentierplatine für nen 2313 mit entsprechender Behelfsverkabelung der Fassung.

......20444

Arbeitsweise: langer burst, lange Pause, drei Signalbursts - Abstandpause 63 ms für Zweitsignal, dann eine viertel Sekunde Ruhe, danach Wiederholung. Gesendet wird so lange, wie der Taster gedrückt wird. Wenn Interesse am Code besteht (C oder Hex) stelle ich den für private Nachbauten natürlich gerne hier zur Verfügung.

danimath
02.11.2011, 15:37
Hi oberallgeier,

wie cool ist das denn? Noch 'n Timer für Intervallaufnahmen dran, und ein Möglichkeit für eine Lichtschranke, dann könnten doch auch die anderen Beinchen was zu tun haben. Sowas wollte ich für ein Fernauslösekabel machen, aber ich habe das Protokoll nicht mehr wieder gefunden. Mit Infrarot ist das dann ja viel einfacher und ohne Eingriff in die Kamera-Elektronik.

vielen Dank für diesen Beitrag und viele Grüße
Andreas

markusj
02.11.2011, 15:52
Witzig, sowas hatte ich auch schon in der Planung, allerdings gleich etwas universeller ausgelegt, so dass einerseits ein Anschluss über Kabel möglich wird, und andererseits verschiedene weitere Auslösequellen/-modi möglich sind (Zeitgesteuert, Intervall, Schall, Licht/-schranke). Evtl. sogar mit der Option, auch Blitze auszulösen.

Coming soon (so ca. 2020 oder so ...)

mfG
Markus

PS: Glaube ich bin zu optimistisch mit den 2020 ...

oberallgeier
02.11.2011, 16:22
Danke für das Lob.


... hatte ich auch schon in der Planung, allerdings gleich etwas universeller ausgelegt ...Ja, geht mir im Prinzip auch so - aber je mehr das Ding hat (Funktion UND Gewicht) desto seltener nimmtbraucht man es. Und dieses Teilchen im Ø10x53er Metallgehäuse passt in jede Ecke oder Falte der Fototasche und sieht einfach viel schicker aus als das Original. Ich warte brennend auf den tiny13-SO8.

Übrigens diese Multifunktionswunderwaffe gibts ja schon - sehr schön beschrieben, sehr vielfältig und trotzdem übersichtlich (aber deutlich teurer als mein dreifuffzig-Spielzeug) klick-hier. (http://www.sternhimmel-ueber-ulm.de/timer00.htm)

markusj
02.11.2011, 17:02
Es übrigens ein ähnliches Projekt im DSLR-Forum (http://www.dslr-forum.de/showthread.php?t=811413)

mfG
Markus

oberallgeier
02.11.2011, 17:24
Nun, der Sterngucker aus Ulm hat wenigstens auf der ersten Seite die Kompatibilitäten hingeschrieben. Bei dem 150-Seiten-Thread weiß ich nicht, ob das nur für die Canon-en ist : - (

seite5
02.11.2011, 17:33
hallo,
hab mir ein ähnliches Teil mit Timer zum Fotografieren von Blitzen am Nachthimmel gebaut, Auslösen alle 10s, 8s Belichten, auf jedem 10..20ten Bild ist dann
tatsächlich einer 'drauf.
Ähnliches war auch schon in der Elektor, allerdings unter Nutzung der Canon-Fernsteuer-Klinkenbuchse.
mfg
Achim

oberallgeier
06.11.2011, 12:15
Bei so einem praktischen Teil, das wenig Strom braucht und selten(st) benutzt wird kommt gleich der Wunsch auf, es mit alten, sonst nicht mehr benutzten Zellen zu betreiben. Bei denen hat man ja immer noch ne Weile Zeit, bis der Zahn der Korrision auftritt.

Aufgabe: bau´ einen Step-Up-Regler, der preislich zu dem simplen, billigen Teilchen passt. Also nichts in dieser Art, (http://www.pololu.com/catalog/product/2120/specs) sondern eher so etwas Ähnliches wie diese Schaltung:


......http://www.elektronik-labor.de/Notizen/LEDwandler1.jpg
......© (http://www.elektronik-labor.de/Notizen/LEDwandler.html) by B.Kainka (http://www.elektronik-labor.de/Notizen/LEDwandler.html)

Dumm, dumm - die Schaltung läuft zwar prächtig schon auf dem Steckbrett und das sogar mit reichlich abweichenden Bauteilgrößen an einer Uralt-AAA mit ca. 1,1 V. Daraus macht sie für die LED schon über 2 V mit 2x22pF. Aber das ist ein zerhackter Gleichstrom mit ca. 1,5 MHz. Damit brauche ich erst garnicht einen Versuch mit einem angschlossenen Controller zu machen.

Meine Frage: gibt es ähnliche, einfache, billige Schaltungen, mit denen ich den so gewonnenen Strom als einigermaßen rippelfreien Gleichtrom in der Größe um die 2 .. 3 V bekomme? Wie oben gesagt: knappe zehn Thaler sind mir für diese Lösung doch reichlich überdimensioniert.

Danke im Voraus.

PICture
06.11.2011, 14:23
Hallo!

Deine o.g. Schaltung scheint mir ännlich zu "step-up" Spannungswandler aus Solarlampen. Um eine rippelfreie Gleichspannung um 2-3V zu haben, sollte es mit einem an Kollektor des Transistors (anstatt LED) durch Schottky Diode geladenen Kondensator (Elko ?) gehen.

Übrigens, der Spannungswandler ist nicht besonders effizient (aber kompliziert) und ich würde für kleine Lastströme (bis 10 mA) lieber einen Spannungsverdoppler ICL7660 mit nur zwei kleinen Elkos verwenden (siehe dazu: http://www.datasheetcatalog.org/datasheet/maxim/ICL7660-MAX1044.pdf ). ;)

oberallgeier
06.11.2011, 22:29
... für kleine Lastströme (bis 10 mA) lieber einen Spannungsverdoppler ICL7660 ...Danke für den Hinweis. Das Datenblatt (intersil und Dein Link von MAXIM) erzählt mir, dass ich dann wirklich nur ein paar mA rauskriege, ich brauche für mein Spielzeug aber auch nur so etwa 6..7 mA. Ich werd´s also mal versuchen, so ein 7660er kostet nicht die Welt . . .

PICture
06.11.2011, 22:55
Du könntest die Spannungsabfälle auf den Dioden beim klassischen Verdoppler ersparen, wenn du den ICL7660 als Spannungsinverter (+V und -V) nehmen würdest, da darf aber "+" bzw. "-" des Akkus mit nirgendwas ausser ICL7660 verbunden werden.

Vieeel Spass und Erfolg beim experimentieren ! :D

Torrentula
17.06.2012, 11:25
Hallo oberallgeier!

Sehr interessantes Projekt. Könntest du den C code oder die HEX zu Verfügung stellen?

Vielen Dank!

oberallgeier
17.06.2012, 12:18
... Könntest du den C code oder die HEX zu Verfügung stellen? ...Klar - ccp (sprich: guttenbergen, ein deutsch-akademisches Hauptwort) ist ja kein Problem.


/* >>
Sicherung 05Nov2011 1220 ..\C1 mC Projekte\mist\ML-3_1p3
// ================================================== ============================ =
Target MCU : ATtiny13
Target Hardware : FLEX2313, umgesteckt auf Pinout tiny13
Target cpu-frequ. : 9,6 MHz, interner Oszillator
// ================================================== ============================ =
Enthaltene Routinen :
#includes siehe unten //
void TC0ML3_init(void) // Init Timer/Counter0 für 37,5 kHz-Modulation
void wt25us(uint16_t us) // Pausenzeit etwa 25 Mikrosekunden
int main(void)
// ================================================== ============================ =
*** Versionsgeschichte:
====================
1p3 05Nov2011 1210 Betriebs-/Funktions-rtLED auf PB1 ansteuern
1p2 01Nov2011 1940 Zum Stromsparen werden alle Pins als Ausgang definiert,
jede viertel Sekunde wird - endlos - in eine Doppelsequenz gesendet
1p1 01Nov2011 1530 Redaktionelle Nacharbeiten
1p0 01Nov2011 1520 Nach Korrektur der Zeiten (Pause zum 4. Burst) gehts problemlos
x00 31Okt11 1020 Neu
// ================================================== ============================ =
*** Aufgabenstellung : Fernsteuerung für Nikon D80
Original: ..\C2\Cpcr13\Cpcr13_x33.c x11 11apr09 2230
// ================================================== ============================ =
Alle möglichen Portanschlüsse am ATtiny 13 :
============== ===
dW, /RESET, (PB5) 1 8 Vcc
PCINT3, CLKI, ADC3,(PB3) 2 7 (PB2), SCK, T0, ADC1, PCINT2
PCINT4, ADC2,(PB4)___3 6___(PB1), MISO, INT0, AIN1, PCINT1, OC0B
GND 4 5 (PB0), MOSI, AIN0, PCINT0, OC0A
--------------------==========-----------------------
Vorgesehene/belegte Anschlüsse am ATtiny 13 :
==================
/RESET, (PB5) 1 8 Vcc
(PB3) 2 7 (PB2)
Taster, PCINT4, (PB4)___3 6___(PB1), ab 1p3 rtLED = Betriebsanzeige
LED-Kathode, GND 4 5 (PB0), IR-LED-Anode + 0k22
*/
// ================================================== ============================ =
// ================================================== ============================ =
//
#include <avr/io.h> //
#include <stdlib.h> //
#include <avr/interrupt.h> // Wegen des Timers
//
// #define MCU = // siehe Current Configuration Options
// #define F_CPU 9600000 // siehe Current Configuration Options
//
// ================================================== ============================ =
// ================================================== ============================ =
// ===== Subroutinen ================================================== ======== =
// ================================================== ============================ =

// ================================================== ============================ =
// == Ansteuerung/Modulation einer IRLED, 40 kHz für NIKON-Fernsteuerung ML-L3
// Die LED wird moduliert durch PB0=OC0A
void TC0ML3_init(void) // Init Timer/Counter0 für 37,5 kHz-Modulation
{ //
TCCR0A |= (1<<COM0A1); // Clear/set OC0A on Compare Match, OC0A ist PB0
// normale PWM aktivieren (nicht invertiert)
// Bezug doc 2535J-AVR-08/10 doc S 63
TCCR0A |= (1<<WGM02)|(1<<WGM01)|(1<<WGM00);
// fast PWM, TOP=OCR0A doc S 72
TCCR0B |= (1<<CS00); // no Prescaler, clk => 9,6 MHz doc S 73
OCR0A = 64; // => Einschaltdauer ca. 25%
}
// ================================================== ============================ =

// ================================================== ============================ =
// ================================================== ============================ =
/*### Programm pausieren lassen !! Der Pausenwert ist nur experimentell !*/
//
void wt25us(uint16_t us) // Pausenzeit etwa 25 Mikrosekunden
{ // diese Zeit ist NUR experimentell bestimmt
for(; us>0; us--) // für tiny13 @ 9,6 MHz
{
uint16_t __c = 54;
__asm__ volatile (
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (__c)
: "0" (__c)
);
}
}
// ================================================== ============================ =

// ================================================== ============================ =
// ===== ENDE Subroutinen ================================================== =
// ================================================== ============================ =

// ================================================== ============================ =
// === HAUPTProgramm und Initialisierungen
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//
int main(void) //
{ //
uint8_t i; // Zählvariable für Endlosschleife
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// /RESET, (PB5) 1 A - 8 Vcc //
// (PB3) 2 A A 7 (PB2) //
// (PB4)___3 A A 6___(PB1) //
// LED-Kathode GND 4 - A 5 (PB0) // LED-Anode + Widerstand 1k
// Pins als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
// A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
DDRB = 0b00111111; // siehe aktuell oben
PORTB = 0b11000000; // und Port/Pull Ups (1) aktivieren
// ###>>> DDRB-0 auf 0 setzen, schaltet die LED AUS !!!!!
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//
i = 0; //
TC0ML3_init(); // Initialisiere LED-Interrupt
TCCR0B &= ~(1<<CS00); // no Prescaler, clk => 9,6 MHz doc S 73
// .. damit wird der Timerinterrupt verhindert
sei(); // Erlaube Interrupts
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//
// ================================================== ============================ =
// Lauffähiges Codebeispiel, getestet 01. Nov. 2011 mit ND80
// ================================================== ============================ =
// ================================================== ============================ =
// Vorgeschriebenes Timing in ms und in ticks zu 25-µs
// on: 2,000 0,390 0,410 0,400
// =in µs-ticks 80 16 16 16
// off: --- 27,830 1,580 3,580 ----
// =in µs-ticks 1113 63 143
// Pause bis zur zweiten Sequenz: 63 ms entspr. 2520 µs-ticks
// vgl: http://www.sbprojects.com/projects/nikon/index.php
// http://www.bigmike.it/ircontrol/index.html bzw.
// http://www.bigmike.it/ircontrol/images/ML-L3.r2.png
// ================================================== ============================ =
//
while (1) //
{ //
i++; // Schleifezähler eins rauf
// Die Kommandosequenz
// 1. Burst
PORTB |= (1<<PB1); // rtLED einschalten
DDRB |= (1<<PB0); // IR-LED schalten
TCCR0B |= (1<<CS00); // no Prescaler, clk => 9,6 MHz doc S 73
wt25us ( 80); //
TCCR0B &= ~(1<<CS00); // no clock, timer stopped doc S 73
DDRB &= ~(1<<PB0); // IR-LED schalten
wt25us ( 1113); //
// 2, Burst
DDRB |= (1<<PB0); // IR-LED schalten
TCCR0B |= (1<<CS00); // no Prescaler, clk => 9,6 MHz doc S 73
wt25us ( 16); //
TCCR0B &= ~(1<<CS00); // no clock, timer stopped doc S 73
DDRB &= ~(1<<PB0); // IR-LED schalten
wt25us ( 63); //
// 3. Burst
DDRB |= (1<<PB0); // IR-LED schalten
TCCR0B |= (1<<CS00); // no Prescaler, clk => 9,6 MHz doc S 73
wt25us ( 16); //
//
TCCR0B &= ~(1<<CS00); // no clock, timer stopped doc S 73
DDRB &= ~(1<<PB0); // IR-LED schalten
wt25us ( 143); //
// 4. Burst
DDRB |= (1<<PB0); // IR-LED schalten
TCCR0B |= (1<<CS00); // no Prescaler, clk => 9,6 MHz doc S 73
wt25us ( 16); //
TCCR0B &= ~(1<<CS00); // no clock, timer stopped doc S 73
DDRB &= ~(1<<PB0); // IR-LED schalten
//
PORTB &= ~(1<<PB1); // rtLED ausschalten
//
// Pause bis zur nächsten Sequenz: 63 ms entspr. 2520 µs-ticks
wt25us ( 2520); //
if (i == 2) //
{ //
i = 0; //
wt25us (10000); // Warte eine viertel Sekunde, danach neue
} // Doppelschleife
} // Ende von while (1)
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
return 0;
}
// ===== Ende
// ================================================== ============================ =

/* Es folgt der aktuelle Übersetzungskommentar:

rm -rf D01_20.o D01_20.elf dep/* D01_20.hex D01_20.eep D01_20.lss D01_20.map
Build succeeded with 0 Warnings...
avr-gcc -mmcu=attiny13 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -O0
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
-MD -MP -MT D01_20.o -MF dep/D01_20.o.d -c ../D01_20.c
avr-gcc -mmcu=attiny13 -Wl,-Map=D01_20.map D01_20.o -o D01_20.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature D01_20.elf D01_20.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load"
--change-section-lma .eeprom=0 --no-change-warnings -O
ihex D01_20.elf D01_20.eep || exit 0
avr-objdump -h -S D01_20.elf > D01_20.lss
AVR Memory Usage
----------------
Device: attiny13
Program: 542 bytes (52.9% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...
Ende des Kommentars ...
================================================== ========== */



:1000000009C00EC00DC00CC00BC00AC009C008C09A
:1000100007C006C011241FBECFE9CDBF45D0FDC02B
:10002000EFCFDF93CF93CDB7DEB7AFE4B0E0EFE42F
:10003000F0E0808180688C93AFE4B0E0EFE4F0E022
:1000400080818B608C93A3E5B0E0E3E5F0E08081F4
:1000500081608C93E6E5F0E080E48083CF91DF91CE
:100060000895DF93CF9300D000D0CDB7DEB79C8347
:100070008B830FC086E390E09A83898389819A817C
:100080000197F1F79A8389838B819C8101979C83E7
:100090008B838B819C81009769F70F900F900F9055
:1000A0000F90CF91DF910895DF93CF930F92CDB74B
:1000B000DEB7E7E3F0E08FE38083E8E3F0E080EC95
:1000C00080831982AEDFA3E5B0E0E3E5F0E0808154
:1000D0008E7F8C93789489818F5F8983A8E3B0E0C9
:1000E000E8E3F0E0808182608C93A7E3B0E0E7E38F
:1000F000F0E0808181608C93A3E5B0E0E3E5F0E07F
:10010000808181608C9380E590E0ABDFA3E5B0E077
:10011000E3E5F0E080818E7F8C93A7E3B0E0E7E336
:10012000F0E080818E7F8C9389E594E09ADFA7E3ED
:10013000B0E0E7E3F0E0808181608C93A3E5B0E07C
:10014000E3E5F0E0808181608C9380E190E089DFDD
:10015000A3E5B0E0E3E5F0E080818E7F8C93A7E338
:10016000B0E0E7E3F0E080818E7F8C938FE390E056
:1001700078DFA7E3B0E0E7E3F0E0808181608C9373
:10018000A3E5B0E0E3E5F0E0808181608C9380E15D
:1001900090E067DFA3E5B0E0E3E5F0E080818E7FEB
:1001A0008C93A7E3B0E0E7E3F0E080818E7F8C934F
:1001B0008FE890E056DFA7E3B0E0E7E3F0E080816E
:1001C00081608C93A3E5B0E0E3E5F0E0808181609D
:1001D0008C9380E190E045DFA3E5B0E0E3E5F0E05B
:1001E00080818E7F8C93A7E3B0E0E7E3F0E080812D
:1001F0008E7F8C93A8E3B0E0E8E3F0E080818D7F10
:100200008C9388ED99E02DDF8981823009F063CFEE
:0E021000198280E197E225DF5ECFF894FFCFE0
:00000001FF

oberallgeier
19.05.2019, 09:45
Da lag bei mir noch ne alte Rollei rum - mit ner IR-Fernsteuerung. Schick, klein, mit einem Klick-Halter für den Kameragurt. Natürlich stimmt das Sendeprotokoll von Rollei nicht, aber es gibt ja den tiny13A in Bauform SU. Die zwei CR2120 ( >6 V ) im Rolleigehäuse sind etwas zu starker Tobak für den tiny, da bremst jetzt ein AMS1117 (klick) (https://dl.dropbox.com/s/aia2vdrs7lcj9qn/ML-L3mod-x40-as-built.jpg?dl=0) die Power. Mit adaptiertem/optimiertem Code schafft das modifizierte Spielzeug bei Sonnenlicht max. 12 m Abstand für sicheres Auslösen. Das Signal repetiert, sodass bei Dauersignal knapp über 3 Bilder pro Sekunde (bei MEINER Nikon) ausgelöst werden. Eine einzige Auslösung ist aber ohne Mühe auch zu schaffen.

......https://dl.dropbox.com/s/65u2cv0edxrn1pn/Nik_Roll-Geh-kl.jpg?dl=0 (https://dl.dropbox.com/s/7jh05bu5h2zqv7a/Nik_Roll-Geh.jpg?dl=0)
......© 2019 oberallgeier

Hier noch Schaltplan (https://dl.dropbox.com/s/c1u45lp4y3ub1t0/N_ML-L3_x40_as-built.sch?dl=0) von eagle, dazu Board (https://dl.dropbox.com/s/bt8r04qj5sgca57/N_ML-L3_x40_as-built.brd?dl=0) (mit Streifenraster!! und "Fädeldraht") - Code (in C) auf Wunsch.

PS: Der Aufdruck "RC 5" auf dem Fernbedienungsgehäuse stammt von Rollei, der ist missverständlich. Das originale Sendeprotokoll der Fernbedienung ist wohl was rollei-firmenspezielles . . . und eindeutig nicht verwandt mit Philips RC-5