Hallo Leute, ich habe ein Problem mit dem Prescaler des Timer1 auf meinem AVR 328 (Arduino Board mit Arduino Entwicklungsumgebung). Wenn ich den Prescaler auf 64 (TCCR1B CS12=0, CS11=1, CS=10=1) setze, dann wird, wie von mir gewünscht, die Timer1 Overflow Routine (TIMER1_OVF_vect) richtig und kontinuierlich aufgerufen. Setze ich aber den Prescaler auf 256 (TCCR1B CS12=1, CS11=0, CS=10=0), dann wird die Overlow ISR genau 1 mal ausgeführt, danach nie wieder. Am Code habe ich, mit Ausnahme von TCCR1B ansonsten nichts geändert? Woran könnte das liegen, habt ihr eine Idee? Grüße, Bastian
Wie bekommst du denn raus, dass er den Timer Interrupt nicht mehr aufruft? Vielleicht liegt ja darin der Fehler... Und Simulierst du oder läuft das Programm auf dem AVR?
Ich lasse einen Zähler in der ISR inkrementieren und lasse mir den seriell ausgeben. Beim Prescaler 64 läuft er normal hoch, beim 256er bleibt er konstant auf 1. Ich lasse ihn direkt auf dem AVR laufen, nicht im Simulator.
> hast du vielleicht vergessen das Interruptflag zurückzusetzen?! Das kann man nicht vergessen, denn es ist überflüssig. Beim Einsprung in die Interrupt-Routine macht der AVR das selbst. (Edit: "nicht" raus)
Vielleicht läuft dein Sendebuffer über und lässt deinen Controller abschmieren, weil er die Daten nicht schnell genug weggesendet bekommt... ist mir jedenfalls schon passiert... vielleicht nur jeden 100ten Zählerschritt was senden lassen?
@ Sebastian: Nein, das sollte es nicht sein. Bei einem höheren Prescaler wird die Senderate ja sogar noch geringer..
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.