Forum: Mikrocontroller und Digitale Elektronik Probleme mit AVR Timer0 Interrupts


von Josef Z. (jozi59)


Angehängte Dateien:

Lesenswert?

Hallo allerseits.

Ich verzweifel hier langsam. Ich verwende einen ATMEGA128L mit internem 
RC-Oszillator (8MHz) auf einem STK500/501, und möchte nun im Zyklus von 
1ms einen Counter hochzählen lassen. Dazu wollte ich Timer0 verwenden, 
weil dieser in der Endapplikation noch frei ist.

Eigentlich sollte ich alles richtig gemacht haben, aber der Counter wird 
zusätzlich zu den 1ms sporaisch um einige Impulse hoch gegezählt. Darauf 
gestoßen bin ich, weil das Timing irgendwie nicht passte. Also habe ich 
mir den Interrupt noch auf einem Pin ausgegeben. Auf den Scope kann ich 
aber nichts genaues erkennen, nur das das Bild etwas unruhig wirkt. 
Deshalb habe ich dem Counter genutzt um einen weiteren Zähler zu 
triggern, den ich dann einfach auf die LEDs am STK500 ausgeben lasse. 
Das erwartete Muster bleibt aus, und die LEDs blinken ziemlich 
chaotisch, also ohne erkennbarer Gesetzmäßigkeit.

Leider habe ich im Moment keinen zweiten Chip, so das ich auch einen 
Defekt nicht ausschließen kann. Das Programm sollte soweit ok sein, 
zumindest finde ich keinen Fehler. Oder gab es irgendwann mal einen 
Maskenfehler mit dem beschriebenen Effekt. Leider habe ich in den 
Erratas nichts gefunden, was als Ursache in Frage kommen könnte.

Hat jemand noch eine Idee? Ich habe auch schon versucht über den TOV0 zu 
gehen, also den Timer nicht im CTC-Mode zu treiben. Es zeigte sich aber 
das selbe Verhalten. Weiter habe ich auch mal den RC-Oszllator auf 1MHz 
gedrosselt und den externen Quartz benutzt, ebenfalls ohne Erfolg. Die 
Versorgungsspannung ist sauber und Störquellen sind auch nicht in der 
Nähe.

Grüße und schon einmal vielen Dank.

von avr (Gast)


Lesenswert?

In deiner Endlosschleife testet das eine IF die ms ab und erhöht
den Zeitzähler.
Die zweite IF testet den Zähler und erhöht die LED-Ausgabe.

Bis der ms-Zähler sich wieder ändert ist dein Vergleich ==255
immer war, LED wird immer erhöht.

Du must deine LED-Ausgabe anderst einbinden!
(Nur wenn sich Zeitzähler geändert hat, } vom 1 IF versetzen).

So, genug Hielfe!

avr

von Josef Z. (jozi59)


Lesenswert?

Danke Dir, das war scheinbar der Fehler.

Wie konnte ich nur so dämlich sein. Jatzt habe ich 6 Stunden ein Phantom 
gejagt.

Grüße

von avr (Gast)


Lesenswert?

Solche Fehler/Phantome hat schon jeder gejagt.
Gut ist, wenn man sie findet, d.h. man eine Erklärung
hat oder kriegt.
Oft ist man aber blind für eigene Fehler, daher wird bei
einer Softwareüberprüfung für Sicherheitsabnahmen von
fremden Programmieren getestet und analysiert.

Schönen Abend noch ;)

avr

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.