www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Software PWM mit Atmega8 funktioniert nicht


Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich hab vor 3 Tagen das erste mal einen AVR programmiert, ist 
also alles noch neugebiet für mich. Ich programmiere übrigens in C mit 
AVRstudio 4.12 und USBprog als AVRISP mkII klon.

Jetzt habe ich versucht eine Software PWM zu programmieren für die LED 
die an PORTB angeschlossen ist. Ziel ist das das Tastverhältnis am 
anfang 1 ist und dann langsam bis 0 "fadet" und dann wieder auf 1 
resettet wird.
Ich benutze den internen RC oscillator.

Problem: Die LED flackert seeehr schwach mit (GROB geschätzt) ~2Hz, wenn 
i<0 ist leuchtet sie für ein paar Zehntel einer Sekunde auf voller 
Leuchtstärke, und flackert dann wieder wie vorhin beschrieben.
Die LED soll aber langsam Faden.

Code ist im Anhang, schonmal vielen dank im voraus :)

Autor: greg2k (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich mache Soft-PWM mit Timer immer. Sehe Beispiel im Anhang.

Mit "pwm"-Variable kannst Du die Leuchtstärke einstellen;

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
o wird mit Null initialisiert und dann im weiteren Code nie verändert.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, könntest du evtl. meinen Code korrigieren? Weil ich bekomme das 
jetzt noch immer nicht hin?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wird das auch nichts.
Deine Variable i ist in ein paar Zehntel-Millisekunden von 100 auf 0 
runtergezählt. Kein Wunder das das flackert.
Du musst die 'PWM' schon eine gewisse Zeit lang laufen lassen, damit du 
überhaupt mal was siehst und erst dann die Stufe um 1 runterschalten.

PS: Alle delay Funktionen, die mit dem AVR-gcc kommen, sind darauf 
ausgelegt, dass sie ein konstantes Argument bekommen. Ansonsten stimmen 
die Zeiten hinten und vorne nicht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
greg2k schrieb:
> Ich mache Soft-PWM mit Timer immer. Sehe Beispiel im Anhang.
>
> Mit "pwm"-Variable kannst Du die Leuchtstärke einstellen;

Lass das SREG in einer ISR in Ruhe!
Die Prozessorregister gehören in C dem Compiler. Wenn du dich daran zu 
schaffen machst, machst du es meistens nur schlimmer, nie besser. Dein 
Compiler weiß schon, was in einer ISR zu tun ist. Überlass es ihm, sich 
um solche Feinheiten zu kümmern.

Autor: greg2k (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das war nur Beispiel-Code. Du musst "pwm" Variable in deinem Code 
irgendwo ändern.

Ich habe schnell ein Beispiel für Mega8 8MHz gebastelt :)
LED habe ich an PortC Pin1 angeschlossen.

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.