Stoppt die Vorratsdatenspeicherung! Jetzt klicken && handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:
 
RGB Ambient Light
von Plapperkatze am 9.November 2009 um 17:13
zurück zur Kategorie "Tutorials"

Zwar kein herausragendes Projekt, aber vielleicht trotzdem für jemanden interessant: eine RGB Led mit fliessenden Farbübergängen und Lichtorgel-funktion, per Fernbedienung steuerbar. Als Controller wird ein Atmega8 verwendet.

Hier ein kurzes Video, wie das ganze in Betrieb aussieht:
http://katze.dead-men.de/upload/86_ambi.avi

Die Leds werden über Transistoren durch die 3 PWM Ausgänge des Atmega8 angesteuert. Die Signale der Fernbedienung werden über einen TSOP1733 empfangen und mit dem RC5-Decoder von Peter Dannegger ausgewertet. Ein Audio-Signal liegt (mit einem Transistor verstärkt) an einem ADC-Eingang an. Mit der FFT von E.Chan werden die Frequenzanteile bestimmt und damit die Led als Lichtorgel betrieben.

Folgendes möchte ich anmerken:
Der Code ist eher als Anschauungsmaterial zu betrachten, als dass man das fertige .hex File einfach in den Controller schreibt und damit glücklich wird. Die Bedienung ist nämlich schrecklich gewöhnungsbedürftig. Solang es nur ums Ein- und Ausschalten geht, mag es ja angehen, aber die Lichtorgel-Funktion zu konfigurieren ist schlimm.

Weiterhin gibt es scheinbar, das hat sich inzwischen gezeigt, nicht allzuviele Fernbedienungen, die RC5 "sprechen". Meine Hauppauge A415-HPG kann das zufällig, aber viele andere Fernbedienungen führen zu keinem brauchbaren Ergebnis. Ich habe mit folgendem Programm (das zum grössten Teil auf der Arbeit von Peter Dannegger beruht) die Codes meiner Fernbedienung herausgefunden bzw. über die serielle Schnittstelle an den PC übertragen lassen:
http://katze.dead-men.de/upload/87_rc5toCOM.rar



Die Osram-Led hat mir ein Bekannter überlassen, ich musste sie halbieren, weil sie sonst nicht in den Stein gepasst hätte:

Der 7805 wird durch die hohe Betriebsspannung (die Led will 24V) ordentlich heiss, das ist nicht optimal. Die Led war aber quasi vorgegeben, und bisher (fast 2 Jahre) hat es der Regler überstanden. Einzig den zum Regler gehörenden Elko hätte ich wohl geschickter etwas weiter weg gesetzt, da Elkos so hohe Temperaturen nicht mögen. Hat aber bisher nichts ausgemacht.

Aufgebaut wurde die Schaltung auf Lochraster:


Interessant am Quellcode könnte (ausser der FFT und dem RC5-Decoder) die HSL/RGB-Funktion sein. Damit sind stufenlose Farbübergänge (keine "Sprünge") und Einstellung von Sättigung und Helligkeit möglich:
// set pwm according to HSL values
// hue (0-1535), saturation (0-255), brighness (0-255)
void HSLtoLED(unsigned int h,unsigned int s,unsigned int l)
{
 unsigned int r,g,b;
 unsigned int satr,satg,satb,ctmpr,ctmpg,ctmpb;

 if (h < 512)
 {
    satr = (512 - h);
    satg = h;
    satb = 0;
 }
 else if (h < 1024)
 {
    satr = 0;
    satg = (1024 - h);
    satb = (h - 512);
 }
 else
 {
    satr = (h - 1024);
    satg = 0;
    satb = (1536 - h);
 }
 if(satr>255)satr=255;
 if(satg>255)satg=255;
 if(satb>255)satb=255;

 ctmpr = satr * s / 256 + (255 - s);
 ctmpg = satg * s / 256 + (255 - s);
 ctmpb = satb * s / 256 + (255 - s);

 if (l < 128)
 {
    r = l * ctmpr / 256;
    g = l * ctmpg / 256;
    b = l * ctmpb / 256;
 }    
 else
 {
    r = (255 - l) * ctmpr / 256 + 2 * l - 255;
    g = (255 - l) * ctmpg / 256 + 2 * l - 255;
    b = (255 - l) * ctmpb / 256 + 2 * l - 255;
 }

 OCR1AL=r;
 OCR1BL=g;
 OCR2=b;
}


Projektdatei, Makefile und Sourcecode als RAR-Archiv:
http://katze.dead-men.de/upload/85_ambilight.rar

Hier noch ein .e2p Eeprom File, das mit PonyProg geschrieben werden kann; es enthält die Konfiguration der Lichtorgel, falls man doch (entgegen meinen Rat) vorhat, das .hex File einfach so zu verwenden:
http://katze.dead-men.de/upload/88_ambilight.e2p

Ich hätte den Code noch ein wenig aufräumen und ein paar Bytes einsparen können, dazu war ich zu faul.

Hier mal noch die Codes meiner Fernbedienung (Hauppauge A415-HPG):
Go 59 Skip 52
Power 61 Play 53
TV 28 Last 36
Videos 24 Next 30
Music 25 Pause 48
Pictures 26 1 1
Guide 27 2 2
Radio 12 3 3
Arrow Up 20 4 4
Arrow Down 21 5 5
Arrow Left 22 6 6
Arrow Right 23 7 7
OK 37 8 8
Back 31 9 9
Menu 13 0 0
Vol + 16 * 10
Vol - 17 # 14
Prev. Ch. 18 Red 11
Mute 15 Green 46
Ch + 32 Yellow 56
Ch - 33 Blue 41
Rec 55    
Stop 54    
Replay 50    


zurück zur Kategorie "Tutorials"
[2 Kommentare]

*sullivan* (Gast) schrieb am 28. März 2011 um 20:32
Huhu Plapper-Katze :))

habe deine Ausführung hier mit Begeisterung gelesen :) tolle Idee und Realisierung :)

Ich kenne mich mit Elektronik selber gut aus, aber leider nicht , oder NOCH nicht, mit diesen kleinen Atmegas... :( würde es auch gerne lernen. Ich baue grade eine große Musikbox, und habe dazu eine Lichtsteuerung gebaut und entwickelt. Die sollte ursprünglich nur in R-G-B ( Regenborgenfarben ) durchlauffen, aber nachdem ich hier von diesen kleinen Tausend-(füsslern) -sassern gelesen habe, würde ich so gerne auch etwas "mehr" aus meinen Lichtleisten rausholen. Ich habe 15 Platinen mit je 8 RBD-LED&#347; und je 4 Amber+4 Pink. Alles in allem habe ich 4 Steuerkanäle die ich ansteuern kann. Andererseits wäre eine Matrix auch nicht schlecht: 7 "zeilen" und 4 "Spalten" + 1 Platine oben und 1 unten. Die Lichtspiel-variationen hängen ja nur noch von der speichergröße und oder der Programmierung ab oder? Ist sowas realisierbar?

Mir schwebt vor, im Ruhezustand der Musikbox dieses Regenbogen-farbspiel, und im "Spiel" Zustand dann links und rechts so als "Aussteuerungsanzeige" ( umschaltbar ) zu machen.

Sooooooo viele Wünsche auf einmal :))

Was meinst du dazu ? Würde mich über eine Info von Dir sehr freuen :)

Liebe Grüße,

Frank



Plapperkatze schrieb am 29. März 2011 um 16:48
Hallo Frank,
ohne dir die Motivation nehmen zu wollen, würde ich dir raten bei den Microcontroller-Geschichten klein anzufangen, also erstmal eine LED an- und ausknipsen, dann sie dimmen, ein Analogsignal auswerten, etc.

Unterschätze nicht den Zeitaufwand der draufgeht, bis man sich da ein wenig reingearbeitet hat und sich im Datenblatt zurechtfindet. Wenn man bisher wenig programmiert hat wird das mehr als 1-2 Tage in Anspruch nehmen. Das soll dich aber nicht davon abhalten!

Wenn du nur die Aussteuerung visualisieren willst, brauchst du keine Fast-Fourier-Transformation, das wäre nur nötig, wenn du die Frequenzbänder aufgeteilt haben willst.

Ein Atmega8 wird für dein Projekt wahrscheinlich zu klein sein, aber es gibt ja groessere µCs. Zum Einstieg sind die Atmega8 allerdings sehr zu empfehlen. Die Programmierung anderer Typen ist dann sehr ähnlich.

Ich sehe 2 Herangehensweisen: Einmal haben die Atmegas PWM-Ausgänge, die recht einfach zum Dimmen von LEDs verwendet werden können; es gibt davon (je nach µC-Typ) aber nur wenige (beim Atmega8 sind es 3). Damit wären Farbverläufe (aller LEDs) durchaus machbar, einzeln ansteuern kannst du sie damit aber nicht.

Zum Anderen können auch (mit Timer-Interrupts) beliebige andere Ausgangspins als PWM Ausgänge verwendet werden, man muss dann halt die PWM softwareseitig emulieren. Der Vorteil sind beliebig viele PWM Ausgänge, allerdings gestaltet sich die Programmierung etwas komplexer als bei einer hardwareseitigen PWM.

Einer Kombination aus Matrix (7 Pins des µCs um die Zeilen zu schalten) und PWM (4 Pins) um sowohl einzelne LEDs schalten als auch dimmen zu können, steht, soweit ich es grad überblicke, nichts entgegen. Um die LEDs auch im Matrixbetrieb richtig hell zu kriegen, wird man sie mit mehr Strom betreiben müssen (Impulsbetrieb), als sie im Dauerbetrieb vertragen. Das würde ich als allerletzten Schritt vorsehen - erst wenn du dich auf deine Software verlassen kannst; sonst wäre mir die Gefahr zu gross, durch einen Softwarefehler die LEDs zu zerstören.

Eine gute Hilfestellung für Projekte erhält man im Roboternetz http://www.roboternetz.de und bei http://www.mikrocontroller.net, allerdings wird man dir auch dort erst einmal nahelegen, dich mit kleinen Schritten in die µC-Programmierung einzuarbeiten, auch wenn man verständlicherweise ungeduldig sein Hauptprojekt in Angriff nehmen will.

Mich würde nebenbei interessieren, wie man ohne µC so einen Regenbogenverlauf hinbekommen kann, ich dachte bisher, dass man ohne oben im Artikel erwähnte HSL/RGB Wandlung gar keine sauber scrollende Palette hinbekommen würde.

Vielleicht gibt dir das hier ja ein paar Anregungen, auf jeden Fall wünsche ich dir viel Spass und Erfolg bei deinem Projekt.

Gruesse von der Plapperkatze

Name


Kommentar




Bitte abtippen


 
(C) 2006-20012 Plapperkatze - 220706 Besucher seit dem 23.01.2012 Login