Innholdsfortegnelse:

Bruke en Dot Matrix LED med et Arduino- og skiftregister: 5 trinn
Bruke en Dot Matrix LED med et Arduino- og skiftregister: 5 trinn

Video: Bruke en Dot Matrix LED med et Arduino- og skiftregister: 5 trinn

Video: Bruke en Dot Matrix LED med et Arduino- og skiftregister: 5 trinn
Video: M#3 MAX7219 7 Segment & Dot Matrix displays | Outseal Dev. PLC Mega 2024, November
Anonim
Bruke en Dot Matrix LED med et Arduino- og skiftregister
Bruke en Dot Matrix LED med et Arduino- og skiftregister
Bruke en Dot Matrix LED med et Arduino- og skiftregister
Bruke en Dot Matrix LED med et Arduino- og skiftregister
Bruke en Dot Matrix LED med et Arduino- og skiftregister
Bruke en Dot Matrix LED med et Arduino- og skiftregister

Siemens DLO7135 Dot matrix LED er et fantastisk stykke optoelektronikk. Det er fakturert som en 5x7 Dot Matrix Intelligent Display (r) med minne/dekoder/driver. Sammen med dette minnet har den et 96-tegners ASCII-display med store og små bokstaver, en innebygd tegngenerator og multiplexer, fire nivåer av lysintensitet, og det hele går på 5V. Det er mye å leve opp til, og for $ 16 en pop, burde det definitivt. Mens jeg tilbrakte halve dagen i min favoritt lokale elektronikkbutikk, fant jeg en beholder full av disse for 1,50 dollar stykket. Jeg forlot butikken med flere. Denne instruksjonen viser deg hvordan du kobler til disse prikkmatrisens LED-er og displaytegn ved hjelp av en AVR-basert Arduino. Hvis du har lest noen av mine tidligere guider, kan du få ideen om at jeg ofte er for den mest parsimoniøse løsningen, og du tar ikke feil, selv om jeg av og til kommer til kort med målet. Derfor vil jeg også gå et nytt trinn i denne instruksjonsfulle og vise deg hvordan du kan redusere antall I/O -porter som trengs for å drive disse store, honkin 'dot matrix LED'ene.

Trinn 1: Få varene …

Få varene…
Få varene…

For dette korte lille prosjektet trenger du:

  • en AVR-basert mikrokontroller som en Arduino eller noe av det. Disse instruksjonene kan trolig tilpasses din valgte MCU.
  • en DLO7135 dot matrix LED eller annet i samme familie
  • et 8-biters skiftregister som 74LS164, 74C299 eller 74HC594
  • et brødbrett
  • tilkoblingstråd, wire cutters, etc.

Et loddejern er ikke nødvendig, selv om jeg bruker et senere; du kan klare deg uten det.

Trinn 2: Koble direkte til LED -skjermen

Koble direkte til LED -skjermen
Koble direkte til LED -skjermen
Koble direkte til LED -skjermen
Koble direkte til LED -skjermen
Koble direkte til LED -skjermen
Koble direkte til LED -skjermen

Legg ut den lille listen med deler og ta tak i LED -en. Plasser den på brødbrettet sentrert noe, og strekker seg over midtlinjesporet. Den første delen av tilkoblingen foregår på venstre side av lysdioden. Pin #1 er plassert øverst til venstre som angitt av trekanten/pilen. Jeg legger pin -funksjonene på et bilde for din referanse mens du leser eller kobler til LED -en.

Venstre side

Positivt og negativt Start øverst til venstre, koble Vcc til 5V. Det er kanskje en god idé å ikke ha brettet drevet før du har fullført hele venstre side; LED -lampen kan være lys hvis du prøver å se små hull for å stikke i ledninger. Koble den nedre venstre GND til bakken. Lampetest, Chip Aktiver og Skriv 2. og 3. fra toppen til venstre er Lampetest og Chip Enable. Disse er begge negative logikk, noe som betyr at de er aktivert når de er på en logisk 0 i stedet for 1. Bildet mitt nedenfor skal ha søyler over dem, men jeg kommenterte det ikke for noen av dem. LT -pinnen når den er aktivert, lyser opp hver prikk i prikkmatrisen ved 1/7 lysstyrke. Det er mer en piksletest, men det interessante med LT -pinnen er at den ikke overskriver noen tegn som er i minnet, så hvis du har flere av disse sammenkoblet (de har en 20ft visningsavstand), stryker du LT kan få det til å se ut som en markør. For å sikre at den er deaktivert, koble den til 5V. CE- og WR -pinnene er også negative logikker og må aktiveres for at denne smarte enheten skal skrives til. Du kan mikromanere disse pinnene med ekstra I/O -porter på mikrokontrolleren din, men vi vil ikke bry oss her. Bare koble dem til bakken for å holde dem aktivert. Lysstyrkenivåer Det er fire programmerbare lysstyrkenivåer på DLO -familien av LED -er:

  • Blank
  • 1/7 Lysstyrke
  • 1/2 lysstyrke
  • Full lysstyrke

BL1 HIGH og BL0 LOW er 1/2 lysstyrke. Begge HIGH er full lysstyrke. Sett det til det du liker. Igjen, hvis du har I/O -porter til overs og det er viktig nok for deg, kan dette også styres av Arduino. Det bryter opp venstre side. Hvis du får strøm til brettet, bør du se LED -en tennes. Spill med lysstyrkekontrollene og lampetesten for å bli kjent med den, hvis du er nysgjerrig.

Høyre side

Høyre side består helt av dataporter. Nederst til høyre, pin 8 eller D0 for å være presis, representerer den minst signifikante biten i 7-bits tegnet. Øverst til høyre, pin 14 eller D6 representerer den mest betydningsfulle biten. Dette lar deg vite hvilken rekkefølge du skal blande bitene dine når du skriver til LED -en. Når du har koblet inn datainngangene, finner du syv tomme digitale I/O -porter på Arduino eller AVR og kobler dem til. Du vil sannsynligvis huske hvilken datautgangsport på AVR -en som går til hvilken datainngangsport på LED -en. Nå er du klar til å skyve noen data inn på den smarte LED -en. Skal du av spenning ennå? Jeg vet jeg er…

Trinn 3: Spesifisere et tegn som skal vises

Spesifiserer et tegn som skal vises
Spesifiserer et tegn som skal vises

Tegnsettet som brukes på denne CMOS-LED-en er din run-of-the-mill ASCII som starter på 0x20 (desimal 32; et mellomrom) og slutter på 0x7F (desimal 127; en sletting, selv om den er representert på LED-en som en markørgrafikk). Så å ha en LED -skjerm innebærer ikke noe mer enn å skyve a logikk 1 eller 0 på datautgangspinnene, vanligvis etterfulgt av en WR -puls, men jeg går foran det for denne øvelsen. Så du har skrevet ned eller husket hvilke pins som går til hvilke porter, ikke sant? Jeg valgte PD [2..7] og PB0 (digitale pinner 2 til 8 i Arduino-speak). Jeg foreslår normalt ikke å bruke PD [0..1] fordi jeg dedikerer det til min serielle kommunikasjon tilbake til en FreeBSD -boks, og Arduinos et al. kart disse pinnene til deres FTDI USB -kommunikasjonskanal, og selv om "de" sier at pinne 0 og 1 vil fungere hvis du ikke initialiserer seriell kommunikasjon, har jeg aldri klart å bruke disse pinnene som vanlig digital I/O. Faktisk brukte jeg to dager på å prøve å feilsøke et problem da jeg prøvde å bruke PD0 og PD1 og fant ut at de alltid var HØYE. * skuldertrekning* Det ville sannsynligvis være godt å ha en slags ekstern inngang, for eksempel et tastatur, et skyvehjul eller tommelhjulbryter, eller kanskje til og med inndata fra en terminal (min ArduinoTerm er ikke klar for beste sendetid ennå …). Valget er ditt. Foreløpig skal jeg bare illustrere hvordan du får koden for å få tegnet du vil ha inn på LED -en. Det er en zip -fil for nedlasting inkludert kildekoden og Makefile, og det er også en kort film som viser LED -en som skriver ut tegnsettet. Beklager den dårlige kvaliteten på videoen. Koden under skriver ut strengen "Welcome to my Instructable!" blar deretter gjennom hele tegnsettet som LED -en støtter.

DDRD = 0xFF; // OutputDDRB = (1 << DDB0); char msg = "Velkommen til min Instructable!"; uint8_t i; for (;;) {for (i = 0; i <27; i ++) {Print2LED (msg ); _forsinkelse_ms (150); } for (i = 0x20; i <0x80; i ++) {Print2LED (i); _forsinkelse_ms (150); } Print2LED (& apos*& apos);}Portutgangen blir ivaretatt i Print2Led () -funksjonen

voidPrint2LED (uint8_t i) {PORTD = (i << 2); hvis (i & 0b01000000) PORTB = (1 <

Koden og Makefile er inkludert i en zip -fil nedenfor.

Trinn 4: Spar I/O -porter med et skiftregister

Spar I/O -porter med skiftregister
Spar I/O -porter med skiftregister
Spar I/O -porter med skiftregister
Spar I/O -porter med skiftregister
Spar I/O -porter med et skiftregister
Spar I/O -porter med et skiftregister

Så nå kan mikrokontrolleren vår sende data til dot matrix LED, men den bruker åtte I/O -porter. Det utelukker å bruke en ATtiny i en 8-pinners DIP-pakke, og selv med en nyere Arduino med en ATmega328p som er mange I/O-porter for en LED. Vi kan imidlertid komme utenom dette ved å bruke en IC som kalles et skiftregister. Et øyeblikk for å "skifte" gir … Et skiftregister kan forstås best ved å tenke på de to ordene som utgjør navnet: "skift" og "register". Ordskiftet refererer til hvordan dataene beveger seg gjennom registeret. Her (som i våre Arduino og mikrokontrollere generelt) er et register et sted som inneholder data. Den gjør dette ved å implementere en lineær kjede av digitale logikkretser som kalles "flip -flops" som har to stabile tilstander som kan representeres av enten 1 eller 0. Så ved å sette åtte flip -flops sammen har du en enhet som er i stand til å holde og som representerer en 8-bits byte. Akkurat som det finnes flere typer flip-flops og flere variasjoner på temaet skiftregistre (tenk opp/ned-tellere og Johnson-tellere), er det også flere typer skiftregistre basert på hvordan data blir låst inn i registret og hvordan dataene sendes ut. Basert på dette, vurder følgende typer skiftregistre:

  • Seriell inn / parallell utgang (SIPO)
  • Seriell inn / serie ut (SISO)
  • Parallell inn/ seriell ut (PISO)
  • Parallell inn / parallell ut (PIPO)

To av notatene er SIPO og PISO. SIPO -registre tar data serielt, det vil si den ene bit etter den andre, flytter den tidligere inngangsbiten over til neste flip -flop og sender dataene ut på alle innganger samtidig. Dette gjør en fin serie til parallell omformer. PISO -skiftregistre har derimot parallelle innganger, så alle biter legges inn samtidig, men sendes ut en om gangen. Og du gjettet det, dette gir en fin parallell til serieomformer. Skiftregisteret vi vil bruke for å redusere antall I/O -pinner, vil tillate oss å ta de 8 IO -pinnene vi brukte tidligere og redusere dem til en, eller kanskje bare et par, med tanke på at vi kanskje må kontrollere hvordan vi legger inn bitene. Derfor er skiftregisteret vi vil bruke en Serial In / Parallel Out. Koble opp skiftregisteret mellom LED og Arduino Det er enkelt å bruke et skiftregister. Den vanskeligste delen er bare å visualisere datautgangspinnene og hvordan de binære sifrene vil ende opp i IC, og hvordan de til slutt vil vises på LED -en. Ta deg tid til å planlegge dette. 1. Fest 5V til pinne 14 (øverst til høyre) og ta pinne 7 (nederst til venstre) ned til bakken. Skiftregisteret har to serielle innganger, men vi bruker bare en, så koble pin to til 5V3. Vi kommer ikke til å bruke den klare pinnen (pleide å nullstille alle utganger), så la den flyte eller angrip den til 5V4. Koble til en digital IO -port for å feste en av skiftregisteret. Dette er den serielle inngangspinnen. Koble en digital IO -port til pinne 8 (nederst til høyre). Dette er klokken. 6. Koble datalinjene dine fra Q0 til Q6. Vi bruker bare 7 biter fordi ASCII -tegnsettet bare bruker syv biter. Jeg brukte PD2 for å sende ut serielle data og PD3 for klokkesignalet. For datapinnene koblet jeg Q0 til D6 på LED -en og fortsatte på den måten (Q1 til D5, Q2 til D4, etc). Siden vi sender ut data serielt, må vi undersøke den binære representasjonen for hvert tegn vi vil sende, se på 1 og 0, og legge ut hver bit på serien. Jeg har inkludert en andre versjon av dotmatrixled.c -kilden sammen med en Makefile nedenfor. Den går gjennom tegnsettet og viser alle jevne tegn (hvis det er rart å tenke på at en bokstav kan være merkelig eller ujevn, tenk på den binære representasjonen et øyeblikk). Prøv å finne ut hvordan du får det til å gå gjennom å vise alle merkelige tegn. Du kan eksperimentere videre med koblingene mellom skiftregisteret, prikkmatrisen LED og din Arduino. Det er flere kontrollfunksjoner mellom lysdioden og registeret som kan tillate deg å finjustere kontrollen din når data vises. Så…. Vi har gått fra å måtte bruke åtte I/O-porter til bare å bruke to!

Trinn 5: Oppsummering

Sammendrag
Sammendrag
Sammendrag
Sammendrag

I denne instruksen har jeg presentert DLO7135 dot matrix LED og hvordan du får det til å fungere. Jeg har videre diskutert hvordan du kan redusere antall nødvendige I/O -porter fra åtte til bare to ved hjelp av et skiftregister. DLO7135 dot matrix LED kan klypes sammen for å gjøre svært iøynefallende og interessante telt. Jeg håper du hadde det gøy å lese dette instruerbare! Hvis det er noen forbedringer du tror jeg kan komme med eller forslag du vil gi på dette eller noen av mine ibles, er jeg glad for å høre dem! Happy AVR'ing!

Anbefalt: