Gast
#2700457
Hallo allerseits ... Ich hab mir mit meinem ATTiny2313 mit dem Timer0 im Phase-Correct-PWM Modus eine Servo-Ansteuerung gebastelt. Soweit funktioniert das auch alles, ich hab ein 8MHz Takt und im Timer einen Prescale von 64 => Ich bekomm alle 4,096ms ein Overflow-Interrupt ... in dem mach ich eigentlich nichts anderes, als den Overflow-Counter zu inkrementieren, damit ich im nächsten Compare-Match die Compare-Match-Value auf 0 setzen kann (=> Dauer-Aus) Dann im 4. Overflow setz ich wieder meine Compare-Match-Value die ich erreichnet hab für die Servo-Position. Das Funktioniert auch wunderbar, solange bis "mehr" code in der Overflow-ISR steht ... Dann passiert nämlich NICHTS mehr ... das aller erste "signal" an den Servo kommt noch richtig, aber danach (nachdem ich die Compare-Match-Value auf 0 gesetzt habe) wird sie nie wieder auf einen anderen Wert gesetzt (habs mir mit nem Oszi angeschaut). Im Simulator hab ich im schlechtesten fall (allso wenn alle if's durchgearbeitet werden etc.) ca. 33 Taktzyklen ergo, falls die ISR auch mit 8MHz "arbeitet", ca. 4µs "bearbeitungszeit" ... Meine Frage ist jetzt, wieso funktioniert es mit weniger code einwandfrei, aber sobald mehr Code in der ISR ist nichtmehr ?! Die Interrupts werden doch eh nacheinander abgearbeitet, da geht doch keiner verloten oder etwa doch?! (Und selbst dann müsste i.wann wieder die Compare-Match-Value gesetzt werden ...) Hier mal die ISR's:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
So wie es jetzt ist, funktioniert es einwandfrei ... will ich jetzt allerdings noch Code zum Tasten entprellen in die Overflow-ISR, funktioniert das PWM nichtmehr ...