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
@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
> 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. ...
Sorry, ich war zu voreilig, ich nehme also alles zurück und behaupte das Gegenteil... ;-) ...
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.