www.mikrocontroller.net

Forum: Compiler & IDEs Sleep Mode Power Down und INT0 funktioniert nicht


Autor: INT0 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe am PD2 (INT0) des ATmega32 (16MHz ext. Quarz) ein IR Empfänger. 
Das empfangen funktioniert auch alles problemlos. Wenn ich aber in den 
Sleep gehe und irgend etwas höheres als IDLE eingestellt habe (wollte 
eigentlich POWER DOWN), dann wacht mein µC nicht mehr auf. Woran kann 
das liegen?
...
  TCCR0 = 1<<CS02;      // Teiler 256
  TIMSK = 1<<TOIE0;      // Timer Interrupt freigeben
  GIMSK = (1 << INT0);      // externen Interrupt freigeben, bei anderen µC "GICR"
  //MCUCR = (1 << ISC00)|(1 << ISC01);  // steigende Flanke löst ext. Interrupt aus
  MCUCR = (1 << ISC01);          // fallende Flanke löst ext. Interrupt aus
...
...
  sei();          // ISR aktivieren
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_mode();             // in den Schlafmodus wechseln
  // hier wieder aufwachen bei ext. Interrupt
  GIMSK &= ~(1 << INT0);    // externen Interrupt sperren, durch Timer werden jetzt alle 14 Bits eingelesen
  while(1)          
  {  
...
...
    GIMSK = (1 << INT0);    // externen Interrupt freigeben, damit wieder aufgewacht werden kann
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    sleep_mode(); 
    // hier wieder aufwachen bei ext. Interrupt
    GIMSK &= ~(1 << INT0);    // externen Interrupt sperren, durch Timer werden jetzt alle 14 Bits eingelesen
  }
...
...
ISR(INT0_vect) {
  // 3 Takte warten, dass Oszillator einschwingen kann
  //__asm volatile ("nop");
  //__asm volatile ("nop");
  //__asm volatile ("nop");
  DDRD|=(1<<PD6);
  PORTD^=(1<<PD6);
}

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nix steigende oder fallende Flanke! Zum Aufwachen aus dem Power Down 
Schlafmodus musst Du den INT0 auf _Pegel_triggerung konfigurieren. Denn 
im Power Down hat der Controller keinen Takt, und ohne diesen kann er 
keine Flanke detektieren.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ: Upgrade auf einen ATmega324P, der kann auch edge triggered
aufwachen, da die Flankenerkennung dort asynchron implementiert ist.

Autor: INT0 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
thx, hatt ich so nicht gelesen und auch nicht richtig nachgedacht ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.