Forum: Mikrocontroller und Digitale Elektronik Watchdog


von Dirk (Gast)


Lesenswert?

Hi,

benutze als µC den Tiny13. Ich moechte gerne soviel Stromsparen wie es
geht deshalb wollte ich den µC in Powerdown Modus schicken. Nach einer
vordefinierten Zeit soll der µC wieder erwachen und ein paar Sachen
erledigen und dann wieder in Powerdown Modus gehen.

Entweder verstehe ich den Watchdog falsch oder ich mache beim
initalisieren ein Fehler. Eigentlich sollte die LED jetzt alle 8
Sekunden an und aus gehen. Leider blinkt sie viel schneller somit
scheint der Watchdog garnicht auf 8 Sekunden initalisiert zuwerden.
Nach dem Reset steht der Watchdog standardmaessig ja auf 16ms. Mein
Testprogramm braucht aber nicht laenger als 100µs um den Watchdog neu
zuinitalisieren.

Ich hoffe jemand kann mir auf Spruenge helfen.

Mfg

Dirk

start:
rcall wtd_on
sei
main:
sbi pinb,led ; LED toggeln
ldi temp1, (1<<SE) | (1<<SM1) ; Powerdown and Sleep Mode enable
out mcucr, temp1
sleep
rjmp main

Wtd_on:
  in  temp1,WDTCR
  sbr  temp1, 1<<WDTIE | 1<<WDE | 1<<WDP3 | 1<<WDP0 ;8.0s
  out  WDTCR,temp1
ret

von crazy horse (Gast)


Lesenswert?

stack?

von Dirk (Gast)


Lesenswert?

Hi,

@Crazy horse: Stack hab ich initalisiert.

Problem war das man auch das WDCE (WdtChangebit) schreiben muss.
Das funktionerende Listing:

Wtd_on:
  cli
  in r16, WDTCR
  ori r16, (1<<WDCE) | (1<<WDE)
  out WDTCR, r16
  ldi r16, (1<<WDE) | (1<<WDP3) | (1<<WDP0)
  out WDTCR, r16
  sei
ret

Wtd_off:
  in  temp1,WDTCR
  sbr  temp1, 1<<WDTIE | 1<<WDE
  out  WDTCR,temp1
  cbr  temp1, 1<<WDE
  out  WDTCR,temp1
ret

Mfg

Dirk

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.