www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit AVR Timer0 Interrupts


Autor: Josef Z. (jozi59)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Josef Z. (jozi59)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.