IDLE-Modus trotz Timer1-Overflow-Interrupt?

Gast #3583365
Lesenswert?
• ▲
▼
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
Gast #3583379
Lesenswert?
• ▲
▼
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.
Gast #3583410
Lesenswert?
• ▲
▼
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
Gast #3583428
Lesenswert?
• ▲
▼
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.

Antwort schreiben

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.

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.