64 -pixelový RGB LED displej - ďalší klon Arduino: 12 krokov (s obrázkami)
64 -pixelový RGB LED displej - ďalší klon Arduino: 12 krokov (s obrázkami)
Anonim

Tento displej je založený na 8x8 RGB LED matici. Na testovacie účely bol pripojený k štandardnej doske Arduino (Diecimila) pomocou 4 posuvných registrov. Potom, čo som to dostal do práce, som to permatizoval na fabbed PCB. Posuvné registre sú široké 8 bitov a sú ľahko prepojiteľné s protokolom SPI. Na zmiešanie farieb sa používa modulácia šírky impulzu, o tom neskôr. Časť pamäte RAM MCU sa používa ako framebuffer na uchovanie obrazu. Video RAM je analyzovaná rutinou prerušenia na pozadí, takže používateľ môže robiť ďalšie užitočné veci, ako je rozprávanie s počítačom, tlačidlá čítania a potenciometre. Viac informácií o „Arduino“: www.arduino.cc

Krok 1: Pulzná šírková modulácia pre miešanie farieb

Modul šírky impulzu - ČO? Modulácia šírky impulzu v podstate zapína a vypína napájanie elektrického zariadenia veľmi rýchlo. Využiteľný výkon vyplýva z matematického priemeru funkcie štvorcovej vlny preberanej v intervale jednej periódy. Čím dlhšie funkcia zostane v polohe ON, tým viac energie získate. PWM má rovnaký vplyv na jas LED ako stmievač na striedavých svetlách. Úlohou vpred je individuálne ovládať jas 64 RGB LED diód (= 192 jednotlivých LED diód!) Lacným a jednoduchým spôsobom, aby ste mohli získať celý spektrum farieb. Prednostne by nemalo dochádzať k blikaniu alebo iným rušivým účinkom. Nelineárne vnímanie jasu, ktoré prejavuje ľudské oko, sa tu nebude brať do úvahy (napr. Rozdiel medzi 10% a 20% jasu sa zdá byť „väčší“ako medzi 90% a 100%). Obrázok (1) ilustruje princíp činnosti algoritmus PWM. Povedzme, že kódu je daná hodnota 7 pre jas LED (0, 0). Ďalej vie, že jas je maximálne N krokov. Kód prevádzkuje N slučiek pre všetky možné úrovne jasu a všetky potrebné slučky pre obsluhu každej LED diódy vo všetkých radoch. V prípade, že je počítadlo slučky x v jasovej slučke menšie ako 7, LED dióda svieti. Ak je väčšia ako 7, dióda LED zhasne. Pri všetkých LED diódach, úrovniach jasu a základných farbách (RGB) to je veľmi rýchle, každú LED je možné individuálne nastaviť tak, aby zobrazovala požadovanú farbu. Merania pomocou osciloskopu ukázali, že obnovovací kód displeja trvá asi 50% času CPU. Zvyšok je možné použiť na sériovú komunikáciu s PC, čítanie tlačidiel, rozhovor s čítačkou RFID, odoslanie I2Údaje C do iných modulov…

Krok 2: Rozhovor o posuvných registroch a diódach LED

Posuvný register je zariadenie, ktoré umožňuje načítanie údajov sériovo a paralelne. S príslušným čipom je možná aj opačná operácia. Na webovej stránke arduino je dobrý návod na posuvné registre. LED diódy sú poháňané 8-bitovými posuvnými registrami typu 74HC595. Každý port môže zdroja alebo potopiť asi 25 mA prúdu. Celkový prúd na jeden potopený alebo získaný čip by nemal presiahnuť 70 mA. Tieto čipy sú extrémne lacné, takže za kus neplatíte viac ako 40 centov. Pretože LED diódy majú exponenciálnu charakteristiku prúdu / napätia, musia existovať odpory obmedzujúce prúd. Použitie Ohmovho zákona: R = (V - Vf) / IR = obmedzujúci odpor, V = 5V, Vf = napätie vpred LED, I = požadovaný prúd Červené diódy majú dopredné napätie asi 1,8V, modrý a zelený rozsah od 2,5V do 3,5V. Na to použite jednoduchý multimetr. Na správnu reprodukciu farieb by ste mali vziať v úvahu niekoľko vecí: spektrálna citlivosť ľudského oka (červená/modrá: zlá, zelená: dobrá), účinnosť LED pri určitej vlnovej dĺžke a prúd. V praxi stačí zobrať 3 potenciometre a nastaviť ich, kým LED dióda neukáže správne biele svetlo. Samozrejme nesmie byť prekročený maximálny prúd LED. Tu je tiež dôležité, aby posuvný register poháňajúci riadky dodával prúd 3x8 LED, takže radšej netlačte prúd príliš vysoko. Bol som úspešný s obmedzením rezistorov 270 Ohm pre všetky LED diódy, ale to závisí samozrejme od značky matice LED. Posuvné registre sú prepojené so sériou SPI. SPI = sériové periférne rozhranie (obrázok (1)). Na rozdiel od sériových portov na počítačoch (asynchrónne, bez hodinového signálu), SPI potrebuje hodinovú linku (SRCLK). Potom je tu signálna linka, ktorá hovorí zariadeniu, keď sú údaje platné (výber čipu / západka / RCLK). Nakoniec existujú dve dátové linky, jedna sa nazýva MOSI (master out slave in), druhá sa nazýva MISO (master in slave out). SPI sa používa na prepojenie integrovaných obvodov, rovnako ako ja2C. Tento projekt potrebuje MOSI, SRCLK a RCLK. Okrem toho sa používa aj povoľovací riadok (G). Cyklus SPI sa spustí potiahnutím čiary RCLK do polohy LOW (Obrázok (2)). MCU odosiela svoje údaje na linku MOSI. Jeho logický stav je vzorkovaný posuvným registrom na stúpajúcej hrane čiary SRCLK. Cyklus je ukončený potiahnutím čiary RCLK späť na HIGH. Teraz sú údaje dostupné na výstupoch.

Krok 3: Schéma

Obrázok (1) ukazuje, ako sú posuvné registre zapojené. Sú zapojené do reťazca, takže údaje je možné presunúť do tohto reťazca a tiež prostredníctvom neho. Pridanie ďalších posuvných registrov je preto jednoduché.

Obrázok (2) zobrazuje zvyšok schémy s MCU, konektormi, kremeňom … Priložený súbor PDF obsahuje celé diela, najlepšie na tlač.

Krok 4: Zdrojový kód C ++

V C/C ++ je obvykle potrebné prototypovať funkcie pred ich kódovaním.#Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Arduino IDE nevyžaduje tento krok, pretože prototypy funkcií sa generujú automaticky. Prototypy funkcií sa preto v tu uvedenom kóde nezobrazia. Obrázok (1): setup () functionImage (2): spi_transfer () funkcia využívajúca hardvérové SPI čipu ATmega168 (beží rýchlejšie) Obrázok (3): kód framebufferu pomocou prerušenie pretečenia timera1. Kusy kódu, ktoré majú pre začiatočníkov mierne kryptický vzhľad, napr while (! (SPSR & (1 << SPIF))) {} priamo používať registre MCU. Tento príklad slovami: „Kým SPIF bit v registri SPSR nie je nastavený, nerobte nič“. Chcem len zdôrazniť, že pri štandardných projektoch skutočne nie je potrebné zaoberať sa týmito vecami tak úzko súvisiacimi s hardvérom. Začiatočníci by sa toho nemali báť.

Krok 5: Hotový modul gadget

Potom, čo som vyriešil všetky problémy a spustil kód, som musel vytvoriť rozloženie DPS a odoslať ho do fabrického domu. Vyzerá to tak čistejšie:-) Obrázok (1): plne osadená doska ovládača Obrázok (2): predná strana holého PCB Obrázok (2): zadná strana Existujú konektory vylamujúce PORTC a PORTD čipu ATmega168/328 a 5V/GND. Tieto porty obsahujú sériové linky RX, TX, I2C linky, digitálne I/O linky a 7 ADC liniek. Toto je určené na stohovanie štítov na zadnú stranu dosky. Rozstup je vhodný na použitie na doske (0,1 palca). Zavádzač je možné flashovať pomocou hlavičky ICSP (funguje s USBtinyISP od adafruit). Hneď ako to urobíte, použite štandardný sériový adaptér FTDI USB/TTL alebo podobný. Tiež som pridal prepojku na automatické resetovanie a deaktivovanie. Tiež som uvaril malý skript Perl (pozri môj blog), ktorý umožňuje automatické resetovanie pomocou káblov FTDI, ktoré zvyčajne nefungujú po vybalení (riadok RTS vs. DTR). Funguje to na Linuxe, možno na MAC. Na mojom blogu sú k dispozícii tlačené dosky s plošnými spojmi a niekoľko KIT pre domácich majstrov. Vyžaduje sa spájkovanie SMD! Pozrite si súbory PDF s pokynmi na stavbu a zdrojmi pre matice LED.

Krok 6: Aplikácia: Monitor zaťaženia CPU pre Linux pomocou Perlu

Toto je veľmi základný monitor zaťaženia s históriou. Je založený na skripte Perl, ktorý zhromažďuje „priemer zaťaženia“systému každé 1 s pomocou iostat. Údaje sú uložené v poli, ktoré sa pri každej aktualizácii posúva. Nové údaje sa pridajú na začiatok zoznamu, najstarší záznam sa vytlačí. Podrobnejšie informácie a súbory na stiahnutie (kód …) sú k dispozícii na mojom blogu.

Krok 7: Aplikácia: Rozhovor s inými modulmi pomocou I²C

Toto je len dôkaz princípu a zďaleka nie najjednoduchšie riešenie tejto práce. Použitie I2C umožňuje priamo adresovať až 127 dosiek „slave“. Tu je doska na pravej strane vo videu „master“(ktorá iniciuje všetky prenosy), ľavá doska je slave (čaká na údaje). Ja2C potrebuje 2 signálne vedenia a obvyklé elektrické vedenia (+, -, SDA, SCL). Keďže ide o zbernicu, sú k nej všetky zariadenia pripojené paralelne.

Krok 8: Aplikácia: „Game Cube“:-)

Len podivná myšlienka. Táto sa hodí aj do dreveného krytu zobrazeného na úvodnej stránke. Na zadnej strane má 5 tlačidiel, ktoré je možné použiť na hranie jednoduchej hry. KONIEC?

Krok 9: Zobrazovanie obrázkov / animácií v Matrixe - rýchly hack

K dispozícii je teda iba 8 x 8 pixlov a niekoľko farieb. Najprv použite niečo ako Gimp na zmenšenie obľúbeného obrázku na veľkosť presne 8 x 8 pixelov a uložte ho vo formáte RAW (.ppm) (nie vo formáte ASCII). PPM je ľahko čitateľný a spracovateľný v skripte Perl. Použitie programu ImageMagick a nástroja „prevod“na príkazovom riadku nebude fungovať správne. Načítajte nový kód arduino a potom pomocou skriptu Perl nahrajte do ovládača. Blikanie je len nesúlad obnovenia diódy LED a snímkovej frekvencie môjho fotoaparátu. Po trochu aktualizácii kódu beží celkom zippy. Všetky obrázky sa prenášajú naživo po sérii, ako ich vidíte. Dlhšie animácie je možné uložiť do externej pamäte EEPROM, ako sa to robí na rôznych doskách s technológiou hovorených pov.

Krok 10: Interaktívna kontrola uložených animácií

Prečo nechať mikrokontrolér všetku zábavu? Kult Arduino je o fyzickom výpočte a interakcii, takže stačí pridať potenciometer a prevziať kontrolu! Použitie jedného z 8 vstupov analógovo -digitálneho prevodníka to veľmi zjednodušuje.

Krok 11: Zobrazenie živého videa

Použitím skriptu Perl a niekoľkých modulov je celkom jednoduché zobrazovať kvázi živé video na systémoch X11. Bol kódovaný v systéme Linux a môže fungovať aj na počítačoch MAC. Funguje to takto:- získajte pozíciu kurzora myši- zachyťte pole s pixelom NxN vycentrovaným na kurzor- zmenšite obrázok na 8 x 8 pixelov- odošlite ho na dosku LED- opakovať

Krok 12: Viac svetla takmer zadarmo

Iba v dvoch krokoch je možné jas celkom zvýšiť. Vymeňte rezistory 270Ω za 169Ω a zapojte ďalší posuvný register 74HC595 na IC5.