Die gebruik van 'n Dot Matrix LED met 'n Arduino en Shift Register: 5 stappe
Die gebruik van 'n Dot Matrix LED met 'n Arduino en Shift Register: 5 stappe
Anonim

Die Siemens DLO7135 Dot matrix LED is 'n wonderlike stuk opto -elektronika. Dit word beskou as 'n 5x7 Dot Matrix Intelligent Display (r) met geheue/dekodeerder/bestuurder. Saam met die geheue het dit 'n ASCII-skerm van 96 karakters met hoofletters en kleinletters, 'n ingeboude karaktergenerator en multiplexer, vier vlakke van ligintensiteit, en alles werk op 5V., en teen $ 16 per pop, moet dit beslis. Terwyl ek die helfte van die dag by my gunsteling plaaslike elektroniese winkel deurgebring het, vind ek 'n bak vol hiervan vir $ 1,50 per stuk. Ek het die winkel verlaat met verskeie. Hierdie instruksies sal u wys hoe u met hierdie puntmatriks-LED's en vertoonkarakters kan koppel met 'n AVR-gebaseerde Arduino. As u een van my vorige gidse gelees het, kan u die idee kry dat ek dikwels ten gunste is van die mees parsimoniese oplossing, en u sal nie verkeerd wees nie, selfs as ek af en toe nie die doel bereik nie. Daarom gaan ek ook nog 'n stap in hierdie instruksies en sal ek u wys hoe u die aantal I/O -poorte wat nodig is om hierdie groot, honkin 'dot matrix LED's te bestuur, kan verminder.

Stap 1: Kry die goedere …

Vir hierdie kort projek, benodig u:

  • 'n AVR-gebaseerde mikrobeheerder soos 'n Arduino of iets dergeliks. Hierdie instruksies kan waarskynlik aangepas word by u MCU van keuse.
  • 'n DLO7135 dot matrix LED of ander in dieselfde familie
  • 'n 8-bis-skofregister soos die 74LS164, 74C299 of 74HC594
  • 'n broodbord
  • aansluitdraad, draadsnyers, ens.

'N Soldeerbout is nie nodig nie, alhoewel ek dit later gebruik; jy kan daarsonder klaarkom.

Stap 2: Koppel direk aan die LED -skerm

Maak 'n klein lys onderdele en gryp die LED. Plaas dit effens in die middel van die broodbord, oor die middellyngroef. Die eerste deel van die verbinding vind plaas aan die linkerkant van die LED. Speld #1 is links bo, soos aangedui deur die driehoek/pyltjie. Ek plaas die penfunksies op 'n prentjie vir u verwysing terwyl u u LED lees of aansluit.

Die linkerkant

Positief en negatief Koppel Vcc aan die linkerkant bo aan 5V. Dit is miskien 'n goeie idee om nie u bord aan te dryf voordat u die hele linkerkant voltooi het nie; die LED kan helder wees as u klein gaatjies probeer sien om in drade te steek. Koppel die GND links onder aan die grond. Lamp toets, chip aktiveer en skryf Die 2de en 3de van links bo is lamp toets en chip aktiveer. Dit is albei negatiewe logika, wat beteken dat hulle geaktiveer is as hulle op 'n logiese 0 in plaas van 1. My prentjie hieronder moet balke hê, maar ek het dit nie vir een van hulle geannoteer nie. Die LT -pen, wanneer dit aangeskakel is, verlig elke punt in die puntmatriks by 'n helderheid van 1/7. Dit is meer 'n pixeltoets, maar die interessante ding van die LT -pen is dat dit geen karakter in die geheue oorskryf nie, dus as u 'n paar hiervan aan mekaar vasgemaak het (hulle het 'n kykafstand van 20 voet) kan dit soos 'n wyser laat lyk. Koppel dit aan 5V om te verseker dat dit uitgeskakel is. Die CE- en WR -penne is ook 'n negatiewe logika en moet aangeskakel word om aan hierdie slim toestel te skryf. U kan hierdie penne mikromanageer met ekstra I/O -poorte op u mikrobeheerder, maar ons sal ons nie hier steur nie. Koppel hulle net aan die grond om hulle in staat te stel. Helderheidsvlakke Daar is vier programmeerbare helderheidsvlakke op die DLO -familie van LED's:

  • Leeg
  • 1/7 Helderheid
  • 1/2 Helderheid
  • Volle helderheid

BL1 HOOG en BL0 LAAG is 1/2 helderheid. Beide HIGH is vol helderheid. Stel dit in op wat u wil. Weereens, as u I/O -poorte oor het en dit vir u belangrik genoeg is, kan dit ook deur u Arduino beheer word. Dit draai die linkerkant om. As u krag na u bord bring, moet u die LED sien brand. Speel met die helderheidsknoppies en die lamptoets om daarmee kennis te maak as u nuuskierig is.

Die regterkant

Die regterkant bestaan heeltemal uit data -poorte. Regs onder, pen 8 of D0 om presies te wees, verteenwoordig die minste beduidende bietjie in die 7-bis karakter. Regs bo, pen 14 of D6, verteenwoordig die belangrikste bit. Dit laat u weet in watter volgorde u stukkies moet skommel wanneer u na die LED skryf. As u die ingangspoorte van die data ingeskakel het, vind u sewe leë digitale I/O -poorte op u Arduino of AVR en verbind dit. U sal waarskynlik wil onthou watter data -uitvoerpoort op u AVR na watter data -invoerpoort op die LED gaan, en nou is u gereed om 'n paar data na die slim LED te druk. Bewe jy nog van opgewondenheid? Ek weet ek is…

Stap 3: Spesifiseer 'n karakter wat vertoon moet word

Die karakterset wat op hierdie CMOS-LED gebruik word, is u ASCII wat begin by die begin van 0x20 (desimale 32; 'n spasie) en eindig by 0x7F (desimaal 127; 'n delete, hoewel dit op die LED as 'n wyserafbeelding voorgestel word). Om 'n karakter met die LED -skerm te hê, behels dus niks meer as om die a logika 1 of 0 op u data -uitvoerpenne te druk nie, gewoonlik gevolg deur 'n WR -pols, maar ek vergeet dit vir hierdie oefening. onthou watter penne na watter poorte gaan, nie waar nie? Ek het PD [2..7] en PB0 (digitale penne 2 tot 8 in Arduino-sprekers) gekies. Ek stel gewoonlik nie voor dat u PD [0..1] gebruik nie, omdat ek dit aan my seriële kommunikasie toewy aan 'n FreeBSD -boks, en Arduino's et al. kaart die penne aan hul FTDI USB -kommunikasiekanaal, en alhoewel "hulle" sê penne 0 en 1 sal werk as u nie die reekskommunikasie begin nie, kon ek die penne nooit as normale digitale I/O gebruik nie. Eintlik het ek twee dae lank probeer om 'n probleem te ontfout toe ek PD0 en PD1 probeer gebruik en gevind het dat dit altyd HOOG is. * trek my skouers op* Dit sal waarskynlik goed wees om 'n soort eksterne invoer te hê, soos 'n toetsbord, 'n drukknop of 'n duimwielskakelaar, of selfs 'n ingang vanaf 'n terminale (my ArduinoTerm is nog nie gereed vir prime time nie …). Die keuse is joune. Op die oomblik gaan ek net illustreer hoe u die kode kan kry om die karakter wat u wil op die LED te kry. Daar is 'n zip -lêer om af te laai, insluitend die bronkode en Makefile, en daar is ook 'n kort film om te sien hoe die LED sy karakterset afdruk. Jammer vir die slegte kwaliteit van die video. Die onderstaande kode druk die string "Welcome to my Instructable!" loop dan deur die hele karakterset wat die LED ondersteun.

DDRD = 0xFF; // OutputDDRB = (1 << DDB0); char msg = "Welkom by my instruksies!"; uint8_t i; vir (;;) {vir (i = 0; i <27; i ++) {Print2LED (msg ); _vertraging_ms (150); } vir (i = 0x20; i <0x80; i ++) {Print2LED (i); _vertraging_ms (150); } Print2LED (& apos*& apos);}Die poortuitvoer word in die Print2Led () -funksie versorg

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

Die kode en Makefile is ingesluit in 'n zip -lêer hieronder.

Stap 4: Bewaar I/O -hawens met 'n skofregister

Ons mikrobeheerder kan dus data na die puntmatriks -LED stuur, maar dit gebruik agt I/O -poorte. Dit sluit die gebruik van 'n ATtiny in 'n 8-pins DIP-pakket uit, en selfs met 'n nuwer Arduino met 'n ATmega328p, is dit baie I/O-poorte vir een LED. Ons kan dit egter regkry deur 'n IC te gebruik, 'n skofregister genoem. 'N Oomblik om ratte te "skakel" … 'n Skuifregister kan die beste verstaan word deur na te dink oor die twee woorde waaruit die naam bestaan: "skuif" en "registreer." Die woordverskuiwing verwys na hoe die data deur die register beweeg. Hier (soos in ons Arduino en mikrobeheerders in die algemeen) is 'n register 'n plek wat data bevat. Dit word gedoen deur 'n lineêre ketting van digitale logika -stroombane met die naam "flip flops" te implementeer, wat twee stabiele toestande het wat met 1 of 0 voorgestel kan word. As u agt flip -flops bymekaar sit, het u 'n toestel wat in staat is om te hou en wat 'n 8-bis byte verteenwoordig. Net soos daar verskillende tipes flip-flops is, en verskeie variasies op 'n tema van skofregisters (dink op/af tellers en Johnson tellers), is daar ook verskillende tipes skofregisters gebaseer op hoe data word in die register vasgemaak en hoe die data uitgevoer word. Oorweeg op grond hiervan die volgende tipes skofregisters:

  • Seriële in / parallel uit (SIPO)
  • Serial In / Serial Out (SISO)
  • Parallel In/ Serial Out (PISO)
  • Parallel in / parallel uit (PIPO)

Twee van die opmerkings is SIPO en PISO. SIPO -registers neem data serieel op, dit wil sê die een na die ander, skuif die voorheen ingevoerde bietjie na die volgende flip -flop en stuur die data tegelyk na alle insette. Dit maak 'n goeie reeks na parallel omskakelaar. PISO -verskuiwingsregisters het omgekeerd parallelle insette, sodat alle bisse tegelyk ingevoer word, maar een vir een uitgevoer word. En u raai dit, dit sorg vir 'n goeie parallel met die reeksomskakelaar. Die skofregister wat ons wil gebruik om die aantal I/O -penne te verminder, sal ons in staat stel om die 8 IO -penne wat ons vroeër gebruik het, te neem tot een, of miskien net 'n paar, aangesien ons moontlik moet beheer hoe ons invoer die stukkies. Daarom is die skofregister wat ons sal gebruik 'n Serial In / Parallel Out. Draai die skofregister tussen die LED en Arduino op. Dit is maklik om 'n skofregister te gebruik. Die moeilikste is net om die data -uitsetpenne te visualiseer en hoe die binêre syfers in die IC sal beland, en hoe dit uiteindelik op die LED sal verskyn. Neem 'n rukkie om dit te beplan. 1. Heg 5V aan pen 14 (regs bo) en neem pen 7 (links onder) grond toe. Die skofregister het twee seriële insette, maar ons sal slegs een gebruik, dus koppel pen twee aan 5V3. Ons sal nie die duidelike pen gebruik nie (gebruik om alle uitsette te nul), laat dit dryf of val dit op 5V4. Koppel een digitale IO -poort om een van die skofregister vas te maak. Dit is die seriële invoerpen. Koppel een digitale IO -poort aan pen 8 (regs onder). Dit is die klokpen.6. Koppel u data lyne van Q0 tot Q6. Ons gebruik slegs 7 bisse omdat die ASCII -tekenset slegs sewe bisse gebruik. Ek het PD2 gebruik om my seriële data uit te voer en PD3 vir die kloksein. Vir die datapennetjies het ek Q0 met D6 op die LED gekoppel en so voortgegaan (Q1 tot D5, Q2 tot D4, ens.). Aangesien ons data serieel uitstuur, moet ons die binêre voorstelling van elke karakter wat ons wil stuur, ondersoek, na 1's en 0's kyk en elke bietjie op die reeksreël invoer. Ek het 'n tweede weergawe van die dotmatrixled.c -bron saam met 'n Makefile hieronder ingesluit. Dit loop deur die karakterset en vertoon alle ewe karakters (as dit vreemd is om te dink dat 'n letter vreemd of gelyk kan wees, dink 'n rukkie na oor die binêre voorstelling). Probeer om uit te vind hoe u alle vreemde karakters kan vertoon. U kan verder eksperimenteer met die verbindings tussen die skofregister, die puntmatriks -LED en u Arduino. Daar is verskillende kontrolefunksies tussen die LED en die register waarmee u u kontrole kan verfyn oor wanneer data vertoon word.

Stap 5: Opsomming

In hierdie instruksies het ek die DLO7135 dot matrix LED aangebied en hoe dit kan werk. Ek het verder bespreek hoe ek die aantal vereiste I/O -poorte van agt tot slegs twee kan verminder met behulp van 'n skofregister. Die DLO7135 -puntmatriks -LED kan aan mekaar vasgemaak word om baie opvallende en interessante markies te maak. Ek hoop jy het dit geniet om hierdie instruksies te lees! As daar verbeterings is wat u dink ek kan maak of voorstelle wat u wil gee oor hierdie of enige van my probleme, is ek bly om dit te hoor!