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.