Guten Tag,
ich möchte mit dem ATmega4809 eine Halbwegs genaue Uhr bauen. Dazu
ermittle ich die Abweichung auf 24h und ziehe dann dementsprechend ab.
Ich nutze den Internen 32khz Oszillator und den RTC Timer. Ansich passt
das auch soweit, dass Problem ist nun aber wenn ich den Controller in
den Power Save Modus schicke ist die Abweichung extrem schlechter als
ohne den Power Save Modus. Woran liegt das?
Ich habe den Oszillator so Konfiguriert dass der Oszillator auch im
Sleep aktiv ist.
1 | _PROTECTED_WRITE(CLKCTRL_OSC32KCTRLA, CLKCTRL_RUNSTDBY_bm); //Run Standby Internal 32khz Resonator
|
2 | set_sleep_mode(SLEEP_MODE_STANDBY);
|
3 |
|
4 | RTC.CLKSEL = RTC_CLKSEL_INT32K_gc;
|
5 | RTC.CTRLA = RTC_PRESCALER_DIV32768_gc | RTC_RTCEN_bm | (1<<2) | RTC_RUNSTDBY_bm; //Modul on (1<<2 = Calibration enabled)
|
6 | while (RTC.STATUS > 0); //Wait inizialision
|
7 | RTC.INTCTRL |= RTC_OVF_bm; //Overflow Interrupt Enable
|
8 | RTC.PER = 0; //Overflow Value // every second
|
In der Interrupt Rotine wird eine einfache Variable Hochgezählt, die
dann in der Hauptschleife ausgewertet wird.
1 | volatile uint8_t FLAG_WDT = 0;
|
2 | volatile uint32_t xx = 0;
|
3 |
|
4 | ISR(RTC_CNT_vect)
|
5 | {
|
6 | RTC.INTFLAGS = RTC_OVF_bm;
|
7 | FLAG_WDT = 1;
|
8 | xx++;
|
9 | }
|
BG
LMiller