Sisukord:

64 piksli RGB LED -ekraan - teine Arduino kloon: 12 sammu (piltidega)
64 piksli RGB LED -ekraan - teine Arduino kloon: 12 sammu (piltidega)

Video: 64 piksli RGB LED -ekraan - teine Arduino kloon: 12 sammu (piltidega)

Video: 64 piksli RGB LED -ekraan - teine Arduino kloon: 12 sammu (piltidega)
Video: Начало работы с QLC+ Управление цветомузыкой с компьютера. Как управлять светом. 2024, Juuli
Anonim
64 piksli RGB LED -ekraan - teine Arduino kloon
64 piksli RGB LED -ekraan - teine Arduino kloon
64 piksli RGB LED -ekraan - teine Arduino kloon
64 piksli RGB LED -ekraan - teine Arduino kloon
64 piksli RGB LED -ekraan - teine Arduino kloon
64 piksli RGB LED -ekraan - teine Arduino kloon

See ekraan põhineb 8x8 RGB LED -maatriksil. Testimiseks ühendati see tavalise Arduino plaadiga (Diecimila), kasutades 4 vahetuste registrit. Pärast selle tööle asumist lõikasin selle läbi fookitud PCB -le. Nihkeregistrid on 8-bitised ja neid saab hõlpsasti liidestada SPI-protokolliga. Värvide segamiseks kasutatakse impulsi laiuse modulatsiooni, sellest hiljem. Osa MCU RAM -ist kasutatakse pildi hoidmiseks kaadripuhverina. Video RAM -i parsib taustal olev katkestusrutiin, nii et kasutaja saab teha muid kasulikke asju, näiteks rääkida arvutiga, lugeda nuppe ja potentsiomeetreid. Lisateave "Arduino" kohta: www.arduino.cc

Samm: impulsi laiuse modulatsioon värvide segamiseks

Impulsi laiuse modulatsioon värvide segamiseks
Impulsi laiuse modulatsioon värvide segamiseks

Impulsi laiuse moodul - MIS? Impulsi laiuse modulatsioon lülitab sisuliselt ja kiiresti elektriseadme toite sisse ja välja. Kasutatav võimsus tuleneb ruutlainefunktsiooni matemaatilisest keskmisest ühe perioodi jooksul. Mida kauem funktsioon ON -asendis püsib, seda rohkem energiat saate. PWM -il on sama mõju valgusdioodide heledusele kui vahelduvvoolu tuledel. Eesmärk on odavalt ja hõlpsalt 64 RGB LED -i (= 192 üksikut LED -i!) Heledust individuaalselt juhtida, nii et saate kogu värvide spekter. Eelistatavalt ei tohiks olla virvendusi ega muid häirivaid mõjusid. Siin ei võeta arvesse inimsilma eksponeeritud heleduse mittelineaarset tajumist (nt 10% ja 20% heleduse erinevus tundub "suurem" kui vahemikus 90% kuni 100%). Pilt (1) illustreerib tööpõhimõtet PWM algoritm. Oletame, et koodile antakse LED -i heleduse (0, 0) väärtuseks 7. Lisaks teab ta, et heleduses on maksimaalselt N astet. Kood käivitab N silmuseid kõigi võimalike heledustasemete jaoks ja kõiki vajalikke silmuseid kõigi LED -ide teenindamiseks kõikides ridades. Kui heledussilmuse silmusloendur x on väiksem kui 7, lülitatakse LED sisse. Kui see on suurem kui 7, lülitatakse LED välja. Tehes seda väga kiiresti kõigi valgusdioodide, heledustasemete ja põhivärvide (RGB) puhul, saab iga LED -i individuaalselt reguleerida, et kuvada soovitud värv. Ostsilloskoobiga tehtud mõõtmised on näidanud, et ekraani värskenduskood võtab umbes 50% protsessori ajast. Ülejäänut saab kasutada arvutiga jadaühenduse tegemiseks, nuppude lugemiseks, RFID -lugejaga rääkimiseks, saatmiseks I2C andmed teistele moodulitele …

2. samm: rääkige vahetusregistrite ja LED -idega

Rääkimine vahetusregistrite ja LED -idega
Rääkimine vahetusregistrite ja LED -idega
Rääkimine vahetusregistrite ja LED -idega
Rääkimine vahetusregistrite ja LED -idega

Nihkeregister on seade, mis võimaldab andmeid järjestikku laadida ja paralleelselt väljastada. Vastupidine toiming on võimalik ka sobiva kiibi korral. Arduino veebisaidil on vahetusregistrite kohta hea õpetus. Valgusdioode juhivad 74HC595 tüüpi 8-bitised vahetusregistrid. Iga port võib voolata või uputada umbes 25 mA voolu. Kogu vool ühe kiibi kohta, mis on vajunud või hangitud, ei tohiks ületada 70 mA. Need kiibid on äärmiselt odavad, seega ärge makske rohkem kui umbes 40 senti tükk. Kuna LED -idel on eksponentsiaalne voolu- / pingeomadus, peavad olema voolu piiravad takistid. Ohmi seadust kasutades: R = (V - Vf) / IR = piirav takisti, V = 5 V, Vf = LED -i pinge, I = soovitud vool Punased LED -id on ettepoole suunatud pinge umbes 1,8 V, sinine ja roheline vahemikus 2,5 V kuni 3,5 V. Selle määramiseks kasutage lihtsat multimeetrit. Nõuetekohaseks värvide reprodutseerimiseks tuleks arvesse võtta mõnda asja: inimsilma spektraalne tundlikkus (punane/sinine: halb, roheline: hea), LED -i efektiivsus teatud lainepikkusel ja vool. Praktikas võtab lihtsalt kolm potentsiomeetrit ja reguleerib neid seni, kuni LED näitab õiget valget valgust. Loomulikult ei tohi LED -ide maksimaalset voolu ületada. Oluline on siinkohal ka see, et ridu juhtiv vahetusregister peab andma voolu 3x8 LED -ile, nii et parem mitte suruda voolu liiga kõrgele. Ma olin edukas, kui piirasin kõigi LED -ide jaoks takistid 270 Ohm, kuid see sõltub muidugi LED -maatriksi tootest. Nihkeregistrid on liidestatud SPI -jadadega. SPI = Serial Peripheral Interface (Pilt (1)). Vastupidiselt arvutite jadaportidele (asünkroonne, kella signaal puudub) vajab SPI kellaliini (SRCLK). Siis on signaaliliin, mis annab seadmele teada, millal andmed kehtivad (kiibi valik / riiv / RCLK). Lõpuks on kaks andmeliini, millest üks kannab nime MOSI (master out slave in), teine aga MISO (master in slave out). SPI -d kasutatakse integraallülituste liidestamiseks, nagu ka mina2C. See projekt vajab MOSI, SRCLK ja RCLK. Lisaks kasutatakse ka lubamisjoont (G). SPI tsükkel käivitatakse, tõmmates RCLK joone madalale (pilt (2)). MCU saadab oma andmed MOSI liinile. Selle loogilisest olekust võtab proovi SRCLK rea tõusvas servas asuv nihkeregister. Tsükli lõpetamiseks tõmmake RCLK joon tagasi HIGH. Nüüd on andmed väljundites saadaval.

3. samm: skemaatiline

Skeem
Skeem
Skeem
Skeem

Pilt (1) näitab vahetusregistrite juhtmestikku. Need on aheldatud, nii et andmeid saab sellesse ahelasse ja ka selle kaudu nihutada. Seetõttu on lihtne lisada rohkem vahetusregistreid.

Pilt (2) näitab ülejäänud skeemi koos MCU, pistikute, kvartsiga … Lisatud PDF -fail sisaldab kõiki töid, mis sobivad kõige paremini printimiseks.

4. samm: C ++ lähtekood

C ++ lähtekood
C ++ lähtekood
C ++ lähtekood
C ++ lähtekood
C ++ lähtekood
C ++ lähtekood

C/C ++ puhul tuleb tavaliselt funktsioonid enne nende kodeerimist prototüüpida.#Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Arduino IDE ei vaja seda sammu, kuna funktsioonide prototüübid genereeritakse automaatselt. Seetõttu funktsiooni prototüüpe siin kuvatud koodis ei kuvata. Pilt (1): setup () function Pilt (2): funktsioon spi_transfer (), kasutades ATmega168 kiibi riistvara SPI -d (töötab kiiremini) Pilt (3): framebuffer kood kasutades taimer1 ülevoolu katkestus. Kooditükid, millel on algajatele veidi krüptiline välimus, nt samas (! (SPSR & (1 << SPIF))) {} kasutavad otse MCU registreid. See näide sõnadega: "kuigi SPIF-bit registris SPSR pole seatud, ei tee midagi". Tahan lihtsalt rõhutada, et standardprojektide puhul pole tõesti vaja tegeleda nende riistvaraga nii tihedalt seotud asjadega. Algajaid ei tohiks see hirmutada.

5. samm: valmis vidin

Valmis vidin
Valmis vidin
Valmis vidin
Valmis vidin
Valmis vidin
Valmis vidin

Pärast kõigi probleemide lahendamist ja koodi käivitamist pidin lihtsalt looma trükkplaadi paigutuse ja saatma selle vapustavasse majja. See näeb välja palju puhtam:-) Pilt (1): täielikult asustatud kontrolleriplaat Pilt (2): palja PC esikülg Pilti (2): tagumine külg. Need pordid sisaldavad jada RX, TX liine, I2C liinid, digitaalsed I/O liinid ja 7 ADC liini. See on ette nähtud kilpide virnastamiseks plaadi tagaküljele. Vahekaugus sobib perfboardi (0,1 tolli) kasutamiseks. Alglaadurit saab välgutada ICSP päise abil (töötab koos adafruit'i USBtinyISP -ga). Niipea kui see on tehtud, kasutage lihtsalt tavalist FTDI USB/TTL jadaadapterit või muud sarnast. Olen lisanud ka automaatse lähtestamise-keelamise hüppaja. Olen valmistanud ka väikese Perli skripti (vt minu ajaveebi), mis võimaldab automaatset lähtestamist FTDI-kaablitega, mis tavaliselt karbist välja ei tööta (RTS vs DTR liin). See töötab Linuxis, võib -olla MAC -is. Minu ajaveebis on saadaval trükkplaadid ja mõned DIY KIT. Vajalik SMD jootmine! LED -maatriksite ehitamise juhiseid ja allikaid leiate PDF -failidest.

Samm 6: Rakendus: CPU koormusmonitor Linuxi jaoks, kasutades Perli

See on väga lihtne koormusmonitor ajaloolise graafikuga. See põhineb Perli skriptil, mis kogub iostati kasutades iga 1 sekundi järel süsteemi "koormuse keskmist". Andmed salvestatakse massiivi, mida iga värskenduse korral nihutatakse. Uued andmed lisatakse loendi ülaossa, vanim kirje lükatakse välja. Üksikasjalikum teave ja allalaadimised (kood…) on saadaval minu ajaveebis.

Samm 7: Rakendus: rääkimine teiste moodulitega, kasutades I²C

Rakendus: I²C abil teiste moodulitega rääkimine
Rakendus: I²C abil teiste moodulitega rääkimine

See on lihtsalt põhimõtte tõestus ja kaugeltki mitte kõige lihtsam lahendus sellele tööle. Kasutades I2C võimaldab otse adresseerida kuni 127 "alamplaati". Siin on video paremal küljel olev plaat "peremees" (mis algatab kõik ülekanded), vasak plaat on ori (ootab andmeid). Mina2C vajab 2 signaaliliini ja tavalisi elektriliine (+, -, SDA, SCL). Kuna tegemist on siiniga, on sellega ühendatud kõik seadmed paralleelselt.

8. samm: rakendus: "Mängukuup":-)

Rakendus
Rakendus

Lihtsalt veider mõte. See sobib ka sissejuhataval lehel näidatud puidust korpusega. Selle tagaküljel on 5 nuppu, mida saab kasutada lihtsa mängu mängimiseks.

9. samm: piltide / animatsioonide kuvamine maatriksil - kiire häkkimine

Piltide / animatsioonide kuvamine maatriksil - Quick Hack
Piltide / animatsioonide kuvamine maatriksil - Quick Hack
Piltide / animatsioonide kuvamine maatriksil - Quick Hack
Piltide / animatsioonide kuvamine maatriksil - Quick Hack
Piltide / animatsioonide kuvamine maatriksil - Quick Hack
Piltide / animatsioonide kuvamine maatriksil - Quick Hack
Piltide / animatsioonide kuvamine maatriksil - Quick Hack
Piltide / animatsioonide kuvamine maatriksil - Quick Hack

Nii et sellel on ainult 8x8 pikslit ja saadaval on mõned värvid. Kõigepealt kasutage näiteks Gimpi, et oma lemmikpilti täpselt 8x8 pikslini vähendada ja salvestada toores vormingus ".ppm" (mitte ASCII). PPM -i on Perli skriptis lihtne lugeda ja töödelda. ImageMagicki ja käsurea tööriista "convert" kasutamine ei tööta korralikult. Laadige üles uus arduino -kood ja seejärel kasutage kontrollerisse üleslaadimiseks Perli skripti. Värelus on lihtsalt LED -värskenduse ja minu kaamera kaadrisageduse mittevastavus. Pärast koodi pisut värskendamist jookseb see üsna nõtkelt. Kõik pildid edastatakse otseülekandena, nagu te neid näete. Pikemaid animatsioone saab salvestada välisesse EEPROM-i, nagu seda tehakse erinevates kodaraplaatides.

10. samm: salvestatud animatsioonide interaktiivne juhtimine

Miks lasta mikrokontrolleril lõbutseda? Arduino kultus on seotud füüsilise arvutamise ja suhtlemisega, nii et lisage lihtsalt potentsiomeeter ja võtke juhtimine enda kätte! Ühe 8 analoog -digitaalmuunduri sisendi kasutamine muudab selle väga lihtsaks.

11. samm: otsevideo kuvamine

Kasutades Perli skripti ja mõnda moodulit, on üsna lihtne näidata peaaegu videot X11 süsteemides. See oli kodeeritud Linuxis ja võib töötada ka MAC-ide puhul. See toimib järgmiselt:- hankige hiirekursori asukoht- jäädvustage kursori keskele NxN pikslite kast- skaleerige pilt 8x8 pikslile- saatke see LED-tahvlile- korrata

12. samm: rohkem valgust peaaegu tasuta

Rohkem valgust peaaegu tasuta
Rohkem valgust peaaegu tasuta

Vaid kahe sammuga saab heledust üsna palju suurendada. Asendage 270Ω takistid 169Ω vastu ja asendage teine 74HC595 nihkeregister IC5 vastu.

Soovitan: