Aufwecken aus sleep mode tiny 2313

Gast #813415
Guten Tag, ich bekomme meinen Tiny 2313 nicht mit einen externen 
interrupt
aus den IDLE oder Power Down sleep mode aufgeweckt.
Programm funktioniert ungefähr so: Timer0  läuft, wo nach ca. 10 sec der 
exteren interrupt int0 frei gegeben wird, der Timer0 ausgeschalten wird 
und der sleep mode aktiviert wird. Leider kann ich den Tiny dann nicht 
dazu bringen, durch den externen interrupt aufzuwachen und in dessen 
Interruptschleife zu springen und weiterzuarbeiten. Der sleep mode soll 
nach dem ext. Interrupt nicht mehr auftreten.
Bedanke mich im vornweg für Hilfe.
Angehängte Dateien:
Gast
Ja, das geht so nicht. Du kann nicht das Interrut enable im Interrupt 
betaetigen. Das ist weg, wenn der interrupt verlassen wird. Mach das im 
main.

interrupt timer0
{
 ..
 timer0came=1;
}

main
{
  loop
 {
   if timer0 came==1
   {
    enable_Ext_Int
    ..
   }
  ..
 {
}
@ T. Scholz (Gast)

>aus den IDLE oder Power Down sleep mode aufgeweckt.

Sleep Mode

>Programm funktioniert ungefähr so: Timer0  läuft, wo nach ca. 10 sec der
>exteren interrupt int0 frei gegeben wird, der Timer0 ausgeschalten wird
>und der sleep mode aktiviert wird. Leider kann ich den Tiny dann nicht
>dazu bringen, durch den externen interrupt aufzuwachen und in dessen
>Interruptschleife zu springen und weiterzuarbeiten. Der sleep mode soll
>nach dem ext. Interrupt nicht mehr auftreten.

Deine Initialisierung ist schlecht. Erst ALLES initialisieren, DANN 
sei()!
Für den Sleep Mode gibt es fertige Routinen, nutzte die.
Ausserdem kann es kritisch sein, wenn ein Sleep Mode in einem Interrupt 
eingeschaltet wird. Das sollte besser in der Hauptschleife erfolgen.

MFG
Falk
> Ausserdem kann es kritisch sein, wenn ein Sleep Mode in einem Interrupt
> eingeschaltet wird. Das sollte besser in der Hauptschleife erfolgen.

Hmmm... - Das Umschalten (Voreinstellen) des Sleep-Mode in der ISR ist 
kein Problem. Das Aufrufen des Sleep sollte natürlich in der Mainloop 
erfolgen.

So kann ein externer Low-Level-Interrupt den AVR aus dem "Tiefschlaf 
wecken", in dessen ISR wird der Sleep-Mode auf Idle umgeschaltet und der 
ext-Int deaktiviert. Nun laufen die Timer und der AVR kann ganz normal 
seine Arbeit machen, wie Tasten entprellen und darauf reagieren und nach 
jeder Mainloop-Runde bis zum nächsten (Timer-)Int. in den (Idle-)Sleep 
geschickt werden. Wird der AVR nicht mehr bedient (Time-out einbauen), 
wird lediglich der ext. Low-Level-Interrupt aktiviert und der Sleep-Mode 
auf "Power Down" umgeschaltet. Die Mainloop schickt ihn dann in den 
Sleep, worauf die Timer stehen bleiben.

...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.