Inhoudsopgave:

Een Dot Matrix-LED gebruiken met een Arduino en Shift Register: 5 stappen
Een Dot Matrix-LED gebruiken met een Arduino en Shift Register: 5 stappen

Video: Een Dot Matrix-LED gebruiken met een Arduino en Shift Register: 5 stappen

Video: Een Dot Matrix-LED gebruiken met een Arduino en Shift Register: 5 stappen
Video: Digitaal CodeSlot met spraak en aut. verlichting. DEEL 3 2024, Juli-
Anonim
Een Dot Matrix-LED gebruiken met een Arduino en Shift Register
Een Dot Matrix-LED gebruiken met een Arduino en Shift Register
Een Dot Matrix-LED gebruiken met een Arduino en Shift Register
Een Dot Matrix-LED gebruiken met een Arduino en Shift Register
Een Dot Matrix-LED gebruiken met een Arduino en Shift Register
Een Dot Matrix-LED gebruiken met een Arduino en Shift Register

De Siemens DLO7135 Dot matrix LED is een geweldig stukje opto-elektronica. Het wordt gefactureerd als een 5x7 Dot Matrix Intelligent Display (r) met geheugen/decoder/stuurprogramma. Samen met dat geheugen heeft het een ASCII-display van 96 tekens met hoofdletters en kleine letters, een ingebouwde tekengenerator en multiplexer, vier niveaus van lichtintensiteit en het werkt allemaal op 5V. Dat is veel om waar te maken, en voor $ 16 per pop, zou het zeker moeten. Terwijl ik de halve dag in mijn favoriete lokale elektronicawinkel doorbracht, vond ik een bak vol met deze voor $ 1,50 per stuk. Ik verliet de winkel met een aantal. Deze instructable laat je zien hoe je verbinding kunt maken met deze dot-matrix-LED's en tekens kunt weergeven met behulp van een op AVR gebaseerde Arduino. Als je een van mijn vorige handleidingen hebt gelezen, krijg je misschien het idee dat ik vaak voorstander ben van de meest zuinige oplossing, en je zou niet verkeerd zijn, zelfs als ik van tijd tot tijd het doel niet haal. Daarom ga ik ook nog een stap verder in deze instructable en laat ik je zien hoe je het aantal I/O-poorten dat nodig is om deze grote, honkin 'dot-matrix-LED's aan te sturen, kunt verminderen.

Stap 1: Verkrijg de goederen…

Haal de goederen…
Haal de goederen…

Voor dit korte projectje heb je nodig:

  • een op AVR gebaseerde microcontroller zoals een Arduino of iets dergelijks. Deze instructies kunnen waarschijnlijk worden aangepast aan uw MCU naar keuze.
  • een DLO7135 dot matrix LED of andere in dezelfde familie
  • een 8-bits schuifregister zoals de 74LS164, 74C299 of 74HC594
  • een breadboard
  • aansluitdraad, draadknippers, enz.

Een soldeerbout is niet nodig, hoewel ik er later een gebruik; je kunt wel zonder.

Stap 2: Rechtstreeks verbinding maken met het LED-display

Rechtstreeks verbinding maken met het LED-display
Rechtstreeks verbinding maken met het LED-display
Rechtstreeks verbinding maken met het LED-display
Rechtstreeks verbinding maken met het LED-display
Rechtstreeks verbinding maken met het LED-display
Rechtstreeks verbinding maken met het LED-display

Leg je kleine lijst met onderdelen klaar en pak de LED. Plaats het enigszins gecentreerd op het breadboard, schrijlings op de middellijngroef. Het eerste deel van het aansluiten vindt plaats aan de linkerkant van de LED. Pin #1 bevindt zich linksboven zoals aangegeven door de driehoek/pijl. Ik heb de pinfuncties op een foto gezet ter referentie terwijl u uw LED leest of aansluit.

De linkerkant

Positief en negatief Begin linksboven en sluit Vcc aan op 5V. Het is misschien een goed idee om je bord niet aan te zetten totdat je de hele linkerkant hebt voltooid; de LED kan fel zijn als u kleine gaatjes probeert te zien om in draden te prikken. Sluit de GND linksonder aan op aarde. Lamptest, Chip inschakelen en schrijven De 2e en 3e van linksboven zijn Lamptest en Chip inschakelen. Dit zijn beide negatieve logica, wat betekent dat ze zijn ingeschakeld wanneer ze op een logische 0 staan in plaats van 1. Mijn afbeelding hieronder zou balken moeten hebben, maar ik heb dat voor geen van hen geannoteerd. De LT-pin verlicht, indien ingeschakeld, elke stip in de stippenmatrix op 1/7e helderheid. Het is meer een pixeltest, maar het interessante van de LT-pin is dat hij geen enkel teken in het geheugen overschrijft, dus als je meerdere van deze aan elkaar hebt geregen (ze hebben een kijkafstand van 20 ft), strobeert LT kan het op een cursor laten lijken. Om ervoor te zorgen dat het is uitgeschakeld, sluit u het aan op 5V. De CE- en WR-pinnen zijn ook negatieve logica en moeten worden ingeschakeld om naar dit slimme apparaat te kunnen schrijven. Je zou deze pinnen kunnen micromanagen met extra I/O-poorten op je microcontroller, maar we zullen ons hier niet druk over maken. Sluit ze gewoon aan op aarde om ze ingeschakeld te houden. Helderheidsniveaus Er zijn vier programmeerbare helderheidsniveaus op de DLO-familie van LED's:

  • Blank
  • 1/7 Helderheid
  • 1/2 Helderheid
  • Volledige helderheid

BL1 HOOG en BL0 LAAG is 1/2 helderheid. Beide HOOG is volledige helderheid. Stel het in op wat je maar wilt. Nogmaals, als je I/O-poorten over hebt en het is belangrijk genoeg voor je, dan kan dit ook worden bestuurd door je Arduino. Dat sluit aan de linkerkant. Als je je board van stroom voorziet, zou je de LED moeten zien oplichten. Speel met de helderheidsregelaars en de lamptest om er vertrouwd mee te raken, als je nieuwsgierig bent.

De goede kant

De rechterkant bestaat volledig uit datapoorten. Rechtsonder, pin 8 of D0 om precies te zijn, vertegenwoordigt de Least Significant Bit in het 7-bits karakter. Rechtsboven, pin 14 of D6 staat voor het meest significante bit. Dit laat je weten in welke volgorde je bits in willekeurige volgorde moeten worden geschud wanneer je naar de LED schrijft. Als je de data-invoerpoorten hebt aangesloten, zoek dan zeven lege digitale I/O-poorten op je Arduino of AVR en sluit ze aan. U wilt waarschijnlijk onthouden welke gegevensuitvoerpoort op uw AVR naar welke gegevensinvoerpoort op de LED gaat. Nu bent u klaar om wat gegevens naar die slimme LED te sturen. Ben je al aan het trillen van opwinding? Ik weet dat ik dat ben…

Stap 3: Een karakter specificeren dat moet worden weergegeven

Een karakter specificeren dat moet worden weergegeven
Een karakter specificeren dat moet worden weergegeven

De tekenset die op deze CMOS-LED wordt gebruikt, is uw gewone ASCII, beginnend bij 0x20 (decimaal 32; een spatie) en eindigend op 0x7F (decimaal 127; een verwijdering, hoewel weergegeven op de LED als een grafische cursor). Dus als de LED een teken weergeeft, betekent dit niets meer dan het indrukken van een logische 1 of 0 op uw gegevensuitgangspinnen, meestal gevolgd door een WR-puls, maar dat laat ik voor deze oefening achterwege. Dus u hebt opgeschreven of herinnerde welke pinnen naar welke poorten gaan, toch? Ik koos voor PD[2..7] en PB0 (digitale pinnen 2 tot en met 8 in Arduino-spreken). Ik raad normaal gesproken niet aan om PD[0..1] te gebruiken omdat ik het opdraag aan mijn seriële communicatie terug naar een FreeBSD-box, en Arduino's et al. wijs die pinnen toe aan hun FTDI USB-communicatiekanaal, en hoewel "ze" ZEGGEN pinnen 0 en 1 zullen werken als je de seriële communicatie niet initialiseert, heb ik die pinnen nooit als normale digitale I/O kunnen gebruiken. Ik heb zelfs twee dagen besteed aan het oplossen van een probleem toen ik PD0 en PD1 probeerde te gebruiken en ontdekte dat ze altijd HOOG waren. *schouderop* Het zou waarschijnlijk goed zijn om een soort van externe invoer te hebben, zoals misschien een toetsenbord, een drukwiel of duimwielschakelaar, of misschien zelfs invoer vanaf een terminal (mijn ArduinoTerm is nog niet klaar voor prime time…). De keuze is aan jou. Voor nu ga ik alleen illustreren hoe je de code kunt krijgen om het gewenste teken op de LED te krijgen. Er is een zipbestand om te downloaden inclusief de broncode en Makefile en er is ook een korte film waarin de LED zijn tekenset afdrukt. Sorry voor de waardeloze kwaliteit van de video. De onderstaande code drukt de tekenreeks "Welcome to my Instructable!" doorloopt vervolgens de volledige tekenset die de LED ondersteunt.

DDRD = 0xFF; // UitvoerDDRB = (1<<DDB0); char msg = "Welkom bij mijn Instructable!";uint8_t i;for (;;){ for(i=0;i<27; i++) { Print2LED(msg); _delay_ms(150); } for(i=0x20; i<0x80; i++) { Print2LED(i); _delay_ms(150); } Print2LED(&apos*&apos);}De poortuitvoer wordt verzorgd in de functie Print2Led()

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

De code en Makefile zijn opgenomen in een zip-bestand hieronder.

Stap 4: Behoud I/O-poorten met een Shift Register

Behoud I/O-poorten met een Shift Register
Behoud I/O-poorten met een Shift Register
Behoud I/O-poorten met een Shift Register
Behoud I/O-poorten met een Shift Register
Behoud I/O-poorten met een Shift Register
Behoud I/O-poorten met een Shift Register

Dus nu kan onze microcontroller gegevens naar de dot-matrix-LED sturen, maar hij gebruikt acht I/O-poorten. Dat sluit het gebruik van een ATtiny in een 8-pins DIP-pakket uit, en zelfs met een nieuwere Arduino met een ATmega328p zijn dat veel I/O-poorten voor één LED. We kunnen dit echter omzeilen door een IC te gebruiken dat een schuifregister wordt genoemd. Een moment om te "schakelen"… Een schakelregister kan het beste worden begrepen door na te denken over de twee woorden waaruit de naam bestaat: "shift" en "register". Het woord shift verwijst naar hoe de gegevens door het register gaan. Hier (zoals in onze Arduino en microcontrollers in het algemeen) is een register een locatie die gegevens bevat. Het doet dit door een lineaire keten van digitale logische circuits genaamd "flip-flops" te implementeren die twee stabiele toestanden heeft die kunnen worden weergegeven door een 1 of een 0. Dus door acht flip-flops samen te voegen, heb je een apparaat dat in staat is om vast te houden en vertegenwoordigen een 8-bits byte. Net zoals er verschillende soorten flip-flops zijn, en verschillende variaties op een thema van schuifregisters (denk aan op/neer-tellers en Johnson-tellers), zijn er ook verschillende soorten schuifregisters op basis van hoe gegevens is vergrendeld in het register en hoe die gegevens worden uitgevoerd. Overweeg op basis hiervan de volgende soorten schuifregisters:

  • Serieel in / parallel uit (SIPO)
  • Serieel in / serieel uit (SISO)
  • Parallel In/Seriële Uit (PISO)
  • Parallel in / parallel uit (PIPO)

Twee van de nota zijn SIPO en PISO. SIPO-registers nemen gegevens serieel op, dat wil zeggen bit na bit, waarbij het eerder ingevoerde bit naar de volgende flip-flop wordt verschoven en de gegevens in één keer naar alle ingangen worden verzonden. Dit maakt een mooie serieel naar parallel converter. PISO-schuifregisters hebben daarentegen parallelle ingangen, zodat alle bits tegelijk worden ingevoerd, maar één voor één worden uitgevoerd. En je raadt het al, dit zorgt voor een mooie parallel naar serieel converter. Het schuifregister dat we willen gebruiken om het aantal I / O-pinnen te verminderen, zou ons in staat stellen om die 8 IO-pinnen die we eerder gebruikten te nemen en ze terug te brengen tot één, of misschien slechts een paar, aangezien we misschien moeten bepalen hoe we invoeren de stukjes. Daarom is het schuifregister dat we zullen gebruiken een Serial In / Parallel Out. Sluit het schuifregister aan tussen de LED en Arduino. Het gebruik van een schuifregister is eenvoudig. Het moeilijkste is om alleen de gegevensuitvoerpinnen te visualiseren en hoe de binaire cijfers in het IC terechtkomen en hoe ze uiteindelijk op de LED zullen verschijnen. Neem even de tijd om dit te plannen. 1. Sluit 5V aan op pin 14 (rechtsboven) en breng pin 7 (linksonder) naar de grond.2. Het schuifregister heeft twee seriële ingangen, maar we gebruiken er maar één, dus sluit pin twee aan op 5V3. We zullen de doorzichtige pin niet gebruiken (gebruikt om alle uitgangen op nul te zetten), dus laat hem zweven of val hem aan naar 5V4. Sluit een digitale IO-poort aan op een pin van het schuifregister. Dit is de seriële ingang pin.5. Sluit één digitale IO-poort aan op pin 8 (rechtsonder). Dit is de klok pin.6. Verbind uw datalijnen van Q0 naar Q6. We gebruiken slechts 7 bits omdat de ASCII-tekenset slechts zeven bits gebruikt. Ik gebruikte PD2 voor het uitvoeren van mijn seriële gegevens en PD3 voor het kloksignaal. Voor de datapinnen heb ik Q0 op D6 op de LED aangesloten en op die manier voortgezet (Q1 tot D5, Q2 tot D4, enz.). Omdat we gegevens serieel verzenden, moeten we de binaire representatie van elk teken dat we willen verzenden onderzoeken, kijkend naar enen en nullen, en elk bit op de seriële lijn uitvoeren. Ik heb een tweede versie van de dotmatrixled.c-bron toegevoegd, samen met een Makefile hieronder. Het bladert door de tekenset en toont alle even tekens (als het raar is om te denken dat een letter oneven of even kan zijn, denk dan even aan de binaire representatie). Probeer erachter te komen hoe je ervoor kunt zorgen dat alle vreemde tekens worden weergegeven. Je kunt verder experimenteren met de verbindingen tussen het schuifregister, de dot matrix-LED en je Arduino. Er zijn verschillende besturingsfuncties tussen de LED en het register waarmee u uw controle over wanneer gegevens worden weergegeven, nauwkeurig kunt afstemmen. Dus … we zijn van acht I/O-poorten naar slechts twee gegaan!

Stap 5: Samenvatting

Samenvatting
Samenvatting
Samenvatting
Samenvatting

In deze instructable heb ik de DLO7135 dot matrix LED gepresenteerd en hoe deze te laten werken. Ik heb verder besproken hoe het aantal vereiste I/O-poorten van acht naar slechts twee kan worden teruggebracht met behulp van een schuifregister. De DLO7135 dot matrix LED kan aan elkaar worden geregen om zeer opvallende en interessante feesttenten te maken. Ik hoop dat je het leuk vond om dit instructable te lezen! Als er verbeteringen zijn waarvan je denkt dat ik ze zou kunnen maken of suggesties die je zou willen geven over deze of een van mijn 'ibles', dan hoor ik ze graag! Veel plezier met AVR'ing!

Aanbevolen: