PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche gutes Tutorial zur Software-PWM für LEDs



Cysign
01.01.2013, 07:54
Hallo,
ich suche grade ein gutes tutorial, wie ich softwareseitig meine eigene PWM-Steuerung umsetzen kann, um RGB-LEDs anzusprechen.
Dabei möchte ich einen AtTiny2313 verwenden. Da ich mehrere RGB-LEDs verwenden möchte, sind die 4 PWM-Kanäle für mich nicht wirklich von Bedeutung, da diese nut 1 1/3tel RGB-LEDs ermöglichen würden ;)

robin
01.01.2013, 11:27
Braucht man dafür ein Tutorial?

Software PWM ist doch "nur":
- Pin an
- warten (T_on)
- Pin aus
- warten (T_off)
und alles wieder von vorne.

Wie du dieses warten realisierst, ist dir überlassen, das kannst du mittels timer lösen oder ganz einfach über eine wait schleife.

Mit wait:
fester wait wert z.B. 100µs. Zu beginn, werden alle LEDs eingeschalten, dann wirde alle 100µs eine Variable hochgezählt und mit den PWM werten verglichen, stimmt ein PWM wert überein, wird der entsprechende Pin 0 Gesetzt. Hat die Variable ihren Maximalen Wert erreicht, werden wieder alles LEDs eingeschaltet.

Vorteil:
Recht einfach realisiert

Nachteil:
µC rennt mit 100% Last.


Eleganter geht es mit Timern:
Hier gibt es 2 Möglichkeiten, entweder mit dem Compare-register des Timers arbeiten oder in jedem Timer Durchlauf ein Variable hochzählen ( und dann wie bei der Wait Variante nur ohne der 100% Last).

Mit dem Compare Register:
Die PWM werte werden der Größe nach sortiert und der kleinste PWM wert wird in das Compareregister geladen. Bei einem Timer-Compare interrupt werden alle LEDs, die diesen PWM wert haben, auf 0 gesetzt und der nächst kleinere PWM wert ins Compare-Register geladen...... Bei einem Timer overflow werden dann wieder alle LEDs eingeschaltet.

Vorteil:
CPU Last liegts im einstelligen Prozent Bereich

Nachteil:
Recht komplexe Realisierung durch Sortieralgorithmus und interrupts

Cysign
01.01.2013, 12:12
Naja, das Grundprinzip von PWM verstehe ich schon. Aber ich weiß noch nciht, wie ich z.b. ein Pulsieren einer LED verwirklichen kann.
Also quasi langsam von 0 bis 100% Helligkeit (An-Zeit) und wieder zurück.
Ich möchte gerne ein Codestück, mit dem ich relativ flexibel arbeiten kann, weshalb ich gerne erstmal verschiedene Lösungen durchforsten möchte, bevor ich mich an meinen eigenen Code ran wage.
Außerdem soll die LED flimmerfrei (fürs menschliche Auge) sein. Das muss natürlich auch im Code berücksichtigt werden. Also quasi ein eleganter PWM-Code ;)

Kampi
01.01.2013, 12:17
Hey,

hast du dir das hier schon durchgelesen?:

http://www.rn-wissen.de/index.php/Pwm

robin
01.01.2013, 12:34
Flimmerfrei ist schneller als 30 Hz (solange die LEDs nicht in Bewegung sind), je schneller umso besser.

Um das Pulsieren zu realisieren musst du nur den PWM wert nach X ms um Y erhöhen/verringern. X und Y richten sich danach, wie schnell und flüssig das Pulsieren funktionieren soll.
Dafür kannst du den zweiten Timer verwenden um alle X ms die PWM werte um Y zu ändern.

Manf
01.01.2013, 12:46
So ein Servocontroller hat die Aufgabe 20 PWM Werte auszugeben, wenn auch mit ganz anderen PWM Werten.
Hier ist ein Beispiel angegeben.

https://www.roboternetz.de/community/threads/34117-bis-zu-20-Servos-am-Mega8-ausg%C3%A4nge-frei-w%C3%A4hlbar

Thomas E.
01.01.2013, 13:38
Hier gibts ein Projekt mit Software-PWM (drei Kanäle):
https://www.roboternetz.de/community/threads/57086-Eine-RGB-Led-und-ein-AtTiny13?highlight=TinyRGB

Interessant ist auch die weitere Diskussion, in der es um Optimierung geht.

Cysign
02.01.2013, 11:31
Danke für die ganzen Links, das hilft auf jeden Fall weiter :)
Ich hab gestern meine kleine Experimentierplatine mit nem HD44780-Display und ner RGB-LED zusammengelötet und werd mich dann mal ran machen :)