Innholdsfortegnelse:

64 Pixel RGB LED -skjerm - En annen Arduino -klon: 12 trinn (med bilder)
64 Pixel RGB LED -skjerm - En annen Arduino -klon: 12 trinn (med bilder)

Video: 64 Pixel RGB LED -skjerm - En annen Arduino -klon: 12 trinn (med bilder)

Video: 64 Pixel RGB LED -skjerm - En annen Arduino -klon: 12 trinn (med bilder)
Video: Веб-программирование – информатика для руководителей бизнеса 2016 2024, Juli
Anonim
64 Pixel RGB LED -skjerm - Nok en Arduino -klon
64 Pixel RGB LED -skjerm - Nok en Arduino -klon
64 Pixel RGB LED -skjerm - Nok en Arduino -klon
64 Pixel RGB LED -skjerm - Nok en Arduino -klon
64 Pixel RGB LED -skjerm - Nok en Arduino -klon
64 Pixel RGB LED -skjerm - Nok en Arduino -klon

Denne skjermen er basert på en 8x8 RGB LED Matrix. For testformål ble det koblet til et standard Arduino -kort (Diecimila) ved hjelp av 4 skiftregistre. Etter å ha fått det til å fungere, permatiserte jeg det på en PC med PC. Skiftregistrene er 8-biters brede og er enkle å koble til SPI-protokollen. Pulsbreddemodulering brukes til å blande fargene, mer om det senere. En del av MCUs RAM brukes som en rammebuffer for å holde bildet. Video -RAM er analysert av en avbruddsrutine i bakgrunnen, slik at brukeren kan gjøre andre nyttige ting som å snakke med en PC, lese knapper og potensiometre. Mer informasjon om "Arduino": www.arduino.cc

Trinn 1: Pulsbreddemodulasjon for blanding av farger

Pulsbreddemodulasjon for blanding av farger
Pulsbreddemodulasjon for blanding av farger

Pulsbreddemodul - HVA? Pulsbreddemodulasjon er egentlig å slå strømmen til en elektrisk enhet på og av ganske raskt. Den brukbare kraften er resultatet av det matematiske gjennomsnittet av kvadratbølgefunksjonen tatt over intervallet på en periode. Jo lenger funksjonen forblir i PÅ -posisjonen, desto mer strøm får du. PWM har samme effekt på lysstyrken til lysdioder som en dimmer på vekselstrømslamper. Oppgaven fremover er å individuelt kontrollere lysstyrken til 64 RGB -lysdioder (= 192 enkle lysdioder!) På en billig og enkel måte, slik at man kan få hele spekter av farger. Fortrinnsvis bør det ikke være flimmer eller andre forstyrrende effekter. Den ikke -lineære oppfatningen av lysstyrke som det menneskelige øye viser, vil ikke bli tatt i betraktning her (f.eks. Forskjellen mellom 10% og 20% lysstyrke virker "større" enn mellom 90% og 100%). Bilde (1) illustrerer arbeidsprinsippet for PWM -algoritmen. Si at koden er gitt verdien 7 for lysstyrken til LED (0, 0). Videre vet den at det er maksimalt N trinn i lysstyrke. Koden kjører N -sløyfer for alle mulige lysstyrkenivåer og alle nødvendige sløyfer for å betjene hver eneste LED i alle radene. Hvis sløyfetelleren x i lysstyrkesløyfen er mindre enn 7, lyser LED -en. Hvis den er større enn 7, er LED -en slått av. Når du gjør dette veldig raskt for alle lysdioder, lysstyrkenivåer og grunnfarger (RGB), kan hver LED justeres individuelt for å vise ønsket farge. Målinger med et oscilloskop har vist at oppdateringskoden for skjermen tar omtrent 50% CPU -tid. Resten kan brukes til å gjøre seriell kommunikasjon med en PC, lese knapper, snakke med en RFID -leser, sende I2C -data til andre moduler …

Trinn 2: Snakker med skiftregistre og lysdioder

Snakker med skiftregistre og lysdioder
Snakker med skiftregistre og lysdioder
Snakker med skiftregistre og lysdioder
Snakker med skiftregistre og lysdioder

Et skiftregister er en enhet som gjør det mulig å laste inn data i serie og en parallell utgang. Den motsatte operasjonen er også mulig med den riktige brikken. Det er en god opplæring om skiftregistre på arduino-nettstedet. LEDene drives av 8-biters skiftregistre av typen 74HC595. Hver port kan skaffe eller synke omtrent 25mA strøm. Den totale strømmen per brikke synket eller hentet bør ikke overstige 70mA. Disse sjetongene er ekstremt billige, så ikke betal mer enn omtrent 40 cent per stykke. Siden lysdioder har en eksponentiell strøm / spenningskarakteristikk, må det være strømbegrensende motstander. Ved bruk av Ohms lov: R = (V - Vf) / IR = begrensningsmotstand, V = 5V, Vf = LEDs fremspenning, I = ønsket strøm Røde lysdioder har en fremspenning på omtrent 1.8V, blått og grønt område fra 2.5V til 3.5V. Bruk et enkelt multimeter for å bestemme det. For riktig fargegjengivelse bør man ta noen ting i betraktning: spektral følsomhet for det menneskelige øyet (rød/blå: dårlig, grønn: god), LED -effektivitet ved en bestemt bølgelengde og strøm. I praksis tar man bare 3 potensiometre og justerer dem til LED -en viser riktig hvitt lys. Selvfølgelig må maksimal LED -strøm ikke overskrides. Det som også er viktig her er at skiftregisteret som driver radene må levere strøm til 3x8 lysdioder, så det er bedre å ikke skyve strømmen for høyt. Jeg lyktes med å begrense motstander på 270Ohm for alle lysdioder, men det avhenger selvfølgelig av LED -matrisens merke. Skiftregistrene er koblet til SPI -serien. SPI = Serial Peripheral Interface (Bilde (1)). I motsetning til serielle porter på PC -er (asynkron, uten klokkesignal), trenger SPI en klokkelinje (SRCLK). Så er det en signallinje som forteller enheten når dataene er gyldige (chip select / latch / RCLK). Til slutt er det to datalinjer, den ene kalles MOSI (master out slave in), den andre kalles MISO (master in slave out). SPI brukes til å koble til integrerte kretser, akkurat som jeg2C. Dette prosjektet trenger MOSI, SRCLK og RCLK. I tillegg brukes også aktiveringslinjen (G). En SPI -syklus startes ved å trekke RCLK -linjen til LAV (Bilde (2)). MCU sender dataene sine på MOSI -linjen. Den logiske tilstanden til den samples av skiftregisteret ved den stigende kanten av SRCLK -linjen. Syklusen avsluttes ved å trekke RCLK -linjen tilbake til HIGH. Nå er dataene tilgjengelige ved utgangene.

Trinn 3: Skjematisk

Skjematisk
Skjematisk
Skjematisk
Skjematisk

Bilde (1) viser hvordan skiftregistrene er tilkoblet. De er daisy-lenket, så data kan flyttes inn i denne kjeden og også gjennom den. Derfor er det enkelt å legge til flere skiftregistre.

Bilde (2) viser resten av skjemaet med MCU, kontakter, kvarts … Den vedlagte PDF -filen inneholder hele verkene, best for utskrift.

Trinn 4: C ++ kildekoden

C ++ kildekoden
C ++ kildekoden
C ++ kildekoden
C ++ kildekoden
C ++ kildekoden
C ++ kildekoden

I C/C ++ må man vanligvis prototype funksjoner 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 krever ikke dette trinnet, ettersom funksjoner prototyper genereres automatisk. Derfor vil ikke funksjonsprototyper dukke opp i koden som vises her. Bilde (1): setup () functionImage (2): spi_transfer () -funksjonen ved bruk av maskinvarespi på ATmega168 -brikken (kjører raskere) Bilde (3): framebufferkode ved hjelp av en timer1 overløpsavbrudd. Kodestykker som har et litt kryptisk utseende for nybegynnere f.eks mens (! (SPSR & (1 << SPIF))) {} bruker MCUs registre direkte. Dette eksemplet med ord: "mens SPIF-biten i registeret SPSR ikke er satt, gjør ingenting". Jeg vil bare understreke at for standardprosjekter er det virkelig ikke nødvendig å håndtere disse tingene så nært knyttet til maskinvare. Nybegynnere skal ikke bli skremt av dette.

Trinn 5: Ferdig gadget

Ferdig gadget
Ferdig gadget
Ferdig gadget
Ferdig gadget
Ferdig gadget
Ferdig gadget

Etter å ha løst alle problemer og fått koden til å kjøre, måtte jeg bare lage et PCB -oppsett og sende det til et fantastisk hus. Det ser så mye renere ut:-) Bilde (1): fullt befolket styrekort Bilde (2): forsiden av den blanke PCBI-bildet (2): baksiden Det er kontakter som bryter ut PORTC og PORTD på ATmega168/328-brikken og 5V/GND. Disse portene inneholder de serielle RX-, TX -linjene, I2C -linjer, digitale I/O -linjer og 7 ADC -linjer. Dette er beregnet for stabling av skjold på baksiden av brettet. Avstanden er egnet for bruk av perfboard (0.1in). Bootloaderen kan blinke med ICSP -hodet (fungerer med adafruit's USBtinyISP). Så snart det er gjort, bare bruk en standard FTDI USB/TTL seriell adapter eller lignende. Jeg har også lagt til en jumper for automatisk tilbakestilling. Jeg har også tilberedt et lite Perl-skript (se bloggen min), som muliggjør automatisk tilbakestilling med FTDI-kabler som vanligvis ikke fungerer ut av esken (RTS vs. DTR-linje). Dette fungerer på Linux, kanskje på MAC. Trykte kretskort og noen få DIY KIT er tilgjengelig på bloggen min. SMD lodding nødvendig! Se PDF -filene for byggeinstruksjoner og kilder for LED -matriser.

Trinn 6: Søknad: CPU Load Monitor for Linux Using Perl

Dette er en veldig grunnleggende lastmonitor med et historisk plot. Det er basert på et Perl -skript som samler systemets "belastningsgjennomsnitt" hver 1s ved hjelp av iostat. Data lagres i en matrise som skiftes ved hver oppdatering. Nye data legges til øverst på listen, den eldste oppføringen blir presset ut. Mer detaljert informasjon og nedlastinger (kode …) er tilgjengelig på bloggen min.

Trinn 7: Søknad: Snakke med andre moduler ved hjelp av I²C

Søknad: Å snakke med andre moduler ved hjelp av I²C
Søknad: Å snakke med andre moduler ved hjelp av I²C

Dette er bare et prinsippbevis og uten tvil den enkleste løsningen for denne jobben. Ved å bruke I2C gir mulighet for direkte adressering av opptil 127 "slave" -kort. Her er brettet på høyre side i videoen "master" (som starter alle overføringer), venstre bord er slave (venter på data). Jeg2C trenger 2 signallinjer og de vanlige kraftledningene (+, -, SDA, SCL). Siden det er en buss, er alle enheter parallelt koblet til den.

Trinn 8: Søknad: "Game Cube":-)

Applikasjon
Applikasjon

Bare en freak tanke. Denne passer også inn i trekabinettet som vises på intro -siden. Den har 5 knapper på baksiden som kan brukes til å spille et enkelt spill. SLUTEN?

Trinn 9: Visning av bilder / animasjoner på Matrix - Quick Hack

Vise bilder / animasjoner på Matrix - Quick Hack
Vise bilder / animasjoner på Matrix - Quick Hack
Vise bilder / animasjoner på Matrix - Quick Hack
Vise bilder / animasjoner på Matrix - Quick Hack
Vise bilder / animasjoner på Matrix - Quick Hack
Vise bilder / animasjoner på Matrix - Quick Hack
Vise bilder / animasjoner på Matrix - Quick Hack
Vise bilder / animasjoner på Matrix - Quick Hack

Så den har bare 8 x 8 piksler og noen få farger tilgjengelig. Bruk først noe som Gimp til å nedskalere favorittbildet ditt til nøyaktig 8 x 8 piksler og lagre det som ".ppm" råformat (ikke ASCII). PPM er lett å lese og behandle i et Perl -skript. Bruk av ImageMagick og kommandolinjeverktøyet "convert" fungerer ikke som det skal. Last opp den nye arduino -koden, og bruk deretter Perl -skriptet til å laste opp til kontrolleren. Flimringen er bare et feil samsvar med LED -oppdatering og kameraets bildefrekvens. Etter å ha oppdatert koden litt, kjører den ganske zippy. Alle bildene overføres live over seriell slik du ser dem. Lengre animasjoner kan lagres i en ekstern EEPROM som det gjøres på forskjellige eiker-pov-tavler.

Trinn 10: Interaktiv kontroll av lagrede animasjoner

Hvorfor la mikrokontrolleren ha det gøy? Arduino -kulten handler om fysisk databehandling og interaksjon, så bare legg til et potensiometer og ta kontroll! Å bruke en av de 8 analoge til digitale omformerinngangene gjør det veldig enkelt.

Trinn 11: Viser levende video

Ved å bruke et Perl -skript og noen få moduler er det ganske enkelt å vise kvasi live -video på X11 -systemer. Den ble kodet på linux og kan også fungere på MAC-er. Det fungerer slik:- få musemarkørposisjonen- ta en boks med NxN-piksel sentrert ved markøren- skala bildet til 8x8 piksler- send det til LED-kortet- gjenta

Trinn 12: Mer lys nesten gratis

Mer lys nesten gratis
Mer lys nesten gratis

Med bare to trinn kan lysstyrken økes ganske mye. Erstatt 270Ω motstander med 169Ω og piggyback et annet 74HC595 skiftregister på IC5.

Anbefalt: