Forum: Mikrocontroller und Digitale Elektronik AVR Timer Prescaler Problem


von Bastian G. (Gast)


Lesenswert?

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

von Sebastian Förster (Gast)


Lesenswert?

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?

von Robert (Gast)


Lesenswert?

Hi,
hast du vielleicht vergessen das Interruptflag zurückzusetzen?!

von Bastian G. (Gast)


Lesenswert?

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.

von Hc Z. (mizch)


Lesenswert?

> 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)

von Basti M. (counterfeiter)


Lesenswert?

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?

von Bastian G. (Gast)


Lesenswert?

@ 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
Noch kein Account? Hier anmelden.