Hohe Stromaufnahme beim Aufwachen aus dem Sleep-Mode (Atmega88)

OP #2199659
Lesenswert?
• ▲
▼
Hallo zusammen.
Ich habe ein Problem mit dem Sleep-Mode.
Und zwar habe ich eine Funktion, die den AVR in den Sleep-Mode schickt 
und durch einen Pin-Change Interrupt (Taster) wieder aufgeweckt werden 
soll.
Erst wenn der Taster 2s lang gedrückt wurde soll er wieder in den 
Normal-Betrieb übergehen.
Das funktioniert zwar auch, aber wenn ich den Taster nur einmal kurz 
betätige steigt die Stromaufnahme derart an, dass die Spannung (CR2032) 
zusammenbricht und der AVR einen Reset macht.
Kann mir einer sagen was da falsch läuft?
1
void pwr_off(void){
2
  uint8_t end=0;
3
    
4
    do{
5
    
6
      PCMSK0 = (1<<PCINT0);  /* Pin Change Interrupt for PB0*/
7
      PCICR |= (1<<PCIE0);
8

9
      lcd_clear();
10
      /* Say goodbye */
11
      lcd_text_p((char *)str_bye);
12
      wait_ms(1000);
13
      TCCR0B &= ~(1<<CS00);  /* Stop Timer for PWM */
14
      LCD_off();
15
      
16
      asm("nop");
17
      set_sleep_mode(SLEEP_MODE_PWR_DOWN);
18
      sleep_mode();
19
      
20
              
21
      PCICR &= ~(1<<PCIE0);
22
      cli();
23
      _delay_ms(2000);
24
      if(!(KEY_PIN & (1<<KEY0))){
25
              
26
        LCD_on();
27
        lcd_init();
28
        lcd_text_p((char *)str_hello);
29
        end=1;
30
         
31
      }
32
      sei();          
33
        
34
    }while(!end);
35

36
}
Die ISR (ISR(PCINT0_vect)) ist vorhanden, aber leer.
Gast #2199665
Lesenswert?
• ▲
▼
ich habe jetzt den code nicht durchgeschaut, aber wenn der 
Stromverbrauch so stark steigt, dann ist es ein Problem in Kombiniation 
mit der Hardware. Kann es sein das du einen Eingang als Ausgang 
schaltest und damit einen Kurschluss erzeugtst?

aber für eine genauer analyse braucht man den Schaltplan
OP #2199674
Lesenswert?
• ▲
▼
Nee komischerweise nicht.
Das einzige was ich da mit einem Ausgang mache ist LCD_ON()/OFF:
1
#define LCD_on()    PORTC |= (1<<PC4)
2
#define LCD_off()    PORTC &= ~(1<<PC4)
Es ist zumindest so, dass die Stromaufnahme erst nach Ablaufen der 2s 
ansteigt, also dann wenn er quasi wieder in die Schleife springt.

Ach moment. Evtl. kommt das durch den Kram den er da erneut macht. Text 
ans ausgeschaltete LCD senden kommt vielleicht nicht so gut...
mal eben testen.

EDIT: Ha, das wars... manchmal ist die Lösung so einfach.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.