Forum: Compiler & IDEs Timer 0-2 laufen mit falschem prescaler


von Erik H. (agutanus)


Angehängte Dateien:

Lesenswert?

Hallo, ich möchte mit einem ATMEGA168 6 verschiedene PWM-Signale mit 
möglichst hoher Frequenz ausgeben. (daher: 20 MHz Quarz)
Also habe ich bei allen Timern einen prescaler von 1 eingestellt und zum 
Testen ein 50% PWM-Signal ausgegeben.
Leider messe ich mit einem Oszilloskop immer eine 8-mal kleinere 
PWM-Frequenz als errechnet!
fPWM = fIO / (N * 256)     (N = prescaler)
fPWM = 20MHz / 256 = 78 kHz
gemessene PWM-Frequenz: etwa 10 kHz

Den Quarz und ein Referenz-Signal habe ich problemlos gemessen - die 
Frequenzen passen.

Parallel zur PWM-Erzeugung benutze ich den Timer1-Überlauf um einen 
Interrupt auszulösen - auch dieser wird 8-mal langsamer ausgelöst.

Im Anhang: die Timer-Initialisierungen

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Du hast die CKDIV8 Fuse gesetzt.

von Erik H. (agutanus)


Lesenswert?

Perfekt - genau das war der Fehler. Wusste nicht einmal, dass diese Fuse 
existiert...

An alle mit dem gleichen Problem:
Laut Datenblatt ist diese bei Auslieferung bereits gesetzt.

Low Fuse Byte: CKDIV8
Bit no.: 7
Description: Divide clock by 8
Default value: 0 (programmed)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Erik H. schrieb:
> Perfekt - genau das war der Fehler. Wusste nicht einmal, dass diese Fuse
> existiert...

http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_fuses

CKDIV8 muss man übrigens nicht zwingend umfusen.  Diese Fuse bewirkt
nur, dass der clock prescaler auf 1:8 initialisiert wird, den kann
man aber problemlos auch zur Laufzeit auf 1:1 umschalten.

von Oliver (Gast)


Lesenswert?

Erik H. schrieb:
> An alle mit dem gleichen Problem:

RTFM

Datenblatt lesen. Nicht irgend eins, sondern genau das vom jeweiligen 
Prozessor. Dann klappts auch mit dem prescaler.

Oliver

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.