Forum: Compiler & IDEs Sleep-Mode mit externem IR beenden


von Roland Röck (Gast)


Lesenswert?

Hallo, ich hab ein Problem mit dem Aufwecken aus dem
Power-Down-Sleep-Mode per externem Interrupt.

Was läuft falsch,
die Funktion go_Sleeping() versetzt meinen 8535 zwar wunschgemäß in
Schlaf. Über eine fallende Flanke an INT0 sollte er dann wieder
aufgeweckt werden.

Das funktioniert bisher nur bei levelgetriggertem ext.IR. jedoch nicht

mit flankengetriggertem. Der Fehler entsteht mit dem Aufruf
sleep_mode(), denn, wenn ich es durch for(;;); ersetzte wird sehr wohl
auch flankengetriggerter IR ausgelöst.

Danke für eure Hilfe.



SIGNAL(SIG_INTERRUPT0){ debugprint("INTERRUPT0 ausgelöst");}

void go_Sleeping(void)
{
  #ifdef MIT_LCD_SLP
  AT_LCDPOS_SLP("sl"); // Kontrollausgabe
  #endif

  MCUCR = 1<<ISC01;  // falling edges on int0
  //MCUCR = 0;  // low level of INT1 generates an IR ==> so gehts
immer!
  GIFR = 1<<INTF0;   // IR-request-flag rücksetzen
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  enable_external_int(1<<INT0);   // oder GIMSK = 1<<INT0;
  sleep_mode();  // ersetzt durch for(;;); und INT0 trigger auch mit der
Flanke
  FUEGE_EIN_ZEHN_NOPS;
  enable_external_int(0);

  #ifdef MIT_LCD_SLP
  AT_LCDPOS_SLP("wk"); // Kontrollausgabe
  #endif
}

von Joerg Wunsch (Gast)


Lesenswert?

Flankengetriggerte externe Interrupts können nicht aus dem Tiefschlaf
wecken: die Flankenerkennung benötigt einen laufenden Taktgenerator.

RTFdatasheet...

von Roland Röck (Gast)


Lesenswert?

Verbindlichsten Dank für die rasche Klärung!

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
Noch kein Account? Hier anmelden.