Probleme mit AVR Timer0 Interrupts

OP #1416866
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.
Angehängte Dateien:
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.