PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sleep-Mode - Fehler nach dem Aufwachen



rIdd3r
19.12.2007, 18:14
Hallo,
Ich hab ein kleines Problem mit den Sleepmodes beim Mega168.
(Bin erst neu auf C umgestiegen...bitte net hauen wenn die Lösung total einfach und offensichtlich ist.)

Ich baue einen Datenlogger der den FAT16 Support von Roland Riegel benutzt.

Immer wenn ich meinen AVR in den Powersave Modus schicke sendet er nur noch Kryptische Zeichen und das Programm läuft nicht weiter. Wenn ich den IDLE Modus nehme läuft das Programm nach dem schlafen wieder weiter, allerdings nicht mit der im Timer2 angepeilten Schlafdauer.

Meine eine Vermutung ist dass ich etwas mit dem Interrupt verhauen habe, sitze nun aber schon 3 halbe Tage an Datenblatt und allen möglichen Foren/Beispielcodes ohne dass der Groschen gefallen wäre.

Hier der Code zu Beginn der main:


TCCR2B = (1 << CS22) | (1 << CS21) | (1 << CS20);
TIMSK2 = (1 << TOIE2);
set_sleep_mode(SLEEP_MODE_PWR_SAVE);
uart_init();
uart_puts_p(PSTR("VorDemSchlafen")); uart_putc('\n');
machpause();
uart_puts_p(PSTR("NachDemSchlafen")); uart_putc('\n');
...


Hier der Interrupt für Timer2:


ISR(TIMER2_OVF_vect)
{
countTimer2++;
}

Und die Funktion:



void machpause(void)
{
cli();
sleep_enable();
sei();
sleep_cpu();
sleep_disable();
sei();
}


Wenn er nun wiederkommt sendet er:


VorDemSchlafenC!*k
«+Ñ



Und dann ist er tot :-(

Eigentlich müssten beim Timer2 bei 12MHz und dem Prescaler 1024 5,59s bis zum Überlauf vergehen.Aber nach dieser Zeit macht der nichts neues.Hab testweise auch schonmal länger gewartet, kam aber nichts.

Hoffentlich kann mir jemand helfen...Bei Fragen oder Unklarheiten einfach melden...Bin am Verzweifeln...die Kiste sollte bis Weihnachten laufen und langsam wirds knapp mit testen...

Danke schonmal im Vorraus

izaseba
19.12.2007, 18:43
Hallo,
Ist der M168 nicht der große Bruder von M8 ?

Ich arbeite oft und viel mit Power Save Mode, und denke Dein Problem liegt darin, daß der AVR garnicht mehr aufwacht, weil Power Save mit asynchronem Timer funktioniert.
Der Timer muß von einem externem Taktgeber betrieben werden weil der interne Takt komplett abgeschaltet wird.

Gruß Sebastian

rIdd3r
19.12.2007, 22:50
Hm...Laut Datenblatt läuft im PowerSave (im Gegensatz zum PowerDown) der Timer2 weiter. Kann aber sein dass das beim Mega8 anders ist.


If Timer/Counter2 is enabled, it will keep running during sleep. The device can wake up from
either Timer Overflow or Output Compare event from Timer/Counter2 if the corresponding
Timer/Counter2 interrupt enable bits are set in TIMSK2, and the Global Interrupt Enable bit in
SREG is set.

ogni42
20.12.2007, 15:38
Ich habe jetzt auf die schnelle im Datenblatt nichts gefunden, aber kann es sein, dass es etwas dauert, bis die serielle schnittstelle wieder im Takt ist. Hast Du mal eine wartezeit (z.B. 100ms) nach dem aufwachen eingefügt?

rIdd3r
20.12.2007, 18:00
Hm.Das hat leider nichts geändert...Aber kann es eigentlich sein dass ich was bei den Interrupts falsch mache? Eigentlich müsste er so 5s rum Pause machen, aber es ist viel weniger. Die 2. Nachricht kommt quasi direkt nach der ersten.