Probleme mit Timer 1 im CTC-Modus

Gast #1737297
In einem größeren Projekt soll der Timer 1 des ATmega644(P) jede Sekunde 
einen Interrupt auslösen. Dieser wird auch ausgelöst, nur ungefähr 100x 
in der Sekunde. Der AVR läuft mit 18,432 MHz. Das ganze Projekt ist in 
Assembler verfasst.

1
    ldi     XL,(1<<WGM12)|\
2
               (1<<CS12)|(1<<CS10)      ; Taktvorteiler 1024, CTC-Modus
3
    sts     TCCR1B,XL                   ; Und Taktvorteiler setzen
4
    ldi     XL,(1<<OCIE1A)              ; Interrupt bei Compare
5
    sts     TIMSK1,XL                   ; Und setzen
6
    ldi     XL,LOW(18000)               ; Comparewert für COMP1A mit 18000
7
    sts     OCR1AL,XL
8
    ldi     XH,HIGH(18000)
9
    sts     OCR1AH,XL

Ich suche nun schon das halbe Wochenende :(
Gast
1. Registerverwechslung, wie Peter schrieb.
2. In den Datenblättern steht außerdem, daß bei 16-Bit-Registern
z.B. das OCR1AH,L das High-Register zuerst zu laden ist, dann das
Low-Register. Hat mit der internen Registerstruktur zu tun.
Achtung beim Auslesen ist das genau umgekehrt! Also erst Low-Teil,
dann High-Teil, (siehe ADC)

Schönen Sonntag noch, sogar mit Sonne.......
Gast
Hallo,

wenn die Zeit wirklich genau 1s sein soll, muss diese Zahl etwas anders 
lauten. Statt

> ldi     XL,LOW(18000)               ; Comparewert für COMP1A mit 18000

muss es sein:

>> ldi     XL,LOW(17999)               ; Comparewert für COMP1A mit 18000

(entsprechend für den anderen Wert).

Bei einem CTC-Zählwert der Grösse X muss in die Register der Wert X-1 
geschrieben werden (da der Zähler bei Null beginnt).
Gast
Hi

>Er ist zwar jetzt langsamer aber noch sehr weit von 1s entfernt.

Der Wert muss auch $47FF (18431) sein. Ansonsten Fuses (z.B. CKDIV8) 
überprüfen.

MfG Spess
Gast
spess53 schrieb:
> Der Wert muss auch $47FF (18431) sein.

Bei dem angegebenen Takt von 18,432 MHz und dem Prescaler von 1024 komme 
ich auf 18000 (respektive 17999) als Zählwert ...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.