www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM Tutorial


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Inzwischen probiere ich seit zwei Tagen am (Software) PWM Tutorial 
herum.
Ich habe die USART eingebunden um einen Kanal ändern zu können. - 
funktioniert soweit auch. (ATMega8 mit 8Mhz)


Mein Problem beginnt wenn ich den Wert von "Timer0_overflow:" von 128 
auf 255 verändere. Über diesen wert sollte ich doch die Stufen des PWM 
einstellen können oder?

Wenn ich aber nun hergehe und einen wert im Bereich von 130 an den 
Kontroller sende geht die LED aus anstelle einer mittleren Helligkeit zu 
erzeugen. Bei höheren Werten verhält sie sich wie im unteren Bereich.

Woran kann das liegen oder wo liegt mein Denkfehler?

Bin für jede hilfe dankbar.

Harald

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Harald (Gast)

>Mein Problem beginnt wenn ich den Wert von "Timer0_overflow:" von 128
>auf 255 verändere. Über diesen wert sollte ich doch die Stufen des PWM
>einstellen können oder?

Ja.

>Wenn ich aber nun hergehe und einen wert im Bereich von 130 an den
>Kontroller sende geht die LED aus anstelle einer mittleren Helligkeit zu
>erzeugen. Bei höheren Werten verhält sie sich wie im unteren Bereich.

Tja, da hat wohl der Autor das Artikels ne komische Anwandlung gehabt 
und das Ganze für vorzeichenbehaftete Zahlen geschrieben :-0.
Versuch mal brlo anstatt brlt und staune ;-)

MFG
Falk

Autor: Hannes Lux (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Mein Problem beginnt wenn ich den Wert von "Timer0_overflow:" von 128
> auf 255 verändere. Über diesen wert sollte ich doch die Stufen des PWM
> einstellen können oder?

Nein. Du arbeitest (unsinnigerweise) mit dem Überlauf-Interrupt des 
Timer0 (statt mit dem besser geeigneten Compare-Interrupt eines anderen 
Timers) und erzeugst damit nur einen Basis-Takt für die Software-PWM. 
Wird der Startwert zu groß, dann wird der Basistakt so schnell, dass 
keine Zeit mehr zum Abarbeiten der ISR bleibt.

> Wenn ich aber nun hergehe und einen wert im Bereich von 130 an den
> Kontroller sende geht die LED aus anstelle einer mittleren Helligkeit zu
> erzeugen. Bei höheren Werten verhält sie sich wie im unteren Bereich.

Die Helligkeit stellst Du ein, indem Du die Werte von OCR_1 bis OCR_6 
veränderst.

> Woran kann das liegen oder wo liegt mein Denkfehler?

Die Software-PWM funktioniert anders als Du derzeit meinst... ;-)

- Der Timer erzeugt einen konstanten Basistakt, in dem die ISR
  aufgerufen wird.
- In der ISR wird ein PWM-Zähler hochgezählt und mit den einzelnen
  PWM-Sollwerten verglichen.
- Bei Zählerstand 0 werden alle Ausgänge eingeschaltet.
- Erreicht der PWM-Zähler den PWM-Sollwert eines Kanals, dann wird der
  betreffende Ausgang wieder ausgeschaltet.

Ich hänge Dir mal ein uraltes Beispiel an, vielleicht verstehst Du die 
Zusammenhänge durch Vergleichen mit Deiner Version besser.

...

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, ich war zu voreilig, ich nehme also alles zurück und behaupte das 
Gegenteil... ;-)

...

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

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:

> Tja, da hat wohl der Autor das Artikels ne komische Anwandlung gehabt
> und das Ganze für vorzeichenbehaftete Zahlen geschrieben :-0.
> Versuch mal brlo anstatt brlt und staune ;-)

Mea culpa
Werds gleich korrigieren.

Zur Ehrenrettung: In der Tutorial-Version ist die Anzahl der PWM Stufen 
auf 128 begrenzt und damit wars egal ob brlt oder brlo. Aber brlo ist 
hier besser.

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Erstmal danke für eure Hilfe.
Ich versteh zwar dass es mit BRLO funktioniert, aber nicht warum es mit 
BRLT nicht funktioniert.

Werd mir heute abend noch den Kopf darüber zerbrechen und den ganzen 
Cood auf "A la Harald" umpasteln.

Danke nochmals für eure schnelle Hilfe.

.... Harald

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

Bewertung
0 lesenswert
nicht lesenswert
Harald wrote:

> Ich versteh zwar dass es mit BRLO funktioniert, aber nicht warum es mit
> BRLT nicht funktioniert.

Weil BRLT für vorzeichenbehaftete Zahlen gedacht ist. Bit 7 hat dann die 
Bedeutung des Vorzeichenbits.
BRLO hingegen nimmt das Byte so wie Gott es schuf: als Zahl zwischen 0 
und 255

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.