Forum: Mikrocontroller und Digitale Elektronik Reset-Problem mit AVR Attiny13v, Assembler


von Kai W. (chilibit)



Lesenswert?

Hallo zusammen,

ich habe ein Problem mit scheinbar zufälligen Resets bei meiner 
Lüfterreglerschaltung (Attiny13V).

Hintergrund:
Die Schaltung hat vor ein paar Jahren ein Freund für mich angefertigt - 
mit seinem Assembler-code lief sie problemlos. Allerdings war die 
Lüfterdrehzahl starr an Temperaturintervalle gebunden und immer an. Da 
ich über gute passive Kühler(Wasserkühlung) verfüge, soll die Lärmquelle 
in Form der Radiatorlüfter im Officebetrieb abgeschaltet werden. Ich 
habe meinen eigenen Code geschrieben, allerdings Codefragmente 
(PWM-Signal für den Motortreiber (L293D) und die Verwendung des 
AD-Wandlers (Temperaturen von den NTC-Widerständen) übernommen, da ich 
bei diesen noch nicht so ganz durchblicke. Ziel dieser ganzen Aktion ist 
es, sich in die Mikrocontrollerprogrammierung einzuarbeiten um später 
noch schönere Projekte zu realisieren - daher lese ich auch fleißig in 
Euren Tutorials, Datenblättern, Codetabellen etc. Aber jetzt stehe ich 
vor einem Rätzel an dem ich schon zwei Wochen herumknabbere. Für Eure 
Hilfe bin ich Euch schon vorab sehr dankbar. :-)

Meine Vermutung:
Ich habe irgendwo im Code einen Anfängerfehler versteckt, der zwar nicht 
die ordnungsgemäße Programmfunktion verhindert, aber bei bestimmten 
Zuständen zu einem fatalen Error und damit zu einem Reset führt. Als 
wesentliche Prinzpänderung gegenüber dem alten Programm werden die 
Lüfter nun ausgeschaltet, indem ich den PWM-Generator vom Pin abkopple 
und auf 0 setze (siehe PWMAus:). Eigentlich funktioniert das sehr gut, 
aber womöglich habe ich da etwas falsch gemacht und der Fehler zeigt 
sich nur unter bestimmten Umständen. Auch bei "PWMWiederAn:" könnte der 
Fehler liegen. Da der "Piep"Aufruf/-Code (Eine vorübergehende "1" an 
PB2) irgendwie einen Einfluss hat, frage ich mich, ob die Funktion 
"ADC1" von PB2 irgendwie eine Rolle spielt.

Problembeschreibung:
Eigentlich funktioniert das Programm wie gewünscht, wären da nicht die 
Resets:
- Nach "Strom an" (Stecker einstecken oder PC anschalten) fällt er 
direkt in eine scheinbar endlose Resetschleife. Mit dem "Piep"-Code am 
Ende des "Anfang"-Blockes schafft er es zuverlässig in die Hauptschleife 
("Hauptregler"). Ohne diesen "Piep" kam der Reset irgendwo nach der 
Tasterabfrage (in "Anfang"). Das weiß ich, da durch Tastendruck der 
Regler in den Zustand "Manuelles Vollgas" ("SchleifeManuell") und von 
dort in die "Hauptregler"-Schleife gelangen konnte und dort vorerst 
stabil war.

- Ist der Regler einmal in der Hauptschleife ("Hauptregler") angekommen 
verbleibt er dort scheinbar stabil - bis er irgendwann (z.B.30 Min.) 
wieder in die Reset-Endlosschleife fällt (seit dem neuen Anfangs-Piep 
nun keine Endlosschleife mehr). Relativ sicher tritt dies bei 
Wassertemperaturen über 31°C auf, also wenn die "32°C" (Zähler H +3)- 
oder "35°C"(Zähler H +4)-Verzweigungen aktiv sind und die Lüfter 
anfahren. Er lässt sich dann per Tastendruck über "Manuelles Vollgas" 
("SchleifeManuell") wieder in die Hauptschleife ("Hauptregler") 
zurückführen und verbleibt dort dann auch scheinbar stabil bis zum 
nächsten Aussetzer. Mit dem zusätzlichen "Piep" am Ende von "Anfang:" 
fängt er sich nun aber direkt wieder. Ein weiterer Reset trat dann bei 
der Unterschreitung von ~30°C auf. Ich tippe daher auf "PWMAus:" oder 
"PWMWiederAn:" als Fehlerquellen.


Gegenmaßnahmen:
- Ich hab versucht, heraus zu finden, an welcher Stelle es zum reset 
kommt. Dazu habe ich "Piep"-Signale in den Code eingebaut. Verrückter 
weise lief er mit den "Piep" scheinbar stabil (länger als 10 Min. habe 
ich das Gepiepe nicht ausgehalten). Ohne die Piep-Aufrufe im Code blieb 
er dann direkt nach dem Start in der Reset-Endlosschleife hängen.
- Nach Durchlesen Eurer Checkliste habe ich dann den Resetpin, der zuvor 
unbeschaltet war über einen 4,7k-Widerstand mit Vcc und per 
100N-Keramikkondensator mit GND verbunden - hat nix gebracht.
- Ich habe auch mal den Watchdog-Reset-Befehl ("WDR") im Code verstreut 
- da ich den aber soweit ich weiß eh nicht angeschaltet habe, brachte es 
auch nix.


Die Fakten:
Ziel: Lüfterregler für Wakü-Radiator am PC
Controller: Attiny13V
Motortreiber: L293D
Stromversorgung: Netzteil des laufenden PCs
Schaltpläne:
1. Schaltplan
2. Platinenlayout
Programmierung: AVR-Studio 5.1, mySmartUSB light, "verify" bei 
Programmierung eingeschaltet, separate Programmierplatine, also keine 
ISP

Fusebits:
Selfprgen
Bodlevel: 2V7
Spien
SUT_CKSEL: Intrcosc_128kHz_14CK_64MS
(damit hatte das alte Programm jahrelang funktioniert)

Pinbelegung:
PB0: Motortreiber
PB1: Taster
PB2: Piepser, LED
PB3: NTC 2
PB4: NTC 1
PB5: - (über 4,7K auf VCC und 100N auf GND)

Programmüberblick:

Ziel des Programms:
Je Programmzyklus wird die Variable "H" abhängig von der 
Temperaturmessung um +0/+2/+3/+4/+50 erhöht und dann immer um -3 
verringert. Unter H=10 werden die Lüfter abgeschaltet. Für H>10 wird 
sein Wert zur Erzeugung eines PWM-Signals verwendet, das über den 
Motortreiber L293D die Lüftermotoren steuert. Die Kühlung soll bei 
Überschreiten einer Temperaturgrenze langsam anlaufen (langsam genügt in 
der Regel) und sich dann auf der benötigten Drehzahl einpendeln. Bei 
unterschreiten der Temperaturgrenze sollen die Lüfter langsam runter 
fahren und wenn möglich komplett aus gehen (normaler Officebetrieb).


Variablen, Konstanten

Anfang:
Stackpointer initialisieren
Lüfter 100%
2 Pieps
Tasterabfrage-> Manuelle Steuerung (Lüfter 100%)
PWM-Chip INITIALISIERUNG
zu Testzwecken: Piep (mit dem klappt's - warum auch immer)

Hauptregler:
TempMessung an NTC_1 (AD-Wandler)
Gemäß Temp-wert 6 Verzweigungen
->Alarm
-> Zählvariable "H" +0/+2/+3/+4/+50
jeweils Test ob der Wert 250 überschritten würde -> H=250

PWMsetzen:
H<10 -> PWMAus
D=0 -> PWMWiederAn
sonst D=D+H

Hverringern:
H=H-3
wenn H<0 werden würde-> HaufNull:

Sicherheit:
TempMessung an NTC_2 -> bei zugroßem oder zukleinem Wert -> Alarm

Tasterabfrage
Taster->SchleifeManuell

WarteEinWenig:
-> Wartenschleife

==> wider zum "Hauptregler"

Unterprogramme:
Alarm
Warten
AD-Wandler
SchleifeManuell
Pieptoene zu Diagnosezwecken



Programmcode:
1
 .include "tn13def.inc"
2
3
  .def   A      = r16    ;DA Wandlung  ok
4
  .def   B    = r17    ;Faktor      Sicherheit,Hauptregler wozu ?
5
  .def   C      = r18    ;Alarm Temp    Sicherheit,Hauptregler wozu ?
6
  .def   D    = r19    ;PWM Signal    Alarm
7
  .def   H    = r20    ;Zähler      Hauptregler
8
  .def   I      = r21    ;Änderungsdifferenz für Zähler
9
  .def   J    = r22    ;temp.Variable  Hauptregler
10
  ;r25, r26    ;temp.Variable  Warten(r25)
11
12
13
 
14
  ;Stackpointer initialisieren
15
  ldi r16, RAMEND   ;Die Adresse der letzten Stelle im RAM in r16 laden
16
  out SPL, r16      ;Die Adresse in das Register SPL ausgeben 
17
  clr  r16
18
19
        rjmp Anfang
20
21
Anfang:
22
    sbi    ddrb,0    ; PB0->Ausgang
23
    sbi    portb,0    ; Lüfter 100%
24
25
    cbi    ddrb,3    ; PB3(NTC2)->Eingang
26
    cbi    ddrb,4    ; PB4(NTC1)->Eingang
27
28
    ldi    r25,1    ; Wartenzähler auf _ x 188ms @1MHz  
29
    rcall  Warten
30
31
    sbi    ddrb,2       ;Port2 als Ausgang
32
    sbi    portb,2    ;Doppel-Pieps
33
    ldi    r25,25    ; Dauer des Pieps
34
    rcall  Warten
35
    cbi    portb,2
36
    ldi    r25,250    ; Pausendauer
37
    rcall  Warten
38
    sbi    portb,2
39
    ldi    r25,50    ; Dauer des Pieps
40
    rcall  Warten
41
    cbi    portb,2
42
    ldi    r25,250    ; Pausendauer
43
    rcall  Warten    ; Ende Doppel-Pieps
44
45
46
;MANUELLE STEUERUNG
47
    cbi    ddrb,1        ; Wenn Schalter bei Systemstart gedrückt wird 
48
    sbic   pinb,1        ;   dann -> Lüfter dauerhaft auf Vollgas, bis wieder umgeschaltet wird
49
    rjmp   SchleifeManuell
50
51
52
;PWM-Chip INITIALISIERUNG
53
        sbi    ddrb,0     ; PB0->Ausgang
54
        ldi    D,0       ;PWM initialisieren
55
        out    OCR0A,D 
56
        ldi    D, 0x83    ;nur Kanal A (0x83h=100 0011b,"1"->COM0A1, WGM01, WGM00)
57
        out    TCCR0A,D
58
        ldi    D, 0x02    ;(0x02h=0000 0010b, "1"->CS01, Clock Source)
59
        out    TCCR0B,D
60
        ldi    D,2        ;Start mit Vorteiler / 8
61
        out    TCCR0B,D
62
63
64
;zu Testzwecken: Piep
65
    sbi    ddrb,2       ;Port2 als Ausgang
66
    sbi    portb,2    ;Doppel-Pieps
67
    ldi    r25,25    ; Dauer des Pieps
68
    rcall  Warten
69
    cbi    portb,2
70
71
72
    rjmp   Hauptregler
73
; --------------------
74
;Hauptprogramm
75
76
Hauptregler:
77
78
;DA INITIALISIERUNG PB4
79
 
80
  ;rcall  Piep1
81
82
    ldi    A,2        ;ADC2 an PB4
83
    rcall  AdcInit
84
85
    ldi    B,0
86
    ldi    C,0
87
    rcall  RdADC
88
   
89
    ldi    A,2        ;Neue Messung: TempWert -> A
90
    rcall  RdADC
91
    sbi   ddrb,2
92
    cbi   portb,2  ;Pieps-Signal aus
93
94
    ldi    C,30       ;Vergleichswert für Sensorausfall
95
    cp     A,C        ;Vergleich von aktuellem Wert(A) mit Sensorausfall(C)
96
    brlo   AlarmLink ;Alarm wenn A kleiner als C
97
98
    ;T< 29°C
99
    ldi    C,140      ;Vergleichswert für T < 29°C
100
    cp     A,C        ;Vergleich von aktuellem Wert A mit Vorgabe C
101
    brlo   HplusNull  ;Springe wenn kleiner
102
103
    ;T< 30°C
104
    ldi    C,143      ;Vergleichswert für T < 30°C
105
    cp     A,C        ;Vergleich von aktuellem Wert A mit Vorgabe C
106
    brlo   HplusZwei  ;Springe wenn kleiner
107
108
    ;T< 32°C
109
    ldi    C,148      ;Vergleichswert für T < 32°C
110
    cp     A,C        ;Vergleich von aktuellem Wert A mit Vorgabe C
111
    brlo   HplusDrei  ;Springe wenn kleiner
112
113
    ;T< 35°C
114
    ldi    C,154      ;Vergleichswert für T < 35°C
115
    cp     A,C        ;Vergleich von aktuellem Wert A mit Vorgabe C
116
    brlo   HplusVier  ;Springe wenn kleiner
117
118
    ;T< 38°C
119
    ldi    C,174      ;Vergleichswert für T < 38°C
120
    cp     A,C        ;Vergleich von aktuellem Wert A mit Vorgabe C
121
    brlo   HplusFufzig  ;Springe wenn kleiner
122
123
    rjmp   HplusVier  ; falls Temp zu hoch oder Probs mit Zuordnung
124
    
125
    
126
127
AlarmLink:  ; wegen >100 Zeilen Abstand
128
    rjmp  Alarm
129
130
HplusNull:
131
    ;ldi    I,0        ;Änderungsdifferenz für Zähler H
132
    ;ldi   J,250    ; Test ob Summe größer 250 werden wird, dann -> HaufVoll (H=245)
133
    ;SUB   J,I
134
    ;CP   J,H
135
    ;BRLO   HaufVoll
136
    ;ADD   H,I    ;H=H+I
137
  ;rcall  Piep1
138
    RJMP PWMsetzen
139
140
141
HplusZwei:
142
    ldi    I,2        ;Änderungsdifferenz für Zähler H
143
    ldi   J,250    ; Test ob Summe größer 250 werden wird, dann -> HaufVoll (H=245)
144
    SUB   J,I
145
    CP   J,H
146
    BRLO   HaufVoll
147
    ADD   H,I    ;H=H+I
148
  ;rcall  Piep2      
149
    RJMP PWMsetzen
150
151
152
HplusDrei:
153
    ldi    I,3        ;Änderungsdifferenz für Zähler H
154
    ldi   J,250    ; Test ob Summe größer 250 werden wird, dann -> HaufVoll (H=245)
155
    SUB   J,I
156
    CP   J,H
157
    BRLO   HaufVoll
158
    ADD   H,I    ;H=H+I
159
  ;rcall  Piep3        
160
    RJMP PWMsetzen
161
162
163
HplusVier:
164
    ldi    I,4        ;Änderungsdifferenz für Zähler H
165
    ldi   J,250    ; Test ob Summe größer 250 werden wird, dann -> HaufVoll (H=245)
166
    SUB   J,I
167
    CP   J,H
168
    BRLO   HaufVoll
169
    ADD   H,I    ;H=H+I
170
  ;rcall  Piep4
171
    RJMP PWMsetzen
172
173
HplusFufzig:
174
    ldi    I,50        ;Änderungsdifferenz für Zähler H
175
    ldi   J,250    ; Test ob Summe größer 250 werden wird, dann -> HaufVoll (H=245)
176
    SUB   J,I
177
    CP   J,H
178
    BRLO   HaufVoll
179
    ADD   H,I    ;H=H+I
180
  rcall  PiepLang    ; Piep zu Testzwecken
181
    RJMP PWMsetzen
182
183
184
HaufVoll:
185
    ldi  H,250
186
    RJMP PWMsetzen
187
188
189
PWMsetzen:          ; H->D->PWM
190
  ;rcall  Piep2
191
    cpi   H,10      
192
    brlo   PWMAus      ; wenn H<10, dann -> PWMAus
193
    TST   D        ; Test, ob D=<0
194
    breq   PWMWiederAn
195
    mov   D,H
196
    out    OCR0A,D
197
    rjmp   Hverringern
198
199
PWMWiederAn:
200
    ;PWM-Chip INITIALISIERUNG
201
    sbi    ddrb,0     ;Datenrichtung PB0-> Ausgang
202
        ldi    D,0       ;PWM initialisieren
203
        out    OCR0A,D 
204
        ldi    D, 0x83    ;nur Kanal A (0x83h=100 0011b,"1"->COM0A1, WGM01, WGM00)
205
        out    TCCR0A,D
206
        ldi    D, 0x02    ;(0x02h=0000 0010b, "1"->CS01, Clock Source)
207
        out    TCCR0B,D
208
        ldi    D,2        ;Start mit Vorteiler / 8
209
        out    TCCR0B,D
210
    ;sbi   ddrb,0      ; Beginn Reaktivierung PWM - vorerst aber vorsichtshalber die komplette Initialisierung
211
    ;ldi   D,0x83
212
    ;out   TCCR0A,D    ; 1000 0011, COM0A1,WGM00,WGM01 auf 1 -> OC0A wieder am PWM angeschlossen !
213
    clr   D
214
    mov   D,H
215
    out    OCR0A,D
216
    rjmp   Hverringern
217
    
218
PWMAus:
219
    clr   D
220
    out    OCR0A,D
221
    ldi   D,0x03
222
    out   TCCR0A,D    ; 0000 0011, COM0A 0&1 auf 0 -> OC0A vom PWM abgetrennt !
223
    sbi   ddrb,0      ; PB0 =Ausgang 
224
    cbi   portb,0    ; PB0 auf 0 setzen
225
    clr   D
226
    rjmp   Hverringern
227
228
229
230
Hverringern:
231
  ;rcall  Piep2    
232
    tst   H      ; test ob H=<0
233
    breq   HaufNull
234
    ldi   I,3
235
    CP   H,I    ; Test ob Differenz kleiner 0 werden wird, dann -> HaufNull (H=0)
236
    BRLO   HaufNull
237
    SUB   H,I    ; H=H-I
238
    rjmp   Sicherheit
239
240
HaufNull:
241
    clr   H        ;  H=0
242
    rjmp   Sicherheit
243
244
245
Sicherheit:    ; Schutz gegen Sensorausfall (T_min <Temp2< T_max sonst Alarm)
246
;DA INITIALISIERUNG PB3
247
  ;rcall  Piep3 
248
    ldi    A,3        ;ADC3 an PB3
249
    rcall  AdcInit
250
251
    ldi    B,0
252
    ldi    C,0
253
    rcall  RdADC
254
255
    ldi    A,3        ;Neue Messung
256
    rcall  RdADC
257
258
    ldi    C,30      ;Vergleichswert für Sensor fehlt, T<20°C
259
    cp     A,C        ;Vergleich von aktuellem Wert mit lamgsam
260
    brlo   Alarm    ;kleiner
261
262
    ldi    C,175      ;Vergleichswert für Alarm, T_max=~38°C
263
    cp     A,C        ;Vergleich von aktuellem Wert mit Alarm
264
    brsh   Alarm    ;größer als
265
266
    rjmp Tasterabfrage
267
268
269
270
;Tasterabfrage ob MANUELLE STEUERUNG erfolgen soll (Vollgas)
271
Tasterabfrage:
272
   cbi  ddrb,1        
273
   sbic   pinb,1        ; Wenn Schalter gedrückt wird 
274
   rjmp   SchleifeManuell    ;   dann -> Lüfter auf Vollgas, bis wieder umgeschaltet wird
275
   rjmp WarteEinWenig
276
277
    
278
WarteEinWenig:        ; Warten, damit Regelung langsam erfolgt
279
  ;rcall  Piep4
280
    ldi  r25,250    
281
    rcall  Warten
282
    rjmp  Hauptregler
283
    
284
285
286
;UNTERPROGRAMME------------------------------------------------------------------
287
288
Alarm:
289
      sbi   ddrb,0      ; PWM-Reaktivierung, notwendig falls PWM abgeschaltet
290
      ldi   D,0x83
291
      out   TCCR0A,D    ; 1000 0011, COM0A1,WGM00,WGM01 auf 1 -> OC0A wieder am PWM angeschlossen !
292
293
        ldi    D,250    ; Auswahl PWM-Verhältnis
294
        out    OCR0A,D
295
296
        sbi    ddrb,2       ;Pieps
297
        sbi    portb,2
298
       rjmp    Sicherheit
299
300
301
Warten:          ; zählt um (r25 x r26) herunter, dann Rücksprung
302
303
Warten1:                ;äußere Schleife
304
      Ldi   r26,250
305
Warten2:                ;innere Schleife
306
      dec   r26
307
      brne  Warten2    ; Springt solange r26>0
308
      dec   r25
309
      brne  Warten1    
310
      ret               ;Rücksprung
311
312
313
;AD-Wandler
314
315
AdcInit: 
316
      out   ADCSRA,A  
317
      sbi   ADCSRA,ADEN ;AD einschalten 
318
      ret
319
320
RdADC:
321
      out   ADMUX,A
322
      sbi   ADMUX,ADLAR ;Left adjust
323
      sbi   ADCSRA,ADSC ;Wandlung starten
324
ADrdy:
325
      sbic  ADCSRA,ADSC   
326
      rjmp  ADrdy
327
      sbi   ADCSRA,ADSC
328
ADrdyb:
329
      sbic  ADCSRA,ADSC   
330
      rjmp  ADrdyb
331
      in    A,ADCH
332
      ret
333
334
;Manuelles Vollgas
335
SchleifeManuell:
336
337
    sbi  ddrb,0            ; Lüfter auf Vollgas
338
    sbi  portb,0            
339
340
    sbi    ddrb,2        ;Port2 als Ausgang
341
    sbi    portb,2        ;Pieps
342
    ldi    r25,25        ; Dauer des Pieps
343
    rcall  Warten
344
    cbi    portb,2
345
    ldi    r25,250        ; Pausendauer
346
    rcall  Warten
347
    ldi   r25,250        ; Wartenzähler
348
    rcall  Warten        ; Warten, damit Schalter wieder losgelassen werden kann
349
    rjmp  SchleifeManuB
350
351
SchleifeManuB:    
352
    cbi    ddrb,1        ; Wenn Schalter gedrückt wird 
353
    sbis   pinb,1        ; wird der nächste rjmp übersprungen -> Hauptregler
354
    rjmp  SchleifeManuB    ; sonst Endlosschleife
355
    
356
    sbi    ddrb,2        ;Warten, damit Taster wieder losgelassen werden kann
357
    sbi    portb,2        ;Pieps
358
    ldi    r25,25        ; Wartenzähler      
359
    rcall  Warten
360
    cbi    portb,2
361
    ldi    r25,250        ; Wartenzähler      
362
    rcall  Warten
363
    ldi   r25,250        ; Wartenzähler auf (~1 Sek @ 2MHz)
364
      rcall  Warten         
365
366
    rjmp  Hauptregler
367
368
369
;Pieptoene zu Diagnosezwecken
370
Piep1:
371
    sbi    ddrb,2       ;Port2 als Ausgang
372
    sbi    portb,2    ;Doppel-Pieps
373
    ldi    r25,25    ; Wartenzähler auf       
374
    rcall  Warten
375
    cbi    portb,2
376
    ldi    r25,200    ; Wartenzähler auf       
377
    rcall  Warten
378
    ret
379
380
Piep2:
381
    sbi    ddrb,2       ;Port2 als Ausgang
382
    sbi    portb,2    ;Doppel-Pieps
383
    ldi    r25,25    ; Wartenzähler auf       
384
    rcall  Warten
385
    cbi    portb,2
386
    ldi    r25,100    ; Wartenzähler auf       
387
    rcall  Warten
388
     sbi    ddrb,2       ;Port2 als Ausgang
389
    sbi    portb,2    ;Doppel-Pieps
390
    ldi    r25,25    ; Wartenzähler auf       
391
    rcall  Warten
392
    cbi    portb,2
393
    ldi    r25,200    ; Wartenzähler auf       
394
    rcall  Warten
395
    ret
396
397
Piep3:
398
    sbi    ddrb,2       ;Port2 als Ausgang
399
    sbi    portb,2    ;Doppel-Pieps
400
    ldi    r25,25    ; Wartenzähler auf       
401
    rcall  Warten
402
    cbi    portb,2
403
    ldi    r25,100    ; Wartenzähler auf       
404
    rcall  Warten
405
      sbi    ddrb,2       ;Port2 als Ausgang
406
    sbi    portb,2    ;Doppel-Pieps
407
    ldi    r25,25    ; Wartenzähler auf       
408
    rcall  Warten
409
    cbi    portb,2
410
    ldi    r25,100    ; Wartenzähler auf       
411
    rcall  Warten
412
      sbi    ddrb,2       ;Port2 als Ausgang
413
    sbi    portb,2    ;Doppel-Pieps
414
    ldi    r25,25    ; Wartenzähler auf       
415
    rcall  Warten
416
    cbi    portb,2
417
    ldi    r25,200    ; Wartenzähler auf       
418
    rcall  Warten
419
    ret
420
421
Piep4:
422
            sbi    ddrb,2       ;Port2 als Ausgang
423
    sbi    portb,2    ;Doppel-Pieps
424
    ldi    r25,25    ; Wartenzähler auf       
425
    rcall  Warten
426
    cbi    portb,2
427
    ldi    r25,100    ; Wartenzähler auf       
428
    rcall  Warten
429
      sbi    ddrb,2       ;Port2 als Ausgang
430
    sbi    portb,2    ;Doppel-Pieps
431
    ldi    r25,25    ; Wartenzähler auf       
432
    rcall  Warten
433
    cbi    portb,2
434
    ldi    r25,100    ; Wartenzähler auf       
435
    rcall  Warten
436
      sbi    ddrb,2       ;Port2 als Ausgang
437
    sbi    portb,2    ;Doppel-Pieps
438
    ldi    r25,25    ; Wartenzähler auf       
439
    rcall  Warten
440
    cbi    portb,2
441
    ldi    r25,100    ; Wartenzähler auf       
442
    rcall  Warten
443
      sbi    ddrb,2       ;Port2 als Ausgang
444
    sbi    portb,2    ;Doppel-Pieps
445
    ldi    r25,25    ; Wartenzähler auf       
446
    rcall  Warten
447
    cbi    portb,2
448
    ldi    r25,200    ; Wartenzähler auf       
449
    rcall  Warten    
450
    ret
451
452
453
PiepLang:
454
      sbi    ddrb,2       ;Port2 als Ausgang
455
    sbi    portb,2    ;Doppel-Pieps
456
    ldi    r25,100    ; Wartenzähler auf       
457
    rcall  Warten
458
    cbi    portb,2
459
    ldi    r25,200    ; Wartenzähler auf       
460
    rcall  Warten    
461
    ret

Vielen Dank (auch fürs Lesen ;-) ,
Kai W.

von Qwerty (Gast)


Lesenswert?

Ich sehe keinen Blockkondensator 100nF zwischen GND und Vcc beim 
Attiny13. Parallel könnte man zur Sicherheit auch noch z.B. 220µF 
schalten…

von Jürgen (Gast)


Lesenswert?

1. C & R am Reset-Eingang wegnehmen
2. 100 nF zwischen VCC & GND

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Jürgen schrieb:
> 1. C & R am Reset-Eingang wegnehmen

Was meinst du soll das bewirken?

von Kai W. (chilibit)


Lesenswert?

Danke für den Hinweis mit dem 100nF-Blockkondensator am Attiny. Damit 
läuft er jetzt auch ohne den extra "Piep" in "Anfang:" stabil und es gab 
bisher noch keine Resets. Ich dachte, das Netzteil vom PC würde 
Spannungsschwankungen verhinden. Zumal die Schaltung jahrelang 
problemlos gelaufen war. Aber anscheinend hat das neu hinzu gekommene 
An- und Abschalten der Lüfter durch Spannungsschwankungen die Resets 
bewirkt.

Ich werde es noch weiter beobachten, aber anscheinend ist mein Problem 
gelöst - vielen Dank für die schnelle Hilfe ! :-)

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.