Forum: Mikrocontroller und Digitale Elektronik Watchdog läst sich nicht Stopen


von BASCOUSER (Gast)


Lesenswert?

Hallo ich habe ein kleines Problem mit meinen Code
1
 '*******************************************************************************
2
'***                    Aussenlichtsteuerung V1.2                            ***
3
'*******************************************************************************
4
5
' Portd.3 = Output Led Bewegung
6
' Portb.3 = Output PWM Wandlampe
7
' Portb.4 = Output PWM Deckenlampe
8
' Portb.1 = Input Eingang Bewegungsmelder
9
' Portb.0 = Input Eingang taster
10
'
11
' a                 = Lampen gehen An Verzögerungszeit leuft ab
12
' s                 = lampen gehen Aus ohne Verzögerungszeit
13
' m                 = Menu wird angezeit
14
'
15
' (1)  Speed         = Rampengeschwindigkeit fürs PWM
16
' (2)  WandAn        = Maximalhelligkeit für die Wandlampen
17
' (3)  DeckeAn       = MaximalHelligkeit für die Deckenpampe
18
' (4)  Verzoegerung  = Ausschaltzeit bis zum StandBy
19
' (5)  StanbBy       = StandBy Wert
20
' (10) EXIT          = Ausgang Menu
21
22
'*******************************************************************************
23
'***                                                                         ***
24
'*******************************************************************************
25
26
' Auswahl Chip
27
$regfile = "attiny2313.dat"
28
$crystal = 8000000
29
$baud = 9600
30
$eeprom
31
32
Config Watchdog = 2048
33
34
35
'PWM und I/O Einstellen
36
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
37
Set Tccr0a.0
38
Set Tccr0a.1
39
Config Portb.3 = Output                                     ' PWM Wandlampe
40
Config Portb.4 = Output                                ' PWM Deckenlampe
41
Config Portd.3 = Output                                   ' Bewegungsled
42
Config Portb.1 = Input                           ' Eingang Bewegungsmelder
43
Config Portb.0 = Input                                  ' Eingang taster
44
45
' Variabele Deklariren
46
Dim A As Byte
47
Dim Daten As String * 20                                 ' RS232 Speicher
48
Dim Wandan As Byte                            ' Max Hochdimm für Wandlampe
49
Dim Deckean As Byte                          ' Max Hochdimm für Deckenlampe
50
Dim Standby As Byte                         ' Standby Dimmwer für Wandlampe
51
Dim Zeit as single                                                                                      ' Arbeitszeit
52
Dim Verzögerung As Word                        ' Zeit bis zum Runterdimmen
53
Dim Resetzeit As Word
54
Dim Geschwindigkeit As Byte                          ' PWM Rampe
55
Dim Lichtan As Bit                                          ' Arbeitsmerker nach einer Bewegung o. Tasterdruck
56
Dim Wand As Byte                                    '  PWM Abbeitswert
57
Dim W As Byte                                          ' PWM Abbeitswert
58
Dim Decke As Byte                                       ' PWM Abbeitswert
59
Dim D As Byte                                           ' PWM Abbeitswert
60
Dim Menu As Byte                                            ' Menumerker
61
Dim M As Byte                                               ' Menuauswahl
62
63
' Lese EEPROM
64
Readeeprom Geschwindigkeit , 1
65
Readeeprom Wandan , 10
66
Readeeprom Deckean , 20
67
Readeeprom Verzögerung , 30
68
Readeeprom Standby , 40
69
70
' Wandlampe in StandBy Hochdimmen
71
For Wand = W To Standby
72
Compare1b = Wand
73
Waitms Geschwindigkeit
74
Next Wand
75
W = Standby
76
77
Zeit = 0
78
Start Watchdog
79
80
Do
81
Reset Watchdog
82
Waitms 10                                        ' Zykluszeit Verlängern
83
84
If Pinb.1 = 1 Or Pinb.0 = 1 Then                    ' Eingänge abfragen
85
    Set Lichtan
86
End If
87
88
If Pinb.1 = 1 Or Pinb.0 = 1 Then                    ' BewegungsLed Schalten
89
    Portd.3 = 1
90
    Else
91
    Portd.3 = 0
92
End If
93
94
If Pinb.1 = 1 Or Pinb.0 = 1 And Lichtan = 1 Then      ' Zeit Zurücksetzen
95
   Zeit = 0
96
End If
97
98
If Lichtan = 1 Then                                ' Start Zeitablauf
99
   Incr Zeit
100
End If
101
102
If Lichtan = 1 Then                           ' Wandlampe Hochdimmen
103
104
   For Wand = W To Wandan
105
   Compare1b = Wand
106
   Waitms Geschwindigkeit
107
      Reset Watchdog
108
   Next Wand
109
   W = Wandan
110
111
112
   For Decke = D To Deckean            'Deckenlampe Hochdimmen
113
   Compare1a = Decke
114
   Waitms Geschwindigkeit
115
      Reset Watchdog
116
   Next Decke
117
   D = Deckean
118
   End If
119
120
If Zeit = Verzögerung Then           ' Vergleich Zeit mit der Verzögerung
121
122
   Reset Lichtan
123
124
   For Decke = D To 0 Step -1               ' Deckenlampe Runterdimmen
125
   Compare1a = Decke
126
   Waitms Geschwindigkeit
127
      Reset Watchdog
128
   Next Decke
129
   D = 0
130
131
132
   For Wand = W To Standby Step -1    ' Wandlampe auf StandBy Runterdimmen
133
   Compare1b = Wand
134
   Waitms Geschwindigkeit
135
      Reset Watchdog
136
   Next Wand
137
   W = Standby
138
   Zeit = 0
139
End If
140
141
Print Zeit
142
143
A = Ischarwaiting()
144
145
If A = 1 Then
146
   A = Waitkey()
147
   Print A
148
End If
149
150
If A = 97 Then                  ' RS 232 Befehl für Lampen einschalten
151
   Set Lichtan
152
   A = 0
153
End If
154
155
If A = 115 Then                       ' RS 232 Befehl für Lampen ausschalten
156
   Resetzeit = Verzögerung - 2
157
   Zeit = Resetzeit
158
   Print Zeit
159
   A = 0
160
End If
161
162
If A = 109 Then                  ' RS 232 Befehl für Menu
163
   A = 0
164
'   Stop Watchdog
165
   Set Menu
166
End If
167
168
Daten = " "
169
170
If Menu = 1 Then
171
' Reset Watchdog
172
 Stop Watchdog
173
   Print Geschwindigkeit
174
   Print Wandan
175
   Print Deckean
176
   Print Verzögerung
177
   Print Standby
178
Stop Watchdog
179
   Input "" , M
180
Stop Watchdog
181
      Select Case M
182
   Case 1 :                              ' Änderung Geschwindigkeit
183
        Readeeprom Geschwindigkeit , 1
184
        Input "W " , Geschwindigkeit
185
        Writeeeprom Geschwindigkeit , 1
186
187
   Case 2 :
188
        Readeeprom Wandan , 10        ' Änderung Maxwert Wandlamppe
189
        Input "W " , Wandan
190
        Writeeeprom Wandan , 10
191
192
   Case 3 :
193
        Readeeprom Deckean , 20         ' Änderung Maxwert Deckenlampe
194
        Input "W " , Deckean
195
        Writeeeprom Deckean , 20
196
197
   Case 4 :
198
        Readeeprom Verzögerung , 30      ' Änderung Verzögerungszeit
199
        Input "W " , Verzögerung
200
        Writeeeprom Verzögerung , 30
201
202
   Case 5 :
203
        Readeeprom Standby , 40   ' Änderung Wandlampe StandBy Wert
204
        Input "W : " , Standby
205
        Writeeeprom Standby , 40
206
207
   Case 10 :                         ' Menu Ausgang
208
        Menu = 0
209
        End Select
210
211
212
End If
213
Loop                                                     'end program

so bald ich die taste m im Terminal drücke löst der Watchdog nach 2 sec 
den Reset aus. wobei ich den Gestopt habe. Ich weiss überhaupt nicht 
mehr weiter.

Ich würde mich sehr freuen auf Hilfe von euch.

mfg

von Andreas K. (derandi)


Lesenswert?

Bei manchen AVR`s kann man in den Fuses einstellen, das der Watchdog 
immer an ist. Da schon nachgesehen?

von BASCOUSER (Gast)


Lesenswert?

Jup.. daran liegt es auch nicht!!

von Lehrmann M. (ubimbo)


Lesenswert?

BASCOUSER schrieb:
> Jup.. daran liegt es auch nicht!!

Da bin ich andere Meinung - also Fuses posten!

von BASCOUSER (Gast)


Angehängte Dateien:

Lesenswert?

Okay Hier .....

von Weingut P. (weinbauer)


Lesenswert?

schau Dir mal die Zeile genau an:

'   Stop Watchdog

Da steht vorne ein " ' ", dadurch ist die Zeile auskommentiert,
der Stop watchdog wird nicht mit kompiliert ;o)

von BASCOUSER (Gast)


Lesenswert?

Fhutdhb Ufzjjuz schrieb:
> schau Dir mal die Zeile genau an:
>
> '   Stop Watchdog
>
> Da steht vorne ein " ' ", dadurch ist die Zeile auskommentiert,
> der Stop watchdog wird nicht mit kompiliert ;o)

BASCOUSER schrieb:
> If Menu = 1 Then
> ' Reset Watchdog
>  Stop Watchdog
>    Print Geschwindigkeit
>    Print Wandan
>    Print Deckean
>    Print Verzögerung
>    Print Standby
> Stop Watchdog
>    Input "" , M
> Stop Watchdog
>       Select Case M
>    Case 1 :

BASCOUSER schrieb:
> If A = 109 Then                  ' RS 232 Befehl für Menu
>    A = 0
> '   Stop Watchdog
>    Set Menu
> End If

da hast du recht aber ich habe den schon mehr als einmal gestopt.
Bitte das nächste mal den ganzen code lesen !!! :-)

Mfg

von Timm T. (Gast)


Lesenswert?

Poste mal das ASM-Listing, was der Compiler erzeugt. Bei einigen AVR 
muss zum Abschalten des WD eine spezielle Sequenz eingehalten werden.

von peterfido (Gast)


Lesenswert?

Wozu so oft den Watchdog abschalten? Einfach testen mit 
ischarwaiting()=1, ob überhaupt ein Zeichen angekommen ist. Wenn ja, 
dann auswerten. Schleifen mit vielen Durchläufen bekommen zwischendurch 
ein Reset Watchdog. Schaltest Du den Watchdog aus, hält input das ganze 
Programm auf. Aber genau da wäre es doch von Vorteil, wenn der Wachhund 
aufpasst, falls keine Daten kommen.

von spess53 (Gast)


Lesenswert?

HI

>Wozu so oft den Watchdog abschalten?

Wozu überhaupt einschalten?

MfG Spess

von Peter D. (peda)


Lesenswert?

Das MCUSR löschen.


Peter

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.