mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Aufwecken aus sleep mode tiny 2313


Autor: T. Scholz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: 6641 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
    ..
   }
  ..
 {
}

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

...

Autor: T. Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen vielen Dank, mit einfachen integrierens in die Hauptschleife 
funktioniert es.

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.