Tag Archives: LED

ARM46: WS2812 RBG LED juostelė kitaip

Prieš septynius metus rašiau apie WS2812 RGB LED juostelę ir kaip ją valdyti su AVR. Naujam projektui kilo mintis panaudoti minėtus diodus pašvietimui. Tingėjau rašyti savo programą LED valdymui, tai pažiūrėjau internetuose kaip rekomenduoja STM32 procikui. Ir pirmieji pavyzdukai buvo su taimeriu, PWM ir pertraukimais. Kažkaip griozdiškai viskas atrodė ir dar mano projekte sunaudoti visi PWM signalai.

RGB LED W2812
(fotkė vogta iš interneto, vėliau pakeisiu)

O gal panaudoti tokius:
LEDas
Turiu visą špūlę tik nežinau kas tai.

Kiek paguglinau giliau ir radau elegantišką sprendimą su SPI. Netgi galimas DMA variantas. Man tereikia valdyti tik 6 diodus, tai DMA nenaudosim. Tiesa, po šio sprendimo lieka SPI CLK koja nepanaudojama. O ir pats SPI sunaudojamas. Principas tame, kad reikiamus signalo intervalus suformuojam su keliais bitais baite. Poto užtenka buferį išpumpuoti per SPI ir WS2812 pilnai viską supranta.
Metodas pilnai vogtas iš interneto, todėl va kopyraitas: “© 2008 – 2022 Martin van der Werff · Groningen, The Netherlands.”. Originalaus puslapio adresas: https://www.newinnovations.nl/post/controlling-ws2812-and-ws2812b-using-only-stm32-spi/.

Failiukai, jei nesinori pačiam spausdinti arba jei originalus puslapis dings: WS2812 SPI gcc C.

ARM36: Burbuliniai LED

Antikvarinis LED indikatorius, tikriausiai iš kokio nors tarybinio kalkuliatoriaus. Žãvi savo netobulumu:

burbulinis LED
АЛС318

Simboliai mažyčiai (todėl ir plastikinės linzės), šviesumas mizernas (prie tausojančių srovių). Bet savotiškai žavingas.
Tokiam indikatoriui pajungti reikia gana daug laidų ir dinaminės indikacijos. Demonstracijai panaudojau breadboard ir “bluepill” plokštę (STM32F103C8t)- mikroschema mažoka, beveik visos kojos sunaudojamos indikatoriui. Prie anodų (pliusinių elektrodų) reikia prikabinti kokius nors rezistorius, kad apriboti srovę per LED, tik 3mA statiniam režime per vieną segmentą. Naudojant dinaminę indikaciją leistina srovė 40mA, bet jei indikacija sustos, tai atia LEDams.
Continue reading →

Augaliniai LED

Nežinau ar tie purpuriniai LED kažkiek padeda žaliems augalams. Ir kažkaip nekilo ranka investuoti pinigus tokiom lempom. Tačiau prieš kelias dienas viena Lietuvos firma utilizavo kalną LED produkcijos ir ten buvo keletas tokių prožektorių. Dalis LED šviestuvų suveikdavo, tačiau po kelių minučių pradėdavo mirksėti ar mirgėti. Ir kai taip vyksta, manau visi šio blogo skaitytojai žino kas ten kaltas- kondensatoriai.

LED
Patys žibintai nežinomos galios, pardavėjas deklaruoja 13W (kaina 34€). LED matricoje dviejų rušių- mėlyni ir kažkokie su liuminiforu. Radiatoriai dideli, bet kontaktas tarp LED Al plokštelės ir radiatoriaus minimalus.
Continue reading →

Xicato LED moduliai

Kažkur renovuoja parduotuves ir keičia “mėsos” lemputes. Ten pagrinde stovi Philips HID lemputės, nuo 30 iki 75W. Tačiau kalba eina ne apie jas. Tobulėjant technologijom, atsirado LED lemputės. Jos beveik amžinos, tačiau jos genda. Ir tokiose lempose pačių lempučių nepakaitaliosi. O dėl gedimų… nu kondensatorių senėjimo niekas neatšaukė… Štai bendram Xicato XSM standartinės serijos datašyte parašyta:
Color Consistency – Maintained: C3 50,000hrs.
Lumen Maintenance: L80 50,000 hrs.

O kaip manot, kas parašyta “draiverio” kondensatoriaus datašyte? Tiesa, ten ne paprastas “kinas”, o Rubycon ZLH serijos kondikas. Ką rašo:
Load Life : 105°C 6000∼10000 hours.

Atspėkit ar kai kurie šie LED prožektoriai nemirksi? 🙂 O jei mirksi, tai jie keliauja į šiukšlyną.

O kai kurie netgi švyti, jei dirba kiek geriau aušinamam režime:
Xicato XSM8040-100/A2D
Continue reading →

AVR100: Max7219 LED matricos iš kinų

Reikėjo padaryti LED eilutę. Kaip visada greitai ir pigiai. Labai prabangiai nereikėjo, todėl pasirinkau kiniškas 8×8 matricėles su MAX7219 valdymu. Viskas ko reikia tai tik maitinimas ir koks nors SPI. Kelios komandos leidžia reguliuoti šviesumą. Visas gerumas tame, kad kiniški modeliai agregatuojasi į ilgą eilutę ar panašiai. Pats eilutės valdymas vyksta per USB-COM portą.

MAX7219 LED matric control USB AVR

Jau toks senas ir nuvalkiotas projektas tikrai bus padarytas pas “arduinistus”. Tačiau trumpos paieškos parodė- kad taip nėra. Dalis projektų atsisijojo dėl visokių keistų “arduino” failų formatų. Kiti… neveikia. Net pačiuose straipsniuose parašyta- “I don’t know, but this example do not work”. Pradėjus nagrinėtis kodą, susidarė nuomonė, kad programos rašytojai net nabandė skaityti MAX datašyto arba tūpai kopy-pastino svetimą kodą. Netgi klasikinė nesamonė su soft SPI padaryta. Ir vėl teko viską perdaryti. Baisiausiai kas gadino projektą tai paprastas kiniškas laidelis su kištuku- tai buvo kontaktas, tai nebuvo. Ne veltui jau rašiau apie wire wrap.
Tačiau problemos buvo įveiktos ir projektas greitai sumestas į vieną vietą- vienam gale USB, kitam gale LED matricų “kirmelė” (aišku ir maitinimo šaltinis reikalingas. Demonstracijai užtenka ir USB). Softas kiek pakeistas- sudėtas ATARI fontas, dar keli pakitimai. Tačiau viskas veikia. Kad paleisti- reikia prijungti prie kompiuterio ir per naują COM portą pumpuoti tekstą. Tekstas rodomas ant LED matricos. Nėra teksto išvalymo komandos, todėl jei reikia pašalinti, naudokit probelus.

Kaip visada:
AVR USB serial LUFA MAX7219 LED Matrix source code (ATmega32U4).

Valdymui naudojamas COM portas leidžia duomenis rodyti iš daugelio šaltinių ir skriptų. Galima rodyti kokio nors saito lankytojų skaičius ar kiek kartų buvo atidarytas šaldytuvas. Rodyti kokius nors keistus tekstus ar siuntinėti pranešimus aplinkiniams. Ar paprasčiausiai rodyti laiką. Čia labiau nuo fantazijos priklauso.

Kiniškas niekaliukas arba 4×4 LED kubas

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.

LED 4x4 cube AVR atmega

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.

LED 4x4 cube AVR atmega
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ą.

AVR79: WS2812 RBG LED juostelė

Trumpas eksperimentas su kiniškais, individualiai kontroliuojamai (addressable) RBG LEDais. T.y. tai kaip ir ilga juostele su RGB LEDais kuriuose sumontuota maža mikroschema kuri leidžia užprogramuoti trijų RGB šviesos diodų intensivumą. Šviesos diodai (ir pati juostelė) valdosi tik per vieną duomenų laidą, t.y. protokolas asinchroninis ir jo veikimas priklauso nuo teisingo taimingo.

WS2812 individually addressable RGB LED control AVR

Pradžioje galvojau rašyti viską nuo nulio, bet poto nutariau ne vargti ir pasiieškojau source code internete. Radau kažkokį universalų, AVR procesoriukams. Nors pats kodas kaip ir universalus, ir turėtu duoti ispėjimus, kai makrosai nesuskaičiuoja, tačiau net kokią valandą kankinausi su kodu, nes signalai nesigavo su teisingais intervalais. Pasirodo, kad mano turimas ATMEGA162, grojantis ant 3,686MHz (cominis) yra kaip tik ant tos ribos, kada softas dar mano, kad sugebės taimingus suformuoti, bet WS2812 mikroschema visiškai su tuom nesutinka. Pakeitus kvarcą į 12MHz (USBinis), viskas iškarto pradėjo veikti.

Tavo vamzdyje arba tu vamzdis (Youtube) pilna filmukų, kur iš tokių LED eilučių pasidaro ištisus ekranus. Tačiau, norint pasidaryti normalios raiškos LED ekraną reikia investuoti į gana daug tokių LED eilučių. Gaunasi brangokas projektas. O ir tada su paprasta ATMEGA neprasisuksi, nes reikia organizuoti video informacijos apdorojimą ir video buferį atmintyje.

Ir aišku: WS2812 AVR ATMEGA source code ir kompiliuotas hex failas.

P.S. Vienas bugas WS2812 juostelėje- kažkodėl neteisingai veikia kai maitinimo įtampa daugiau kaip ~4V. Pradeda fušeruoti. Gal dėl to, kad sujungtas Vcc ir Vled juostelėje, muša stiprius trigdžius? Nes teoriškai, turi veikti net ir nuo 7V…

Konstruktorius: LED laikrodis

Viename dukteriniam alibaba webšope nupirkau konstruktorių. Tai LED laikrodukas su korpusu. Kaina- 9.99$. Siuntė labai ilgai ir dar nebuvo trackingo. Ir kaip nebuvo galimybės užtrumpinti kinus kaip galima aliexprese. Tačiau, 10 doleriu mokslo labui… nesvarbu. Bet visdėlto siuntinį gavau.
Pasirinkau neutralią žalią spalvą, o pats laikrodis atitiko pagrindinį mano reikalavimą- jis turi RTC mikroschemą ir rezervinį maitinimo šaltinį.

LED laikrodis konstruktorius
Siuntinyje du paketai- korpusas ir pats konstruktorius. Čia dėl to, kad už pigiau galima nusipirkti tik patį laikroduką, o korpusą drožti pačiam.
Continue reading →

LED lempų fiasko

Jau rašiau, kad pas mane buvo LED lempų fiasko. Pradžioje nusipirkau mažesnio galingumo lemputę (rodos 4W) ir ji vis dar puikiai šviečia. Poto susigundžiau imti stipresnes. Nuspirkau porelę, rodos 8 arba 9 kiniškų vatų. Pradžioje jos švietė puikiai, bet neilgai. Po savaitės- dviejų, lemputės pradėjo visaip mirgėti ir pamiro.

LED filament lamp failure
Skrodimas parodė, kad viduje buvo pajungta mišriai- 3 LED “pagaliukai” lygiagrečiai ir nuosekliai dar vienas toks komplektas. Vieno LED “pagaliuko” darbinė įtampa kažkur apie 60V prie nežinomos srovės. Visa bėda, kad lemputė tikrai užturbinta ir vienas “pagaliukas” susifeilino.
Continue reading →