Indholdsfortegnelse:
- Trin 1: Pulsbreddemodulation til blanding af farver
- Trin 2: Tal til skiftregistre og lysdioder
- Trin 3: Skematisk
- Trin 4: C ++ kildekode
- Trin 5: Færdig gadget
- Trin 6: Ansøgning: CPU Load Monitor til Linux ved hjælp af Perl
- Trin 7: Ansøgning: Tal med andre moduler ved hjælp af I²C
- Trin 8: Ansøgning: "Game Cube":-)
- Trin 9: Visning af billeder / animationer på Matrix - Quick Hack
- Trin 10: Interaktiv kontrol af lagrede animationer
- Trin 11: Viser livevideo
- Trin 12: Mere lys næsten gratis
Video: 64 Pixel RGB LED -skærm - En anden Arduino -klon: 12 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:31
Denne skærm er baseret på en 8x8 RGB LED Matrix. Til testformål blev det forbundet til et standard Arduino -kort (Diecimila) ved hjælp af 4 skiftregistre. Efter at have fået det til at fungere, permatiserede jeg det på et fabbed PCB. Skiftregistrene er 8-bit brede og kan let forbindes med SPI-protokollen. Pulsbreddemodulation bruges til at blande farverne, mere om det senere. En del af MCU'ens RAM bruges som en rammebuffer til at holde billedet. Video -RAM'en analyseres af en afbrydelsesrutine i baggrunden, så brugeren kan gøre andre nyttige ting som at tale med en pc, læse knapper og potentiometre. Flere oplysninger om "Arduino": www.arduino.cc
Trin 1: Pulsbreddemodulation til blanding af farver
Pulsbreddemodul - HVAD? Pulsbreddemodulation er i det væsentlige ved hurtigt at tænde og slukke for strømmen til en elektrisk enhed. Den brugbare effekt er resultatet af det matematiske gennemsnit af kvadratbølgefunktionen taget over intervallet i en periode. Jo længere funktionen forbliver i ON -positionen, jo mere strøm får du. PWM har samme effekt på lysdiodernes lysstyrke som en lysdæmper på vekselstrømslamper. Opgaven forude er individuelt at styre lysstyrken på 64 RGB -lysdioder (= 192 enkelte lysdioder!) På en billig og let måde, så man kan få det hele spektrum af farver. Der bør helst ikke være flimrende eller andre forstyrrende effekter. Den ikke -lineære opfattelse af lysstyrke, der udvises af det menneskelige øje, vil ikke blive taget i betragtning her (f.eks. Forskellen mellem 10% og 20% lysstyrke virker "større" end mellem 90% og 100%). Billede (1) illustrerer arbejdsprincippet for PWM -algoritmen. Sig koden får en værdi på 7 for lysstyrken på LED (0, 0). Desuden ved den, at der maksimalt er N trin i lysstyrke. Koden kører N -sløjfer for alle mulige lysstyrkeniveauer og alle nødvendige sløjfer for at servicere hver enkelt LED i alle rækker. Hvis sløjfe -tælleren x i lysstyrke -sløjfen er mindre end 7, tændes LED'en. Hvis den er større end 7, er LED'en slukket. Ved at gøre dette meget hurtigt for alle lysdioder, lysstyrkeniveauer og basisfarver (RGB) kan hver LED justeres individuelt for at vise den ønskede farve. Målinger med et oscilloskop har vist, at skærmens opdateringskode tager omkring 50% CPU -tid. Resten kan bruges til at foretage seriel kommunikation med en pc, læse knapper, tale med en RFID -læser, sende I2C -data til andre moduler …
Trin 2: Tal til skiftregistre og lysdioder
Et skiftregister er en enhed, der gør det muligt at indlæse data serielt og et parallelt output. Den modsatte operation er også mulig med den passende chip. Der er en god vejledning i skiftregistre på arduino-webstedet. LED'erne drives af 8-bit skiftregistre af typen 74HC595. Hver port kan kilde eller synke omkring 25mA strøm. Den samlede strøm pr. Chip, der sænkes eller hentes, må ikke overstige 70mA. Disse chips er ekstremt billige, så betal ikke mere end cirka 40 cent pr. Da lysdioder har en eksponentiel strøm / spændingskarakteristik, skal der være strømbegrænsende modstande. Ved hjælp af Ohms lov: R = (V - Vf) / IR = begrænsningsmodstand, V = 5V, Vf = LED's fremspænding, I = ønsket strøm Røde lysdioder har en fremspænding på omkring 1,8V, blå og grøn rækkevidde fra 2,5V til 3,5V. Brug et simpelt multimeter til at bestemme det. For korrekt farvegengivelse skal man tage et par ting i betragtning: spektral følsomhed for det menneskelige øje (rød/blå: dårlig, grøn: god), LED -effektivitet ved en bestemt bølgelængde og strøm. I praksis tager man blot 3 potentiometre og justerer dem, indtil LED'en viser korrekt hvidt lys. Den maksimale LED -strøm må naturligvis ikke overskrides. Hvad der også er vigtigt her er, at skiftregistret, der driver rækkerne, skal levere strøm til 3x8 LED'er, så hellere ikke skubbe strømmen for højt op. Jeg havde succes med at begrænse modstande på 270Ohm for alle lysdioder, men det afhænger selvfølgelig af LED -matrixens mærke. Skiftregistrene er forbundet med SPI -seriel. SPI = Serial Peripheral Interface (Billede (1)). Modsat serielle porte på pc'er (asynkront, uden kloksignal) har SPI brug for en urlinje (SRCLK). Så er der en signallinje, der fortæller enheden, når dataene er gyldige (chip select / latch / RCLK). Endelig er der to datalinjer, den ene kaldes MOSI (master out slave in), den anden kaldes MISO (master in slave out). SPI bruges til at grænseflade integrerede kredsløb, ligesom jeg2C. Dette projekt har brug for MOSI, SRCLK og RCLK. Derudover bruges aktiveringslinjen (G) også. En SPI -cyklus startes ved at trække RCLK -linjen til LAV (Billede (2)). MCU sender sine data på MOSI -linjen. Den logiske tilstand af den samples af skiftregistret ved den stigende kant af SRCLK -linjen. Cyklussen afsluttes ved at trække RCLK -linjen tilbage til HIGH. Nu er dataene tilgængelige på output.
Trin 3: Skematisk
Billede (1) viser, hvordan skifteregistrene er forbundet. De er daisy-lænket, så data kan flyttes ind i denne kæde og også gennem den. Derfor er det let at tilføje flere skifteregistre.
Billede (2) viser resten af skematikken med MCU, stik, kvarts … Den vedhæftede PDF -fil indeholder hele værkerne, bedst til udskrivning.
Trin 4: C ++ kildekode
I C/C ++ skal man normalt prototype funktioner, før man koder dem.#Inkludere int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Arduino IDE kræver ikke dette trin, da funktionsprototyper genereres automatisk. Derfor vises funktionsprototyper ikke i koden vist her. Billede (1): setup () functionImage (2): spi_transfer () funktion ved hjælp af hardware SPI af ATmega168 -chippen (kører hurtigere) Billede (3): framebuffer -kode ved hjælp af en timer1 overløbsafbrydelse. Stykker kode, der har et lidt kryptisk udseende for begyndere f.eks mens (! (SPSR & (1 << SPIF))) {} bruger MCU's registre direkte. Dette eksempel med ord: "mens SPIF-bit'en i register SPSR ikke er indstillet, gør ingenting". Jeg vil bare understrege, at det for standardprojekter virkelig ikke er nødvendigt at beskæftige sig med disse ting så tæt forbundet med hardware. Begyndere bør ikke blive bange for dette.
Trin 5: Færdig gadget
Efter at have løst alle problemer og fået koden til at køre, var jeg bare nødt til at oprette et PCB -layout og sende det til et fab house. Det ser så meget renere ud:-) Billede (1): fuldt befolket controller board Billede (2): forsiden af den bare PCBImage (2): bagsiden Der er stik, der bryder PORTC og PORTD af ATmega168/328-chippen og 5V/GND. Disse porte indeholder de serielle RX-, TX -linjer, I2C -linjer, digitale I/O -linjer og 7 ADC -linjer. Dette er beregnet til stabling af skjolde på bagsiden af brættet. Afstanden er velegnet til brug af perfboard (0.1in). Bootloaderen kan blinkes ved hjælp af ICSP -headeren (fungerer med adafruit's USBtinyISP). Så snart det er gjort, skal du bare bruge en standard FTDI USB/TTL seriel adapter eller lignende. Jeg har også tilføjet en jumper til automatisk nulstilling. Jeg har også tilberedt et lille Perl-script (se min blog), der muliggør automatisk nulstilling med FTDI-kabler, som normalt ikke fungerer ud af boksen (RTS vs. DTR-linje). Dette fungerer på Linux, måske på MAC. Trykte kredsløb og et par DIY KIT'er er tilgængelige på min blog. SMD lodning påkrævet! Se PDF -filerne for byggeinstruktioner og kilder til LED -matricer.
Trin 6: Ansøgning: CPU Load Monitor til Linux ved hjælp af Perl
Dette er en meget grundlæggende belastningsmonitor med et historisk plot. Det er baseret på et Perl -script, der samler systemets "belastningsgennemsnit" hver 1'er ved hjælp af iostat. Data gemmes i et array, der flyttes ved hver opdatering. Nye data tilføjes øverst på listen, den ældste post bliver skubbet ud. Flere detaljerede oplysninger og downloads (kode …) er tilgængelige på min blog.
Trin 7: Ansøgning: Tal med andre moduler ved hjælp af I²C
Dette er blot et principbevis og langtfra den enkleste løsning til dette job. Brug af I2C giver mulighed for direkte adressering af op til 127 "slave" -kort. Her er tavlen i højre side i videoen "master" (som starter alle overførsler), venstre bord er slave (venter på data). jeg2C har brug for 2 signallinjer og de sædvanlige elledninger (+, -, SDA, SCL). Da det er en bus, er alle enheder forbundet parallelt med den.
Trin 8: Ansøgning: "Game Cube":-)
Bare en freak tanke. Denne passer også ind i trækabinet vist på introduktionssiden. Den har 5 knapper på bagsiden, som kan bruges til at spille et simpelt spil. SLUT?
Trin 9: Visning af billeder / animationer på Matrix - Quick Hack
Så det har kun 8x8 pixel og et par farver til rådighed. Brug først noget som Gimp til at nedskalere dit yndlingsbillede til nøjagtigt 8x8 pixels og gemme det som ".ppm" råformat (ikke ASCII). PPM er let at læse og behandle i et Perl -script. Brug af ImageMagick og kommandolinjeværktøjet "konverter" fungerer ikke korrekt. Upload den nye arduino -kode, og brug derefter Perl -scriptet til at uploade til controlleren. Flimmeren er bare et uoverensstemmelse mellem LED -opdatering og mit kameras billedhastighed. Efter at have opdateret koden lidt, kører den ganske zippy. Alle billeder overføres live over seriel, som du ser dem. Længere animationer kan gemmes i en ekstern EEPROM, ligesom det gøres i forskellige eger-pov-tavler.
Trin 10: Interaktiv kontrol af lagrede animationer
Hvorfor lade mikrokontrolleren have det sjovt? Arduino -kulten handler om fysisk computing og interaktion, så tilføj bare et potentiometer og tag kontrol! At bruge en af de 8 analoge til digitale konverterindgange gør det meget enkelt.
Trin 11: Viser livevideo
Ved hjælp af et Perl -script og et par moduler gør det ganske let at vise kvasi live -video på X11 -systemer. Det blev kodet på linux og kan også fungere på MAC'er. Det fungerer sådan:- få musemarkørens position- fange en kasse med NxN pixel centreret ved markøren- skalere billedet til 8x8 pixel- sende det til LED bordet- gentage
Trin 12: Mere lys næsten gratis
Med kun to trin kan lysstyrken hæves en del. Udskift 270Ω modstande med 169Ω og piggyback et andet 74HC595 skiftregister på IC5.
Anbefalede:
En anden for det meste 3D -printet drejekontakt: 7 trin (med billeder)
En anden for det meste 3D -printet drejeskift: For et stykke tid siden oprettede jeg en for det meste 3D -udskrevet drejeskifte specielt til mit Minivac 601 -replika -projekt. Til mit nye Think-a-Tron 2020-projekt har jeg brug for endnu en drejekontakt. Jeg leder efter en SP5T panelmonteret switch. En tilføjelse
En anden MIDI til CV -boks: 7 trin (med billeder)
En anden MIDI til CV -boks: En anden MIDI til CV -boks er et projekt, jeg udviklede, da en Korg MS10 bankede på min dør og fandt sted i mit studie. Da mit setup stærkt relaterer sig til MIDI til at automatisere og synkronisere alle instrumenterne, da jeg købte MS10 det første problem, jeg havde
HV isolator vedhængslamper og anden unik accentbelysning: 8 trin (med billeder)
HV isolator vedhængslamper og anden unik accentbelysning: Jeg gik på en tangent en dag og begyndte at lave forskellige lamper. Jeg 3D -printede nogle dele og fik det meste af resten fra Lowes og dollarbutikken. Det bedste fund var, da jeg så en spand med elpælsisolatorer ved et stalgsalg. De var $ 3 hver. Derefter
MIDI 5V LED Strip Light Controller til Spielatron eller anden MIDI Synth: 7 trin (med billeder)
MIDI 5V LED Strip Light Controller til Spielatron eller anden MIDI Synth: Denne controller blinker trefarvede LED strip lys for 50mS pr note. Blå for G5 til D#6, rød for E6 til B6 og grøn for C7 til G7. Controlleren er en ALSA MIDI -enhed, så MIDI -software kan sende til lysdioderne samtidig med en MIDI -synthenhed
Master din mikro: bit med Arduino IDE-knap og anden GPIO: 3 trin (med billeder)
Master din mikro: bit Med Arduino IDE-Knap og anden GPIO: I vores tidligere blog Master din mikro: bit med Arduino IDE - - Light LED, vi har talt om, hvordan du installerer micro: bit bibliotek på Arduino IDE og hvordan at drive LED på micro: bit med Arduino IDE. I denne artikel vil vi fortælle dig h