Talaan ng mga Nilalaman:
- Hakbang 1: Pulso Width Modulation para sa Mga Kulay ng Paghahalo
- Hakbang 2: Pakikipag-usap sa Shift Registro at LEDs
- Hakbang 3: Skematika
- Hakbang 4: C ++ Source Code
- Hakbang 5: Tapos na Gadget
- Hakbang 6: Application: CPU Load Monitor para sa Linux Paggamit ng Perl
- Hakbang 7: Paglalapat: Pakikipag-usap sa Ibang Mga Modyul Gamit ang I²C
- Hakbang 8: Application: "Game Cube":-)
- Hakbang 9: Pagpapakita ng Mga Imahe / Animation sa Matrix - Mabilis na Pag-hack
- Hakbang 10: Pakikipag-ugnay na Interactive ng mga nakaimbak na Animation
- Hakbang 11: Ipinapakita ang Live na Video
- Hakbang 12: Maraming Liwanag Halos Libre
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-13 06:58
Ang display na ito ay batay sa isang 8x8 RGB LED Matrix. Para sa mga layuning pagsubok ito ay konektado sa isang pamantayan ng Arduino board (Diecimila) na gumagamit ng 4 na rehistro ng paglilipat. Matapos itong gumana ay pinatama ko ito sa isang nakabalot na PCB. Ang mga rehistro ng shift ay 8-bit ang lapad at madaling ma-interfaced sa SPI protocol. Ginagamit ang modulate ng lapad ng pulso upang ihalo ang mga kulay, higit pa sa paglaon. Ang bahagi ng MCU`s RAM ay ginagamit bilang isang framebuffer upang hawakan ang imahe. Ang video RAM ay na-parse ng isang nakakagambala na gawain sa likuran, kaya ang gumagamit ay maaaring gumawa ng iba pang mga kapaki-pakinabang na bagay tulad ng pakikipag-usap sa isang PC, basahin ang mga pindutan at potensyal. Higit pang impormasyon tungkol sa "Arduino": www.arduino.cc
Hakbang 1: Pulso Width Modulation para sa Mga Kulay ng Paghahalo
Ang lapad ng pulso modu - ANO? Mahalaga na binago ng pulso ang lapad na modulate ng lakas na pinakain sa isang de-koryenteng aparato nang Mabilis at NAKA-OFF. Ang magagamit na mga resulta ng kuryente mula sa average na matematika ng pag-andar ng square-wave na kinuha sa pagitan ng isang panahon. Kung mas matagal ang pagpapaandar sa posisyon na ON, mas maraming lakas ang makukuha mo. Ang PWM ay may parehong epekto sa ningning ng LEDs bilang isang dimmer sa mga ilaw ng AC. Ang gawain sa unahan ay upang kontrolin ang indibidwal na ningning ng 64 RGB LEDS (= 192 solong LEDs!) Sa isang murang at madaling paraan, kaya makukuha ng isang buo spectrum ng mga kulay. Mas gusto na walang flickering o iba pang nakakagambalang epekto. Ang hindi linaw na pang-unawa ng ningning na ipinamalas ng mata ng tao ay hindi isasaalang-alang dito (hal. Ang pagkakaiba sa pagitan ng 10% at 20% ningning ay tila "mas malaki" kaysa sa pagitan ng 90% at 100%). Ang Larawan (1) ay naglalarawan ng gumaganang prinsipyo ng ang PWM algorithm. Sabihin na ang code ay binigyan ng halagang 7 para sa ningning ng LED (0, 0). Bukod dito alam nito na mayroong isang maximum ng mga N hakbang sa ningning. Nagpapatakbo ang code ng N na mga loop para sa lahat ng mga posibleng antas ng ningning at lahat ng kinakailangang mga loop upang maihatid ang bawat solong LED sa lahat ng mga hilera. Kung sakaling ang loop counter x sa brightness loop ay mas maliit sa 7, ang LED ay nakabukas. Kung ito ay mas malaki sa 7, ang LED ay naka-off. Ginagawa ito nang napakabilis para sa lahat ng mga LED, antas ng ningning at mga kulay ng batayan (RGB), ang bawat LED ay maaaring isa-isang nababagay upang maipakita ang nais na kulay. Ipinakita ng mga pagsukat na may isang oscilloscope na ang display refresh code ay tumatagal ng halos 50% na oras ng CPU. Ang natitira ay maaaring magamit upang gawin ang serial na komunikasyon sa isang PC, basahin ang mga pindutan, makipag-usap sa isang RFID reader, ipadala ang I2C data sa iba pang mga module …
Hakbang 2: Pakikipag-usap sa Shift Registro at LEDs
Ang isang rehistro ng shift ay isang aparato na nagbibigay-daan sa pag-load ng data nang serial at isang parallel output. Posible rin ang kabaligtaran na operasyon sa naaangkop na maliit na tilad. Mayroong isang mahusay na tutorial sa mga rehistro ng shift sa website ng arduino. Ang mga LED ay hinihimok ng 8-bit na mga rehistro ng paglilipat ng uri na 74HC595. Ang bawat port ay maaaring mapagkukunan o lumubog tungkol sa 25mA ng kasalukuyang. Ang kabuuang kasalukuyang bawat chip ay lumubog o nag-sourced ay hindi dapat lumagpas sa 70mA. Ang mga chips na ito ay sobrang mura, kaya't huwag magbayad ng higit sa halos 40 sentimo bawat piraso. Tulad ng mga LEDs ay may isang exponential kasalukuyang / boltahe na katangian, kailangang may kasalukuyang naglilimita sa mga resistors. Paggamit ng batas ni Ohm: R = (V - Vf) / IR = nililimitahan ang risistor, V = 5V, Vf = boltahe ng LED sa unahan, I = nais na kasalukuyangRed LEDs magkaroon ng isang boltahe sa unahan ng tungkol sa 1.8V, asul at berde na saklaw mula sa 2.5V hanggang 3.5V. Gumamit ng isang simpleng multimeter upang matukoy iyon. Para sa tamang pagpaparami ng kulay dapat isaalang-alang ng isa ang ilang mga bagay: spectral pagiging sensitibo ng mata ng tao (pula / asul: masama, berde: mabuti), kahusayan ng LED sa isang tiyak na haba ng daluyong at kasalukuyang. Sa pagsasagawa, ang isang tao ay tumatagal ng 3 potentiometers at inaayos ang mga ito hanggang sa maipakita ang LED ng tamang puting ilaw. Siyempre ang maximum na kasalukuyang LED ay hindi dapat lumampas. Ang mahalaga din dito ay ang shift register na nagmamaneho ng mga hilera ay dapat na magbigay ng kasalukuyang sa 3x8 LEDs, kaya mas mabuti na huwag itulak ang kasalukuyang napakataas. Naging matagumpay ako sa paglilimita sa mga resistors ng 270Ohm para sa lahat ng mga LED, ngunit depende ito sa paggawa ng LED matrix syempre. Ang mga rehistro ng shift ay nakipag-interfaced sa SPI serial. SPI = Serial Peripheral Interface (Larawan (1)). Kalaban sa mga serial port sa mga PC (hindi kasabay, walang signal ng orasan), kailangan ng SPI ng linya ng orasan (SRCLK). Pagkatapos mayroong isang linya ng signal na nagsasabi sa aparato kapag ang data ay wasto (chip select / latch / RCLK). Sa wakas mayroong dalawang mga linya ng data, ang isa ay tinatawag na MOSI (master out slave in), ang isa ay tinatawag na MISO (master in slave out). Ginagamit ang SPI upang i-interface ang mga integrated circuit, tulad ng I2C. Ang proyektong ito ay nangangailangan ng MOSI, SRCLK at RCLK. Bilang karagdagan ang linya ng paganahin (G) ay ginagamit din. Ang isang siklo ng SPI ay nagsimula sa pamamagitan ng paghila ng linya ng RCLK sa LOW (Larawan (2)). Nagpapadala ang MCU ng data nito sa linya ng MOSI. Ang lohikal na estado nito ay na-sample ng shift register sa tumataas na gilid ng linya ng SRCLK. Ang ikot ay natapos sa pamamagitan ng paghila ng linya ng RCLK pabalik sa TAAS. Ngayon ang data ay magagamit sa mga output.
Hakbang 3: Skematika
Ipinapakita ng Larawan (1) kung paano naka-wire ang mga rehistro ng shift. Ang mga ito ay may kadena na tanikala, kaya ang data ay maaaring ilipat sa kadena na ito at sa pamamagitan din nito. Samakatuwid ang pagdaragdag ng higit pang mga rehistro sa paglilipat ay madali.
Ipinapakita ng imahe (2) ang natitirang iskema kasama ang MCU, mga konektor, kuwarts … Ang nakalakip na PDF file ay naglalaman ng buong mga gawa, pinakamahusay para sa pag-print.
Hakbang 4: C ++ Source Code
Sa C / C ++ karaniwang kailangang mag-andar ng isang prototype bago i-coding ang mga ito. # Isama ang int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment * / } Ang Arduino IDE ay hindi nangangailangan ng hakbang na ito, dahil ang mga function na prototype ay awtomatikong nabuo. Samakatuwid ang mga prototype ng pag-andar ay hindi lalabas sa code na ipinapakita dito. Larawan (1): pag-setup () functionImage (2): spi_transfer () na paggana gamit ang hardware SPI ng ATmega168 chip (tumatakbo nang mas mabilis) Image (3): framebuffer code using makagambala ang isang timer1 overflow. Mga piraso ng code na may isang maliit na cryptic na hitsura para sa mga nagsisimula hal habang (! (SPSR & (1 << SPIF))) {} direktang gamitin ang mga rehistro ng MCU. Ang halimbawang ito sa mga salita: "habang ang SPIF-bit sa rehistro ng SPSR ay hindi nakatakda ay walang itinakda". Nais kong bigyang diin na para sa karaniwang mga proyekto hindi talaga kinakailangan na harapin ang mga bagay na ito na malapit na nauugnay sa hardware. Ang mga nagsisimula ay hindi dapat matakot dito.
Hakbang 5: Tapos na Gadget
Matapos malutas ang lahat ng mga problema at makuha ang code na tumatakbo, kailangan ko lamang lumikha ng isang layout ng PCB at ipadala ito sa isang bahay na katha. Mas malinis ang hitsura nito:-) Imahe (1): buong populasyon na board board ng Larawan (2): harap na bahagi ng hubad na PCBImage (2): likod na bahagi Mayroong mga konektor na sinisira ang PORTC at PORTD ng ATmega168 / 328 chip at 5V / GND. Ang mga port na ito ay naglalaman ng mga serial RX, TX na linya, ang I2Mga linya ng C, mga linya ng digital na I / O at 7 na linya ng ADC. Ito ay inilaan para sa paglalagay ng mga kalasag sa likuran ng board. Ang spacing ay angkop para sa paggamit ng perfboard (0.1in). Ang bootloader ay maaaring mai-flash gamit ang header ng ICSP (gumagana sa USBtinyISP ng adafruit). Sa sandaling tapos na iyon, gumamit lamang ng isang karaniwang FTDI USB / TTL serial adapter o katulad. Nagdagdag din ako ng isang auto-reset-disable jumper. Nagluto din ako ng isang maliit na script ng Perl (tingnan ang aking blog), na nagbibigay-daan sa awtomatikong pag-reset sa mga FTDI cable na karaniwang hindi gumagana sa kahon (linya ng RTS vs. DTR). Gumagana ito sa Linux, marahil sa MAC. Ang mga naka-print na circuit board at ilang mga DIY KIT ay magagamit sa aking blog. Kailangan ng SMD paghihinang! Tingnan ang mga PDF file para sa mga tagubilin sa pagbuo at mapagkukunan para sa mga LED matrice.
Hakbang 6: Application: CPU Load Monitor para sa Linux Paggamit ng Perl
Ito ay isang napaka-pangunahing monitor ng pag-load na may balangkas ng kasaysayan. Ito ay batay sa isang Perl script na nangangalap ng "average na pag-load" ng system tuwing 1s gamit ang iostat. Ang data ay nakaimbak sa isang array na kung saan ay inilipat sa bawat pag-update. Ang bagong data ay idinagdag sa tuktok ng listahan, ang pinakalumang entry ay naitulak. Ang mas detalyadong impormasyon at mga pag-download (code…) ay magagamit sa aking blog.
Hakbang 7: Paglalapat: Pakikipag-usap sa Ibang Mga Modyul Gamit ang I²C
Ito ay isang patunay lamang ng prinsipyo at sa ngayon hindi ang pinakasimpleng solusyon para sa trabahong ito. Paggamit ng I2Pinapayagan ng C para sa direktang pagtugon hanggang sa 127 "board" na mga board. Narito ang board sa kanang bahagi sa video ay ang "master" (na nagpasimula ng lahat ng paglipat), ang kaliwang board ay ang alipin (naghihintay para sa data). Ako2Kailangan ng 2 linya ng signal at ang karaniwang mga linya ng kuryente (+, -, SDA, SCL). Dahil ito ay isang bus, lahat ng mga aparato ay konektado dito nang kahanay.
Hakbang 8: Application: "Game Cube":-)
Isang freak na pag-iisip lamang. Ang isang ito ay umaangkop din sa kahoy na enclosure na ipinapakita sa pahina ng intro. Mayroon itong 5 mga pindutan sa likuran na maaaring magamit para sa paglalaro ng isang simpleng laro. TAPOS?
Hakbang 9: Pagpapakita ng Mga Imahe / Animation sa Matrix - Mabilis na Pag-hack
Kaya nakakuha lamang ito ng 8x8 pixel at may magagamit na mga kulay. Una gumamit ng isang bagay tulad ng Gimp upang i-scale down ang iyong paboritong imahe sa eksaktong 8x8 pixel at i-save ito bilang ".ppm" raw format (hindi ASCII). Madaling basahin at iproseso ang PPM sa isang Perl script. Ang paggamit ng ImageMagick at ang tool ng command line na "convert" ay hindi gagana nang maayos. I-upload ang bagong arduino code, pagkatapos ay gamitin ang Perl script upang mai-upload sa controller. Ang flicker ay isang hindi pagtutugma lamang ng LED refresh at rate ng frame ng aking camera. Matapos ma-update nang kaunti ang code, nagpapatakbo ito ng medyo zippy. Ang lahat ng mga imahe ay inililipat nang live sa paglipas ng serial tulad ng nakikita mo ang mga ito. Ang mga mas mahahabang animasyon ay maaaring maimbak sa isang panlabas na EEPROM tulad ng ginagawa sa iba't ibang mga nagsalita na pov board.
Hakbang 10: Pakikipag-ugnay na Interactive ng mga nakaimbak na Animation
Bakit hayaan ang microcontroller na magkaroon ng lahat ng kasiyahan? Ang Arduino kulto ay tungkol sa pisikal na computing at pakikipag-ugnayan, kaya magdagdag lamang ng isang potensyomiter at kontrolin! Ang paggamit ng isa sa 8 analog sa mga digital converter input ay ginagawang napakasimple.
Hakbang 11: Ipinapakita ang Live na Video
Ang paggamit ng isang Perl script at ilang mga module ay ginagawang madali upang ipakita ang quasi live na video sa mga X11 system. Naka-code ito sa linux at maaaring gumana rin sa mga MAC. Gumagana ito tulad nito: - Kunin ang posisyon ng mouse cursor- makuha ang isang kahon ng NxN pixel na nakasentro sa iskala ng imahe ng 8x8 pixel- ipadala ito sa LED board- ulitin
Hakbang 12: Maraming Liwanag Halos Libre
Sa pamamagitan lamang ng dalawang mga hakbang ang ningning ay maaaring upped medyo. Palitan ang 270Ω resistors ng 169Ω isa at piggyback ng isa pang 74HC595 shift register papunta sa IC5.