Bauplan Schaltplan Schaltuhr mit RS232 Interface für Atmel Tiny
"Betriebssystem" für Atmel Tiny 24 Controller mit genauer Echtzeituhr und über RS232 programmierbarer Schaltuhr

Wenn man öfters kleine Programme für die Atmel Mikrocontroller schreibt, wünscht man sich schnell eine einfache Umgebung, um diese zu testen und zu debuggen. Hier ein kleines Betriebssystem für Atmel Controller, welches eine RS232 Shell mit einfachem Kommandointerpreter zur Verfügung stellt. Damit kann der Controller an die Serielle Schnittstelle oder USB (über Konverter) angeschlossen werden und über einfache Kommandos und einem Terminalprogramm (z.B. Hyperterm) können dann Befehle oder eigene Unterprogramme aufgerufen werden.

Da die Tiny24 keine Hardware UART eingebaut haben, wurde eine Full Duplex Software UART eingebaut, welche transparent über Timer-Interrupts im Hintergrund läuft. Das Senden und Emfangen geschieht dabei über FIFO Ringpuffer, um schnelle und Sichere Zeichenübergabe zu ermöglichen.

Das Betriebssystem verwendet 3 Ebenen für seine Prozesse:

Auf Interrupt-Ebene werden nur die Low-Level Funktionen für UART und Uhr ausgeführt. Wenn während eines Interrupts ein Ereignis aufgetreten ist, welches einer längeren Bearbeitungszeit bedarf, wird dieses per Message-Queue an die 2. Ebene gemeldet.

Die 2. Ebene befindet sich eigentlich immer im Sleep Modus. Wenn ein Intrrupt aufgetreten ist, prüft die 2. Ebene ob ein Ereignis in der Message-Queue vorliegt (z.B. ein Sekundenüberlauf der Uhr) und führt dann einen entsprechenden Messagehandler aus.

Wenn die 2. Ebene eine vollständige Eingabezeile erhalten hat (also nach einem Carriage Return #13) prüft sie den Puffer für die Eingabezeile auf bekannte Kommandos. Wurde ein Kommando erkannt, ermittelt der Kommandozeileninterpreter die zugehörige Startadresse des Kommandos aus einer Tabelle und ruft dieses Programm auf.

Eigene Unterprogramme können sehr leicht als Kommandos eingebaut werden, es muss nur der Klartextbefehl (max. 4 Zeichen aus Platzgründen, kann aber leicht erweitert werden) sowie die Startadresse der eigenen Routine in 2 Tabellen eingetragen werden. Schon kann man bequem über eine RS232 Shell seine eigenen Programme aufrufen und auch Ausgaben des Controllers sehen.

Auch besteht die Möglichkeit, hinter dem Befehl verschiedene Parameter mit anzugeben, z.B. Hex Zahlen oder Dezimalzahlen. über einen Token-Parser können diese Parameter dann vom jeweiligen Befehl gelesen und interpretiert werden.

Als kleine Testanwendung rund um den Befehlsinterpreter ist eine kleine (Schalt) Uhr entstanden. Sie kann vollständig über RS232 programmiert und gelesen werden. Das besondere daran ist, dass auch eigene Befehle leicht implementiert und von der Schaltuhr ausgeführt werden können.

Momentan werden folgende Befehle unterstützt:


Befehl Funktion Syntax Parameter Beispiel
RST Reset RST RST
time gibt die aktuelle Uhrzeit im Format hh:mi:ss dd.mm.yy aus time time
stop haelt die Uhr an stop stop
start startet die Uhr start start
sclk stellt die Startzeit der Uhr ein sclk hh mi ss dd mm yy Uhrzeit, Datum sclk 12 00 00 01 01 08
salm (Set Alarm) trägt einen Alarm ein salm hh mi ss dd mm yy cn a

cn = Kommando Nr

a = Alarm Nummer 0 bis 7

salm 12 30 00 01 01 08 04 0
calm Loescht einen Alarm calm a a= Alarm Nummer 0 bis 7 calm 0
on1 Schaltfunktion ON1
on2
off1
off2
show Zeigt die Alarmtabelle sowie die Uhrenstartzeit an show show
xtal setzt den Korrekturfaktor fuer den Quarz xtal hi md lo

hi=High-Byte der Takte pro Sekunde (hexadezimal)

md=Mid-Byte der Takte pro Sekunde (hexadezimal)

lo=Low-Byte der Takte pro Sekunde (hexadezimal)

xtal 38 40 00

Hier der Quellcode zum Download.

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. 1211999