Home
Download: EOS-Shutter V2.0


Canon EOS 600D & 1100D Shutter-Emulation mit Arduino

Erwin Lotter, 2.12.2018                                    

Dieser Artikel beschreibt, wie man eine Canon EOS 600D oder 1100D ohne Shutter betreiben kann. Die Technik basiert auf der von Hendrik Beijeman vorgestellten Shutter-Emulation für die Canon EOS 1100D. Um die von der Kamera erwarteten Signale zu simulieren, hat er einen nackten Mikrocontroller-Chip eingesetzt, der hier durch einen Arduino ersetzt wird, für dessen Programmierung die freie Arduino IDE verwendet wird.

Für die einfache Integration in die Kamera ist ein kleines Arduino-Board günstig, das mit 3.3V betrieben werden kann. Zum Testen und Programmieren ist ein Board mit integrierter USB-Schnittstelle vorteilhaft. Aus dem erfreulich großen Angebot an preisgünstigen Arduino-Boards einschließlich der kompatiblen China-Nachbauten, die schon für ca. 2 Euros zu haben sind, habe ich dazu diese beiden Boards beschafft:

1.)   „MINI USB Nano V3.0 ATmega328P CH340G 5V 16M - Compat. Arduino Nano V3.0”
(Bezeichnung des Anbieters)

 2.)  “‘Pro Mini’ atmega328 3.3V Replace ATmega128 Arduino Compatible Nano“
(Bezeichnung des Anbieters)

 

 

Beide kamen per Direktimport aus Hongkong zum Preis von ca. 2,50 € bzw. 1,80 € (versandkostenfrei). Zoll ist dank der geringen Preise kein Thema, die Lieferzeiten können allerdings schon mal 2-3 Wochen betragen. Einziges kleines Problem war der CH340G Kontroller des USB-Boards, für den die Arduino-IDE früher keinen Treiber installiert hatte, so dass ich erst einen besorgen und manuell nachinstallieren musste (CH341SER.zip).

Die 3.3V-Variante des ‘Pro Mini’ läuft laut Prozessorspezifikationen nur mit 8 MHz statt der verbreiteten 16 MHz stabil. Man muss deshalb bei der Programmierung genau darauf achten, nicht nur den korrekten Board-Typ, sondern auch die passende Taktfrequenz auszuwählen! Die verbreitete 5V/16MHz-Variante des ‘Pro Mini’ läuft zwar auch mit den 3.3V der Kamera, es ist aber nicht garantiert, dass dies unter allen Betriebsbedingungen zuverlässig funktioniert. Ich hatte tatsächlich auch mal ein Exemplar, bei dem es nicht zuverlässig geklappt hat.

Die Beschaltung

Abweichend von Hendrik Beijemans Lösung für die 1100D verwende ich das P5 Signal der Kamera nicht, weil es sich nicht dazu eignet, den Live-View Modus nachzubilden. Man kann aber aus dem P7-Signal allein die benötigten Informationen beziehen. Damit erübrigt es sich auch, P5 direkt auf dem Mainboard der 1100D abzugreifen, was nicht ganz trivial ist. Lediglich für die 3.3V muss man noch direkt auf dem EOS-Board löten, aber das geht recht einfach. (Leider lässt sich die Versorgung der ‚coil‘ nicht zur Versorgung des Arduino verwenden, weil sie nicht permanent anliegt.)

Die im ursprünglichen Design verwendeten MOSFETs an den Arduino-Ausgängen habe ich durch simple Dioden ersetzt, die ich noch rumliegen hatte. Evtl. könnte man darauf auch ganz verzichten, aber das habe ich nicht ausprobiert. Außerdem ist mit den Dioden (oder MOSFETs) auch ein 5V Testbetrieb des Arduino problemlos möglich.

Die Verschaltung unterscheidet sich für die beiden Kamera-Typen deutich, vor allem, weil der Shutter der 1100D nur einen Haltemagnet (‚coil‘) besitzt, während in der 600D zwei verbaut sind:

Die Kontaktierung erfolgt am besten über ein Flachbandkabel mit 0.5 mm Raster, z.B. von einem defekten Shutter, an dessen Testpunkten man gut löten kann. Dieses Kabel lässt sich auch mitten durch die Testpunkte zerteilen, so dass man es später auch wieder anlöten könnte. Davon, am Stecker auf dem Kamera-Board zu löten, würde ich abraten. Das Raster ist doch ziemlich eng und Lotbrücken lassen sich nur schwer wieder entfernen.
Der Widerstand RS ist optional und dient dem Schutz des Mainboards gegen Kurzschlüsse. Er darf nicht zu hoch gewählt werden, weil sonst der Arduino Startprobleme bekommt. Werte um 20 Ω scheinen gut geeignet.

Software

Ein Arduino-Programm – Sketch genannt – wird i.A. per serielle (USB-) Schnittstelle an die Arduino Basissoftware – Bootloader genannt – übergeben, die es permanent speichert und nach einem Reset oder dem Einschalten des Arduino ausführt. Das dauert aber ca. eine halbe Sekunde, und das ist zu lange für die Kamera, die offenbar gleich mal überprüft, ob mit dem Shutter alles in Ordnung ist. Zumindest wenn die Kamera mit dem "EOS Utiliy" über ihre USB Schnittstelle angesprochen wird (anders habe ich es nicht getestet), hängt sie sich dabei auf. Für Testzwecke kann der Arduino natürlich mit einer externen Quelle (z.B. seinem USB Anschluss) versorgt werden, so dass die Versorgung schon anliegt, wenn die Kamera eingeschaltet wird – dann ist alles ok.

Für den Echtbetrieb aber muss das Steuerprogramm („EOS-Shutter V2.0“), konfiguriert für die 600D oder die 1100D, so in den Arduino übertragen werden, dass es den Bootloader überschreibt und beim Einschalten sofort startet. Wie das mit einem zweiten Arduino-Board mit einer USB-Schnittstelle geht, wird z.B. auf Adafruit Learning System oder Shelvin – Elektronik ausprobiert und erläutert sehr schön gezeigt. Eine Kurzfassung findet sich unten im Abschnitt „Boot-Programme laden“.

Ablauf der Emulation

Anders als in der ursprünglichen 1100D Emulation wird allein das Coil-Signal als Trigger verwendet und vorausgesetzt, dass das Timing des langen und des kurzen Shutter-Modus bis auf die Pause im ‚long mode‘ identisch sein darf, da ja der gleiche mechanische Ablauf zugrunde liegt. Dabei bleiben die Lichtschrankensignale aktiv, auch wenn ihre LED deaktiviert ist, was die Kamera-Logik aber nicht stört. Dadurch vereinfacht sich nicht nur die Emulation erheblich, sie kann nun auch für den Live-View Mode verwendet werden. Das Auslösen aus dem Live-View heraus klappt allerdings nicht für alle Kameras, manche hängen sich dabei auf oder reagieren mit einem Fehler, so dass sie nur durch Ausschalten zu resetten sind.

In den Zeiten zwischen den emulierten Shutter-Bewegungen geht der Arduino-Prozessor in den Ruhezustand und verbraucht dann nur noch wenige Mikroampere. Um das wirklich nutzen zu können, muss aber noch die Power-LED des Arduino ausgelötet oder –gebrochen werden, die ansonsten ca. 1 mA verbrät. Damit vermeidet man auch, dass ihr Licht auf dem Sensor landet.

Einbau des Emulators in die Kamera und Anwendung

Nach dem Ausbau des Shutters, für den die Kamera komplett zerlegt werden muss, bleibt ein Hohlraum, der das Arduino-Board leicht aufnehmen kann. Dabei sollte man auch gleich den Spiegel ausbauen und bekommt dafür deutlich weniger Abschattung bei F/5 oder noch lichtstärkeren Optiken. Als Belohnung erhält man eine Kamera, die völlig geräuschlos arbeitet und keinem mechanischen Verschleiß mehr unterliegt.

Ohne Shutter ist natürlich die minimale Belichtungszeit stark eingeschränkt: Aufnahmen bei Tageslicht oder auch vom Mond sind so nicht mehr möglich. Die Untergrenze wird durch die Dauer des Auslesevorgangs bestimmt, die knapp 1/10 Sekunde beträgt. Die minimale Belichtungszeit an der Oberkante des Bildes beträgt ca. 1/50 s und nimmt nach unten linear um 1/10 s zu – ein Verhalten, das übrigens auch mit Shutter die minimale Aufnahmedauer von Darks begrenzt.

Das bedeutet, dass man bei 1 s Belichtung zwischen Ober- und Unterkante einen Unterschied von etwa 10% bekommt, bei 10 s noch etwa 1%. Im ersten Fall ist eine Korrektur durch gleichlang belichtete Flats auf jeden Fall angeraten, bei 1% (gleichmäßiger) Variation kann man darauf meist verzichten. Eine solche ebene Korrektur kann auch rein rechnerisch erfolgen. Wichtig ist auch, bei der Aufnahme von Flats zu beachten, dass deren Belichtungszeit nicht zu kurz, also nicht kleiner als z.B. 10 s, wird.

Arduino Boot-Programme laden

(Kurzfassung der Anleitung von Shelvin – Elektronik ausprobiert und erläutert.)

Ein Arduino-Sketch soll so geladen werden, dass er den Bootloader überschreibt und ohne dessen Hilfe ausgeführt wird. Dazu wird ein zweiter Arduino als ISP (In-System-Programmer) verwendet. Es sind 3 Schritte notwendig.

1.) Einen Arduino zum ISP Programmer umfunktionieren

Zuerst wird der Hilfs-Arduino mit USB – im Folgenden ISP genannt – an den PC angeschlossen und mit der ISP Software geladen.
Hier darf das Ziel-Board noch nicht angeschlossen sein!

In der Arduino IDE wird unter Tools > Board der Typ des ISP Arduino eingestellt (hier „Arduino Nano“) und die richtige COMx (z.B. COM6) Schnittstelle wird ausgewählt.
Unter Datei > Beispiele > ArduinoISP wird das Programm ArduinoISP ausgewählt und dann als Sketch hochgeladen.

Dann wird dieser Arduino in der IDE als Programmer gekennzeichnet mit
    Tools > Programmer > „Arduino as ISP“ (nicht ArduinoISP!).

2.) Beschaltung

Als nächstes wird der ISP abgehängt und der Ziel-Arduino an ihn angeschlossen: Gnd und Vcc werden verbunden, ebenso wie D11-D13 (MOSI, MISO und SCK). D10 des ISP geht an RST des Ziels.

Dann den ISP wieder an den PC anschließen.

3.) Programm als Boot-Code auf das Ziel laden

Als Board muss jetzt das Ziel-Board angegeben werden – ggf. einschließlich des korrekten Prozessors und der richtigen Taktfrequenz (wird nicht automatisch erkannt). Hier wäre das: Board: „Arduino Pro or Pro Mini“, Processor: AT-mega328 (3.3V 8 MHz).
Dann muss das gewünschte Programm ganz normal als Sketch geöffnet werden. (Achtung: Der Dateiname darf keine Sonderzeichen enthalten und muss in einem gleichnamigen Ordner liegen!)
Das Hochladen erfolgt diesmal aber nicht mit der HochladenHH Funktion, sondern mit Sketch > Upload mit Programmer (oder Shift-Hochladen Button). Damit lädt der ISP das Programm als Boot-Code in das Ziel. Dabei trat mehrfach beim ersten Versuch ein Fehler auf, nach Wiederholen des Upload hat es dann aber geklappt.