Grundlagen AVT Rimer

Gast #45519
Hi Leuts,

ich habe hier mal eine grundsaetzliche Frage zu den AVR-Timern, genauer
dem Timer 0.
Vielleicht bin ich ja zu doof den Taschenrechner zu bedienen, aber ich
versuche einfach nur alle 0.5 ms einen Overflow Interrupt zu erzeugen.
Als hardware setze ich das STK 500 mit einer eingestellten Taktfrequenz
von 3.69 MHz ein.
Ich moechte einen Vorteiler von 8 und dabei 231 Counts zaehlen, das
muesste doch dann alle 0.500 ms einen Overflow erzeugen

Beim Initialisieren mache ich folgendes:
  ldi TIME, 256-231
  out TCNT0, TIME

  ldi TEMP, (1<<TOIE0)
  out TIMSK, TEMP

  ldi TEMP, 2
  out TCCR0, TEMP


In der Interruptroutine zaehle ich dann nochmals bis 2000 und toggle
dann eine LED.

  ; Counter neu laden
  out TCNT0, TIME

  dec Count
  cp Count, zero
  brne n1

  ldi Count, 2000
        ; Toggle LED

n1:     reti


2000 * 0.5 ms = 1 S
Aber die LED flackert so schnell, dass dies kaum sichtbar ist...

Vielleicht kann mir mal einer sagen wo ich da einen Denkfehler habe.
Danke


Greetings
Karlheinz
Gast #45521
im einzelnen habe ich es mir angeschaut, aber so wie es aussiehtist
"Count" eine 8bit-Variable, die kann man nicht mit 2000 laden,
sondern max. 255. Der Assembler lädt wahrscheinlich mit 0xd0 (2000 dez=
7d0hex), so dass du ca. auf 100ms kommst.
Gast #45523
wie kommst du darauf, dass das ein 16bit-Register sein könnte? Ist es
jedenfalls nicht.
Und noch was (ist nicht der Fehler, aber unnötig):
cli/sei brauchst du in der ISR nicht (wird automatisch ausgeführt)
Gast #45524
Wie oben, r20 ist 8Bit Register wie andere Register.
Deine Sprungmarke funktioniert nicht aufgrund des fehlenden
Stackpointers, das muss hinter dem Reset so heissen:

        Reset:
  ldi r21, low(RAMEND)
  out SPL, r21
  ldi r21,high(RAMEND)
  out SPH, r21
        ......
Gast #45526
Hi,

erstmal danke für die Antworten, ihr habt natürlich recht.
Irgendwo glaubte ich dummerweise gelesen zu haben, die AVR´s hätten 32
16 bit-Register



Thanks for your help


Greetings
Karlheinz

Antwort schreiben

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