PWM Tutorial

Gast #1157526
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
Angehängte Dateien:
#1157544
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
Gast #1157552
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.

...
Angehängte Dateien:
#1157613
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.
Gast #1157985
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
#1158003
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren