Forum: Mikrocontroller und Digitale Elektronik Delay mit Watchdog Interrupt.


von Eumel (Gast)


Lesenswert?

Hallo alle,
ich habe in meinem Programm eine leider unvermeidliche Delay Routine, in 
der Zeit in der die ausgeführt wird gibt es für den Controller wirklich 
nichts zu tun außer warten. Da hab ich mir gedacht, dass ich ihn ja auch 
schlafen legen kann um ihn nach einer Sekunde (solang soll die Dleay 
Routine auch sein, Genauigkeit ist unkritsch) mit dem Watchdog Interrupt 
wieder zu wecken. Der Controller ist ein Attiny13
1
DELAY:
2
  sei
3
  push r16
4
  ldi r16, (1<<WDCE)
5
  out WDTCR, r16
6
  ldi r16, 0b01010110
7
  out WDTCR, r16
8
  ldi r16, 0b00110000
9
  out MCUCR,r16
10
  sleep
11
  ldi r16, (1<<WDCE)
12
  out WDTCR, r16
13
  ldi r16, 0b00010000
14
  out WDTCR, r16
15
  cli
16
  pop r16
17
  ret
die zugehörige IST beschränkt sich auf ein reti, schließlich soll nur 
geweckt werden.
1
.org 0x0008
2
    rjmp WATCHDOG
3
4
WATCHDOG:
5
reti

Das ganze funktioniert aber nicht, vielleicht sieht jemand einen Fehler 
und sagt ihn mir.

von Eumel (Gast)


Lesenswert?

Achso, die WDTON Fuse ist natürlich gesetzt!

von Thomas E. (thomase)


Lesenswert?

Eumel schrieb:
> Achso, die WDTON Fuse ist natürlich gesetzt!
Die darf nicht gesetzt sein, weil damit der Watchdog aktiv ist und nach 
dem Abarbeiten der Watchdog-Timer-ISR ein Watchdog-Reset ausgeführt 
wird.
Dabei werden auch die Watchdog-Register zurück gesetzt und der Watchdog 
steht auf 16ms. Und wenn er dann nicht gleich wieder eingestellt wird, 
macht er eben nach diesen 16ms wieder einen Reset und damit fristet er 
dann sein Dasein bis ihm der Strom abgestellt wird.

mfg.

von Eumel (Gast)


Lesenswert?

Ahrgl, wie blöd von mir. Unter der entsprechende Tabelle im Datenblatt 
steht:"Note: 1. WDTON fuse set to “0“ means programmed and “1“ means 
unprogrammed"

Und ich hab natürlich nur in die Tabelle geschaut und gedacht 1 würde 
gesetzt heißen.

Danke für deine Hilfe!

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
Noch kein Account? Hier anmelden.