Hi Leute, Hab ein kleines Versuchsprogramm für den SleepMode am ATmega32 geschrieben. Es soll 5sek die LED1 aufleuchten, danach soll er in den PowerDown-Mode gehen und über Interrupt an INT0 wieder "aufgeweckt" werden und LED2 in der ISR aufleuchten (zum test der ISR). Leider leuchtet die LED1 dauerhaft und es geht nicht in den SleepMode. Kann mir jemand sagen was ich vergessen habe?? Danke.
Hallo, 1. ich sehe in deinem Programm nichts was die LED1 ausschalten würde 2. 5s mit delay_ms bei 16MHz sind glaube ich schon zu viel Sascha
Hi Sascha hab das ganze jetzt mal mit einem delay von 1000ms versucht was auf jeden fall funktionieren sollte. --> auch nichts. und liege ich mit meiner Annahme falsch, das der PowerDown Mode den uC nicht abschalten sollte und somit auch die LED1 erlischen sollte??? Zudem sollte ja zumindesten bei drücken des Tasters der auf +5V liegt(somit Highflanke wenn gedrückt) die ISR Routine greifen und die LED2 aufleuchten.
:
Bearbeitet durch User
Alle Sleepmodi legen nur die internen Verarbeitungseinheiten mehr oder weniger lahm. Die Portzustände Ein-/Ausgang und Pegel bleiben hingegen unverändert. Sascha
OK. Das heißt Display UART ADC usw muss ich noch extra ausschalten. Aber die ISR Routine sollte doch trozdem greifen. Zumindest die LED2 auf ON
Datenblatt lesen! Power Down: Only INT2 or level interrupt INT1 and INT0 mit deiner Flanke an INT0 bekommst du ihn nicht wieder wach! UART/ADC kannst du beim .32 glaube ich noch nicht gesondert deaktivieren um noch mehr Strom zu sparen da es das PRR Register dort noch nicht gibt. Ein Display kannst du ja über einen Portpin mit Strom versorgen wenns nicht zu viel braucht. Zuvor dann alle Datenleitungen auf Low oder Input und dann die Versorung auf Low. Sascha
Sascha W. schrieb: > Power Down: Only INT2 or level interrupt INT1 and INT0 > > mit deiner Flanke an INT0 bekommst du ihn nicht wieder wach!
1 | GICR |= (1 << INT0); //Externen Interrupt freigeben |
2 | MCUCR |= (1<<ISC01) | (1<<ISC00);//Auf Steigende Flanke Interrupt ausführen |
Aber wenn ich das richtig verstehe sollte ich mit diesen zwei Zeilen zum ersten den Externen Interrupt an INT0 freigeben und mit der zweiten Zeile den Interrupt auf eine High Flanke setzen
das passt schon, aber für das aufwecken aus dem Sleep gelten halt noch ein paar Einschränkungen! Und da nützt es wenig auf Flanke zu stellen wenn diese Betriebsart dann für den Zweck nicht geeignet ist. Siehe Tab14 unter Sleepmodes... Sascha
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.