LED -zaslon RGB z 64 slikovnimi pikami - še en klon Arduino: 12 korakov (s slikami)
LED -zaslon RGB z 64 slikovnimi pikami - še en klon Arduino: 12 korakov (s slikami)
Anonim

Ta zaslon temelji na 8x8 RGB LED matriki. Za namene testiranja je bil povezan s standardno Arduino ploščo (Diecimila) s pomočjo 4 registrov premikov. Ko sem ga spravil v delo, sem ga predstavil na predelanem tiskanem vezju. Registri premikov so široki 8 bitov in jih je enostavno povezati s protokolom SPI. Modulacija širine impulza se uporablja za mešanje barv, več o tem kasneje. Del RAM -a MCU -ja se uporablja kot medpomnilnik okvirjev za shranjevanje slike. Video RAM je razčlenjen s prekinitveno rutino v ozadju, zato lahko uporabnik počne druge uporabne stvari, kot so pogovor z osebnim računalnikom, branje gumbov in potenciometrov. Več informacij o "Arduinu": www.arduino.cc

1. korak: Modulacija širine impulza za mešanje barv

Modul širine impulza - KAJ? Modulacija širine impulza v bistvu zelo hitro vklopi in izklopi napajanje električne naprave. Uporabna moč je rezultat matematičnega povprečja funkcije kvadratnega vala, vzetega v intervalu enega obdobja. Dlje ko funkcija ostane v položaju ON, več moči dobite. PWM ima enak učinek na svetlost LED kot zatemnilnik na AC svetilkah. Pred nami je individualno upravljanje svetlosti 64 RGB LED (= 192 enojnih LED!) Na poceni in enostaven način, tako da lahko dobite celoto paleto barv. Po možnosti ne sme biti utripanja ali drugih motečih učinkov. Nelinearno zaznavanje svetlosti, ki ga kaže človeško oko, tukaj ne bo upoštevano (npr. Razlika med 10% in 20% svetlosti se zdi "večja" kot med 90% in 100%). Slika (1) ponazarja načelo delovanja algoritem PWM. Recimo, da ima koda vrednost 7 za svetlost LED (0, 0). Poleg tega ve, da je svetlost največ N korakov. Koda izvaja N zank za vse možne ravni svetlosti in vse potrebne zanke za servisiranje vsake LED v vseh vrsticah. Če je števec zanke x v zanki za svetlost manjši od 7, se LED prižge. Če je večja od 7, se LED izklopi. Če to storite zelo hitro za vse LED, stopnje svetlosti in osnovne barve (RGB), lahko vsako LED posamično prilagodite tako, da prikaže želeno barvo. Meritve z osciloskopom kažejo, da koda za osvežitev zaslona traja približno 50% časa procesorja. Preostanek lahko uporabite za serijsko komunikacijo z osebnim računalnikom, branje gumbov, pogovor z bralnikom RFID, pošiljanje I2C podatki v druge module …

2. korak: pogovor z registri premikov in LED diodami

Premični register je naprava, ki omogoča serijsko nalaganje podatkov in vzporedni izhod. Nasprotno delovanje je možno tudi z ustreznim čipom. Na spletnem mestu arduino je dobra vadnica o registrih premikov. LED diode poganjajo 8-bitni registri premikov tipa 74HC595. Vsaka vrata lahko ustvarijo ali potopijo približno 25 mA toka. Skupni tok na potopljen ali pridobljen čip ne sme presegati 70 mA. Ti čipi so zelo poceni, zato ne plačajte več kot približno 40 centov na kos. Ker imajo LED eksponentno karakteristiko toka / napetosti, morajo biti upori, ki omejujejo tok. imajo napetost naprej približno 1,8 V, modro in zeleno območje od 2,5 V do 3,5 V. To ugotovite s preprostim multimetrom. Za pravilno reprodukcijo barv je treba upoštevati nekaj: spektralno občutljivost človeškega očesa (rdeča/modra: slaba, zelena: dobra), učinkovitost LED pri določeni valovni dolžini in toku. V praksi preprosto vzamete 3 potenciometre in jih nastavite, dokler LED ne prikaže ustrezne bele svetlobe. Seveda največji tok LED ne sme biti presežen. Pri tem je pomembno tudi to, da mora premični register, ki poganja vrstice, napajati tok s 3x8 LED diodami, zato je bolje, da toka ne potisnete previsoko. Bil sem uspešen pri omejevanju uporov 270Ohm za vse LED, vendar je to seveda odvisno od znamke LED matrike. Registri premikov so povezani s serijo SPI. SPI = Serijski periferni vmesnik (slika (1)). V nasprotju s serijskimi vrati na osebnih računalnikih (asinhrono, brez signala ure), SPI potrebuje uro (SRCLK). Potem je signalna linija, ki napravi pove, kdaj so podatki veljavni (chip select / zapah / RCLK). Na koncu sta še dve podatkovni liniji, ena se imenuje MOSI (master out slave in), druga se imenuje MISO (master in slave out). SPI se uporablja za vmesnik integriranih vezij, tako kot jaz2C. Ta projekt potrebuje MOSI, SRCLK in RCLK. Poleg tega se uporablja tudi linija za omogočanje (G). Cikel SPI se zažene tako, da linijo RCLK povlečete na LOW (Slika (2)). MCU pošilja svoje podatke po liniji MOSI. Njegovo logično stanje vzorči premični register na naraščajočem robu vrstice SRCLK. Cikel se prekine tako, da povlečete črto RCLK nazaj na HIGH. Zdaj so podatki na voljo na izhodih.

3. korak: Shema

Slika (1) prikazuje, kako so ožičeni registri premikov. So verižno vezani, zato je mogoče podatke premakniti v to verigo in tudi po njej. Zato je enostavno dodati več registrov premikov.

Slika (2) prikazuje preostanek sheme z MCU, konektorji, kremenom … Priložena datoteka PDF vsebuje celotna dela, najboljša za tiskanje.

4. korak: izvorna koda C ++

V C/C ++ je običajno treba prototipirati funkcije, preden jih kodirate.#Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * komentar */ } Arduino IDE ne zahteva tega koraka, saj se prototipi funkcij samodejno ustvarijo. Zato prototipi funkcij ne bodo prikazani v kodi, prikazani tukaj. Slika (1): setup () funkcija Slika (2): funkcija spi_transfer () z uporabo strojne opreme SPI čipa ATmega168 (deluje hitreje) Slika (3): koda medpomnilnika okvirja z uporabo časovna prekinitev pretoka časa1. Kosi kode, ki imajo rahlo skrivnosten videz za začetnike, npr medtem ko (! (SPSR & (1 << SPIF))) {} neposredno uporablja registre MCU. Ta primer z besedami: "čeprav SPIF-bit v registru SPSR ni nastavljen, ne naredite ničesar." Rad bi samo poudaril, da za standardne projekte res ni treba obravnavati teh stvari, ki so tako tesno povezane s strojno opremo. Začetnikov se tega ne sme prestrašiti.

5. korak: Končan pripomoček

Potem ko sem rešil vse težave in zagonil kodo, sem moral samo ustvariti postavitev tiskanega vezja in jo poslati v čudovito hišo. Izgleda tako čistejše:-) Slika (1): polno poseljena krmilna plošča Slika (2): sprednja stran golega tiskanega vezja Slika (2): zadnja stran Konektorji prekinita PORTC in PORTD čipa ATmega168/328 in 5V/GND. Ta vrata vsebujejo zaporedne linije RX, TX, I2C linije, digitalne V/I linije in 7 ADC linij. To je namenjeno zlaganju ščitov na zadnjo stran plošče. Razmik je primeren za uporabo perfboard (0,1 palca). Nalagalnik lahko utripate z glavo ICSP (deluje z adafruit USBtinyISP). Takoj, ko to storite, uporabite standardni serijski adapter FTDI USB/TTL ali podoben. Dodal sem tudi mostiček za samodejno ponastavitev in onemogočanje. Pripravil sem tudi majhen skript Perl (glej moj blog), ki omogoča samodejno ponastavitev s kabli FTDI, ki običajno ne deluje takoj (RTS proti liniji DTR). To deluje v Linuxu, morda na MAC -u. Tiskana vezja in nekaj kompletov DIY so na voljo na mojem blogu. SMD spajkanje je potrebno! Navodila za gradnjo in vire LED matric najdete v datotekah PDF.

6. korak: Aplikacija: Monitor CPU Load Monitor za Linux z uporabo Perla

To je zelo osnovni monitor obremenitve z zgodovino. Temelji na skriptu Perl, ki z iostatom zbira "povprečje obremenitve" sistema na 1 sekundo. Podatki so shranjeni v matriki, ki se ob vsaki posodobitvi premakne. Na vrh seznama se dodajo novi podatki, najstarejši vnos se iztisne. Podrobnejše informacije in prenosi (koda…) so na voljo na mojem blogu.

7. korak: Uporaba: pogovor z drugimi moduli z uporabo I²C

To je le dokaz načela in še zdaleč ne najpreprostejša rešitev za to delo2C omogoča neposredno naslavljanje do 127 "podrejenih" plošč. Tu je deska na video posnetku "master" (ki sproži vse prenose), leva deska je slave (čaka na podatke). jaz2C potrebuje 2 signalni vodi in običajne daljnovode (+, -, SDA, SCL). Ker gre za vodilo, so nanj vzporedno povezane vse naprave.

8. korak: Aplikacija: "Game Cube":-)

Samo čudaška misel. Ta se tudi prilega lesenemu ohišju, prikazanemu na uvodni strani. Na hrbtni strani ima 5 gumbov, ki bi jih lahko uporabili za igranje preproste igre. KONEC?

9. korak: Prikaz slik / animacij na matriki - Quick Hack

Na voljo je torej le 8x8 slikovnih pik in nekaj barv. Najprej uporabite nekaj, kot je Gimp, da svojo najljubšo sliko pomanjšate na natančno 8x8 slikovnih pik in jo shranite kot ".ppm" surov format (ne ASCII). PPM je enostaven za branje in obdelavo v skriptu Perl. Uporaba programa ImageMagick in orodja ukazne vrstice "convert" ne bo delovala pravilno. Naložite novo kodo arduino, nato pa uporabite skript Perl za nalaganje v krmilnik. Utripanje je le neskladje med osveževanjem LED in hitrostjo sličic mojega fotoaparata. Po nekoliko posodobitvi kode deluje precej živahno. Vse slike se prenesejo v živo prek serijske različice, kot jih vidite. Daljše animacije lahko shranite v zunanji pomnilnik EEPROM, kot se to počne na različnih ploščah z napenjanjem.

10. korak: Interaktivni nadzor shranjenih animacij

Zakaj bi mikrokrmilniku vso zabavo? Arduino kult je namenjen fizičnemu računalništvu in interakciji, zato samo dodajte potenciometer in prevzemite nadzor! Z uporabo enega od 8 vhodov analogno -digitalnega pretvornika je to zelo preprosto.

11. korak: Prikaz videa v živo

Uporaba skripta Perl in nekaj modulov olajša predvajanje kvazi videa v živo v sistemih X11. To je bilo kodirano v Linuxu in lahko deluje tudi na MAC-ih. Deluje takole:- nastavite položaj kazalke miške- zajemite polje NxN slikovnih pik, centrirano na kazalcu- sliko prilagodite na 8x8 slikovnih pik- pošljite jo na ploščo LED- ponovite

12. korak: Več svetlobe skoraj brezplačno

S samo dvema korakoma lahko svetlost precej povečate. Zamenjajte 270Ω upori s 169Ω in vstavite še en premični register 74HC595 na IC5.