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
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