mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM Anfängerproblem


Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcel S. (marcel_74)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, war nicht angemeldet

Autor: Johannes A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du auch das DDR-Bit des betreffenden Ports gesetzt?

Gruß Johannes

Autor: Marcel S. (marcel_74)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja das habe ich:


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

Nun sollte OC1A und OC1B als Ausgang arbeiten.


Marcel

Autor: Marcel S. (marcel_74)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Johannes A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcel S. (marcel_74)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Überschneidung...

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

Gruß Johannes

Autor: Johannes A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, die "klassischen" Fehler sind doch immer noch die beliebtesten ;-)

Gruß Johannes

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.