Kažkada vasaros metu užsakiau kinišką rinkinuką surinkti 4×4 LED kubą. Rinkinukas nėra brangus, kažkur puspenkto dolerio su atsiuntimu. Už tai gaunam PCB, kalną mėlynu (gal yra ir ne mėlynu) LEDu, kelis rezistorius, dvi mikroschemos 74HC595, visokios jungtys… Ir labai labai kiniškos instrukcijos kurios nieko nerodo. Todėl litavau pagal save ir padariau kiek atvirkščiai- LEDus pastačiau kita kryptim ir jie kitaip užsidega (softe teko invertuoti). Kaip konstruktorius pradedančiajam tinkamas, tačiau reikia žmogaus kuris turi kantrybę- lituoti ore tuos LEDus tikrai reikia nervų. Dabar mano nervai pašliję (nuo buitinio triukšmo), tai teko lituoti net dvi dienas.
Kai viską sulitavau, pakuičiau savo lobynus. Deja nei vienos “arduino” PCB neturiu, o kur turiu nesusiderina pinais su šituo rinkinuku. Kad reikia originalaus arduino rodo debilna 0,1″ jungtis pastumpta per pusę žingsnio.
Softas pridedamas prie konstruktoriau irgi ne fontanai… ypač patiko ši optimizacija:
if(value > 19) return;
if(charge != LOW && charge != HIGH) return;
if(charge == LOW)
{
switch (value)
{
case 0: HC_595_Temp &=~_BV(15); break;
case 1: HC_595_Temp &=~_BV(14); break;
case 2: HC_595_Temp &=~_BV(13); break;
case 3: HC_595_Temp &=~_BV(12); break;
case 4: HC_595_Temp &=~_BV(11); break;
case 5: HC_595_Temp &=~_BV(10); break;
case 6: HC_595_Temp &=~_BV(9); break;
case 7: HC_595_Temp &=~_BV(8); break;
case 8: HC_595_Temp &=~_BV(7); break;
case 9: HC_595_Temp &=~_BV(6); break;
case 10: HC_595_Temp &=~_BV(5); break;
case 11: HC_595_Temp &=~_BV(4); break;
case 12: HC_595_Temp &=~_BV(3); break;
case 13: HC_595_Temp &=~_BV(2); break;
case 14: HC_595_Temp &=~_BV(1); break;
case 15: HC_595_Temp &=~_BV(0); break;
case 16: digitalWrite(LED_Pin16,LOW); break;
case 17: digitalWrite(LED_Pin17,LOW); break;
...
ir panašiai. Iš esmės kiniškam softe kiekvienas LED aprašytas atskirai ir daromas 16×4 ciklas užpildyti tuos aštuonis baitus informacijos reikalingus displėjui. Ir dar visokio monstriško softo. Ką jau pasakyti, kad “raštai” surašyti į paprastą masyvą. Nutariau nesikankinti ir pasirašyti savo softą grynam C.
Mano variantas kiek paprastesnis ir kartu sudėtingesnis jei reikia suprogramuoti animaciją. Animacija saugoma baituose. Po du baitus vienam sluoksniui. Kiekvienas bitas atitinka vieną LED. Pati animacija saugoma progmem.
Visas softas sukasi per pertraukimą, pati serial out procedūra klasikinė, netikrinau ar tikrai reikalingos visos komandos (kad ir priverstinis CLK LOW įjungimas po ciklo). Tačiau viskas veikia.
4×4 LED Cube ATMEGA source kodas ir sukompiliuotas hex.
Dar vienas bambesys- dabar jau harwarėje. Kinai pataupė balastinius rezistorius. Suprojektavo tik po vieną rezistorių visam sluoksniui (nors į rinkinuką įdėjo daugiau rezistorių), todėl kai dega visas sluoksnis, LEDai dega silpniau nei tada, kai dega vos keli LEDukai.
Kairėje kaip padarė kinai, dešinėje kaip daryti geriau. Aišku dešinė schema irgi ne pyragai- viso sluoksnio LEDai teoriškai duoda sakysim 16x20mA=0.32A. O tiek tikrai neina per ATMEGOS vieną koją… ko pasekoje mikroschema dirba nekorektiškam režime. Gerai, kad ji tokia “fool proof” ir veikia, o ne susvyla. Šiaip, kam tada iš viso varginosi su tais rezistoriais… O jei norisi daryti teisingai, čia reikia pakabinti tranzistorių su leistina srove 0,5A ar daugiau ir viskas šviestu tolygiai. Pačios 74HC mikroschemos dirba daugmaž normaliu režimu, nes veikimo metu viena koja “draivina” tik vieną diodą.
Kaip lituoti ne ore. Aišku diodai turi būti apvalūs.
http://picprojects.org.uk/projects/lc/index.htm
Teko lituoti kiniškus diodus – o po to išmesti. Nes jie sistemingai vienas po kito nustodavo veikti. O pakeisti viduje kubo labai problematiška. Teko išleisti daugiau pinigų ir ebay iš UK nusipirkti normalesnių. Aišku gal ir jie kiniški – bet dar vis veika(kokie 5 metai). Ir apskritai kinai taip supaprastina elektroniką, kad keista kaip ji apskritai veikia.