PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RGB-Farbregelung mit 3 LEDs



Enrico3
08.12.2004, 20:20
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:



$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

RCO
08.12.2004, 21:03
Ich hab ne wichtige Frage, wo ich gerade deinen Code sehe. Gibt es eine Möglichkeit quasi aus einem ADC einen Interrupt zu machen, der z.B. Änderungen am AD-Port meldet feststellt? Oder was meinen diese drei ausdrücke?
On Adc Onadc
Admux = &B01100000
Adcsr = &B11101111
Leider ist mir der AD unter Bascom nciht ganz geläufig, noch nicht ;-)

Nun zu deiner Frage, wie soll der Farbverlauf denn aussehen, du müsstest vermutlich eine funktion erstellen, die dir sagt, wie hell du die entsprechenden Leds schalten sollst. Oder ist dein Problem quasi 3 PWMs zu erzeugen?
Das kann man wie folgt lösen, du verwendest einen Timer mit möglichst niedrigem Prescaler, z.B. 8 und lässt den Timer relativ schnell überlaufen, so das du eine hohe Frequenz hast.
In der Interrupt routine machst du 255 steps, eine beliebige Variable (z.B. I) die bei jedem Aufruf der Interruptroutine incrementiert. Nun kannst du für jede Led einen Wert setzen (Byte) zu beginn I = 0 sind alle Leds ein, je nachdem welchen Wert I erreicht gehen sie dann aus, halt ein PWm, der sich beliebig erreichen lässt.

Bei 8Mhz hättest du bei einem 8-Bit-Timer den du nach 39 Schritten überlaufen lässt:

8000.000/8 = 100.0000
1000.000/39 = 25641
25641/256 = ca 100Hz, dass sollte reichen.

Ich hoffe ich erzähle dir hier nix was du schon weißt, nach Fachlatein was du in deinem Code benutzt hast, fürchte ich, dass es nicht so ist ;-)

MFG Moritz

Enrico3
09.12.2004, 09:52
Hallo,

also die Möglichkeit gibt es.
Mit "On Adc Onadc" wird der Interrupt deklariert, welcher sich ja am Ende meines Codes befindet.

Admux=&B01100000: mit Bit 7 und 6 wird festgelegt, dass als Referenzspannung AVcc verwendet werden soll (ca. 5V). Bit 5 besagt, dass ich eine Genauigkeit von 8 Bit haben möchte.
Die genuen Kombinationen findest du auch im Datenblatt in einer recht übersichtlichen Tabelle.

Adcsr=&B11101111: mit Bit 7=1 wird der A/D-Konverter eingeschalten, mit Bit 6 wird die Konvertierung gestartet (dieses Bit bleibt auf 1, bis die Konvertierung abgeschlossen ist). Bit 5 aktiviert den Freilaufmodus, d.h. es werden permanent Konvertierungen durchgeführt. Bit 3 schaltet den Interrupt an und die untersten 3 Bit (2,1,0) legen die Taktrate fest - in diesem Fall wird sie wie folgt berechnet: Adc-Takt = AVR-Takt/128


Das Problem ist momentan nicht 3 PWMs zu erzeugen, sondern diese abhängig von meinem externen Signal (Potentiometer) zu steuern.
Mal ganz einfach gesagt, würde ich mir das so vorstellen:


Eingangsspannung (Ue) von Poti
Ausgangssignal (PWM) an LEDs

1.
Ue = 0V
PWM1 = 0V
PWM2 = 2V
PWM3 = 4V

2.
Ue = 2V
PWM1 = 2V
PWM2 = 4V
PWM3 = 0V

3.
Ue = 4V
PWM1 = 4V
PWM2 = 0V
PWM3 = 2V


Das ganze müsste linear geregelt sein. Die Werte sind erst einmal frei gedacht. Mit 3 Potentiometern wäre das ganze ja kein Problem, aber mit nur einem...
Mir fällt leider keine Möglichkeit ein - zumal ich mich noch voll und ganz zu den Anfängern im Bereich µC zähle.

Grüße und danke
Enrico

PicNick
09.12.2004, 10:09
Meinst du das so, daß du mit dem Poti durch den Regenbogen durchfahren willst ? mfg robert

Enrico3
09.12.2004, 10:46
genau so :-)

Grüße und danke
Enrico

RCO
09.12.2004, 11:28
Also du könntest doch mit dem ACD bestimmt Werte von 0-255 erhalten, warum erreichst du eigentlich nur 4V? dann nen par Berechnungen:

Für PWM1:
PWM1 = ADC 'linearer Ansieg

Für PWM2:
if ADC <= 128 then 'Anstieg von 128 auf 256
PWM2=ADC+128
else
PWM2=255-((ADC-128)*2) 'Abfallen von 256 auf 0
end if

Für PWm 3:
if ADC <= 128 then
PWM3=255-(ADC*2) 'Abfallen von 256 auf 0
else
PWM3=ADC-128 'Ansteigen von 0 auf 128
end if

Damit solltest du die Übergänge hinbekommen, sie reglen halt linear deine Übergänge. Ob du damit alle Farben hinbekommst, weiß ich nicht.

Nun eine Bitte, könntest du mir mal ein kurzes beispiel für einen AD-Interrupt an ADC(4) schreiben, und ein wenig kommentieren, damit würdest du mir enorm weiterhelfen. Danke schon mal im Voraus.

MFG Moritz

PicNick
09.12.2004, 11:44
Oh je, ich hab' befürchtet, daß du das sagen wirst. Da sind wir eigentlich in der Fernsehtechnik wegen den einzelnen faktoren, passende Bücher hab' ich jetzt nicht zur Hand
Im Prinzip geht's darum: jede LED sendet irgendwelche nM als Wellenlänge aus ==> Datenblatt
Poti regelt von Rot nach blau, also nM --> nM
Die rote LED leuchtet also voll bei AD-Wert 0 (links) und is aus bei AD 255.
Blau genau das Gegenteil.
Grün is irgendwo dazwischen, und zwar mußt du das Verhältnis der Wellenlängen umrechnen auf 0-255
Grün leucht' also am stärksten bei dieser Zahl, rechts und links is weniger bis Null.
Du kannst dir auch am PC mit irgendeinem Zeichenprogramm die Farbmischung 0-255 für jede Farbe ansehen, Ganz perfekt wär dann eine Tabelle mit je drei RGB Werten für jeden AD-Input. Zumindest kannst du mit Stichproben deine Werte überprüfen
Ich hoff', das hilft für's Erste mfg robert

EDIT: falls irgendwo ein Wissender hinter einer Hecke sitzt, jetzt wär der richtige Moment für den Auftritt

RCO
09.12.2004, 11:51
So ists nennt sich glaub ich additive Farbmischung, und wird beim Fernseher etc, verwendet, beruht halt darauf, dass das menschliche Auge nur 3 farbrezeptoren hat und auf gewisse entfernungen nicht mehr sieht, ob da jetzt eine LEd oder drei sind.

Ein Typ zu der Farbpallete, geh mal unter Paint/Farben/Palette bearbeiten/mehr farben
Da findest du alle Farben und die entsprechenden RGBS, alerdings natürlich alle mit verschiedenen Sättigungen etc.
VIELE FARBEN!

MFG Moritz

PicNick
09.12.2004, 13:17
@RCO: weise und wahr gesprochen.
Was ich nicht sicher bin ist, ob man die Farben der LED linear mischen kann oder ob man das mit irgendwelchen Kurven umrechenen muß.
Ich hoff halt, für einmal gucken reicht's so.
Am besten teilt man wahrscheinlich den Regenbogen auf, sagen wir, 16 Teile, schreibt sich diese Werte aus dem Paint-Farbmischer ab und dazwischen interpoliert man halt.
Zu dumm, daß unsere 3 Rezeptoren nicht auch EU-normgerecht auf RBG empfindlich sind, sondern auf irgendwelche anderen seltsame Werte. :-k

RCO
09.12.2004, 13:27
Also vermutlich könnte man noch mit irgendwelchen Kurven rechnen, wenn man nicht die Sättigung hat. man nimmt sich ein par Punkte aus dem Farchema und holt sich halt alle Roten bildet daraus eine Funktion, dass sollte machbar sein, falls die Kurve nicht zu hart ist, aber dann noch die Sättigung dareinkriegen, dass iwrd schwierig.
Allerdings hab ich bei HTML ja mal die Farben so angegen "AABBCC" für jede Farbe FF also 256 Werte. So könnte man das für die Farben leicht angeben.
Mit einem Poti könnte man eh nur den farbverlauf bei einer bestimmten Sättigung machen, ist ja bezogen auf das Farbchema nur eindemesional.

Also bei Paint eine sättigung einstellen, sich nacheinander ein par Punkte x = x ; y = Farbanteil holen eine Kurve basteln und berechnen lassen. Für x sollte man dann nach mäglichkeit 255 Werte haben, damit das mit dem PWM schön passt, wenn man den aber eh selber schreibt auch kein Ding.
x ist dann der Wert des ADCs und mit den 3 Funktionen für RGB kannst du dann y berechenen... EASY. :-)
Ich hoffe ihr werdet daraus schlau ;-)

@Enrico3: Bitte hilf mir bei dem ADC-Interrupt [-o<

MFG Moritz

RCO
09.12.2004, 13:46
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

JanB
09.12.2004, 13:51
Hallo,
Guck mal hier rein:

http://www.led-tech.de/produkt-pdf/rainbow.pdf

Dort findest du ein Datenblatt zu einer
sogenannten Rainbow-Fading-LED.
Das ist eine LED, die selbständig nacheinander
alle Farben des Spektrums "durchläuft".
In dem Datenblatt sind an Schluß die Timingcharts
für die drei R, G und B LEDS angegeben.
Timingchart 2 oder 3 müsste das richtige für dich sein sein.
Diese Effkt-LED sieht übrigens Suuuper aus.
Hab ich an den Rotorblatt-Enden meines Modellhubschraubers,
für Nachtflug.

Gruß Jan

Enrico3
09.12.2004, 19:58
Danke erst einmal für die Zahlreichen Antworten.

Also das mit der Farbmischung ist soweit erst mal klar für mich. Mein Problem ist jetzt noch - wie bekomme ich 3 PWMs in einem Timer unter?

Ich hab das probieren jetzt garade aufgegeben. Oder muss ich da mehrere Timer nehmen. Soweit ich weiß kann ich z.B. nur immer einen Timer0 nehmen?
Das mit der Kurvenberechnung hab ich jetzt nicht so recht verstanden, könnte mir da evtl. jemand ein Beispiel geben.
Wie schon gesagt, mit zwei LEDs habe ich die Regelung hinbekommen, abder die dritte will da nicht so richtig mitmachen.

Grüße und danke
Enrico

Enrico3
09.12.2004, 23:39
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

RCO
10.12.2004, 09:05
Aber du kannst den PWm auch selber schreiben, du nimmst dir einen Timer der relativ schnell nen Interrupt auslöst, im Interrupt zählst du in einer Variablen (i) bei jedem interrupt immer +1, von 0 bis 255, nach dem Wert für die entsprechende LED wird die Led dann ausgeschaltet, bei i = 0 werden die die Leds eingeschaltet. So hast du einen PWM und den Vorteil, dass du quasi beliebig viele PWMs aus einem Timer generieren kannst.

MFG Moritz

Enrico3
10.12.2004, 10:08
Hallo,

kannst du mir dafür ein Beispiel geben.
Mein Verständnisproblem liegt momentan darin, dass ich nur einen Eingang (Potentiometer) habe, welcher Werte zwischen 0 und 255 annehmen kann. Wenn ich jetzt 3 verschiedene PWMs habe müssen diese wie im Diagram dargestellt geregelt werden.
Für mich heist das, dass sich 6 verschiedene Kombinationen ergeben (240 / 40 = 6), eigentlich sind es 8, aber alle LEDs an und alle LEDs aus will ich jetzt mal weglassen.
Ich habe also für jede Kombination 40 Schritte (vom Potentiometer) mit denen ich das PWM-Signal von 0 - 240 in 6er-Schritten regeln muss.

Ich hatte mir da folgenden Code gedacht:


$regfile = "m8def.dat"
$crystal = 3686400

On Timer0 Ontimer0
Dim Led1 As Byte
Dim Led2 As Byte
Dim Led3 As Byte

Dim D1 As Byte
Dim D2 As Byte
Dim D3 As Byte
Dim D4 As Byte
Dim D5 As Byte
Dim D6 As Byte
Dim D2_1 As Byte
Dim D4_1 As Byte
Dim D6_1 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

D1 = Adch
D2_1 = Adch - 40
D2 = Not D2_1
D3 = Adch - 80
D4_1 = Adch - 120
D4 = Not D4_1
D5 = Adch - 160
D6_1 = Adch - 200
D6 = Not D6_1

Ontimer0:
If Adch <= 40 Then
Led1 = 240
Led2 = D1 * 6
Led3 = 0
Else
If Adch <= 80 Then
Led1 = D2 * 6
Led2 = 240
Led3 = 0
Else
If Adch <= 120 Then
Led1 = 0
Led2 = 240
Led3 = D3 * 6
Else
If Adch <= 160 Then
Led1 = 0
Led2 = D4 * 6
Led3 = 0
Else
If Adch <= 200 Then
Led1 = D5 * 6
Led2 = 0
Led3 = 240
Else
If Adch <= 240 Then
Led1 = 240
Led2 = 0
Led3 = D6 * 6
Else
End If
End If
End If
End If
End If
End If
Return

End


Leider funktioniert das so nicht, die LEDs gehen so mehr oder minder schlagartig an und aus, wenn ich am Poti drehe.

Also für weitere Hilfe bin ich sehr dankbar.

Grüße
Enrico

RCO
10.12.2004, 10:34
HM... also komeltt schreiben kann ichs dir wohl nicht, aber mal einen Anfang machen. Leider hab ich hier kein Bascom, es könnte also sein, das ein par Fehler drin sind, oder Dinge die leicht umgeschrieben werden können:



Config Timer0 = Timer , Prescale = 8
On Timer0 Timer_irq
Const Timervorgabe = 100 'Je nachdem wie hoch die PWM rate sein soll, musst du hier andere Werte setzen
Enable Timer0
Enable Interrupts

Dim i as byte

Do
Led1
Led2
Led3
'Hier werden die Werte für den PWM berechnet, wenn du nur Wert von 0 bis 240 hast, musst du unten einfach nur sagen dass i ab 240 wieder auf null geht.
Loop
end

Timer_irq
Timer0 = Timervorgabe
i++
If i >= 255 Then
i = 0
end if

if i > Led1 then portx = 0 'Portx muss vorher definiert werden
if i <= Led1 then portx = 1

if i > Led2 then portx = 0
if i <= Led2 then portx = 1

if i > Led3 then portx = 0
if i <= Led3 then portx = 1

Return

So sollte es gehen, der Vorteil, du musst halt nicht zwangsläufig bis 255 gehen, da das Farbchema ja nur bis 240 gehen, kannst du das besser anpassen. Außerdem brauchst du nur einen Timer.

Wenn du eine PWM-Rate von 100Hz haben willst, müsstest du 8Mhz und Prescale 8 bei Timer0, außerdem einem PWM von 255 (mal gard nicht nicht 240) dann muss die Timervorgabe:

8000000/8/255=3906,25
Wenn der Timer jetzt bei 39 auslöst, hast du 100 Hz, Timervorgabe dann 256-39=217 sein.

MFG Moritz

Enrico3
10.12.2004, 12:27
Hallo nochmal,

ich hab jetzt endlich die Lösung:



$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600

Ddrd = &B11100000
Admux = &B01100000
Adcsr = &B11101111

Config Timer0 = Timer , Prescale = 8
On Timer0 Timer_irq
Const Timervorgabe = 237
Enable Timer0
Enable Interrupts

Dim I As Byte
Dim Led1 As Byte
Dim Led2 As Byte
Dim Led3 As Byte

Dim D1 As Byte
Dim D2 As Byte
Dim D3 As Byte
Dim D4 As Byte
Dim D5 As Byte
Dim D6 As Byte
Dim D2_1 As Byte
Dim D4_1 As Byte
Dim D6_1 As Byte

Do
D1 = Adch
D2_1 = Adch - 40
D2 = Not D2_1
D3 = Adch - 80
D4_1 = Adch - 120
D4 = Not D4_1
D5 = Adch - 160
D6_1 = Adch - 200
D6 = Not D6_1

If Adch <= 40 Then
Led1 = 240
Led2 = D1 * 6
Led3 = 0
Else
If Adch <= 80 Then
Led1 = D2 * 6
Led2 = 240
Led3 = 0
Else
If Adch <= 120 Then
Led1 = 0
Led2 = 240
Led3 = D3 * 6
Else
If Adch <= 160 Then
Led1 = 0
Led2 = D4 * 6
Led3 = 240
Else
If Adch <= 200 Then
Led1 = D5 * 6
Led2 = 0
Led3 = 240
Else
If Adch <= 240 Then
Led1 = 240
Led2 = 0
Led3 = D6 * 6
Else
End If
End If
End If
End If
End If
End If
Loop

Timer_irq:
Timer0 = Timervorgabe
I = I + 1

If I = 255 Then
I = 0
End If

If I > Led1 Then Portd.5 = 0
If I <= Led1 Then Portd.5 = 1

If I > Led2 Then Portd.6 = 0
If I <= Led2 Then Portd.6 = 1

If I > Led3 Then Portd.7 = 0
If I <= Led3 Then Portd.7 = 1

Udr = Adch
Return

End


Ob das nun die Endlösung ist wage ich mal zu bezweifeln, aber es funktioniert so wie ich es will und auch so wie es im Diagramm dargestellt ist.

Wer jetzt noch Verbesserungsschläge hat - immer her damit.
Ich habe z.B. festgestellt, dass die LEDs nie ganz aus sind, sie leuchten auch bei eingestelltem 0-Wert noch ganz schwach (kaum zu sehen). Woran könnte das liegen?

Grüße und danke für eure Hilfe
Enrico

RCO
10.12.2004, 12:37
Also schön, wenn es so klappt, folgendes könntest du noch änder (minimal):

Ich hab dir ja geschriben:


If I > Led1 Then Portd.5 = 0
If I <= Led1 Then Portd.5 = 1

Sinniger wäre:

If I >= Led1 Then Portd.5 = 0
If I < Led1 Then Portd.5 = 1

da sonst auch bei 0, da =0 immer ein Verhältniss von 1 zu 255 entsteht, auch bei Ledx = 0, aber ich glaube kaum dass das was ausmacht.

MFG Moritz

Enrico3
10.12.2004, 12:53
Hallo,

hattest recht, das hat auch was gebracht, jetzt sind die LEDs wirklich aus wenn sie auf 0 stehen. Nur wenn ADCH den Wert 255 hat (also wenn das Poti voll auf ist), leuchtet die 3. LED noch ganz leicht. Könnte das der Restwert von 240 auf 255 sein?

Grüße
Enrico

Enrico3
10.12.2004, 13:07
Fehler gefunden:



$regfile = "m8def.dat"
$crystal = 3686400
'$baud = 9600

Ddrd = &B11100000
Admux = &B01100000
Adcsr = &B11101111

Config Timer0 = Timer , Prescale = 8
On Timer0 Timer_irq
Enable Timer0
Enable Interrupts

Dim I As Byte
Dim Led1 As Byte
Dim Led2 As Byte
Dim Led3 As Byte

Dim D1 As Byte
Dim D2 As Byte
Dim D3 As Byte
Dim D4 As Byte
Dim D5 As Byte
Dim D6 As Byte
Dim D2_1 As Byte
Dim D4_1 As Byte
Dim D6_1 As Byte

Do
D1 = Adch
D2_1 = Adch - 40
D2 = Not D2_1
D3 = Adch - 80
D4_1 = Adch - 120
D4 = Not D4_1
D5 = Adch - 160
D6_1 = Adch - 200
D6 = Not D6_1

If Adch <= 40 Then
Led1 = 240
Led2 = D1 * 6
Led3 = 0
Else
If Adch <= 80 Then
Led1 = D2 * 6
Led2 = 240
Led3 = 0
Else
If Adch <= 120 Then
Led1 = 0
Led2 = 240
Led3 = D3 * 6
Else
If Adch <= 160 Then
Led1 = 0
Led2 = D4 * 6
Led3 = 240
Else
If Adch <= 200 Then
Led1 = D5 * 6
Led2 = 0
Led3 = 240
Else
If Adch <= 240 Then
Led1 = 240
Led2 = 0
Led3 = D6 * 6
Else
If Adch > 240 Then
Led1 = 240
Led2 = 0
Led3 = 0
End If
End If
End If
End If
End If
End If
End If
Loop

Timer_irq:
Timer0 = 246
I = I + 1

If I = 240 Then
I = 0
End If

If I >= Led1 Then Portd.5 = 0
If I < Led1 Then Portd.5 = 1

If I >= Led2 Then Portd.6 = 0
If I < Led2 Then Portd.6 = 1

If I >= Led3 Then Portd.7 = 0
If I < Led3 Then Portd.7 = 1

'Udr = Adch
Return

End


Es waren wirklich die Differenz von 15 zwischen 240 und 255.

Grüße und danke nochmal an alle
Enrico

RCO
10.12.2004, 13:22
Vieleicht könnte man das ganze jetzt noch mit dem ADC-Interrupt abrunden, dann hätte der µC doch noch weniger zu tun, oder?
Kannst ja sonst auch mal nen Foto schicken.

MFG Moritz

Enrico3
11.12.2004, 17:43
Hallo,

klar könnte man noch einiges besser machen, aber ganz arbeitslos soll das µC ja nun auch nicht werden ;-)
Nein, aber ich werde noch versuchen das ganze mit einer Fernbedienung (IR) zu regeln.
Bilder und alles drumherum wirds irgendwann mal auf meiner Website zu sehen geben: www.enricobaumgart.de, das liegt allerdings noch etwas in der Zukunft... bis dahin!

Grüße
Enrico

dunkelmann
11.04.2005, 10:50
Schau mal unter

http://www.loetstelle.net/projekte/projekte.php

Da gibts Assembler-Quellcode für verschiedene PWM-Anwendungen mit RGB-Led's!