Forum: Mikrocontroller und Digitale Elektronik ATMega8535 Timer1


von Germo (Gast)


Lesenswert?

Hi,

hab da mal ne frage bezüglich des Timer1:

ich habe an meinem µc einen externen Oszillator mit 8MHz angeschlossen.
Die beiden Timer 0 und 2 laufen auch einwandfrei damit ... der Timer1
allerdings nicht. Der läuft rein rechnerisch mit einem Takt von 1Mhz.
Hat evtl wer Ahnung wie das zustande kommt? der interne Takt des µc is
ja auch bei 8MHz ...

von Jens D. (Gast)


Lesenswert?

Wie hast du den Prescaler gesetzt??
Den IOtakt (IOclock) kannst du teilen, um damit die Teiler
anzusteuern..
Gruss

von Germo (Gast)


Lesenswert?

also
externer takt von 8 MHz mit einem Prescaler von 1024 = 7812/sec (sofern
ich  noch richtig rechnen kann ...

einstellen wollte ich den timer (testweise) auf eine sec und komme da
mit den werten im register TCNT
H: E1
L: 7C

auf 7811 ...

die LED geht aber erst nach ca 8 sec an und durch rückrechnen bin ich
darauf gekommen das der timer mit 1MHz laufen muss (klar) - erklären
kann ich mir dies jedoch nicht. Auch mit den werten bei angenommenen
1MHz
H: FC
L: 30
klappt es dann tadellos und die LED geht nach 1 sec an

von Thorsten F. (thorsten)


Lesenswert?

Morgen.

Ich denke da könnte noch die DIV/8 Fuse programmiert sein.
Oder greift diese nur, wenn man den internen Oszillator benutzt?

mfg

von Germo (Gast)


Lesenswert?

kann ja eigentlich nicht sein da die anderen timer mit den 8 MHz
einwandfrei funktionieren - es sei denn der timer1 nutzt den internen
während die timer 0 und 2 den externen oszillator nutzen

aber ich schau das nochmal nach, danke

von Rolf Magnus (Gast)


Lesenswert?

Kann vor allem aber deshalb nicht sein, weil der 8535 keine Div8-Fuse
hat. War nämlich auch mein erster Gedanke, aber dann hab ich im
Datenblatt nachgesehen.

von Hannes L. (hannes)


Lesenswert?

Wenn du den OVF-Int nimmst, musst du den Timer nicht auf 7812
voreinstellen, sondern auf 65536-7812. Denn der Timer zählt aufwärts
und nicht abwärts.

Besser ist aber die Nutzung des OCR-Interrupts.
Da liest du in der ISR den Wert des OCR1A(H/L) aus, addierst dein
Intervall (die 7812) dazu und schreibst den Wert nach OCR1A(H/L)
zurück.
Auf diese Art läuft Timer1 durch und du kannst auch noch OCR1B und ICP
benutzen, ohne dass die sich gegenseitig stören.

...

von Germo (Gast)


Lesenswert?

naja ich habe das vlt ein bisschen umständlich formuliert: ich habe
natürlich einen wert von 65536 - 7812 eingestellt bzw hat mit iccavr
diese 'arbeit' abgenommen und dennoch komme ich auf 8 sec ... auch
wenn ich den ocr1 bzw den compare interupt verwende komme ich auf 8 sec
... zur not muss ich halt für den timer umrechnen und mit 1MHz rechnen
anstelle von 8 ... die div8 fuse gibts im übrigen nicht wie oben schon
steht

---------
Computer lösen Probleme, die man ohne sie nicht hätte ...

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.