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
Poste doch bitte mal dein komplettes Programm, dann kann ich dir vielleicht auch helfen
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.
Hi, anbei mal das kleine Testprogramm. Da Count = r20 ist sollte es doch eine 16 bit-Variable sein, oder ? Greetings Karlheinz
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)
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 ......
Ich kann für Timerberechnungen sehr den AVR-calc empfehlen: http://www.avrfreaks.net/Tools/showtools.php?ToolID=292
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.