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
Du hast die CKDIV8 Fuse gesetzt.
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)
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.
Gast
#2289533
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.