Problem mit Power_down mode beim Atmega 168 (328 geht!)
hallo,
ich komm seit tagen bei einem problem nicht weiter. ich habe einen kleinen "pro mini" (8mhz) über i²c schnittstelle mit einem timer chip verbunden. der arduino gibt dem chip im setup die anweisung im minutentakt ein weck-signal zu schicken. dann geht er in den power_down modus und soll im minutentakt über den digitaleingang 2 geweckt werden. mit der atmega328-version funktioniert das wunderbar, aber der 168 wacht nicht mehr auf. dabei sollte da doch alles gleich sein. ich hab inzwischen alles mögliche probiert, aber es geht einfach nicht. vielleicht kennt jemand das problem und weiß abhilfe?!
ich habe <avr/sleep.h> und <wire.h> (für die i²c-kommunikation) eingebunden.
im setup habe ich die zeilen
set_sleep_mode(sleep_mode_pwr_down);
und
attachinterrupt (0, wake, falling);
die wake-funktion enthält nur die zeile: sleep_disable();
am ende der loop-funktion habe ich
sleep_enable();
und
sleep_mode();
so sollte einfach im minutentakt einmal die loop durchlaufen werden, und wie gesagt, mit dem 328 funktioniert das problemlos, aber der 168 wacht nicht mehr auf.
jetzt hab ich auch versucht, auf die sleep.h einbindung ganz zu verzichten, und statt dessen die nötigen werte in den registern direkt zu setzen, aber geht er anscheinend gar nicht mehr in den power_down modus:
smcr = 4; // auf power_down setzen
eicra |= 1; // int0 (d2), bei fallender flanke
eimsk = 1; // int0, aktivieren
sreg |= 128; // interrupts zulassen
sei(); // (bewirkt das das selbe?)
smcr = 5; // power_down ausfuehren
das hab ich mir nach mühseligem stöbern im datenblatt zusammengestellt. wahrscheinlich habe ich da aber ein paar einstellung vergessen? weiß jemand (ohne sleep.h einbindung) alles nötig ist, um in den power_down modus zu gehen, um dann über den d2 pin wieder geweckt zu werden?
für eure hilfe vorab schon mal besten dank.
ich komm seit tagen bei einem problem nicht weiter. ich habe einen kleinen "pro mini" (8mhz) über i²c schnittstelle mit einem timer chip verbunden. der arduino gibt dem chip im setup die anweisung im minutentakt ein weck-signal zu schicken. dann geht er in den power_down modus und soll im minutentakt über den digitaleingang 2 geweckt werden. mit der atmega328-version funktioniert das wunderbar, aber der 168 wacht nicht mehr auf. dabei sollte da doch alles gleich sein. ich hab inzwischen alles mögliche probiert, aber es geht einfach nicht. vielleicht kennt jemand das problem und weiß abhilfe?!
ich habe <avr/sleep.h> und <wire.h> (für die i²c-kommunikation) eingebunden.
im setup habe ich die zeilen
set_sleep_mode(sleep_mode_pwr_down);
und
attachinterrupt (0, wake, falling);
die wake-funktion enthält nur die zeile: sleep_disable();
am ende der loop-funktion habe ich
sleep_enable();
und
sleep_mode();
so sollte einfach im minutentakt einmal die loop durchlaufen werden, und wie gesagt, mit dem 328 funktioniert das problemlos, aber der 168 wacht nicht mehr auf.
jetzt hab ich auch versucht, auf die sleep.h einbindung ganz zu verzichten, und statt dessen die nötigen werte in den registern direkt zu setzen, aber geht er anscheinend gar nicht mehr in den power_down modus:
smcr = 4; // auf power_down setzen
eicra |= 1; // int0 (d2), bei fallender flanke
eimsk = 1; // int0, aktivieren
sreg |= 128; // interrupts zulassen
sei(); // (bewirkt das das selbe?)
smcr = 5; // power_down ausfuehren
das hab ich mir nach mühseligem stöbern im datenblatt zusammengestellt. wahrscheinlich habe ich da aber ein paar einstellung vergessen? weiß jemand (ohne sleep.h einbindung) alles nötig ist, um in den power_down modus zu gehen, um dann über den d2 pin wieder geweckt zu werden?
für eure hilfe vorab schon mal besten dank.

quote
attachinterrupt (0, wake, falling);int 0 bietet im deep sleep nur einen level interrupt.
Arduino Forum > International > Deutsch (Moderator: uwefed) > Problem mit Power_down mode beim Atmega 168 (328 geht!)
arduino
Comments
Post a Comment