Witam
Wykonalem sobie ukladzik zgodnie z poniższym schematem
po zasileniu ukadu diody zapalają się i świecą na niebiesko cały czas -a miały przechodzić płynnie między barwami rgb.
Wgralem do attiny następujący firmaware:
za pomocą programatora typu Atmel AVRProg ( AVR910) i programu CodeVisionAVR
wgrałem flash (main.hex - z powyższego kodu). Wszystko wygląda ok soft się zapisał i znajduje się w układzie ale nadal świeci tylko na niebiesko zamiast przechodzić płynnie między barwami rgb.
Co zrobilem nie tak ?? dlaczego to nie działa ? pomocy
p.s. to mój pierwszy układzik i doświadczenie z programowaniem attiny więc proszę o wyrozumialość.
Wykonalem sobie ukladzik zgodnie z poniższym schematem
po zasileniu ukadu diody zapalają się i świecą na niebiesko cały czas -a miały przechodzić płynnie między barwami rgb.
Wgralem do attiny następujący firmaware:
#include <avr/io.h>
#define PIN_R (1 << PB4)
#define PIN_B (1 << PB5)
#define PIN_G (1 << PB3)
typedef unsigned char ui08;
typedef unsigned int ui16;
static char state = 0;
void hsv_inc(ui08 *r, ui08 *g, ui08 *b)
{
switch(state)
{
case 0 : {
*r = 255; *g = 0; *b += 1;
if (*b == 255) { state = 1; }
} break;
case 1 : {
*r -= 1; *b = 255; *g = 0;
if (*r == 0) { state = 2; }
} break;
case 2 : {
*r = 0; *b = 255; *g += 1;
if (*g == 255) { state = 3; }
} break;
case 3 : {
*r = 0; *b -= 1; *g = 255;
if (*b == 0) { state = 4; }
} break;
case 4 : {
*r += 1; *b = 0; *g = 255;
if (*r == 255) { state = 5; }
} break;
case 5 : {
*r = 255; *b = 0; *g -= 1;
if (*g == 0) { state = 0; }
} break;
case 6 : {}
}
}
void test(ui08 *b)
{
switch(state)
{
case 0 : {
*b +=1;
if (*b == 255) state = 1;
} break;
default: {
*b -= 1;
if (*b == 1) state = 0;
} break;
}
}
int main()
{
ui08 r, g, b, i = 0;
ui16 r_max = 50, g_max = 0, b_max = 0;
ui16 t = 0;
DDRB = PIN_R | PIN_G | PIN_B;
PORTB = PIN_R | PIN_G | PIN_B;
while(1) {
i++;
t++;
if(t == 1800) {
t = 0;
hsv_inc(&r, &g, &b);
}
if (r > (i + r_max)) {
PORTB &= ~PIN_R;
} else {
PORTB |= PIN_R;
}
if (g > (i + g_max)) {
PORTB &= ~PIN_G;
} else {
PORTB |= PIN_G;
}
if (b > (i + b_max)) {
PORTB &= ~PIN_B;
} else {
PORTB |= PIN_B;
}
}
}
za pomocą programatora typu Atmel AVRProg ( AVR910) i programu CodeVisionAVR
wgrałem flash (main.hex - z powyższego kodu). Wszystko wygląda ok soft się zapisał i znajduje się w układzie ale nadal świeci tylko na niebiesko zamiast przechodzić płynnie między barwami rgb.
Co zrobilem nie tak ?? dlaczego to nie działa ? pomocy
p.s. to mój pierwszy układzik i doświadczenie z programowaniem attiny więc proszę o wyrozumialość.