Forum: Mikrocontroller und Digitale Elektronik PWM Anfängerproblem


von Marcel (Gast)


Lesenswert?

Hallo zusammen,

ich experimentiere gerade mit der PWM meines ATMega16. Leider habe ich 
die PWM noch aktiviert bekommen.

Mein Versuch beschränkt sich momentan darauf, die Helligkeit einer LED 
mittels PWM zu variieren.

Ich sende mal den C-Codeausschnitt fürs PWM:

  TCCR1A = (1<<WGM10)|(1<<COM1A1); // PWM, phase correct, 8 bit.
  TCCR1B =  (1<<CS11) |(1<<CS10); // set clock/prescaler 1/64 -> enable 
counter


  OCR1A=128; // LED 50%

Mehr stelle ich an den Countern/Timern nicht ein. Vielleicht ist das das 
Problem. ;-)

Ich habe schon von mehreren Webseite verschieden Codeausschnitte 
probiert, alle ohne Erfolg.

Was vergesse ich, oder was mache ich falsch? Es wäre evtl. auch 
hilfreich, wenn mir jemand ein ähnlich einfaches Codebeispiel sendet.

Vielen Dank
Marcel

von Marcel S. (marcel_74)


Lesenswert?

Sorry, war nicht angemeldet

von Johannes A. (Gast)


Lesenswert?

Hast Du auch das DDR-Bit des betreffenden Ports gesetzt?

Gruß Johannes

von Marcel S. (marcel_74)


Lesenswert?

Hallo,

ja das habe ich:


        sbi(DDRD, PB4);
  sbi(DDRD, PB5);

Nun sollte OC1A und OC1B als Ausgang arbeiten.


Marcel

von Marcel S. (marcel_74)


Lesenswert?

Hallo nochmal,

ich habe noch weiter experimentiert und einen Tippfehler in meinem 
Quellcode gefunden. Nun scheint das Grundprinzip zu funktionieren. Nur 
gibt es noch ein weiteres Problem: Nach dem Starten des Programmes hat 
die LED eine festgelegte Helligkeit (Startwert). Wenn ich nun während 
der Laufzeit den Wert von OCR1A ändere, ändert sich die Helligekit der 
LED nicht. Lege ich einen anderen Startwert fest und übertrage das 
Programm neu, dann hat die LED eine andere Helligekeit. Hast du eine 
Idee?

von Johannes A. (Gast)


Lesenswert?

Also OC1B liegt bisher noch brach. Richtig?
Und was misst Du jetzt an OC1A?
Und tut sich eventuell was, wenn Du zwischendurch mal "FOC1A" gibst?

Gruß Johannes

von Marcel S. (marcel_74)


Lesenswert?

Hallo!

Vielen Dank für die Hilfe, ich habe meinen Fehler gefunden.

Mannomann, manchmal hat man echt Tomaten auf den Augen. Ich habe den 
Startwert zu Beginn der Schleife immer neu festgelegt. Wenn die 
Änderung gemacht wurde, wurde diese vom Startwert jedesmal neu 
überschrieben.

von Johannes A. (Gast)


Lesenswert?

Überschneidung...

Wie änderst Du OCR1A während der Laufzeit?
Ich meine, ist da auch genug Zeit, den neuen Wert zu übernehmen?

Gruß Johannes

von Johannes A. (Gast)


Lesenswert?

Na, die "klassischen" Fehler sind doch immer noch die beliebtesten ;-)

Gruß Johannes

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.