Armins AVR-Buch - Softclock

Zuletzt geändert am 09.12.2023, 17:23:38

Softclock


(armin77, 10.04.2013, 14:37:19)

Braucht man eine genaue Uhrzeit im Programm, möchte aber kein DCF Modul oder eine RTC wie den DS1307 benutzen, gibt
es die einfache Möglichkeit einer Soft-Clock.
Hier wird an die TOSC1 und TOSC2 Eingänge ein Uhrenquarz mit 32,768 kHz angeschlossen.
Damit erreicht man einen Takt von genau einer Sekunde.
Der Quarz sollte so nah wie möglich an die Pins des AVR angeschlossen werden.

Beim ATMega8 sind TOSC1 und TOSC2 gleichzeitig die Anschlüsse XTAL1 und XTAL2.
Es muß daher bei Benutzung der Soft-Clock der interne RC-Oszillator für die Taktfrequenz des AVR benutzt werden.
Bei den größeren AVR sind TOSC1 und TOSC2 als zusätzliche Pins herausgeführt.
Dort kann, wie gewohnt, an XTAL1 und XTAL2 ein Quarz für die Taktfrequenz angeschlossen werden.

Bei der Benutzung des Befehl dimensioniert Bascom automatisch folgende Variablen mit
denen sich die Uhr stellen läßt oder Schaltzeitpunkte erstellen lassen.

_sec , _min , _hour, _day , _month , _year

Beispiel:

_min = 13
incr _hour




Bild softclock_003.jpg


Hier ein Beispielprogramm:

$regfile = "m8adef.dat"
$Crystal=1000000
$hwstack=40
$swstack=30
$framesize=32

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 20 * 4
Cls
Cursor Off
Enable Interrupts

Config Clock = Soft
Config Date = dmy , Separator = . 'Datum konfigurieren Tag/Monat/Jahr, Teiler ist ein Punkt

Time$ = "10:45:13" 'Vorgabe Uhrzeit
Date$ = "10.04.13" 'Vorgabe Datum

Do
Locate 1 , 1
Lcd "Uhrzeit: " ; Time$
Locate 2 , 1
Lcd "Datum: " ; Date$
Loop
End



Zusätzlich kann mit dem Befehl:

Config Clock = Soft , Gosub = Sectic
....
do
.....
.....
loop
end

Sectic:
....
.....
Return


eine Interrupt Routine konfiguriert werden, die jede Sekunde ausgeführt wird.
Sie muß zwingend den Namen Sectic haben und mit Return wie alle anderen Unterprogramme enden.


Hier zwei Bilder vom Versuchsaufbau:

Bild softclock_001.jpg


Bild softclock_002.jpg