Hallo,

oh, anscheinend ist der Zähler so konfiguriert, dass er vorwärts zählt und nicht rückwärts, so wie ich dachte. Habe im Moment leider kein lauffähiges AVR-System, sonst hätte ich das vorher ausprobiert.

Es handelt sich um einen 16-Bit-Zähler, der von dem voreingestellten Wert (im Programm definiert durch "preValue") ausgehend vorwärts zählt. Wenn der Zähler den Maximalwert von 65535 überschreitet, erzeugt er einen Interrupt. In der Interrupt-Routine wird der Zähler dann wieder mit dem Wert "preValue" geladen.

Das bedeutet, der Zähler zählt 65536 - preValue = 65536 - 57724 = 7812 Takte bei 8 MHz. In Deinem Fall müsste er bei 4 MHz nur halb so viele Takte, also 7812/2 = 3906 zählen. Du bekommst dann also einen Wert für preValue von 65536 - 3906 = 61630. Probier das mal aus, dann dürfte Deine Uhr in etwa richtig laufen.

Es kann sein, dass die Uhr nach einiger Zeit etwas vor oder nachgeht. Dann kannst Du den Wert von preValue noch etwas tunen, also etwas erhöhen, wenn die Uhr zu langsam läuft und etwa verringern, wenn sie zu schnell läuft.

Das mit dem Programmabbruch sollte eigentlich nicht sein, da die Software in einer Endlosschleife läuft. Bricht das Programm immer bei der gleichen Uhrzeit ab oder ist dies unterschiedlich? Evtl. könnte es sich um ein Hardware-Problem handeln, vielleicht das Netzteil.

Gruß, M@nni