Probleme mit dem Sleep Mode(ATMega328P)

OP #4663624
Lesenswert?
• ▲
▼
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.
Lesenswert?
• ▲
▼
@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.
Gast
Lesenswert?
• ▲
▼
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.
OP
Lesenswert?
• ▲
▼
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.
Angehängte Dateien:
Gast
Lesenswert?
• ▲
▼
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 !
OP
Lesenswert?
• ▲
▼
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.
Gast
Lesenswert?
• ▲
▼
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..

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.