Bauplan Schaltplan Belichtungstimer für Mikrocontroller mit Drehgeber

Der Timer im Einsatz.

Eime Anwendung, die für den Selbstbau mit Mikrocontrollern geradezu prädestiniert ist, ist der Belichtungstimer.
Viele Hobbyelektroniker ätzen ihre Platinen selbst, und benötigen daher eine präzise gesteuerte Belichtung.
Aus diesem Grund ist es nur verständlich, dass man hier selbst seinen eigenen Timer bauen könnte, der speziell auf den Anwendungszweck zugeschnitten ist.

Mit einem passenden Mikrocontroller und etwas zusatzschaltung aussen herum ist das auch kein allzugrosses Problem.
Im Netz finden sich auch eine ganze Reihe von erprobten Projekten.
Um dieser Auswahl noch ein weiteres Projekt hinzuzufügen, habe ich natürlich auch meine eigene Belichtungstimer Software geschrieben.

Das Besondere daran ist, dass sie komplett in Assembler geschrieben ist. Das mag zwar für diesen Anwendungsfall nicht notwendig sein, aber ich programmiere halt ab und zu gerne mal auf dieser Ebene.
Imemr nur objektorientierte Hochsprachen sind halt auch langweilig.

Dementsprechend beschränkt sich die Funktionalität auf das Wesentliche;

Der Timer kann gestartet sowie pausiert und zurückgesetzt werden.
Weiterhin kann natürlich der Startwert des Timers geändert werden und dauerhaft im EEProm gespeichert werden, so dass er nach dem Einschalten wieder zur Verfügung steht.
Die Kommunikation mit dem Benutzer erfolgt dabei über ein 16*2 LCD Display, die EIngaben werden komfortabel über einen Drehgeber mit Taskknopf vorgenommen.
Drei LED's geben zusätzliche Statusinformationen aus.
Die Anwendung entstand rund um die Displayplatine, welche ich hier vorgestellt habe.

Das Assembler-Programm ist dabei recht übersichtlich aufgebaut. Ich habe dabei bewusst auf Tricks und Techniken verzichtet, welche Taktzyklen oder Speicherbytes sparen.
Am Anfang des Programms stehen alle wichtigen Definitionen, die im nachfolgenden Programm verwendet werden.
Damit lässt sich die Software schnell auf andere Ports oder Prozessoren umstricken.

Hier eine kurze Erklärung der Funktion: (Hier der Quellcode zum Download.)

Am Anfang stehen die Initialisierungs-Befehle für das LCD Display, Drehgeber, Timer Interrupt sowie der Internen Software Variablen.

Der Startwert des Timers wird aus dem EEprom gelesen und in das SRAM kopiert.
Der Timer Stand wird auf dem LCD Display ausgegeben und dann begibt sich das Hauptprogramm in eine Endlos-Schleife, welche
auf Signale (Falgs) aus der Interrupt-Routine wartet.


Über den Timer0 im Compare-Modus wird 240 mal pro Sekunde diese Interrupt-Routine ausgelöst.

Die Interruptroutine ist dabei sehr kurz gehalten, sie erledigt folgende Aufgaben:

- Abfrage des Encoder-Taster mit Unterscheidung zwischen kurzem und langem Tastendruck.
Je nach erkanntem Tastendruck wird dies über ein Flag an das Hauptprogramm gemeldet.

- Abfrage des Drehgebers:
Für jeden erkannten Schritt nach Links oder Rechts wird ein Flag an das Hauptprogramm gemeldet.

- Software-Zähler für den Timer
Ein Software-Zähler zählt 240 Ausführungen der Interrupt-Routine, und generiert dann ein Sekunden-Flag.
Dieses Sekunden-Flag sorgt dann im Hauptprogramm dafür, dass der Timer heruntergezählt wird.

- Ebenfalls in der Interruptroutine läuft ein Pin-Toggle-Mechanismus, der auf 2 LED's ein 120Hz bzw. eine 1Hz Rechteck-Signal ausgibt.
Damit kann z.B mit einem Frequenzzähler die genaue Taktfrequenz gemessen werden.

- Die Interruptroutine kümmert sich auch um das Ein und Ausschalten des Buzzers für die Akustische Rückmeldung.

Das Hauptprogramm hat zwei Zustände:
Counter Mode und Edit Mode
Je nach Zustand werden die Benutzereingaben verschieden interpretiert.

Im Counter Mode (Default nach RESET)
Kurzer Druck auf den Encoder: Timer startet, nochmaliger kurzer Druck hält den Timer an (Pause)

Wenn der Timer läuft, wird als optische Kontrolle noch eine LED eingeschaltet.

Zusätzlich blinkt noch eine LED mit 1Hz, während der Timer läuft.

Wenn der Timer abgelaufen ist, ertönt für etwa 2 Sekunden der Summer, und die Kontroll LED erlicht wieder.

Durch einen langen Druck wird der Timer wieder auf den Startwert zurückgesetzt.
Wenn der Timer zurückgesetzt wurde, und nochmal ein Langer Tastendruck erfolgt, wechselt das Programm in den Edit-Mode.

im Edit-Mode kann über den Encoder eine Ziffer des Zählers ausgewählt werden. (durch Cursor markiert).
Mit einem kurzen Tastendruck kann dann per Encoder die Ziffer erhöht oder erniedrigt werden. Nochmaliger Tatsendruck wechselt dann wieder
in den Auswahlmodus.
Bewegt man den Cursor auf das Stern-Symbol rechts, wird mit einem Tastendruck der eingestellte Wert als neuer Startwert dauerhaft im EEprom
abgespeichert.
Durch einen Langen Tastendruck kerht man wieder in den Counter-Modus zurück.

Als maximalen Zeitbereich habe ich 99 Stunden, 59 Minuten und 59 Sekunden vorgesehen.

Die Software wurde auf einem Mega32 entwickelt.
Teile der LCD Initialisierungs-Routinen habe ich aus der LCD-Anleitung von www.mikrocontroller.net übernommen, mein Dank hierfür an die Autoren!

Bauteile für dieses Projekt - Anzeigen:
Aktive Bauelemente

Passive Bauelemente


Weitere Informationen,Grundlagen,Bauanleitung,Schaltplan, Links zum Thema
Anzeigen:

Neueste Artikel
Anzeigen:
Aktuelle Newsbeiträge
Sie sind Besucher Nr. 1212315