Hallo Rolf,
Das mit den unterschiedlichen Frequenzen für die Timer-Interrupts Timer1Sec = 0 oder 1 lässt sich erklären.
Um möglichst einen ganzzahligen Timer-Interrupt pro Sekunde bei vielen Quarz-Frequenzen zu bekommen wird der Timer in CTC-Mode betrieben.
CTC = Clear Timer on Compare match
Der Timer zählt bis zu einem vorgegebenen Wert hoch, wenn dieser Compare-Wert erreicht ist, wird ein Interrupt ausgelöst und der Timer automatisch auf Null gestellt. Je nach Quarzfrequenz ergibt sich dabei ein Vorteiler-Faktor und ein Compare-Wert.
Soll der 16-Bit Timer auch 1-Sekunden Interrupts auslösen, muss meist ein anderer Vorteiler-Faktor gewählt werden, als wenn nur 25mSec-Interrupts notwendig sind.
Während der Laufzeit wird der Compare-Wert des Timers geändert, um zwischen dem 1-Sekunden-Interrupt und dem anderen zur DCF-Auswertung zu wechseln. Der Vorteilerfaktor wird für beide gleich belassen.
Bei 16Mhz Quarzfrequenz und einem 1-Sekunden Interrupt ergibt sich dann bei diesem anderen Vorteiler-Faktor für 25mSec (40 Interupts pro Sekunde) kein geeigneter Compare-Wert sondern nur für 20mSec (=50 Interrupts pro Sekunde).
Klingt etwas verwirrend, ich hoffe aber, dass ich mich für jemanden, der sich schon etwas in die Timer-Einstellungen eingelesen hat, doch verständlich ausgedrückt habe.
Ich bin aber noch nicht dazu gekommen, bei dein gegenständliches Beispiel auf der Hardware zu prüfen.
Lesezeichen