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.
Bild hier
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.
Bild hier
(mein erster eagle-schaltplan.. wenn etwas daran nicht passt, sagt es mir bitte)
die osram-led hat mir ein bekannter überlassen, ich musste sie halbieren, weil sie sonst nicht in den stein gepasst hätte:
Bild hier
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 (einige tage dauerbetrieb) hat es der regler überstanden.
aufgebaut wurde die schaltung auf lochraster:
Bild hier
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:
Code:
// 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
ich hätte den code noch ein wenig aufräumen und ein paar bytes einsparen können, dazu war ich zu faul. die 4kB flash-rom des atmega8 sind nahezu vollständig belegt.
gruesse
Lesezeichen