mikrocontroller.net

Forum: Compiler & IDEs Timer0 Asyncron Overflow Interrupt kommt nicht (Mega128)


Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Anbei ein Projekt von mir, mit einem Problem, was mich ca. 2 Tage 
gekostet hat.

Das ganze läuft auf einem ATMega 128 und einem Uhrenquartz für Timer 0. 
Ich nutze  gcc 4.3.0 mit Eclipse.

Das Problem war, das ab und zu der Overflow Interrupt für Timer 0 nicht 
kam. Im Datasheet für den Mega 128 habe ich im Errata für den Timer 2 
dann folgendes gefunden:

>2. Interrupts may be lost when writing the timer registers in the
>asynchronous timer
>If one of the timer registers which is synchronized to the asynchronous
>timer2 clock is written
>in the cycle before a overflow interrupt occurs, the interrupt may be
>lost.
>Problem Fix/Workaround
>Always check that the Timer2 Timer/Counter register, TCNT2, does not have
>the value 0xFF
>before writing the Timer2 Control Register, TCCR2, or Output Compare
>Register, OCR2

Nachgedacht --> Timer 0 läuft ja auch Asynchron!

Dann das Projekt welche im Anhang ist zusamengebaut, und siehe da, der 
Overflow wird NIE ausgeführt wenn der Timer auf 0xFF steht und in OCR0 
was rein geschrieben wird(egal was!). --> die LED die bei mir an PORT B 
7 ist Blinkt nicht!

Bei mir hat sich das nur selten geäußert, das OCR0 immer mit +=9 
verwendet wurde.Nur dann halt wenn Timer 0 auf 0xff stand

Will das hier schreiben, falls einer das gleiche Problem mal haben 
sollte. In meine Projekt hab ich mir nen Workaround gebastelt, läuft 
jetzt zuverlässig!

Auch eine Frage: kann mann sich irgendwie an Atmel wenden oder kennt da 
jemand einen, das die das eventuel ins Errata aufnehmen?

Gruß Stefan

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stefan (Gast)

>Das ganze läuft auf einem ATMega 128 und einem Uhrenquartz für Timer 0.

Ist irgendwie doof, dass Atmel es nicht geschafft hat, die Module der 
AVRs einheitlich zu gestalten. Bei den meisten AVRs ist nämlich der 
Timer 2 asynchron taktbar.

>sollte. In meine Projekt hab ich mir nen Workaround gebastelt, läuft
>jetzt zuverlässig!

Und wo ist der Workaround? In deinem Projekt im Anhang eher nicht.
Ausserdem überfährst du den Quarz immer noch.

1) er muss erst sauer anschwingen, so lange sollte man warten.
2) Du musst nach dem letzten Zugriff und Freischalten der Interrupts 
noch warten, bis der Zugriff asynchron beendet wird, sonst kann es 
passieren, dass der Interrupt nicht aktiv wird, vor allem bei Verwednung 
der Sleep Modes.

Siehe auch

http://www.mikrocontroller.net/articles/AVR_-_Die_...

, so ist es wasserdicht.

>Auch eine Frage: kann mann sich irgendwie an Atmel wenden oder kennt da
>jemand einen, das die das eventuel ins Errata aufnehmen?

Wozu? Es steht doch im Datenblatt.

MfG
Falk

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:
>>2. Interrupts may be lost when writing the timer registers in the
>>asynchronous timer
>>If one of the timer registers which is synchronized to the asynchronous
>>timer2 clock is written
>>in the cycle before a overflow interrupt occurs, the interrupt may be
>>lost.
>>Problem Fix/Workaround
>>Always check that the Timer2 Timer/Counter register, TCNT2, does not have
>>the value 0xFF
>>before writing the Timer2 Control Register, TCCR2, or Output Compare
>>Register, OCR2

Ja, typischer Copy&Paste-Fehler, findet man häufig in den 
AVR-Datenblättern.
Man muß immer ein bischen mitdenken.

Bei vielen AVRs ist T2 der mit dem Uhrenquarz, nur beim ATmega128 ist es 
T0.
Aber aufpassen, beim Nachfolger ATmega1281 ist es wieder T2!


Peter

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.