mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Timer 1 im CTC-Modus


Autor: Dagobert (Gast)
Datum:

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

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

Ich suche nun schon das halbe Wochenende :(

Autor: Peter Roth (gelb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine letzten beiden Zeilen:

> ldi     XH,HIGH(18000)
> sts     OCR1AH,XL

Merkst du was?

Grüße, Peter

Autor: Guter Rat (Gast)
Datum:

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

Autor: AVRuser (Gast)
Datum:

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

Autor: Dagobert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank. Das wars aber leider noch nicht. Er ist zwar jetzt 
langsamer aber noch sehr weit von 1s entfernt.

Autor: Dagobert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1000 Dank Leute. Das war es. H-Wert zuerst geladen und schon wird die 
Laufzeit sauber hochgezählt :).

Gehe jetzt erst einmal Sommer genießen.

Autor: spess53 (Gast)
Datum:

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

Autor: AVRuser (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Hast Recht. Wie weit weicht denn deine Zeit ab?

MfG Spess

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.