Hi Leute !!!
In meinem Programm ist durch den Timer1 eine Uhr integriert, die während
der gesamten Programmlaufzeit im Hintergrund mitläuft.
-------------------------------------
....
Config Timer1 = Timer , Prescale = 64
On Timer1 Uhrzeit
Enable Timer1
Enable Interrupts
Start Timer1
.....
Uhrzeit:
Incr Timer_counter
If Timer_counter = 2 Then
Timer_counter = 0
Incr Sekunde
If Sekunde = 60 Then
Sekunde = 0
Incr Minute
If Minute = 60 Then
Minute = 0
Incr Stunde
If Stunde = 24 Then Stunde = 0
End If
End If
End If
Return
-------------------------------------
Nun wird der ATTiny45 an einer bestimmten Programmstelle in den
IDLE-Modus vesetzt, der ausschließlich durch das Betätigen eines Tasters
an PortB.2 wieder beendet werden soll. Die Uhr soll währenddessen aber
weiterlaufen, was ja im IDLE-Modus möglich ist.
-----------------------
....
Config Int0 = Low Level
On Int0 Wakeup
Enable Int0
....
Wakeup:
return
-----------------------
Das funktioniert aber leider nicht, da der IDLE-Modus ja sofort wieder
durch den Overflow-Interrupt vom Timer1 beendet wird.
Gibt es evtl. eine Möglichkeit festzulegen, welche Interrupts den
jeweiligen Sleep-Modus, also in meinem Fall den IDLE-Modus, beenden
dürfen? Oder anders ausgedrückt, kann ich den Timer1-Overflow-Interrupt
als Trigger für das Beenden des IDLE-Modus irgendwie "verbieten"?
Grüße,
The SphereX
Der "bestimmte Programmteil", der für IDLE sorgt, wird nach einem INT einfach fortgesetzt. Wenn die Uhr weiterlaufen soll, dann darf man ihr nicht DIN INT verbieten, sondern das Sleep muß in einer Schleife passieren, solange die "Sleep-Bedingung" erfüllt ist. Also z.B. Immer, falls alle Funktion in den Interrupt-Routinen steckt.
D. h. ich muß den µC nach jedem Timer1-Overflow, also jede 500 ms, wieder in den IDLE-Modus versetzen, bis der Taster gedrückt wurde? Also anstatt einfach nur: Config Powermode = Idle das Ganze z. B. so aufbauen? While Taster = 1 Config Powermode = Idle Wend Grüße, The SphereX
Wenn "Config Powermode=IDLE" das Äquivalent zu SLeep(); ist, dann ja. Ich bin halt mehr ein C-Fan und damit BASCOM-hater. Die CPU wird per Sleep Befehl angehalten und wacht beim ersten INT wieder auf. Je nach Sleepmode nicht bei jedem, aber im IDLE-Mode schon. Danach geht's einfach nach dem Sleep weiter. In der BASCOM-Watte verpackt ist das vielleicht nicht so gut zu erkennen. Hab grad bei Dr. Gugl gesehen, das macht auch Sleep. Es ist also nicht nur Config, sondern richtig Äkschen.
Ich hab's gerade mal probiert. Funktioniert tatsächlich so :-) Dann DANKE für den Hinweis, auch wenn dieser von einem BASCOM-Hater kommt ;-) Grüße, The SphereX
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.