Hallo,

Ich weiß dass die Fragen zu PWM für Profis sehr nervig sind,

Leider sind für PWM-Anwendungen fast keine "Übungsbeispiele" in C im Netz zu finden.

Nun zu meinen Problemchen....


Soweit ich mir das erarbeitet habe, müsste folgender Code funktionieren


Code:
// PWM01 mit ATmega8535 mit 8MHz

#include <io.h>

int main (void)
{
   
TCCR1A = (1<<PWM11)|(1<<PWM10)|(1<<COM1A1);
TCCR1B = (1<<CS12) | (1<<CS10);

for (;;) {

OCR1A = x;  // x ist jetzt mal ein Beispielwert,.... 

}}
Erklärung (bitte verbessern falls ich mich irre)

TCCR1A = (1<<PWM11)|(1<<PWM10)|(1<<COM1A1);
Befehl für nicht invertierenden 10-Bit PWM.

TCCR1B = (1<<CS12) | (1<<CS10);
Takt von CK / 1024 ( hier ergibt sich dann Frage 2 )

OCR1A = xxx;
Wert....


nunja, wenn ich das ganze nun "HEXen" will, dann kommt die Meldung:

"error: "PWM11" undeclared (first use in this funktion)"
"error: "PWM10" undeclared (first use in this funktion)"


Muss ich vielleicht noch ne andere Datei "includen" ausser io.h ?
Oder woran könnte das liegen.... habe die codes aus:
http://www.mikrocontroller.net/wiki/...nmodulation.29

Frage 2:

TCCR1B = (1<<CS12) | (1<<CS10);
Takt von CK / 1024

Ich will letzendlich ein Modellbauservo ansteuern, welches ja einen takt von ca. 50Hz braucht.

aus CK / 1024, ergeben sich aber bei 8MHz ca. 7.8 kHz....

wie komme ich runter auf 50Hz ?

Soll ich "Externer Pin 1, positive Flanke" nutzen?

also
TCCR1B = (1<<CS12) | (1<<CS11) | (1<<CS10);
?
und dort einen Oszillator mit 50Hz dranhängen?


Ich bedanke mich schon mal im Vorfeld für eure Bemühungen,

Gruß
Kaiser F