Zunächst began es alles mit einer Lampe, Typ LOCK von Ikea für 2Euro, welche ich durch ihren sehr günstigen Preis und dem Milchglas gewählt habe.
Diese sieht zunächst einmal so aus: Als erstes wurde das Innenleben entfernt und 2 Löcher für den Kühler mit der P5 gebohrt. Danach habe ich einen Kühlkörper der so rum lag ein bischen modifiziert. 2 Kühlrippen mussten wegen des Abstrahlverhaltens dran glauben. Zusätzlich habe ich dann noch 4 Löcher für die P5 gebohrt und natürlich noch 2 für die Befestigung in der Lampe. Diese schön angesenkt, damit sowohl die P5 schön plan auf dem Kühlkörper aufliegt, als auch der Kühlkörper im Gehäuse.
Dann habe ich die P5 mit Senkkopfschrauben befestigt, WPS dazwischen geschmiert und die Kabel angelötet: Zusammengebaut sieht das so aus :
Soweit mal das mechanische
Angesteuert wird das ganze mit einem Atmega8, diese Sache ist noch nicht ganz zu meiner zufridenheit gelöst, da ich im moment nur feste Programm abläufe habe. Werde wohl in Zukunft dann auf DMX zurückgreifen.
ein Bild von der Bastelei, zu sehen ist eine AVR Entwicklungsplatine sowie eine Erweiterungsplatine mit 4 Treibern, wovon nur 3 verwendet werden. Das ganze habe ich dann an ein PC Netzteil angeschlossen, wie der Experte am MOLEX Stecker sehen kann
Grundsätzlich werden die 3 PWM Timer des Atmel initialisiert und dann die Farben per PWM einzeln hoch-, bzw runtergefahren. In Summe habe ich wegen der Helligkeit immer den Wert 255 genommen.
Code: Alles auswählen
/*
RGB v0.1
*/
#define Ledport PORTB
#define R PB1
#define G PB2
#define B PB3
#define R_PWM OCR2
#define G_PWM OCR1A
#define B_PWM OCR1B
#include <avr>
#include <util>
#include <stdint>
int my_delay(void);
int main(void)
{
//PB3-PB0 als Ausgang
DDRB |= (1 << PB3);
DDRB |= (1 << PB2);
DDRB |= (1 << PB1);
DDRB |= (1 << PB0);
PORTB &= ~(1 << PB3);
PORTB &= ~(1 << PB2);
PORTB &= ~(1 << PB1);
PORTB &= ~(1 << PB0);
//*********************8 Bit Counter ****************
//CLK / 64
TCCR2 &= ~(1 << CS22);
TCCR2 |= (1 << CS21);
TCCR2 |= (1 << CS20);
//FOC2 muss 0 sein
TCCR2 &= ~(1 << FOC2);
//8Bit PWM
TCCR2 &= ~(1 << WGM21);
TCCR2 |= (1 << WGM20);
//noninvert PWM
TCCR2 |= (1 << COM21);
TCCR2 &= ~(1 << COM20);
TCNT2 =0;
//*********************16 Bit Counter ****************
//CLK / 64
TCCR1B &= ~(1 << CS12);
TCCR1B |= (1 << CS11);
TCCR1B |= (1 << CS10);
//FOC2 muss 0 sein
TCCR1A &= ~(1 << FOC1A);
TCCR1A &= ~(1 << FOC1B);
//8Bit PWM
TCCR1A &= ~(1 << WGM11);
TCCR1A |= (1 << WGM10);
//noninvert PWM
TCCR1A |= (1 << COM1A1);
TCCR1A &= ~(1 << COM1A0);
//noninvert PWM
TCCR1A |= (1 << COM1B1);
TCCR1A &= ~(1 << COM1B0);
TCNT1H = 0;
TCNT1L = 0;
//COUNTER0
//CLK / 64
TCCR0 |= (1 << CS02);
TCCR0 &= ~(1 << CS01);
TCCR0 |= (1 << CS00);
TCNT0 =0;
volatile uint8_t i;
while(1)
{
for (i=0;i<255;i++)
{
B_PWM=i;
R_PWM=(254-i);
my_delay();
}
for (i=0;i<255;i++)
{
G_PWM=i;
B_PWM=(254-i);
my_delay();
}
for (i=0;i<255;i++)
{
R_PWM=i;
G_PWM=(254-i);
my_delay();
}
}
}
int my_delay(void)
{
_delay_ms(100);
_delay_ms(100);
_delay_ms(100);
_delay_ms(100);
_delay_ms(100);
}
Rot Grün Blau Natürlich funktionieren auch alle Zwischen farben, jedoch habe ich auf diese Bilder verzichtet.
Man könnte das ganze denke ich mal sogar komplett in die Lampe mit integrieren, der Platz sollte genug sein. Die Development Board Lösung ist nicht für den täglichen Einsatz gedacht.
Hoffe es war verständlich genug beschrieben, neige sehr gerne dazu Sachen nicht zu erwähnen. Wenn es Fragen gibt, dann einfach posten.




