Forum: Mikrocontroller und Digitale Elektronik PWM mit ATmega8: Takt langsamer als eingestellt


von Nils ‫. (n-regen)


Lesenswert?

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.

von STK500-Besitzer (Gast)


Lesenswert?

Hat der ATMega8 vielleicht eine DIV8-Fuse? oder läuft er statt mit einem 
externen 8MHz-Quarz mit dem internen 1MHz-RC-Oszillator?

von Nils ‫. (n-regen)


Angehängte Dateien:

Lesenswert?

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).

von Achim M. (minifloat)


Lesenswert?

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

von holger (Gast)


Lesenswert?

TCCR1A = (1<<COM1A1) | (1<<WGM13) | (1<<WGM12) | (1<<WGM11);

TCCR1A besitzt weder WGM13 noch WGM12. Die liegen woanders.

von Nils ‫. (n-regen)


Lesenswert?

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?

von Hc Z. (mizch)


Lesenswert?

> 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.

von Nils ‫. (n-regen)


Angehängte Dateien:

Lesenswert?

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