Hallo! Ich versuche gerade, mit einem ATmega8 per PWM einen 1202Hz-Sinuston zu erzeugen. Es funktioniert auch alles - nur ist das Signal zu langsam: Ich messe mit meinem Oszilloskop genau ein Achtel der gewünschten Frequenz. Prescaler und Takt sind richtig eingestellt (CS10 in TCCR1B gesetzt -> kein Prescaler; CKSEL0, 1 und 3 sowie SUT0 programmiert -> 8MHz interner Oszillator) und die Frequenz lässt sich auch durch Vergrößern des Prescalers bzw. Verringern der Oszillatorfrequenz noch weiter reduzieren. Was könnte hier also diese Teilung durch 8 verursachen? PS: Die Fuses sind auf 0xE4 (Low) und 0xD9 (High) gesetzt.
Hat der ATMega8 vielleicht eine DIV8-Fuse? oder läuft er statt mit einem externen 8MHz-Quarz mit dem internen 1MHz-RC-Oszillator?
Nachtrag: Der Quelltext. @STK500-Besitzer: CKDIV8 hat der ATmega8 nicht und die Fuses stimmen auch (ich kann z.B. den internen Takt auf 1, 2 oder 4 MHz stellen und erhalte einen entsprechend tieferen Ton).
STK500-Besitzer schrieb: > Hat der ATMega8 vielleicht eine DIV8-Fuse? Nein, der 8er nicht, aber... Sicher, dass es ein mega8 und kein 88 oder so ist? die haben nämlich ein Fusebit das heißt "Clockdiv8". Da wird der Haupttakt erstmal durch 8 geteilt. minifloat
TCCR1A = (1<<COM1A1) | (1<<WGM13) | (1<<WGM12) | (1<<WGM11); TCCR1A besitzt weder WGM13 noch WGM12. Die liegen woanders.
Es steht ATMEGA8-16PU drauf, also ist es eher unwahrscheinlich, dass es ein 88er ist. ;-) Außerdem lässt sich das Ding mit PonyProg programmieren, wenn in PP als Controller ATmega8 eingestellt ist. Das sollte doch bei einem 88er nicht funktionieren, oder?
> TCCR1A = (1<<COM1A1) | (1<<WGM13) | (1<<WGM12) | (1<<WGM11);
WGM13 und WGM12 befinden sich nicht in TCCR1A. Dennoch wird das immer
wieder gerne genommen.
Dadurch hast Du keinen CTC-Mode mehr.
Kopf -> Tisch!! Wie immer: Lesen hilft: Ich habe WGM13, 12 und 11 im TCCR1A-Register gesetzt, obwohl 12 und 13 im TCCR1B-Register sind... Entsprechend habe ich den µC auf eine Phase-correct 9-bit PWM gestellt, während ich meine Werte für eine 7-bit PWM ausgerechnet habe. Kein Wunder, dass da Murks rauskommt. Inzwischen habe ich den Fehler behoben und erhalte ein schönes 1202Hz-Signal. Vielen Dank für eure Hilfe! Nachtrag: Ich habe den Fehler sogar selber entdeckt, noch bevor ich eure Beiträge gelesen habe.
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.