Guten Abend, Ich hätte da ein kleines Problem. Und zwar möchte ich ganz gerne ein ATMega328P 5 Taster und 8 LED's möglichstes lange an einer 9V Batterie betreiben. Dazu habe ich mir gedacht. Ich setzte denn Controller direkt am Anfang in denn Power Down Modus. Und erst wenn man dann denn ON Button drückt, was zu gleich auch der OFF Button ist, ihn aus dem Power Down Modus hole. Ich habe mir diesen Artikel mehrmals durchgelesen: https://www.mikrocontroller.net/articles/Sleep_Mode Jedoch habe ich Problem das Beispiel: "Aufwachen per Tastendruck". Nach zu machen. Denn beim ATMega328P gibt es das GICR Register nicht. Ich kenne nur das EIMSK Register. Jedoch wenn ich das umsetzte(Mit EIMSK) wird der Controller auch in denn Power Down Modus gesetzt. Wenn ich denn "+" Button drückt leuchtet die "+" LED nicht. Nur wie hole ich ihn nun wieder aus dem Power Down Modus raus? Er soll halt geweckt werden so bald ich denn "ON" Button wieder drücke. Mein Controller läuft auf 16Mhz. Könnt ihr mir da weiter helfen? Mfg Jan.
@Jan Hampel (jan_h865) >ATMega328P 5 Taster und 8 LED's möglichstes lange an einer 9V Batterie >betreiben. Dann brauchst du erstmal einen sehr sparsamen Linearregler. https://www.mikrocontroller.net/articles/Versorgung_aus_einer_Zelle#Vier_Mignonzellen_mit_LowDrop-Linearregler >wieder aus dem Power Down Modus raus? Mit dem passenden Interrupt, der natürlich eine ISR braucht und vor dem schlafen legen aktiviert werden muss. Siehe Artikel Sleep Mode. > Er soll halt geweckt werden so >bald ich denn "ON" Button wieder drücke. Mein Controller läuft auf >16Mhz. Ob man das für ein paar LEDs braucht? >Könnt ihr mir da weiter helfen? Zeig uns deinen Code.
Hi Jan, die richtigen Register und deren Beschreibung steht im original Datenblatt des m328p. Warum schaust du dort nicht nach. Falk hat den Rest schon kommentiert, der Spannungsregler ist dein 1tes Problem.
Falk B. schrieb: > Dann brauchst du erstmal einen sehr sparsamen Linearregler. > > https://www.mikrocontroller.net/articles/Versorgung_aus_einer_Zelle#Vier_Mignonzellen_mit_LowDrop-Linearregler Okay, zurzeit nutze ich denn LM7805. Werde mir aber mal ein anderen besorgen. Falk B. schrieb: > Mit dem passenden Interrupt, der natürlich eine ISR braucht und vor dem > schlafen legen aktiviert werden muss. Siehe Artikel Sleep Mode. Du meinst die ISR(INT0/INT1_vect) oder? Falk B. schrieb: > Ob man das für ein paar LEDs braucht? Kommt daher weil ich diese mit dem Arduino Bootloader betreibe. Falk B. schrieb: > Zeig uns deinen Code. Klar.
Jan H. schrieb: >> Ob man das für ein paar LEDs braucht? > > Kommt daher weil ich diese mit dem Arduino Bootloader betreibe. Wie das ? Der Bootloader schaltet nicht deine LED, sondern ein Programm des Programmierers. So einen m328p mit Bootloader kannst Du auch mit avrdude direkt nutzen.
Noch etwas, Du musst auch immer einen INT0 Request vor der Nutzung des INT0 Interrupts löschen! Auch würde ich nach dem Aufwachen die globale Interrupt Freigabe löschen. Dann den INT0 Interrupt deaktivieren und die Tasterauswertung vom zugehörigen Eingang aktivieren. Zumindest dies fehlt bei Dir komplett !
Karl M. schrieb: > Wie das ? > > Der Bootloader schaltet nicht deine LED, sondern ein Programm des > Programmierers. > > So einen m328p mit Bootloader kannst Du auch mit avrdude direkt nutzen. Falk B. schrieb: >> Er soll halt geweckt werden so >>bald ich denn "ON" Button wieder drücke. Mein Controller läuft auf >>16Mhz. > > Ob man das für ein paar LEDs braucht? Wies ja nicht worauf sie die Frage genau bezieht. Ich denke mal auf die 16 Mhz. Und meine Atmega328p sind alle mit dem Arduino Bootloader mit 16 Mhz ausgerüstet. Falls ich die Frage falsch verstanden habe. Bitte verbessern. Karl M. schrieb: > Noch etwas, Du musst auch immer einen INT0 Request vor der Nutzung des > INT0 Interrupts löschen! > Auch würde ich nach dem Aufwachen die globale Interrupt Freigabe > löschen. > Dann den INT0 Interrupt deaktivieren und die Tasterauswertung vom > zugehörigen Eingang aktivieren. > > Zumindest dies fehlt bei Dir komplett ! Sorry verstehe ich nicht so ganz.
Jan H. schrieb: > Karl M. schrieb: >> Noch etwas, Du musst auch immer einen INT0 Request vor der Nutzung des >> INT0 Interrupts löschen! >> Auch würde ich nach dem Aufwachen die globale Interrupt Freigabe >> löschen. >> Dann den INT0 Interrupt deaktivieren und die Tasterauswertung vom >> zugehörigen Eingang aktivieren. >> >> Zumindest dies fehlt bei Dir komplett ! > > Sorry verstehe ich nicht so ganz. Dann wäre es doch sinnvoll sich das Datenblatt zu nehmen und sich über die Interruptverarbeitung im Detail zu informieren. Wenn Du den Taster ohne Power Down drückst, dann liegt immer ein INT0 Interruptrequest vor. Wird dann der INT0 Interrupt aktivieren, so wird sofort ! die zugehörige INT0 Interrupt Routine angesprungen. Pech gehabt..
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.