INHOUDSOPGAWE:
- Stap 1: Pulse Width Modulation vir die meng van kleure
- Stap 2: Praat met skofregisters en LED's
- Stap 3: Skematiese
- Stap 4: Bronkode C ++
- Stap 5: Klaar gadget
- Stap 6: Toepassing: CPU -laai -monitor vir Linux met Perl
- Stap 7: Toepassing: Praat met ander modules met behulp van I²C
- Stap 8: Toepassing: "Game Cube":-)
- Stap 9: Beelde / animasies op die Matrix vertoon - 'n vinnige hack
- Stap 10: Interaktiewe beheer van gestoorde animasies
- Stap 11: Toon lewendige video
- Stap 12: Meer lig amper gratis
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
Hierdie skerm is gebaseer op 'n 8x8 RGB LED Matrix. Vir toetsdoeleindes is dit gekoppel aan 'n standaard Arduino -bord (Diecimila) met behulp van 4 skofregisters. Nadat ek dit aan die werk gekry het, het ek dit op 'n gedrukte PCB gepermatiseer. Die skofregisters is 8-bis breed en kan maklik met die SPI-protokol gekoppel word. Pulswydte modulasie word gebruik om die kleure te meng, meer hieroor later. 'N Deel van die MCU se RAM word gebruik as 'n raambuffer om die beeld vas te hou. Die video -RAM word ontleed deur 'n onderbrekingsroetine op die agtergrond, sodat die gebruiker ander nuttige dinge kan doen, soos om met 'n rekenaar te praat, knoppies en potensiometers te lees. Meer inligting oor "Arduino": www.arduino.cc
Stap 1: Pulse Width Modulation vir die meng van kleure
Pulswydte -modulasie - WAT? Pulswydte -modulasie draai in wese die krag wat na 'n elektriese toestel gelei word, redelik vinnig. Die bruikbare krag is die gevolg van die wiskundige gemiddelde van die vierkantgolffunksie wat oor die interval van een periode geneem is. Hoe langer die funksie in die AAN -posisie bly, hoe meer krag kry u. PWM het dieselfde effek op die helderheid van LED's as 'n dimmer op AC -ligte. Die taak wat voorlê, is om die helderheid van 64 RGB LED's (= 192 enkele LED's!) Individueel op 'n goedkoop en maklike manier te beheer, sodat 'n mens die geheel kan kry spektrum van kleure. Daar moet verkieslik geen flikkerende of ander ontstellende effekte wees nie. Die nie -lineêre persepsie van helderheid wat die menslike oog toon, sal hier nie in ag geneem word nie (bv. Die verskil tussen 10% en 20% helderheid lyk "groter" as tussen 90% en 100%). Beeld (1) illustreer die werkbeginsel van die PWM -algoritme. Gestel die kode word 'n waarde van 7 gegee vir die helderheid van LED (0, 0). Verder weet dit dat daar 'n maksimum van N stappe in helderheid is. Die kode gebruik N -lusse vir alle moontlike helderheidsvlakke en alle nodige lusse om elke LED in alle rye te bedien. As die lusteller x in die helderheidslus kleiner as 7 is, word die LED aangeskakel. As dit groter as 7 is, is die LED af. Deur dit baie vinnig te doen vir alle LED's, helderheidsvlakke en basiskleure (RGB), kan elke LED individueel aangepas word om die gewenste kleur te toon. Metings met 'n ossilloskoop toon dat die verfrissingskode van die skerm ongeveer 50% CPU -tyd neem. Die res kan gebruik word om seriële kommunikasie met 'n rekenaar te doen, knoppies te lees, met 'n RFID -leser te praat, stuur I2C -data na ander modules …
Stap 2: Praat met skofregisters en LED's
'N Skofregister is 'n toestel waarmee data in serie en 'n parallelle uitset gelaai kan word. Die teenoorgestelde werking is ook moontlik met die toepaslike chip. Daar is 'n goeie handleiding oor skofregisters op die arduino-webwerf. Die LED's word aangedryf deur 8-bis-skofregisters van die tipe 74HC595. Elke poort kan ongeveer 25mA se stroom verkry of laat sink. Die totale stroom per chip wat ingesink of verkry word, mag nie 70mA oorskry nie. Hierdie skyfies is uiters goedkoop, dus betaal nie meer as ongeveer 40 sent per stuk nie. Aangesien LED's 'n eksponensiële stroom / spanning kenmerk het, moet daar weerstandsbeperkende weerstande wees. Om die wet van Ohm te gebruik: R = (V - Vf) / IR = beperkende weerstand, V = 5V, Vf = LED se voorspanning, I = gewenste stroom Rooi LED's het 'n voorwaartse spanning van ongeveer 1.8V, blou en groen wissel van 2.5V tot 3.5V. Gebruik 'n eenvoudige multimeter om dit te bepaal. Vir die regte kleurweergawe moet 'n paar dinge in ag geneem word: spektrale sensitiwiteit van die menslike oog (rooi/blou: sleg, groen: goed), doeltreffendheid van die LED op 'n sekere golflengte en stroom. In die praktyk neem 'n mens net 3 potensiometers en pas dit aan totdat die LED behoorlik wit lig toon. Die maksimum LED -stroom moet natuurlik nie oorskry word nie. Wat ook hier belangrik is, is dat die skofregister wat die rye bestuur, 3x8 LED's moet verskaf, sodat dit beter is om die stroom nie te hoog op te stoot nie. Ek was suksesvol met die beperking van weerstande van 270Ohm vir alle LED's, maar dit hang natuurlik af van die vorm van die LED -matriks. Die skofregisters word gekoppel aan SPI -reeks. SPI = Serial Peripheral Interface (Image (1)). In teenstelling met die seriële poorte op rekenaars (asinchroon, geen kloksein), benodig SPI 'n kloklyn (SRCLK). Dan is daar 'n seinlyn wat die toestel vertel wanneer die data geldig is (chip select / latch / RCLK). Uiteindelik is daar twee data lyne, die een word MOSI (master out slave in) genoem, die ander een MISO (master in slave out). SPI word gebruik om geïntegreerde stroombane te koppel, net soos ek2C. Hierdie projek benodig MOSI, SRCLK en RCLK. Boonop word die aktiveerlyn (G) ook gebruik. 'N SPI -siklus word begin deur die RCLK -lyn na LOW te trek (prent (2)). Die MCU stuur sy data op die MOSI -lyn. Die logiese toestand daarvan word gemonster deur die skofregister aan die stygende rand van die SRCLK -lyn. Die siklus word beëindig deur die RCLK -lyn terug te trek na HOOG. Nou is die data beskikbaar by die uitsette.
Stap 3: Skematiese
Prent (1) wys hoe die skofregisters bedraad is. Hulle is daisy-vasgeketting, sodat data in hierdie ketting en ook daardeur verskuif kan word. Daarom is dit maklik om meer skofregisters by te voeg.
Prent (2) toon die res van die skema met die MCU, verbindings, kwarts … Die aangehegte PDF -lêer bevat die hele werke, die beste om te druk.
Stap 4: Bronkode C ++
In C/C ++ moet 'n mens gewoonlik funksies prototipeer voordat dit gekodeer word.#Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Die Arduino IDE vereis nie hierdie stap nie, aangesien prototipes van funksies outomaties gegenereer word. Daarom verskyn funksieprototipes nie in die kode wat hier getoon word nie Beeld (1): setup () functionImage (2): spi_transfer () funksie met behulp van hardeware SPI van die ATmega168 -chip (loop vinniger) Beeld (3): framebuffer -kode met 'n timer1 oorloop onderbreek. Stukkies kode wat 'n effens kriptiese voorkoms vir beginners het, bv terwyl (! (SPSR & (1 << SPIF))) {} die registers van die MCU direk gebruik. Hierdie voorbeeld in woorde: "terwyl die SPIF-bit in register SPSR nie ingestel is nie, doen niks". Ek wil net beklemtoon dat dit vir standaardprojekte regtig nie nodig is om hierdie dinge wat so nou verband hou met hardeware te hanteer nie. Beginners moet nie hierdeur bang wees nie.
Stap 5: Klaar gadget
Nadat ek alle probleme opgelos het en die kode aan die gang gekry het, moes ek net 'n PCB -uitleg skep en dit na 'n fantastiese huis stuur. Dit lyk soveel skoner:-) Beeld (1): volledig gevulde beheerbord Beeld (2): voorkant van die kaal PCBI beeld (2): agterkant Daar is verbindings wat PORTC en PORTD van die ATmega168/328-chip en 5V/GND uitbreek. Hierdie poorte bevat die reeks RX, TX lyne, die I2C lyne, digitale I/O lyne en 7 ADC lyne. Dit is bedoel vir die stapel van skilde aan die agterkant van die bord. Die afstand is geskik vir die gebruik van perfboard (0.1in). Die selflaaiprogram kan met behulp van die ICSP -kop (met adafruit se USBtinyISP) geflits word. Sodra dit klaar is, gebruik net 'n standaard FTDI USB/TTL seriële adapter of soortgelyke. Ek het ook 'n jumper wat outomaties herstel is, bygevoeg. Ek het ook 'n klein Perl-skrif opgestel (sien my blog), wat outomatiese herstel moontlik maak met FTDI-kabels wat gewoonlik nie uit die boks werk nie (RTS vs. DTR-lyn). Dit werk op Linux, miskien op MAC. Gedrukte stroombane en 'n paar DIY KIT's is beskikbaar op my blog. SMD soldeer nodig! Sien die PDF -lêers vir bouinstruksies en bronne vir LED -matrikse.
Stap 6: Toepassing: CPU -laai -monitor vir Linux met Perl
Dit is 'n baie basiese lasmonitor met 'n geskiedenisplot. Dit is gebaseer op 'n Perl -skripsie wat die stelsel se 'laadgemiddelde' elke 1 keer versamel met behulp van iostat. Data word gestoor in 'n skikking wat na elke opdatering verskuif word. Nuwe data word bo -aan die lys bygevoeg, die oudste inskrywing word uitgestoot. Meer gedetailleerde inligting en aflaaie (kode …) is op my blog beskikbaar.
Stap 7: Toepassing: Praat met ander modules met behulp van I²C
Dit is slegs 'n beginselbewys en verreweg nie die eenvoudigste oplossing vir hierdie taak nie2C maak voorsiening vir tot 127 "slawe" borde direk. Hier is die bord aan die regterkant in die video die 'meester' (wat alle oordragte begin), die linkerbord is die slaaf (wag op data). Ek2C benodig 2 seinlyne en die gewone kraglyne (+, -, SDA, SCL). Aangesien dit 'n bus is, is alle toestelle parallel daaraan gekoppel.
Stap 8: Toepassing: "Game Cube":-)
Net 'n fratsgedagte. Hierdie pas ook by die houtomhulsel wat op die intro -bladsy verskyn. Dit het 5 knoppies aan die agterkant wat gebruik kan word om 'n eenvoudige speletjie te speel. DIE EINDE?
Stap 9: Beelde / animasies op die Matrix vertoon - 'n vinnige hack
Dit het dus slegs 8x8 pixels en 'n paar kleure beskikbaar. Gebruik eers iets soos Gimp om u gunsteling prentjie af te skaal tot presies 8x8 pixels en stoor dit as '.ppm' rouformaat (nie ASCII nie). PPM is maklik om te lees en te verwerk in 'n Perl -skrif. Die gebruik van ImageMagick en die opdragreëlinstrument "convert" sal nie behoorlik werk nie. Laai die nuwe arduino -kode op, en gebruik dan die Perl -script om dit na die kontroleerder op te laai. Die flikkering is slegs 'n wanverhouding tussen LED -verversing en die raamkoers van my kamera. Nadat die kode 'n bietjie opgedateer is, loop dit redelik rits. Alle beelde word regstreeks in serie oorgedra soos u dit sien. Langer animasies kan in 'n eksterne EEPROM gestoor word, soos dit in verskillende spek-pov-borde gedoen word.
Stap 10: Interaktiewe beheer van gestoorde animasies
Waarom laat die mikrobeheerder al die plesier hê? Die Arduino -kultus gaan oor fisiese rekenaar en interaksie, dus voeg net 'n potensiometer by en neem beheer! Dit is baie eenvoudig om een van die 8 analoog -na -digitale omset -insette te gebruik.
Stap 11: Toon lewendige video
Deur 'n Perl -skrif en 'n paar modules te gebruik, is dit redelik maklik om 'n lewendige video op X11 -stelsels te wys. Dit is op Linux gekodeer en kan ook op MAC's werk. Dit werk soos volg:- kry die muisposisie- neem 'n boks NxN-pixel in die middel van die wyser- skaal die beeld tot 8x8 pixel- stuur dit na die LED-bord- herhaal
Stap 12: Meer lig amper gratis
Met slegs twee trappe kan die helderheid aansienlik verhoog word. Vervang die 270Ω weerstande met 169Ω en weer 'n 74HC595 skofregister op IC5.