Forum: Mikrocontroller und Digitale Elektronik 16Bit PWM Frequenz?


von Chrislight (Gast)


Lesenswert?

Hallo Zusammen...
Ich habe folgende Initialisationsroutine für meinen 16Bit PWM erstellt 
ich will zwei verschiedene Kanäle mit der gleichen PWM_Einstellung 
benutzen...
Nun habe ich bei meinem ATMega64 einen externen 8Mhz Quarz angebracht zu 
meiner ersten Frage wieso erhalte ich bei einem Prescaler von 1 nur eine 
Frequenz von 8kHz und nicht die 8Mhz des Quarzes
1
ICR1 = 0xFFFF;                    //Maximaler PWM-Zählerwert
2
TCCR1A  = (1<<WGM11)|(0<<WGM10);   //PWM, Phase Correct, 16Bit 
3
TCCR1B  = (1<<WGM13)|(0<<WGM12);
4
5
TCCR1A |= (1<<COM1A1)|(1<<COM1B1);   //PWM Waveform  
6
TCCR1B = (1<<CS10)|(0<<CS11)|(0<<CS12); //Prescaler 1
Wenn ich das ganze richtig verstehte so kann ich doch nun die OCR1A und 
OCR1B register mit einem Wert zwischen 0 und 65535 füllen und somit das 
Impuls/Pausen Verhältnis ändern. Wenn ich jedoch meinen PWM Ausgang mit 
einem Oszilloskop betrachte, so habe ich bereits bei etwa 510 das 
maximum von konstant 5V am Ausgang erreicht wieso das? Das maximum 
sollte doch erst bei 65535 erreicht werden...
Besten Dank für eure Anregungen Chrislight

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


Lesenswert?

Deine zweite Zuweisung auf TCCR1B löscht das WGM13-Bit wieder.  Damit
landest du im Mode 2, und das ist ein 9-Bit-PWM.

Tu dir einen Gefallen, und schreib die komplette Initialisierung
aller Bits eines Registers jeweils in eine Zuweisung.

von Chrislight (Gast)


Lesenswert?

Besten Dank für deinen Tipp nun Funktioniert der PWM bestens nur die 
Frequenz stimmt noch nicht was mache ich noch falsch? Hängt das 
irgendwie mit dem ICR Register zusammen? beim 10Bit hatte ich noch 7kHz 
jetzt mit der Korrektur habe ich nur noch c.a. 60Hz.

von Karl H. (kbuchegg)


Lesenswert?

Chrislight wrote:
> Besten Dank für deinen Tipp nun Funktioniert der PWM bestens nur die
> Frequenz stimmt noch nicht was mache ich noch falsch? Hängt das
> irgendwie mit dem ICR Register zusammen? beim 10Bit hatte ich noch 7kHz
> jetzt mit der Korrektur habe ich nur noch c.a. 60Hz.

Was erwartest du?
Der Timer muss ja auch noch zählen.

Mit Prescaler 1 zählt dein Timer mit 8Mhz.
Bei einer 10 Bit PWM muss der Timer jedesmal bis 1024 (10-Bit)
zählen, ehe ein PWM Zyklus zu Ende ist.

8000000 / 1024 = 7812.5 Hz

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


Lesenswert?

Das passt doch ganz gut.  Die Formel im Datenblatt sagt:

Wenn man einsetzt

dann komme ich auf

von Chrislight (Gast)


Lesenswert?

Okey besten Dank jetzt verstehe ich auch wieso 1Mhz PWM's nicht möglich 
sind... Super erklärung besten Dank!!

von Axel R. (Gast)


Lesenswert?

Hi, probier' mal nen Tiny861 oä. Die haben die Mglkt. den Timer mit 
64Mhz über die interne PLL laufen zu lassen.

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


Lesenswert?

Chrislight wrote:

> Okey besten Dank jetzt verstehe ich auch wieso 1Mhz PWM's nicht möglich
> sind...

Möglich schon, aber du hast (bei 8 MHz CPU-Frequenz) nur noch 8
Abstufungen. ;-)

(Natürlich mal nicht die Tinys mit PLL eingerechnet.)

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.