Forum: Mikrocontroller und Digitale Elektronik 3W RGB LED Controller mit AVR mega8


von Julian G. (nuss)


Lesenswert?

Hallo zusammen,

ich habe gestern abend mit der Hilfe von nem Kollegen meinen 3W RGB LED 
controller fertig gestellt.

Auf der Selbsterstellten Platine ist eine 3W ACULED von Perkin Elmer.
Die Led wird über PWM von einem mega8 indirekt angesteuert.
Die LED bekommt ihre Spannung/Strom von einem 500mA LEDtreiber von 
Infineon.

Die software wurde in C geschrieben und beinhaltet folgende modi:
-Blinken (weiss)
-dauerfarben (rgb, cyan, magenta, gelb)
-rainbow effekt

die software wird die tage noch angepasst und weitere modis hinzugefügt.

hier nun erstmal nen video wo die einzelnen modi gefahren werden.

http://de.youtube.com/watch?v=NxcDOgWYago

mfg nuss

von Εrnst B. (ernst)


Lesenswert?

Hmm, der Farbverlauf (Rainbow) schaut nicht so 100% gut aus.
Mit HSV->RGB Wandlung implementiert?
Kennlinien der LED (und des Menschlichen Auges) berücksichtigt?

Oder liegt das einfach an der Kamera mit der der Clip aufgenommen wurde?

von hownottobeseen (Gast)


Lesenswert?

Hallo,

ich habe auch noch eine "nette kleine" RGB-LED (Seoul 3x1W oder noch 
bisschen mehr) herumliegen. Software hab ich dafür schon geschrieben, 
allerdings will die noch nicht so recht.

Da die LED wirklich bestialisch hell ist, läuft per Software ein 14-Bit 
PWM mit >500Hz (ich bin ziemlich flacker-empfindlich).

Problem ist: der PWM läuft alles andere als sauber.
Ich verwende ähnlichen Code wie das fnordlicht, nur funktioniert meiner 
nicht ;)
Meine Software stellt den 16-Bit-Timer jeweils auf die Pause zur 
nächsten PWM-Position ein und wenn diese erreicht wurde (IRQ), wird die 
LED geschaltet.
Das große Problem an der Sache: wenn zwei PWM-Positionen relativ nah 
beieinander liegen, kommt die Farbe falsch bzw. der PWM schmiert mehr 
oder weniger ab. (ist schon bisschen länger her).

Wenn interesse besteht, kann ich den Code mal posten. Bzw. hat jemand 
von euch PWM-Code (am liebsten natürlich C bzw. ASM mit C-Interface ;) 
), der den hohen Anforderungen (3 Kanäle, 12-14 Bit, >500Hz Frequenz) 
entspricht?

Viele Grüße

hownottobeseen

von Εrnst B. (ernst)


Lesenswert?

Mein Code wird da nicht ganz reichen, hat nur 8Bit:
Beitrag "RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung"

von aktueller (Gast)


Lesenswert?

Willst Du gelobt werden?

Das Video lohnt die Zeit nicht.
Ausserdem ist es entweder Modus oder Modi, aber nicht Modis!

von hownottobeseen (Gast)


Lesenswert?

Hallo,

ich hab mal ein Video von meiner Anordnung hochgeladen:

http://de.youtube.com/watch?v=OIDL4sJcdfA

Läuft allerdings noch mit einer älteren Software (die noch nicht zu den 
seltsamen Effekten neigt, damals hatte der PWM glaub so 10 Bit)

Viele Grüße

hownottobeseen

von Jörg B. (manos)


Lesenswert?

Julian Gebhardt wrote:
> hier nun erstmal nen video wo die einzelnen modi gefahren werden.
>
> http://de.youtube.com/watch?v=NxcDOgWYago
Früher hätte man den Leuten wahrscheinlich gesagt auf dem Video ist ein 
UFO zu sehen... Interessant(er) wäre auch mal eine Abbildung der Platine 
im ausgeschaltetem Zustand gewesen... aber da würde auch ein Foto 
reichen.

von BATBAT (Gast)


Lesenswert?

... hm, schlechtes video mit nichtfunktionierender SW (kein sanfter 
farbübergang etc) - worin besteht jetzt der sinn dieses postings, 
julian?

(falls du es nicht verstehst-ich für meinen teil kann gleich 50 ähniche 
postings schleudern, mit meinen nicht gelungenen entwicklungen)

von Steve (Gast)


Lesenswert?

Hey mann der arme Julian! Er wird doch wohl stoltz sein können und sein 
krelles Lämpchen posten dürfen! Früher im Sandkasten haste auch nicht 
einfach jemanden rausschmeißen können, denn sonst wäre(diesmal ohne h) 
die liebe Mami gekommen und hätte dich "geschimpft".
Ich erinnere mich aber, dass man gespielt hat. Naja

Kommt das Lämpchen noch irgendwo rein, oder bleibt die so nackig, wie 
sie von meinem CRT aus schimmert.

>(falls du es nicht verstehst-ich für meinen teil kann gleich 50 ähniche
>postings schleudern, mit meinen nicht gelungenen entwicklungen)

Also ich kann dir eher mehr Funktionierende Entwicklungen posten, als 
misslungene. Ich weis ja nicht wie schnell du aufgibst...

lovely greets

von Julian G. (nuss)


Lesenswert?

vielen dank für euren sehr geistreichen kommentare. was hätte ich 
anderes erwarten sollen?

aber naja für die, die sich hier konstruktiv geäußert haben:
ich hab den farbverlauf einfach "irgendwie" programmiert halt so wie ich 
es für schön empfunden habe.

ja die kamera mit der das aufgenommen wurde ist lausig(vga eben).

kennlinie des mennschlichen auges? ;) was ist das^^

so hier noch mal nen anderes video:
http://de.youtube.com/watch?v=nJFG2ezx3sY

foto von der platine:
http://img135.imageshack.us/img135/7329/dsc00376cy9.jpg

ich freu mich auf brauchbare antworten :)

von Εrnst B. (ernst)


Lesenswert?

> kennlinie des mennschlichen auges? ;) was ist das^^

Beim LED-Fading finden sich unter "Die Kennlinie des Auges genau 
betrachtet" einige Links.

von Fox (Gast)


Lesenswert?

z.B. Hier:

DDRB muss gesetzt werden ob Eingang oder Ausgang. Dabei von links nach 
rechts PB0 bis PB6. 1= Ausgang; 0=Eingang.
PORTB definiert ob der Eingang an den interne Pullup geschalten wird 
oder nicht.
!(PINB & (1<<PB4)) = Abfragen von Taster High or Low
Pin zu High: PORTB |= (1<<PB4);
Pin zu LowL: PORTB &= ~(1<<PB4);

So mit dem kann man nämlich arbeiten.

Jetzt wie sieht das für den ADC aus? Eventuell könnte mir jemand ein 
kleines Beispielprogramm senden? Ein Analoger Eingang schaltet ein 
Ausgang ab einem gewissen Bitwert. Ist das so viel verlangt?



1
int main (void) {           
2
 
3
     DDRB = 0b11101111;             // Pin 3 = Eingang
4
     PORTB = 0b00010000;             // Pin 4 = LOW
5
6
7
while(1) {               
8
9
10
  if ( !(PINB & (1<<PB4)) ){
11
12
    PORTB |= ( (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) );
13
  
14
    }
15
16
  else {
17
    PORTB &= ~( (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) );        //Pin 4 Einschalten
18
    }
19
20
}
21
                          
22
    return 0;               
23
}

von Fox (Gast)


Lesenswert?

Ach falsches Fenster Sorry.

von Zippi (Gast)


Lesenswert?

>Ey BATBAT

>Was funktioniert denn da nicht? Also ich sehe da ein laufendes programm. >Nur 
weil du 50 Projekte hast die nicht funktionieren brauchst du keine >andern Dumm 
anmachen weil die es geschaft haben ;).

Also beim 2. Video sieht man den Farbwechsel schon besser.

Hab nur mal so eine frage, bringt es das denn eine PWM mit 10 oder 14 
bits zu machen? Also ich habe ja schon bei 8bit pro farbe insgesammt 
eine Farbauswahl von 16,7 Mil farben.

von Εrnst B. (ernst)


Lesenswert?

Zippi wrote:

> Hab nur mal so eine frage, bringt es das denn eine PWM mit 10 oder 14
> bits zu machen? Also ich habe ja schon bei 8bit pro farbe insgesammt
> eine Farbauswahl von 16,7 Mil farben.

Also hier nochmal der Link: LED-Fading

Das Auge nimmt Helligkeiten logarithmisch wahr, d.H. du musst eine 
exponentielle Kennlinie fahren um den Anschein einer Linearen 
Leuchtkraftzunahme zu erzeugen.

Um diese Kennlinie sauber auf die PWM zu kriegen braucht man ne hohe 
Auflösung.

Vielleicht so einfacher zu verstehen:

zwischen 1% und 2% PWM Einschaltdauer der LED kann man einen STARKEN 
Unterschied sehen. Zwischen 99% und 100% sieht man KEINEN Unterschied.

Du hast dann zwar theoretisch 16.7mio Farben, aber nur vielleicht 1000 
davon sind für nen Menschen unterscheidbar.

von Zippi (Gast)


Lesenswert?

OK THX Ernst,

aber dafür brauch ich keine 10 bit. Das geht auch mit 8bit wunderbar. OK 
mit 8 bit kann ich knapp 0,4 % verändern und mit 10bit 0,1% der 
helligkeit. Doch weniger als 0,1% nimmt man warscheinlich nur sehr sehr 
schlecht war. also 14bit wären ja 0,006 % änderung. Ich denke, dass das 
schon etwas übertrieben ist.

von Zippi (Gast)


Lesenswert?

Achja, werde mal mit 10bit, 12bit, 14bit oder 16bit PWM und e-funktion 
testen. Denke aber das ich dann auch mit mehr als 8 Mhz arbeiten muss.

mfg Zippi

von hownottobeseen (Gast)


Lesenswert?

Hallo,

Zippi schrieb:
> also 14bit wären ja 0,006 % änderung. Ich denke, dass das
> schon etwas übertrieben ist.

das dachte ich auch ;)
ich hab auch mit 8 Bit angefangen, war ja ganz nett, aber: bei höchstem 
Strom und bei maximaler PWM-Helligkeit brennt es einem die Netzhaut 
runter.
Das andere Extrem (16 Bit) war bei 16 MHz-CPU-Takt zu langsam, man sah 
es durchweg flackern.

Nachdem das Ding bei mir später im Alltagseinsatz (Wohnzimmer, tagsüber 
hell, abends dunkel) ist, soll natürlich ein hoher Dynamikumfang da sein 
;)
Deswegen hab ich mich mal pauschal auf 12-14 Bit eingeschossen.

Mein letzter (vergeblicher) Versuch waren entweder 12 oder 14 Bit, das 
sollte für eine Kennlinie und für den erweiterten Helligkeitsraum dicke 
reichen.

Die LED(s) bei mir ist/sind übrigens die hier: 
http://www.dianaelectronic.de/faq/F50381.pdf

Kann ich nur empfehlen! Sind zwar ziemlich teuer aber machen ziemlich 
Druck ;)

Viele Grüße

hownottobeseen

von Julian G. (nuss)


Lesenswert?

die led auf meinem board ist diese hier:
http://www.dotlight.de/shop/product_info.php/cPath/263_264/products_id/743

@ernst...jetzt hab ich das mit der kennlinie auch verstanden :D

von gast (Gast)


Lesenswert?

@julian:
verpass der led unbedingt noch nen kühlkörper!
sonst stirbt sie früher oder später!!

von Julian G. (nuss)


Lesenswert?

alles klar hab ich hier liegen :D
muss ich nur noch festschrauben :D

danke für die information =)

von Fox (Gast)


Lesenswert?

Ich finde die Lampe genial!

Möchte mir auch so eine bauen. Wäre es möglich, dass du den Code und den 
verwendeten Chip mitteilen könntest?

Gruss Fox

von Julian G. (nuss)


Lesenswert?

der controller ist nen atmega8...
den code kann ich dir per mail schicken...will ich hier ned posten

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
Noch kein Account? Hier anmelden.