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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.