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.
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. ...
Vielen vielen Dank, mit einfachen integrierens in die Hauptschleife funktioniert es.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.