Prototyp: Funkauslöser Nr. 3

[24.03.2006]
Die Teile für den Funkauslöser Nr. 2 gingen vor einiger Zeit zuneige und ich bin ehrlich gesagt auch eine ganze Weile nicht mehr zum basteln gekommen.

Aber jetzt geht es mit neuem Elan und neuen Möglichkeiten ans Werk.

Im Februar/März 2006 bin ich durch nicht mehr nachvollziehbare Umstände auf das Thema "Mikrocontroller" aufmerksam geworden. Von der Existenz dieser Gattung "Mikrochips" wußte ich schon länger, aber irgendwie hat mich das nie sonderlich beeindruckt - geschweige denn dazu bewogen, mich mit den Dingern zu beschäftigen.
Irgendwann im Februar bin ich dann durch einige Elektronik-Foren geschlendert - habe hier und da etwas aufgeschnappt, was im Hinblick auf meine Funkauslöser von Interesse war - und letzendlich gab mir die AVR-Seite von Gerhard Schmidt (www.avr-asm-tutorial.net) den nötigen Anstoß und alle Informationen, mich für AVR Mikrocontroller zu begeistern. Die Seite von Gerd kann ich allen AVR Mikrocontroller-Einsteigern wärmstens empfehlen. Sie ist lustig, locker aber vor allen Dingen informativ und sehr kompetent geschrieben!

Anmerkung: Es gibt außer den AVR Controllern der Firma Atmel noch viele andere Mikrocontroller, die sicherlich ähnlich gut funktionieren. Da ich aber bei meiner Suche nach Informationen zu diesem Thema dermaßen reizüberflutet worden bin, habe ich mir es erspart, mich auch noch mit anderen Mikrocontrollern zu beschäftigen. Vielleicht gibt es welche, die ich genausogut benutzen könnte, aber ich bin eben zuerst über die AVR Controller gestolpert. Außerdem kommt mir das Design und die Programmierung der AVRs sehr entgegen. Erinnert mich ein bißchen an die guten alten Assembler-Zeiten auf dem C-64 ;-). Und überhaupt... Das Informationsangebot im Internet scheint für AVR Controller überproportional groß zu sein... und das muß ja was zu bedeuten haben. ;-)

So, und nun tüftle ich an einer verbesserten Version des bekannten Funkauslösers Nr. 2
, bei der ich meine frisch gewonnenen Mikrocontroller-Erfahrungen mit einfliessen lasse. Die Möglichkeiten, die einem die Programmierung eines kleinen Mikrochips bietet, sind schier unerschöpflich. Bei der Entwicklung der Software für den neuen Auslöser bin ich von einer Entzückung in die nächste gefallen (wenn ich nicht gerade zähneknirschend Programmfehler gesucht habe) ;-).

Um überhaupt mit einem Mikrocontroller arbeiten zu können, brauchte ich erst einmal eine passende Entwicklungsumgebung und ein Experiementierboard. Da ich mich für die AVR Mikrocontroller der Firma Atmel entschieden habe, war die Frage nach der Entwicklungs-Software auch schon gelöst. Die Firma Atmel bietet kostenlos eine kommplette Entwicklungsumgebung für Ihre Chips zum download an (inkl. Simulator und debugger). Eigentlich einleuchtend, die wollen ja auch, daß man ihre Controller kauft und benutzt.

Blieb noch das Experimentierboard und - ganz wichtig - ein sog. "Programmer", mit dem man seine Software in den Chip "brennt".

Ach so, nur mal kurz zur Erläuterung:

Ein Mikrocontroller sieht zwar aus wie ein popeliges IC (Chip) mit 8 oder mehr Beinchen, im Grunde ist es aber ein "Computer im Kleinformat". Man programmiert ihn
quasi wie einen Computer und kann ihm mit entsprechenden Befehlen "sagen", wie er auf Signale reagieren soll, die an seinen Anschlüssen anliegen. Ein und der selbe Chip kann somit völlig unterschiedliche Aufgaben erfüllen - je nach Software-Programm. Neben der Ausführung von diversen Befehlen und der Abfrage bzw. Steuerung der Anschluß-Pins beinhalten diese Mikrocontroller auch diverse andere Baugruppen, die nützlich sind und die man sonst mit vielen externen Bauteilen
realisieren müsste.
So ein kleiner Kerl, wie der da rechts, versteht über 80 verschiedene Befehle, die er mit bis zu 8 MHz verarbeitet (8 mal schneller als ein C-64). Er hat eine Interruptlogik, einen 8-Bit Timer, einen Comparator für Spannungsmessungen, einen Watchdog, 1 KByte Programmspeicher, 64 Byte EEprom-Speicher und und und. Und das ist nur einer der kleinsten Controller von Atmel. Die großen... naja, die können zum Mond fliegen und gleichzeitig Kaffee kochen. ;-)

Nein, im Ernst - die Großen sind dann schon fast ausgewachsene "Computer" mit etlichen KBytes Speicher, vielen Anschlüssen und etlichen integrierten Funktionsblöcken. Wer sich ein bißchen mit Elektronik beschäftigt, aber bisher noch nie auf die Mikrocontroller geschaut hat (so wie ich), der sollte das wirklich einmal tun - es lohnt sich!
AVR ATiny12L Mikrocontroller
[ATTiny 12 L von Atmel]

Okay, ich schweife ab. Also, es ging um das Experimentierboard und den Programmer.
Einen Programmer benötigt man, um das Programm, welches auf dem PC entwickelt wird, in den Mikrocontroller zu bekommen. Er besitzt auf der einen Seite einen Anschluß, um ihn am PC anzuschliessen (paralleler Port, serieller Port oder USB Port) und auf der anderen Seite einen entsprechenden Anschluß für den Mikrocontroller. Die meisten AVR-Mikrocontroller werden über die sog. ISP-Schnittstelle programmiert (In-System-Programming) und somit sitzt dort also ein ISP-Anschluß.

So, dann zum Experiementierboard. So ein Board ist nützlich, wenn man sein Programm auch mal direkt im Mikrocontroller testen möchte und nicht nur als Simulation auf dem PC. Da man den Anschlüssen eines Mikrocontrollers aber nicht ansieht, ob sie gerade Spannung führen oder nicht (Zustand 0 oder 1 haben), braucht man dafür ein geeignetes Anzeigemedium. Eine kleine LED zum Beispiel, die bei Zustand 1 leuchtet und Zustand 0 nicht leuchtet. Dafür ist dann so ein Experimentierboard gut. Man hat auf so einem Board ein paar LEDs zur Anzeige und ein paar Taster, um damit "Eingaben" (0/1) in den Mikrocontroller zu machen. Nebenbei sitzt auf so einem Board noch die Stromversorgung und der nötige Anschluß für den Programmer drauf. Naja, und meist noch anderer Schnick-Schnack.

Diese beiden Dinge (Programmer & Experimentierboard) habe ich mir nach einiger Recherche bei www.myAVR.de gekauft. Man kann sich zwar auch einen einfach gestrickten Programmer für den Parallelport des PCs selbst bauen (da sind nur ein handvoll Teile nötig), aber mir gefiel der Programmer am USB Port dann doch besser - zumal er noch einige andere Vorteile hat.

Programmer am USB Port Experimentierboard für den Atmel ATMega-8
[USB-Programmer für AVR Mikrocontroller und das Experimentierboard für den Atmel ATMega-8]

Das Experiementierboard von www.myAVR.de ist für einen recht großen Mikrocontroller ausgelegt (ATMega-8). Ich habe aber schnell eingesehen, daß für meine Anforderungen ein kleiner Mikrocontroller (ATTiny12L) völlig ausreichend ist. Immerhin sind die Funktionen, die man an einer Minolta-Kamera per Fernauslöser ausführen kann, nicht sehr umfangreich.

Das bedeutete, daß ich mir ein eigenes Experiementierboard bauen musste, auf dem ich mit dem AVR ATTiny12 hantieren konnte. Ich habe das Board dann so flexibel gestaltet, daß ich damit alle AVR Mikrocontroller bis max. 28 Pins betreiben und per ISP-Schnittstelle programmieren kann. Trotzdem war das Komplettset von myAVR.de inkl. deren Experimentierboard sehr gut geeignet, um überhaupt in die Thematik einzusteigen.

Eigenes Experimentierboard

Eigenes Experimentierboard im detail
[Etwas wirr alles, aber das muß so sein ;-) ]

Links oben sind die erwähnten LEDs zu sehen und rechts unten zwei Taster und ein Schalter als "Eingabegerät". Das reicht völlig aus, um die Software für den Funkauslöser real im Chip zu testen.

Bevor ich mich an die Entwicklung der Software machte, habe ich natürlich erstmal den Schaltplan des alten Funkauslösers umgearbeitet, um zu sehen, mit welchem Mikrocontroller meine Vorstellungen umsetzbar sind. Wie bereits beschrieben fiel die Wahl dann auf den ATTiny12. Der bietet ausreichend Anschlüsse, um zwei getrennte Eingangssignale und drei getrennte Ausgangssignale zu verarbeiten. Der Auslöser wurde von mir hardwareseitig bereits für einen Zweikanalbetrieb ausgelegt. Ich kann also per Mikrokontroller jetzt max. zwei Kameraleitungen steuern (Fokus und Auslösen) und eine dritte Leitung für eine Status-LED.

Als die Hardware soweit auf Papier entwickelt war, ging es darum die Software zu schreiben. Hier kam dann das Experimentierboard ins Spiel. Da es zu dem Zeitpunkt noch keinen aufgebauten Funkauslöser gab, musste der Test der Software also "manuell" mit den Tastern und LEDs des Boards geprüft werden. Das ging auch ganz gut.

Die Entwicklungsumgebung von Atmel (AVR-Studio 4) ist ziemlich einfach bedienbar und ich bin auf Anhieb damit zurechtgekommen. Was die Programmierung des Controllers angeht, da habe ich ein paar Wochenenden das Tutorial von Gerds Seite durchgearbeitet (www.avr-asm-tutorial.net)
und auch die Literatur, die ich zum myAVR.de Bausatz (Programmer und Experimentierboard) dazubestellt hatte. Wer schon einmal einen Klein- oder Heimcomputer hardwarenah in Assembler programmiert hat, der dürfte mit so einem Mikrocontroller sehr wenig Probleme haben. Man muß sich nur einmal intensiv mit den gerätespezifischen Ein-/Ausgabe Adressen und den internen Funktionsblöcken auseinandersetzen (Interrupt-Steuerung, Timer, AD-Wandler, usw...).

Bevor es an die eigentliche Programmierung ging, musste natürlich erstmal klargestellt werden, welche Funktionen der Mikrocontroller genau übernehmen soll. Er bekommt maximal 2 Eingangssignale (Fokus und Auslösen) und soll drei Ausgangssignale steuern (Kamera-Fokus, Kamera-Auslösen und Status-LED). Die zwei getrennten Eingangssignale bekommt er momentan allerdings noch nicht, weil das bedeuten würde, daß ich einen Zweikanal-Sender für den Auslöser benötige. Da ich aber die hardware des Empfängers schon für Zweikanalbetrieb eingerichtet habe, wollte ich das konsequenter Weise auch in der Software unterstützen.

Daher wurde folgende Funktionsbeschreibung erstellt:
Wenn von einem Einkanal-Sender das Signal "Auslösen" kommt, dann sende an die Kamera gleichzeitig "Fokus" und "Auslösen". Die Staus-LED sollte dabei dauerhaft leuchten.
Wenn das Signal "Auslösen" länger als 4 Sekunden permanent gesendet wird, dann schalte in einen sog. "Bulb-Modus". Das bedeutet, daß am Sender die Taste "Auslösen" wieder losgelassen werden kann, die Kamera aber weiterhin das Signal "Fokus" und "Auslösen" erhält. Und zwar so lange, bis am Sender wieder kurz Auslösen oder Fokus gedrückt wird. Während des aktivierten Bulb-Modus soll die Status-LED langsam blinken.
Wenn von einem Zweikanal-Sender das Signal "Fokus" kommt, dann schalte in den "Fokus-Modus" um. Das bedeutet, daß man am Sender die Taste Fokus nur kurz drücken muß, die Kamera daraufhin aber permanent das "Fokus" Signal bekommt. Und zwar so lange, bis die Taste Fokus erneut gedrückt wird (dann wird die Fokussierung wieder aufgehoben) oder bis Auslösen gedrückt wird (dann wird an die Kamera gleichzeitig "Fokus" und "Auslösen" gesendet und das Bild aufgenommen). Während der Fokus-Modus aktiv ist, sollte die Staus-LED schnell blinken.


Da ich bei der Erstellung der Software möglichst wenig unliebsame Überraschungen erleben wollte und eigentlich auch viel zu faul bin, um mich nach Tagen wieder in kryptische Funktionsblöcke einzuarbeiten, habe ich einen Ablaufplan für diese Logik erstellt. Ja ich weiß, daß dies kein Riesen-Projekt ist, aber ich wollte es halt ordentlich und korrekt machen - so bin ich nunmal ("Krümmelkacker" nennt man das auch ;-) ). Die einzelnen Funktionshäppchen sind im Ablaufplan mit roten Buchstaben versehen, die man dann auch im Programm (Sourcecode) wiederfindet. Idiotensicherer gehts nicht. Also genau das richtige für so einen denkfaulen Sack, wie mich :o)

Hier mal ein Ausschnitt aus dem Sourcecode:
Screenshot Sourcecode

Wer an dem ganzen Programm interessiert ist, der klicke bitte hier.

Nachdem die Software sowohl in der Simulation (im PC) als auch real im Chip (auf dem Experiementierboard) zu meiner Zufriedenheit lief, war der Zeitpunkt gekommen, an dem ein echter Funkauslöser-Prototyp her musste. Hierfür benutzte ich Funk- und Decodermodule, die ich mir zuvor für meine Experiemente gebaut hatte. Diese Module bestehen aus den gleichen Komponenten, wie sie im fertigen Funkauslöser benutzt werden.

Decodermodul  Encodermodul 
[Decoder und Encoder]

Experimentalaufbau auf dem Steckbrett
[Von links nach rechts: Empfänger, Decoder, Sender. Unten der Rest der Schaltung auf dem Steckbrett]

Bei diesem experiementellem Aufbau mussten dann noch die Widerstandswerte für die Ansteuerung des Optokopplers und des Mikrocontrollers ermittelt werden, damit die Ein- und Ausgänge nicht zu stark belastet werden. Das Foto da oben wurde übrigens bereits per Fernauslösung geschossen! An dem orange-gelb-grünen Kabel rechts im Bild hing die Kamera und ausgelöst wurde mit einem fertigen Handsender. :-)

Nachdem das alles lief, ging es daran für die gesamte Schaltung ein ordentliches Layout zu entwerfen - und zwar so, daß die eigene Platine zusammen mit der fertigen Empängerplatine möglichst günstig in das Empfängergehäuse paßt. Aus dem fertigen Layout habe ich mir dann bei einer externen Firma einen Satz Platinen herstellen lassen.

Als die endlich ankamen, ging es auch gleich an den Lötkolben. :-) Der erste "richtige" Prototyp FABG3 wurde zusammengebaut. Ein paar Überlegungen bzgl. der Platzierung und der Gestaltung der "Bedienelemente" waren noch zu tun... aber letzendlich bin ich mit dem Ergebnis ganz zufrieden.

Der erste Prototyp sieht jetzt (22.03.2006) so aus...
Die kleine, helle Platine ist die Adapterplatine. Oben links auf dieser Platine ist der Mikrocontroller ATTiny12L zu sehen. Rechts darunter der zweifach-Optokoppler, der die Kamera elektrisch vom Rest des Funkauslösers trennt. Die dunkle, große Platine enthält den Empfänger und den Dekoder-Baustein - an dieser Platine sind von mir auch noch Änderungen vorgenommen worden. Die drei grauen Leitungen gehen von der Adapterplatine zu einer 3,5mm Klinkenbuchse, an die das Remotekabel für die Kamera angeschlossen wird.

Prototyp von innen

Prototyp von innen
[Die grüne LED ist die Betriebsanzeige, die rote LED auf der hellen Adapterplatine ist die Status-LED
Die Öse zum Anhängen an ein Stativ ist auch wieder dabei - diesmal etwas dezenter in schwarz]

Prototyp von außen

Prototyp von außen
[Hier der Prototyp von außen]


So, damit ist die Entwicklung empfängerseitig abgeschlossen. Der nächste Schritt wäre, irgendwann den Sender auf Zweikanalbetrieb zu erweitern. Dazu müsste ein weiterer Knopf für getrenntes Fokussieren in den Sender gebaut werden. Schaun mer mal... :-)

Das tolle an dieser Lösung mit dem Microcontroller ist ja, daß ich ohne Hardwareänderung auch andere Funkübertragungssysteme zu einem Funkauslöser umrüsten könnte. Auf geänderte (Verhaltens-)Anforderungen könnte man schnell durch einen einfachen Wechsel der Software reagieren. Ist schon cool, so ein Mikrocontroller *schwärm* ;-)