Kameratimer


Erstellt: 2009-12-20Letzte Änderung: 2009-12-20 [vor 14 Jahren, 10 Monaten, 13 Tagen]

Kameratimer Der Kameratimer ist ein kleines Gerät zum periodischen Triggern einer angeschlossenen Kamera. Die Parameter Impulsabstand, Impulsdauer und Maximale Auslösungen können dabei über Taster eingestellt und auf dem 6 Stellen breiten, dimmbaren LED-Display angezeigt werden.

Entwicklung

Der Kameratimer ist eine "Auftragsarbeit unter Freunden", wenn man es so nennen will. ;-) haxdraht aus dem Forum hat mich gefragt, ob ich ihm besagtes Gerät genau nach seinen Vorstellungen planen und programmieren könne. Ich willigte ein und erstellte und sendete ihm den Schaltplan. Nachdem er die Hardware fertig hatte, bekam ich das Ding per Post zugeschickt und ich begann mit dem Programmieren. Zwischendurch haben wir noch hin und wieder über Private Nachrichten und ICQ korrespondiert und Details besprochen. Nach anderthalb Wochen (ich habe natürlich nicht jeden Tag an dem Teil gearbeitet) war der Timer fertig programmiert und wurde auf seine Heimreise zu hax geschickt.

Nach oben

Aufbau

Schaltplan

Der von mir gezeichnete und von hax editierte Schaltplan. Ich hoffe, man erkennt alles. ;-)

Für dieses Projekt einen ATmega16 zu verwenden ist eigentlich Ressourcenverschwendung, jedoch hatte ich keinen Bock auf Schieberegister zur Porterweiterung o.Ä., denn der nächstkleinere AVR ATmega8 hatte für dieses Vorhaben zu wenig Pins.

Innenleben

Der Aufbau der Hardware stammt wie gesagt nicht von mir, sondern von hax. Die Verdrahtung ist äußerst Robust, Silberdraht statt Kabel usw. Da sieht man den Betriebselektriker bei der Arbeit. :-D

Fertig

Das Endprodukt.

Nach oben

Funktionsweise

Zeiterfassung

Ein Interrupt kümmert sich ums Zeitzählen in 1 ms-Schritten und um die 8 Tastenzähler. Über Flags kann der Timer gehalten oder gestartet werden, der aktuelle Timerwert wird in einem Array gespeichert. Zusätzlich gibt es zwei "benutzerdefinierte" Timer, die für Verzögerungen eingesetzt werden.

Display

Ein weiterer Interrupt multiplext die 7-Segment-Anzeigen und kann diese per PWM dimmen. Dabei gibt es zwei Modi: eine Anzeige pro Interruptaufruf oder alle Anzeigen pro Interruptaufruf. Bei ersterer Methode hat jede Anzeige einen Duty-Cycle von 1:6 und leuchtet mit den gegebenen Vorwiderständen mit voller Helligkeit (bei 100% PWM On-Time). Bei letzterer Methode ist die Leuchtdauer jeder Anzeige nur extrem kurz, da in einer Schleife alle Anzeigen ohne Verzögerung nacheinander kurz an- und wieder ausgeschaltet werden; daher verringert diese Methode die Helligkeit des Displays deutlich.

Der zweite Modus sind nötig, um das in 10 Stufen dimmbare Display wirklich dunkel zu bekommen, was im ersten Modus nicht richtig klappt, ohne das Display zum Flackern zu bekommen. Das Flackern würde man nur mit einer Erhöhung der Interruptfrequenz beseitigen können, was allerdings den AVR zu stark auslasten würde. Daher der zweite Modus.

Den für die aktuell gesetzte Helligkeitsstufe zu verwendenden Modus und PWM-Vergleichswert holt sich der Multiplexing-Interrupt aus zwei im Flashspeicher gespeicherten Tabellen. Diese wurden experimentell erstellt, sodass zwischen jeder Stufe ca. der gleiche "Helligkeitsabstand" herrscht.

Alle Parameter (siehe Bedienung) werden übrigens im AVR-internen EEPROM dauerhaft gespeichert.

Nach oben

Bedienung

Die Bedienung wird im folgendem Video detailreich erläutert:



Nach oben

Fotos

hax hat mir eine Animation gesendet, die er mithilfe des Kameratimers erstellte und sich aus 368 Einzelbildern in 5 Sekunden-Schritten zusammensetzt.

YouTube-Video:



Nach oben

Download

Den C-Sourcecode, mein Linux-Makefile und die brennfertige hex-Datei gibt es hier zum Download.

Download: kameratimer-1.0.zip [10.79 kiB]
[1787 Downloads]

Nach oben