64 pikselių RGB LED ekranas - kitas „Arduino“klonas: 12 žingsnių (su nuotraukomis)
64 pikselių RGB LED ekranas - kitas „Arduino“klonas: 12 žingsnių (su nuotraukomis)
Anonim

Šis ekranas yra pagrįstas 8x8 RGB LED matrica. Bandymo tikslais jis buvo prijungtas prie standartinės „Arduino“plokštės („Diecimila“), naudojant 4 pamainų registrus. Po to, kai pradėjau veikti, aš jį perfiksavau ant suspausto PCB. Pamainų registrai yra 8 bitų pločio ir lengvai sujungiami su SPI protokolu. Impulsų pločio moduliacija naudojama spalvoms maišyti, daugiau apie tai vėliau. Dalis MCU RAM naudojama kaip kadrų buferis vaizdui laikyti. Vaizdo RAM atmintį analizuoja pertraukimo rutina fone, todėl vartotojas gali atlikti kitus naudingus dalykus, pavyzdžiui, kalbėtis su kompiuteriu, skaityti mygtukus ir potenciometrus. Daugiau informacijos apie „Arduino“: www.arduino.cc

1 žingsnis: impulsų pločio moduliavimas, skirtas spalvoms maišyti

Impulso pločio modulis - KAS? Impulso pločio moduliavimas iš esmės gana greitai įjungia ir išjungia elektros prietaisą. Naudojama galia gaunama iš kvadratinių bangų funkcijos matematinio vidurkio, paimto per vieno laikotarpio intervalą. Kuo ilgiau funkcija lieka įjungtoje padėtyje, tuo daugiau energijos gausite. PWM turi tokį patį poveikį šviesos diodų ryškumui, kaip ir kintamosios srovės žibintų reguliatorius. Toliau užduotis yra individualiai valdyti 64 RGB šviesos diodų (= 192 pavienių šviesos diodų!) Ryškumą pigiai ir paprastai, kad būtų galima gauti visą spalvų spektras. Pageidautina, kad nebūtų mirgėjimo ar kitų trikdančių efektų. Čia nebus atsižvelgiama į netiesinį žmogaus akies ryškumo suvokimą (pvz., Skirtumas tarp 10% ir 20% ryškumo atrodo „didesnis“nei tarp 90% ir 100%). Vaizdas (1) iliustruoja veikimo principą PWM algoritmas. Tarkime, kad šviesos diodo ryškumui (0, 0) kodui suteikiama vertė 7. Be to, ji žino, kad ryškumas yra maksimalus N žingsnių. Kodas paleidžia N kilpas visais įmanomais ryškumo lygiais ir visas reikiamas kilpas, skirtas aptarnauti kiekvieną šviesos diodą visose eilutėse. Jei ciklo skaitiklis x ryškumo kilpoje yra mažesnis nei 7, šviesos diodas įjungiamas. Jei jis didesnis nei 7, šviesos diodas išjungiamas. Tai atliekama labai greitai, naudojant visus šviesos diodus, ryškumo lygius ir pagrindines spalvas (RGB), kiekvienas šviesos diodas gali būti individualiai sureguliuotas, kad būtų parodyta norima spalva. Matavimai naudojant osciloskopą rodo, kad ekrano atnaujinimo kodas užima apie 50% procesoriaus laiko. Likusi dalis gali būti naudojama nuosekliam ryšiui su kompiuteriu atlikti, mygtukams skaityti, kalbėtis su RFID skaitytuvu, siųsti I2C duomenys į kitus modulius …

2 žingsnis: kalbėkite su pamainų registrais ir šviesos diodais

Pamainų registras yra įrenginys, leidžiantis nuosekliai įkelti duomenis ir lygiagrečią išvestį. Priešinga operacija taip pat įmanoma naudojant atitinkamą mikroschemą. Arduino svetainėje yra gera pamoka apie pamainų registrus. Šviesos diodus valdo 74 bitų tipo 74HC595 8 bitų perjungimo registrai. Kiekvienas prievadas gali tiekti arba nuskandinti apie 25 mA srovės. Bendra srovė vienam nuskendusiam ar įsigytam lustui neturėtų viršyti 70 mA. Šie lustai yra labai pigūs, todėl nemokėkite daugiau nei apie 40 centų už gabalą. Kadangi šviesos diodai turi eksponentinę srovės / įtampos charakteristiką, turi būti srovės ribojimo rezistoriai. Naudojant Omo dėsnį: R = (V - Vf) / IR = ribojantis rezistorius, V = 5 V, Vf = šviesos diodo priekinė įtampa, I = norima srovė Raudoni šviesos diodai priekinė įtampa yra apie 1,8 V, mėlyna ir žalia - nuo 2,5 iki 3,5 V. Norėdami tai nustatyti, naudokite paprastą multimetrą. Norint tinkamai atkurti spalvas, reikia atsižvelgti į keletą dalykų: žmogaus akies spektrinį jautrumą (raudona/mėlyna: bloga, žalia: gera), šviesos diodo efektyvumą esant tam tikram bangos ilgiui ir srovei. Praktiškai reikia paimti 3 potenciometrus ir juos reguliuoti, kol šviesos diodas parodys tinkamą baltą šviesą. Žinoma, negalima viršyti didžiausios šviesos diodų srovės. Čia taip pat svarbu tai, kad eilučių varomas poslinkių registras turi tiekti srovę 3x8 šviesos diodams, todėl geriau nekelti srovės per aukštai. Man pavyko apriboti 270 omų rezistorius visiems šviesos diodams, tačiau tai, žinoma, priklauso nuo LED matricos. Perkelimų registrai yra susieti su SPI nuosekliaisiais. SPI = serijinė periferinė sąsaja (vaizdas (1)). Priešingai nei kompiuterių nuoseklieji prievadai (asinchroninis, be laikrodžio signalo), SPI reikia laikrodžio linijos (SRCLK). Tada yra signalo linija, nurodanti įrenginiui, kada duomenys galioja (lusto pasirinkimas / fiksatorius / RCLK). Galiausiai yra dvi duomenų linijos, viena vadinama MOSI (master out slave in), kita - MISO (master in slave out). SPI naudojamas integruotiems grandynams sujungti, kaip ir aš2C. Šiam projektui reikia MOSI, SRCLK ir RCLK. Be to, naudojama įjungimo linija (G). SPI ciklas pradedamas traukiant RCLK liniją į LOW (Vaizdas (2)). MCU siunčia savo duomenis MOSI linija. Jo loginę būseną ima pamainų registras, esantis kylančiame SRCLK linijos krašte. Ciklas baigiamas traukiant RCLK liniją atgal į HIGH. Dabar duomenys yra prieinami išėjimuose.

3 žingsnis: schema

Paveikslėlyje (1) parodyta, kaip prijungti pamainų registrai. Jie yra grandininiai, todėl duomenis galima perkelti į šią grandinę ir per ją. Todėl lengva pridėti daugiau pamainų registrų.

Paveikslėlyje (2) pavaizduota likusi schema su MCU, jungtimis, kvarcu… Pridedamame PDF faile yra visi darbai, geriausiai tinkantys spausdinti.

4 veiksmas: C ++ šaltinio kodas

C/C ++ sistemoje paprastai reikia prototipuoti funkcijas prieš jas koduojant.#Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Šis veiksmas nereikalingas „Arduino IDE“, nes funkcijų prototipai generuojami automatiškai. Todėl funkcijų prototipai nebus rodomi čia rodomame kode. timer1 perpildymo pertrauka. Kodo dalys, kurios atrodo šiek tiek paslaptingai pradedantiesiems, pvz o (! (SPSR & (1 << SPIF))) {} tiesiogiai naudoja MCU registrus. Šis pavyzdys: Pradedantieji neturėtų to bijoti.

5 veiksmas: baigta programėlė

Išsprendęs visas problemas ir paleisdamas kodą, turėjau sukurti PCB išdėstymą ir išsiųsti jį į nuostabų namą. Vaizdas (1): visiškai užpildyta valdiklio plokštė Vaizdas (2): pliko PC priekinė pusė Vaizdas (2): galinė pusė. Šiuose prievaduose yra nuosekliosios RX, TX linijos, I2C linijos, skaitmeninės įvesties/išvesties linijos ir 7 ADC linijos. Jis skirtas skydams krauti ant lentos galinės pusės. Tarpai tinka naudoti perforatorių (0,1 colio). Įkrovos įkroviklį galima įjungti naudojant ICSP antraštę (veikia su „adafruit“USBtinyISP). Kai tik tai bus padaryta, tiesiog naudokite standartinį FTDI USB/TTL nuoseklųjį adapterį ar panašų. Taip pat pridėjau automatinio atstatymo-išjungimo trumpiklį. Aš taip pat paruošiau nedidelį „Perl“scenarijų (žr. Mano tinklaraštį), kuris įgalina automatinį atstatymą naudojant FTDI kabelius, kurie paprastai neveikia iš karto (RTS ir DTR linija). Tai veikia „Linux“, galbūt MAC. Mano dienoraštyje galima rasti spausdintines plokštes ir keletą „pasidaryk pats“rinkinių. Reikalingas SMD litavimas! Žiūrėkite PDF failus, kur rasite LED matricų kūrimo instrukcijas ir šaltinius.

6 žingsnis: Taikymas: „Linux“procesoriaus apkrovos monitorius naudojant „Perl“

Tai labai paprastas apkrovos monitorius su istorijos brėžiniu. Jis pagrįstas „Perl“scenarijumi, kuris surenka sistemos „apkrovos vidurkį“kas 1 sekundę, naudodamas „iostat“. Duomenys saugomi masyve, kuris keičiamas kiekvieną kartą atnaujinant. Sąrašo viršuje pridedami nauji duomenys, seniausias įrašas išstumiamas. Išsamesnė informacija ir atsisiuntimai (kodas…) yra mano tinklaraštyje.

7 žingsnis: taikymas: kalbėjimas su kitais moduliais naudojant „I²C“

Tai tik principo įrodymas ir toli gražu ne pats paprasčiausias sprendimas šiam darbui2C leidžia tiesiogiai adresuoti iki 127 „pavaldžių“plokščių. Čia dešinėje vaizdo įrašo pusėje esanti lenta yra „šeimininkas“(kuri inicijuoja visus perdavimus), kairioji lenta - vergė (laukia duomenų). Aš2C reikia 2 signalų linijų ir įprastų elektros linijų (+, -, SDA, SCL). Kadangi tai yra magistralė, visi įrenginiai yra prijungti prie jo lygiagrečiai.

8 veiksmas: taikymas: „Žaidimo kubas“:-)

Tiesiog keista mintis. Tai taip pat tinka mediniam gaubtui, parodytam įvadiniame puslapyje. Jo gale yra 5 mygtukai, kurie gali būti naudojami paprastam žaidimui žaisti. PABAIGA?

9 veiksmas: vaizdų / animacijų rodymas „Matrix“- greitas įsilaužimas

Taigi jis turi tik 8x8 pikselių ir kelias spalvas. Pirmiausia naudokite kažką panašaus į „Gimp“, kad sumažintumėte mėgstamą vaizdą iki tiksliai 8x8 pikselių ir išsaugotumėte jį kaip „.ppm“neapdorotą formatą (ne ASCII). PPM yra lengva skaityti ir apdoroti „Perl“scenarijumi. Naudojant „ImageMagick“ir komandų eilutės įrankį „konvertuoti“neveiks tinkamai. Įkelkite naują arduino kodą, tada naudokite „Perl“scenarijų, kad įkeltumėte į valdiklį. Mirgėjimas yra tik LED atnaujinimo ir mano fotoaparato kadrų dažnio neatitikimas. Šiek tiek atnaujinus kodą, jis veikia gana linksmai. Visi vaizdai tiesiogiai perkeliami serijiniu būdu, kaip matote. Ilgesnės animacijos gali būti saugomos išoriniame EEPROM, kaip tai daroma įvairiose stipinų plokštėse.

10 veiksmas: interaktyvi saugomų animacijų kontrolė

Kodėl leiskite mikrokontroleriui linksmintis? „Arduino“kultas yra susijęs su fiziniu skaičiavimu ir sąveika, todėl tiesiog pridėkite potenciometrą ir imkitės valdymo! Naudojant vieną iš 8 analoginio į skaitmeninį keitiklį, tai labai paprasta.

11 veiksmas: tiesioginio vaizdo įrašo rodymas

Naudojant „Perl“scenarijų ir kelis modulius, gana paprasta rodyti beveik gyvą vaizdo įrašą X11 sistemose. Jis buvo užkoduotas „Linux“ir gali veikti ir su MAC. Jis veikia taip:- gaukite pelės žymeklio padėtį- užfiksuokite NxN pikselių langelį, esantį ties žymekliu- padidinkite vaizdą iki 8x8 pikselių- nusiųskite jį į LED plokštę- kartoti

12 veiksmas: daugiau šviesos beveik nemokamai

Vos dviem žingsniais ryškumą galima gerokai padidinti. 270Ω rezistorius pakeiskite 169Ω, o kitą 74HC595 poslinkių registrą pakeiskite IC5.