
Innholdsfortegnelse:
- Trinn 1: Pulsbreddemodulasjon for blanding av farger
- Trinn 2: Snakker med skiftregistre og lysdioder
- Trinn 3: Skjematisk
- Trinn 4: C ++ kildekoden
- Trinn 5: Ferdig gadget
- Trinn 6: Søknad: CPU Load Monitor for Linux Using Perl
- Trinn 7: Søknad: Snakke med andre moduler ved hjelp av I²C
- Trinn 8: Søknad: "Game Cube":-)
- Trinn 9: Visning av bilder / animasjoner på Matrix - Quick Hack
- Trinn 10: Interaktiv kontroll av lagrede animasjoner
- Trinn 11: Viser levende video
- Trinn 12: Mer lys nesten gratis
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-23 15:02
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
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
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
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
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
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
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":-)
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
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
Med bare to trinn kan lysstyrken økes ganske mye. Erstatt 270Ω motstander med 169Ω og piggyback et annet 74HC595 skiftregister på IC5.
Anbefalt:
En annen stort sett 3D -trykt rotasjonsbryter: 7 trinn (med bilder)

En annen hovedsakelig 3D -trykt rotasjonsbryter: For en stund siden opprettet jeg en hovedsakelig 3D -trykt rotasjonsbryter spesielt for Minivac 601 -replika -prosjektet. For mitt nye Think-a-Tron 2020-prosjekt trenger jeg enda en dreiebryter. Jeg leter etter en SP5T panelmonteringsbryter. Et tillegg
En annen MIDI til CV -boks: 7 trinn (med bilder)

En annen MIDI til CV -boks: En annen MIDI til CV -boks er et prosjekt jeg utviklet da en Korg MS10 banket på døren min og fant sted i studioet mitt. Siden oppsettet mitt er sterkt knyttet til MIDI for å automatisere og synkronisere alle instrumentene, da jeg kjøpte MS10 det første problemet jeg hadde
HV -isolatorlamper og annen unik aksentbelysning: 8 trinn (med bilder)

HV isolator anhenglamper og annen unik aksentbelysning: Jeg gikk på en tangent en dag og begynte å lage forskjellige lamper. Jeg trykte noen deler i 3D og fikk mesteparten av resten fra Lowes og dollarbutikken. Det beste funnet var da jeg så en bøtte med strømstangisolatorer på et låvesalg. De var $ 3 hver. Deretter
MIDI 5V LED Strip Light Controller for Spielatron eller annen MIDI Synth: 7 trinn (med bilder)

MIDI 5V LED Strip Light Controller for Spielatron eller annen MIDI Synth: Denne kontrolleren blinker trefargede LED stripelys for 50mS per note. Blå for G5 til D#6, rød for E6 til B6 og grønn for C7 til G7. Kontrolleren er en ALSA MIDI -enhet, slik at MIDI -programvare kan mates ut til lysdiodene samtidig som en MIDI -synthenhet
Mestre din mikro: bit med Arduino IDE-knapp og annen GPIO: 3 trinn (med bilder)

Master din mikro: bit Med Arduino IDE-Button and Other GPIO: I vår forrige blogg Master Your Micro: bit med Arduino IDE - - Light LED, vi har snakket om hvordan du installerer micro: bit bibliotek på Arduino IDE og hvordan å kjøre LED på micro: bit med Arduino IDE. I denne artikkelen skal vi fortelle deg