Hallo, ich brauche mal wieder Hilfe. Komme mit dem Einstellen der PWM-Frequenz nicht klar. Mein erster Versuch, Fast PWM Mode3, prescale factor = 8, CPU 1Mhz intern, ergibt eine PWM Frequenz von rund 488Hz. Die PWM funktioniert auch so weit. Im Anhang ist der C-Code zum Testen. Kontroller ist ein Tiny25, verwendet wird Timer0, Ausgang ist PB0 (OC0A). Die Pulsweite stelle ich mit OCR0A ein. Wenn ich nach dem Datenblatt gehe, um die Frequenz auf 100Hz zu ändern, muss ich den Fast PWM Mode7 verwenden (WGM02 auf 1 setzen) und den TOP-Wert mit OCR0A festlegen. Wie bzw. wo stelle ich dann aber die Pulsweite ein? Ist dann OC0A noch der Ausgang? Muss ich noch was anderes umstellen? Habe schon ein paar Versuche durch, aber ohne Erfolg, PWM geht dann nicht mehr. 2.Datei zeig einen Versuch mit OCR0B für die Pulsweite, funktioniert aber nicht. Gruß Jörg
Jörg S. schrieb: > 2.Datei zeig einen Versuch mit OCR0B für die Pulsweite, funktioniert > aber nicht. Eigentlich soll man keine unvollständigen Programme kommentieren aber Ansatz über OC0B ist richtig OC0B (PB1) als Ausgang konfiguriert? PWM_50 Wert höher als OCR0A Wert?
> TCCR0A = (1 << COM0A1) | (1 << WGM01) | (1 << WGM00);
Das ist jetzt falsch. Da OCR0B jetzt das Compare-Register ist:
TCCR0A = (1 << COM0B1) | (1 << WGM01) | (1 << WGM00);
Und den OC0B(PB1) auf Ausgang schalten nicht vergessen.
mfg.
Hallo, schon mal Danke für die schnellen Antworten. Wie ich schon erwähnte, habe ich einige Kombinationen versucht. Ich habe PB1 (OC0B) verwendet und den Ausgang auch entsprechend geändert. Ich hatte auch mal COM0B1 verwendet, aber ich weis jetzt nicht mehr ob auch alles zusammen, werde ich dann noch mal testen. schorsch schrieb: > PWM_50 Wert höher als OCR0A Wert? was meinst du genau damit? Ich habe in OCR0A den TOP Wert mit 52 geladen, damit nicht mehr bis 256 sondern nur bis 52 gezählt wird um die 100Hz zu erreichen. Mit OCR0B stelle ich die Pulsweise (DutyCycle) von 0x00 bis 0xFF ein. Ist das jetzt falsch? Kann ich nur noch Werte kleiner OCR0A verwenden? Gruß Jörg
mitchell schrieb: > Mit OCR0B stelle ich die Pulsweise (DutyCycle) von 0x00 bis 0xFF ein. > Ist das jetzt falsch? Ja, das ist falsch. Du stelltst mit OCR0B von 0 bis OCR0A ein. Also bis 52. mitchell schrieb: > Kann ich nur noch Werte kleiner OCR0A verwenden? Ja. Kleiner oder gleich 52. Das ist eine ziemlich mickrige Auflösung. Ist aber egal, da deine Rechnung sowieso falsch ist. 1Mhz/Prescaler64/157 = 99,52 also ~100 Du stellst den Prescaler auf 64 und OCR0B auf 156. mfg.
Hallo, da war ich schon fast auf den richtigen Weg und klar habe ich mich da verrechnet. Danke für die Hilfe es funktioniert jetzt. Nun kann ich weiter Testen, ob das mit den 100hz auch so funktioniert wie ich es gerne möchte. Anbei der Code mit dem ich die PWM jetzt getestet habe. Mit 3 Schaltern zum testen der verschiedenen PWM-Pulsbreiten. Gruß Jörg
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.