Indholdsfortegnelse:

64 Pixel RGB LED -skærm - En anden Arduino -klon: 12 trin (med billeder)
64 Pixel RGB LED -skærm - En anden Arduino -klon: 12 trin (med billeder)

Video: 64 Pixel RGB LED -skærm - En anden Arduino -klon: 12 trin (med billeder)

Video: 64 Pixel RGB LED -skærm - En anden Arduino -klon: 12 trin (med billeder)
Video: SKR 1.4 - TMC2208 UART v3.0 2024, November
Anonim
64 Pixel RGB LED -skærm - Endnu en Arduino -klon
64 Pixel RGB LED -skærm - Endnu en Arduino -klon
64 Pixel RGB LED -skærm - Endnu en Arduino -klon
64 Pixel RGB LED -skærm - Endnu en Arduino -klon
64 Pixel RGB LED -skærm - Endnu en Arduino -klon
64 Pixel RGB LED -skærm - Endnu en Arduino -klon

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

Pulsbreddemodulation til blanding af farver
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

Taler til skiftregistre og lysdioder
Taler til skiftregistre og lysdioder
Taler til skiftregistre og lysdioder
Taler 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

Skematisk
Skematisk
Skematisk
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

C ++ kildekode
C ++ kildekode
C ++ kildekode
C ++ kildekode
C ++ kildekode
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

Færdig gadget
Færdig gadget
Færdig gadget
Færdig gadget
Færdig gadget
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

Ansøgning: Tal til andre moduler ved hjælp af I²C
Ansøgning: Tal til 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":-)

Ansøgning
Ansøgning

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

Visning af billeder / animationer på Matrix - Quick Hack
Visning af billeder / animationer på Matrix - Quick Hack
Visning af billeder / animationer på Matrix - Quick Hack
Visning af billeder / animationer på Matrix - Quick Hack
Visning af billeder / animationer på Matrix - Quick Hack
Visning af billeder / animationer på Matrix - Quick Hack
Visning af billeder / animationer på Matrix - Quick Hack
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

Mere lys næsten gratis
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: