Cairol
09.12.2008, 00:57
Ich hab jetzt den Tiny13 zum 116ten mal geflashed und schaffe es immer noch nicht den Watchdog dazu zu bringen, nach einem "POWERDOWN" den Chip einfach wieder zu erwecken so dass das Programm exakt nach dem POWERDOWN wieder weiter geht.
Ich führe im "echten" Programm eine Zählvariable mit, die nicht verloren gehen darf, deshalb kann ich hier kein Reset brauchen.
Scheinbar tut er aber genau das.
Hier mal das Test-Programm:
$regfile = "ATtiny13.dat" 'Hinweis: ATTiny13 mit internem 1,2MHz-Takt (9,6 MHz / 8)
$framesize = 32
$swstack = 20
$hwstack = 20
$crystal = 1200000
Wdtcr = &B11110001
'gewollt: 8 Sekunden Time-Out OHNE Reset (soll weitermachen wo er aufgehört hat)
Enable Interrupts
Config Pinb.4 = Output
Const Ein = 1
Const Aus = 0
heizen Alias Portb.4
Wait 5
Start WATCHDOG
heizen = Ein
Reset Watchdog
POWERDOWN
heizen = Aus
End
Hier läuft das Programm nie ins "End". Die Abfolge nach dem Power-ON ist:
- 5 Sekunden Pause (vom WAIT)
- EIN
- 8 Sekunden Pause (vom WD)
- AUS
- 5 Sekunden Pause
- ...
- ...
- u.s.w.
Also macht der Tiny offensichtlich einen Reset.
Ich weis, dass man den WD im wdtcr-Register auch auf "Interrupt-Mode" stellen kann und nach meinem Ermessen hab ich das auch mit obiger Einstellung getan. (und noch viele andere Kombinationen probiert)
Aber trotzdem läuft es falsch.
Beim Googlen waren auch mehrere Programme zu finden, wo es genau so gemacht wurde. (z.B. hier: http://www.geoclub.de/viewtopic.php?f=57&t=18400&start=30)
Oder fast genau so.
Irgendwo mach ich einen Fehler. :-k
Ideas? Anybody?
Ich führe im "echten" Programm eine Zählvariable mit, die nicht verloren gehen darf, deshalb kann ich hier kein Reset brauchen.
Scheinbar tut er aber genau das.
Hier mal das Test-Programm:
$regfile = "ATtiny13.dat" 'Hinweis: ATTiny13 mit internem 1,2MHz-Takt (9,6 MHz / 8)
$framesize = 32
$swstack = 20
$hwstack = 20
$crystal = 1200000
Wdtcr = &B11110001
'gewollt: 8 Sekunden Time-Out OHNE Reset (soll weitermachen wo er aufgehört hat)
Enable Interrupts
Config Pinb.4 = Output
Const Ein = 1
Const Aus = 0
heizen Alias Portb.4
Wait 5
Start WATCHDOG
heizen = Ein
Reset Watchdog
POWERDOWN
heizen = Aus
End
Hier läuft das Programm nie ins "End". Die Abfolge nach dem Power-ON ist:
- 5 Sekunden Pause (vom WAIT)
- EIN
- 8 Sekunden Pause (vom WD)
- AUS
- 5 Sekunden Pause
- ...
- ...
- u.s.w.
Also macht der Tiny offensichtlich einen Reset.
Ich weis, dass man den WD im wdtcr-Register auch auf "Interrupt-Mode" stellen kann und nach meinem Ermessen hab ich das auch mit obiger Einstellung getan. (und noch viele andere Kombinationen probiert)
Aber trotzdem läuft es falsch.
Beim Googlen waren auch mehrere Programme zu finden, wo es genau so gemacht wurde. (z.B. hier: http://www.geoclub.de/viewtopic.php?f=57&t=18400&start=30)
Oder fast genau so.
Irgendwo mach ich einen Fehler. :-k
Ideas? Anybody?