Forum: Mikrocontroller und Digitale Elektronik PWM Tutorial


von Harald (Gast)


Angehängte Dateien:

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

von Falk B. (falk)


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

von Hannes Lux (Gast)


Angehängte Dateien:

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.

...

von Hannes Lux (Gast)


Lesenswert?

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

...

von Karl H. (kbuchegg)


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.

von Harald (Gast)


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

von Karl H. (kbuchegg)


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

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.