Forum: Mikrocontroller und Digitale Elektronik Bascom - Watchdog-Reset auswerten


von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

Hallo,

ich würde gerne mitloggen, wann meine Schaltung einem "Watchdog-Reset" 
zum Opfer gefallen ist. Laut Datenblatt ist dann das MCUSR.WDRF-Bit 
gesetzt.

Leider scheint es so, dass Bascom schon vorher das Bit wieder 
zurücksetzt.
Hat hier irgendwer eine Idee, wie ich das Watchdog-Resetbit in Bascom 
auswerten kann?
1
Const Cx = 8000000
2
$regfile = "m1284pdef.dat"
3
$crystal = Cx
4
$swstack = 1024
5
$hwstack = 512
6
$framesize = 512
7
'**************************** Port-Definitionen
8
Dim Bitwatchdog As Bit
9
Bitwatchdog = Mcusr.wdrf  'muesste nach Watchdog-Reset gesetzt sein, ist aber nicht!
10
Ledrot Alias Portd.4
11
Config Ledrot = Output
12
Ledrot = Bitwatchdog
13
Config Adc = Single , Prescaler = Auto , Reference = Avcc
14
Start Adc
15
Piezoklingel Alias Portd.7           'OC2A
16
Config Piezoklingel = Output
17
Sound Portd.7 , 300 , 300
18
Waitms 1000
19
Dim Adc1 As Word
20
Mcusr.wdrf = 0                'jetzt wird Restart-Flag zurückgesetzt
21
Config Watchdog = 1024
22
Start Watchdog
23
Do
24
  Reset Watchdog
25
  Adc1 = Getadc(1)            'Taste schließt Adc1 gegen VCC
26
  If Adc1 > 800 Then
27
     Sound Portd.7 , 500 , 300
28
     Waitms 2048              'Watchdog-Reset wird erzwungen
29
  End If
30
Loop

von Weingut P. (weinbauer)


Lesenswert?

versuchs mal mit $NOINIT

von Alex W. (a20q90)


Lesenswert?

Ich habe das auch schon mal bei nem Mega8 gehabt! Ein Watchdog-Reset 
konnte nicht abgefragt werden. Eventuell ein Bug in Bascom?

von MWS (Gast)


Lesenswert?

Manfred S. schrieb:
> Leider scheint es so, dass Bascom schon vorher das Bit wieder
> zurücksetzt.
> Hat hier irgendwer eine Idee, wie ich das Watchdog-Resetbit in Bascom
> auswerten kann?

Da Du Dich bereits vorher als äußerst unbegabt erwiesen hast, was das 
Lesen der Bascom-Hilfe anbetrifft, will ich jetzt mal nicht so sein :D

Zitat Hilfe:
> When it is important to examine at startup if the micro was reset by a
> Watchdog overflow, you need to examine this MCUSR.WDRF flag before you
> use CONFIG WATCHDOG, since that will clear the flag.
und
> For chips that have an enhanced WD timer, the WD timer is cleared as part
> of the chip initialize procedure. This because otherwise the WD timer
> will only work once. If it is important that you know the cause of the
> reset, you can read the register R0 before you run other code.

Und damit Du Dich nicht beim Lesen des R0 verläufst:
1
my_MCUSR = Peek(0)

von Rudolf (Gast)


Lesenswert?

Wenn man ein Bascom-Kompilat (HEX/OBJ) in AVR Studio lädt, und dann im 
Disassembling nachsieht, kann man erkennen, ob der Compiler Code zum 
Zurücksetzen dieses Bits generiert.
Also einen Haken bei "AVR Studio Object file" machen und das erzeugte 
*.OBJ File dann im AVR Studio laden.

von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

MWS schrieb:
> Zitat Hilfe:
>> When it is important to examine at startup if the micro was reset by a
>> Watchdog overflow, you need to examine this MCUSR.WDRF flag before you
>> use CONFIG WATCHDOG, since that will clear the flag.

Soweit hab ich auch gelesen, nur diesmal war ich wirklich 
Hilfe-resistent - leider hab ich den Scrollbalken am linken 
Bildschirmrand in der Hilfe übersehen ;-)

Danke für den Tipp - klappt wunderbar
1
Const Cx = 8000000
2
$regfile = "m1284pdef.dat"
3
$crystal = Cx
4
$swstack = 1024
5
$hwstack = 512
6
$framesize = 512
7
'**************************** Port-Definitionen
8
Dim Bytmcusr As Byte
9
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
10
Config Lcd = 16 * 2
11
Bytmcusr = Peek(0)
12
Cls
13
Lcd Bytmcusr
14
'5=bei Power on (Bit2=0), 7=bei Resetbutton (Bit2=1), 
15
'13 bzw. 15=bei Watchdog-Reset (Bit3=1)
16
Config Adc = Single , Prescaler = Auto , Reference = Avcc
17
Start Adc
18
Dim Adc1 As Word
19
Config Watchdog = 1024
20
Start Watchdog
21
Do
22
  Reset Watchdog
23
  Adc1 = Getadc(1)                    'Taste schließt Adc1 gegen VCC
24
  If Adc1 > 800 Then
25
     Waitms 2048                      'Watchdog-Reset erzwungen
26
  End If
27
Loop

Zusätzlich zur Bascom-Doku ist mir aufgefallen, dass auch zwischen Strom 
aus/ein und Resetbutton unterschieden werden kann. Dafür ist es mir 
nicht gelungen, das Brown Out-Bit (Bit 2, BORF) abzufangen (weder bei 
Fuse mit 2,7 Volt noch mit 4,3 Volt) - vielleicht hat hier noch jemand 
eine Idee.

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.