Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche gutes Tutorial zur Software-PWM für LEDs
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 ;)
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
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 ;)
Hey,
hast du dir das hier schon durchgelesen?:
http://www.rn-wissen.de/index.php/Pwm
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.
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.
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 :)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.