Eine ATMega328p läuft mit 2 Takten. Während der Wachphase (5 ms - 10 ms) sind es 16 MHz und während der Schlafphase (4 s - Wachppase) sind es 16/256 MHz. Wie kann ich geschickt die Uhrzeit (hh:mm) mitlaufen lassen, ohne durch die beiden Takte mir eine zu große Abweichung einzufangen? Eine Abweichung von max. 60 Sekunden pro Monat möchte ich erreichen.
Am einfachsten, indem du deine Uhr über Timer 2 mit einem Uhrenquarz umsetzt. Dann bist du komplett unabhängig vom Takt des Kerns.
Da der ATmega keine RTC mit eigenem Quarz besitzer, muss deine Uhrenfunktion halt merken, in welcher Phase sich der Controller befindet, und die mit dem entsprechenden Multiplikator aufsummieren (1 oder 16).
Nimm ein externes RTC-Modul, z.B. mit DS3231. Damit sind ohne Kopfstände weniger als 10s Abweichung pro Monat möglich. Alternativ den ATMega mit RC-Oszillator betreiben und wie von Rolf beschrieben den Uhrenquarz an TOSC1/2 über Timer 2 laufen lassen. Aber selbst da sind die 60s pro Monat nur knapp zu erreichen.
Der ATMega328p ist komplett belegt, so dass ich auf einen Softwarelösung setzen muss. Habe gedacht, dass der ein oder andere dies schon einmal gelöst hat und mir einen Tipp (siehe z. B. STK500-Besitzer) geben kann.
Harald schrieb: > Habe gedacht, dass der ein oder andere dies schon einmal > gelöst hat und mir einen Tipp (siehe z. B. STK500-Besitzer) geben kann. Nee, habe ich noch nie (gebraucht). Du hast aber deine Frage sehr allgemein gestellt. Harald schrieb: > Wie kann ich geschickt die Uhrzeit (hh:mm) mitlaufen lassen, ohne durch > die beiden Takte mir eine zu große Abweichung einzufangen? Eine > Abweichung von max. 60 Sekunden pro Monat möchte ich erreichen. Du hast die Uhr noch nicht, oder? Wie realisierst du denn die Schlaf- und Weckzeiten? Grundsätzlich sollte man eine Uhr mit Hilfe eines Timers realisieren, der von einem Quarz "angetrieben" wird.
Wenn du den Systemtakt auf 1/256 reduzierst, muss der Timer (relativ dazu) 256 mal schneller laufen. Was ist daran kompliziert?
Harald schrieb: > Der ATMega328p ist komplett belegt, so dass ich auf einen Softwarelösung > setzen muss. Warum diese Festlegung? 1. Dennoch kannst du den 16MHz Quarz gegen einen Uhrenquarz tauschen. 2. Auch kannst du den Quarz ganz weg machen und an den Oszilatorpins eine RTC betreiben. Per SoftI2c.
Harald schrieb: > Der ATMega328p ist komplett belegt, so dass ich auf einen Softwarelösung > setzen muss i2c RTC DS3231 + i2c Portexpander PCF8574(a) löst das Problem auch und geweckt von der RTC Harald schrieb: > während der Schlafphase (4 s - Wachppase) sind es > 16/256 MHz. kann er sogar tiefer schlafen, bzw. in den power off gehen
:
Bearbeitet durch User
@STK500-Besitzer Wie realisierst du denn die Schlaf- und Weckzeiten?
1 | 1 Takt/256 |
2 | 2 delay f. 3990 ms |
3 | 3 Takt/1 |
4 | 4 Arbeiten für 5 bis 10 ms |
5 | 5 weiter bei 1 |
@Stefan > Wenn du den Systemtakt auf 1/256 reduzierst, muss der Timer (relativ > dazu) 256 mal schneller laufen. Was ist daran kompliziert? Das ist leicht gesagt - schwer getan (für mich). Wie dem auch sei, morgen werde ich mich an einer Routine versuchen.
Wenn Dir 8MHz CPU-Takt vom internen RC reichen, dann ist ein Uhrenquarz an T2 zu überlegen. Eine Umschaltung sollte gehen, wenn man sie mit dem Überlauf des Timers synchronisiert. Im Datenblatt steht leider nirgends, ob der CPU-Prescaler beim Umschalten resettet wird oder nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.