Wiem, że macie już powyżej uszu lampek RGB, ale mimo wszystko może mi dacie jakieś wskazówki ?
Napisałem taki program, do obsługi lampki z jednym przyciskiem, którego wciśnięcie ma zmieniać tryb z pracy płynnej na skokową. To jest w zasadzie dopiero szkielet programu, ale już zajmuje więcej niż procesor ma pamięci... Mógłby mi ktoś powiedzieć jak go zoptymalizować ?
[/quote]
Napisałem taki program, do obsługi lampki z jednym przyciskiem, którego wciśnięcie ma zmieniać tryb z pracy płynnej na skokową. To jest w zasadzie dopiero szkielet programu, ale już zajmuje więcej niż procesor ma pamięci... Mógłby mi ktoś powiedzieć jak go zoptymalizować ?
#define F_CPU 400000L
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
volatile int red, green, blue; //do funkcji fpwm
volatile tryb=0; //do wektora przerwan
volatile int i;
volatile int C=20;
volatile int D=2000;
ISR(INT0_vect) //przerwanie int0
{
tryb=tryb+1;
if (tryb==2) tryb=0;
}
int fpwm(red, green, blue) //PWM
{
DDRB=0xff;
TCCR0A|=(1<<COM0A1)|(1<<COM0A0)|(1<<WGM00);
TCCR0B|=(1<<CS00);
OCR0A=red;
TCCR1A|=(1<<COM1A1)|(1<<COM1A0)|(1<<COM1B0)|(1<<COM1B1)|(1<<WGM10);
TCCR1B|=(1<<CS10);
OCR1A=green;
OCR1B=blue;
}
int plynnie(void) //plynne zmienianie kolorow
{
while (1)
{
for (i=0; i<255; i++)
{
fpwm(0, 255, i);
_delay_ms(C);
};
_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(i, 255-i, 255);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(255-i, i, 255-i);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(i, 255-i, 0);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(255, 0, i);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(255-(i/2), (i/4), 255);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(120, 65+(i/3), 255-i);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(120+(i/2), 255-i, 0);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(255, i/3, 0);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(255, 85+(i/3), 0);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(255, 255, i);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(255-i, 255, 255);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm(0, 255-i, 255);
_delay_ms(C);
};_delay_ms(D);
for (i=0; i<255; i++)
{
fpwm((i/2), 0, 255-i);
_delay_ms(C);
};_delay_ms(D);
}
}
int skokowo(void) //skokowa zmiana kolorow
{
while(1)
{
fpwm(255,0, 0);
_delay_ms(2000);
fpwm(0, 255, 0);
_delay_ms(2000);
fpwm(0, 0, 255);
_delay_ms(2000);
}
}
int main(void)
{
GIMSK|=(1<<INT0); //zezwolenie na przerwanie int0
sei(); //ogolne zezwolenie na przerwania
switch(tryb)
{
case 0:
plynnie();
case 1:
skokowo();
}
}