RGB-Farbregelung mit 3 LEDs
Hallo,
ich habe vor mir eine RGB-Farbsteuerung zu bauen. Diese will ich mit einem µC von AVR realisieren. Ich hatte mir das vorerst so gedacht, dass ich ein Potentiometer habe und 3 LEDs. Wenn ich jetzt am Poti drehe sollen die einzelnen LEDs mittels PWM angesteuert werden, aber alle mit einer anderen Pulsweite - so dass ich am Ende das gesamte Farbspecktrum durchlaufen kann (theoretisch!).
Ich habe das ganze bis jetzt nur mit 2 LEDs hinbekommen, leider fällt mir nichts mehr ein, wie ich da noch eine dritte reinbekommen soll. Hier ist mal mein bisheriger Code in Bascom:
Code:
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
On Timer0 Ontimer
On Adc Onadc
Dim Helligkeit As Byte
Ddrd = &B01100000
Ddrc = &B00000000
Tccr0 = &B00000100
Timsk.toie0 = 1
Admux = &B01100000
Adcsr = &B11101111
'--------------------------------
Helligkeit = 255 'Initial LED ganz hell
Sreg.7 = 1
'Interrupts global einschalten
Do 'Hauptschleife
Helligkeit = Adch 'Neuer Helligkeitswert
Loop
'--------------------------------
Ontimer:
Portd.5 = Not Portd.5 'LED wechselnd an/aus
Portd.6 = Not Portd.6
If Portd.5 = 1 Then 'Wenn LED gerade an
Portd.6 = 0
Timer0 = 256 - Helligkeit 'Timer zählt vorwärts!
Else
Portd.6 = 1 'Wenn LED gerade aus
Timer0 = Helligkeit 'Komplementäre Zeit
End If
Return
Onadc: 'ADC-Interrupt-Routine
Udr = Adch
Return
Für Hilfe wäre ich sehr dankbar.
Grüße
Enrico
Liste der Anhänge anzeigen (Anzahl: 2)
Also ich hab mal mit Paint und exel gespielt und das kam raus:
Sättigung 240
Helligkeit 128
Hier der Rotanteil wie man sieht keine Kurve, mit einigen if bedingungen sollte man die Übergägne so hinbekommen. Unten der Farbverlauf.
MFg Moritz
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe mir jetzt mal die Mühe gamacht und alle 255 Werte für das komplatte Farbspecktrum in eine Excel-Liste mit Diagramm zu fassen.
Die Datei findet ihr im Anhang. Also so müsste das im Endeffekt aussehen, leider bin ich mir nicht im klaren darüber we ich das mit einem Timer realisieren soll?
Die 3 PWMs habe ich jetzt übrigens hinbekommen. Hier mal mein jetziger Code:
$regfile = "m8def.dat"
$crystal = 3686400
On Timer0 Ontimer0
Dim Led1 As Byte
Dim Led2 As Byte
Dim Led3 As Byte
Ddrc = &B00000000
Admux = &B01100000
Adcsr = &B11101111
Sreg.7 = 1
Config Pinb.1 = Output
Config Pinb.2 = Output
Tccr0 = &B00000010
Timsk.toie0 = 1
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Config Timer2 = Pwm , Compare = Clear , Prescale = 1
Do
Compare1a = Led1
Compare1b = Led2
Ocr2 = Led3
Loop
Ontimer0:
Led1 = Adch
Led2 = Adch
Led3 = Not Adch
Return
End
Das funktioniert soweit erst einmal.
Wenn jetzt noch jemand eine Idee hat - immer her damit :-)
Grüße und danke
Enrico