RG(B) LED Hodiny problém - "stínování číslic"
Napsal: 18 črc 2019, 14:48
Zdravím, nějakou dobu pracuji na projektu RGB Led hodin, které mají od určitého času svítit červeně a pozvolna přecházet do zelené. Hodiny jsou vytvořeny z RGB Led pásků, každý jednotlivý segment číslice je jeden segment pásku (tzn. 3 RGB LED diody). Udělal jsem si návrh schématu, odzkoušel jednotlivé "moduly", napsal program a návrh funguje až na jeden problém a to je, že se mi jednotlivé číslice mírně zobrazují na sousedních číslicích. Nazývám to stínování číslic, nevím jestli pro to je jiný pojem. Nemůžu přijít na to jestli se jedná o problém programu (arduina), nebo návrhu elektroniky. Přikládám schámata a kód programu.
Kód arduina:
Vynechal jsem deklaraci proměnných a definování jednotlivých pinů. Nezáleží na tom jaké tempo (delay) nastavím, jestli 400ms nebo 5ms, číslice se stále zobrazují kde nemají.
Obrázky jsou při napájení UDN cca 9,6V, pokud snížím na 8V tak se to tolik neprojevuje. Kde může být problém v programu, nebo v elektronice, je možné že je chyba v UDN2981?
Kód arduina:
Kód: Vybrat vše
int tempo = 4;
void changeColor() {
int sec = dt.second;
analogWrite(green, map(sec, 0, 59, 0, 255));
analogWrite(red, map(sec, 0, 59, 255, 0));
}
TimedAction color = TimedAction(1, changeColor);
void loop() {
color.check();
dt = clock.getDateTime();
hour1 = dt.hour / 10;
hour2 = dt.hour % 10;
minute1 = dt.minute / 10;
minute2 = dt.minute % 10;
digit(1);
segments(hour1);
delay(tempo);
digit(2);
segments(hour2);
delay(tempo);
digit(3);
segments(minute1);
delay(tempo);
digit(4);
segments(minute2);
delay(tempo);
}
void digit(int digit) {
switch (digit) {
case 0:
PORTB = B00000000;
break;
case 1:
PORTB = B00001000;
break;
case 2:
PORTB = B00000100;
break;
case 3:
PORTB = B00000010;
break;
case 4:
PORTB = B00000001;
break;
}
}
void segments(int number) {
switch (number) {
case 0:
PORTL = B01111110;
break;
case 1:
PORTL = B00110000;
break;
case 2:
PORTL = B01101101;
break;
case 3:
PORTL = B01111001;
break;
case 4:
PORTL = B00110011;
break;
case 5:
PORTL = B01011011;
break;
case 6:
PORTL = B01011111;
break;
case 7:
PORTL = B01110000;
break;
case 8:
PORTL = B01111111;
break;
case 9:
PORTL = B01111011;
break;
}
}
Vynechal jsem deklaraci proměnných a definování jednotlivých pinů. Nezáleží na tom jaké tempo (delay) nastavím, jestli 400ms nebo 5ms, číslice se stále zobrazují kde nemají.
Obrázky jsou při napájení UDN cca 9,6V, pokud snížím na 8V tak se to tolik neprojevuje. Kde může být problém v programu, nebo v elektronice, je možné že je chyba v UDN2981?