Indholdsfortegnelse:

5x4 LED Display Matrix Brug af en Basic Stamp 2 (bs2) og Charlieplexing: 7 trin
5x4 LED Display Matrix Brug af en Basic Stamp 2 (bs2) og Charlieplexing: 7 trin

Video: 5x4 LED Display Matrix Brug af en Basic Stamp 2 (bs2) og Charlieplexing: 7 trin

Video: 5x4 LED Display Matrix Brug af en Basic Stamp 2 (bs2) og Charlieplexing: 7 trin
Video: How to use Arduino 4x4 keypad download the code 2024, November
Anonim
5x4 LED -displaymatrix ved hjælp af en Basic Stamp 2 (bs2) og Charlieplexing
5x4 LED -displaymatrix ved hjælp af en Basic Stamp 2 (bs2) og Charlieplexing

Har du et Basic Stamp 2 og nogle ekstra lysdioder siddende? Hvorfor ikke lege med konceptet charlieplexing og skabe et output ved hjælp af kun 5 pins.

Til denne instruktive vil jeg bruge BS2e, men ethvert medlem af BS2 -familien skal arbejde.

Trin 1: Charlieplexing: Hvad, hvorfor og hvordan

Lad os først forstå hvorfor. Hvorfor bruge charlieplexing med et Basic Stamp 2? --- Bevis for koncept: Lær, hvordan charlieplexing fungerer, og lær noget om BS2. Dette kan være nyttigt for mig senere ved hjælp af hurtigere 8-benede chips (kun 5 af dem vil være i/o).--Nyttig grund: Grundlæggende er der ingen. BS2 er alt for langsom til at vise uden mærkbar flimmer. Hvad er charlieplexing? --- Charlieplexing er en metode til at køre et stort antal lysdioder med et lille antal mikroprocessor i/o-ben. Jeg lærte om charlieplexing fra www.instructables.com, og du kan også: Charlieplexing LEDs- TeorienHvordan kører mange LED'er fra et par mikrokontrollerpinde. Også på wikipedia: CharlieplexingHvordan kan jeg køre 20 lysdioder med 5 i/o pins? --- Læs venligst de tre links under "Hvad er charlieplexing?". Det forklarer det bedre, end jeg nogensinde kunne. Charlieplexing er forskellig fra traditionel multiplexing, som har brug for en i/o -pin til hver række og hver kolonne (det ville være i alt 9 i/o -pins til et 5/4 display).

Trin 2: Hardware og skematisk

Hardware og skematisk
Hardware og skematisk

Materialeliste: 1x - Grundstempel 220x - lysdioder (LED'er) af samme type (farve og spændingsfald) 5x - modstande (se nedenfor angående modstandsværdi) Hjælp/Valgfri: Metode til programmering af din BS2Momentary trykknap som en reset switch6v -9vStrømforsyning afhængigt af din version af BS2 (læs din manual) Skematisk: Denne skema er sammensat med det mekaniske layout i tankerne. Du vil se gitteret med lysdioder opsat til venstre, dette er den retning, som BS2 -koden er skrevet til. Bemærk, at hvert par lysdioder har anoden forbundet til den anden katode. De er derefter forbundet til en af de fem i/o -stifter. Modstandsværdier: Du bør beregne dine egne modstandsværdier. Tjek databladet for dine lysdioder, eller brug LED -indstillingen på dit digitale multimeter til at finde spændingsfaldet på dine lysdioder. Lad os lave nogle beregninger: Forsyningsspænding - Spændingsfald / Ønsket strøm = Modstandsværdi BS2 leverer 5v reguleret strøm og kan kilde 20ma af nuværende. Mine lysdioder har et fald på 1.6v og fungerer ved 20ma.5v - 1.6v /.02amps = 155ohms For at beskytte din BS2 skal du bruge den næste højere modstandsværdi fra det, du får med beregningen, i dette tilfælde tror jeg, at det ville være 180ohms. Jeg brugte 220 ohm, fordi mit udviklingsbord har den værdi af modstand indbygget i det for hver i/o -pin. BEMÆRK: Jeg tror, at da der er en modstand på hver pin, fordobler dette effektivt modstanden på hver LED, da den ene pin er V+ og den anden er Gnd. Hvis dette er tilfældet, skal du reducere modstandsværdierne til det halve. Den negative effekt af en for høj modstandsværdi er en lysdæmper. Kan nogen verificere dette og efterlade mig en PM eller kommentere, så jeg kan opdatere disse oplysninger? Programmering: Jeg har brugt et udviklingskort, der har et DB9 -stik til at programmere chippen lige på tavlen. Jeg bruger også denne chip på mit loddefrie brødbræt og har inkluderet et In Circuit Serial Programming (ICSP) header. Overskriften er 5 ben, ben 2 til 5 forbinder til ben 2-5 på et DB9 serielt kabel (ben 1 er ubrugt). Bemærk venligst, at for at bruge denne ICSP header pins 6 og 7 på DB9 kablet skal være forbundet med hinanden. Nulstil: En kortvarig tryk på reset -knap er valgfri. Dette trækker bare pin 22 til jorden, når den skubbes.

Trin 3: Breadboarding

Breadboarding
Breadboarding
Breadboarding
Breadboarding

Nu er det tid til at bygge matrixen på et brødbræt. Jeg brugte en klemrække til at forbinde et ben fra hvert led -par sammen og en lille jumper wire til at forbinde de andre ben. Dette er detaljeret i nærbillede og forklares i dybden her: 1. Orienter dit brødbræt, så det matcher det større billede 2. Placer LED 1 med anoden (+) mod dig og katoden (-) væk fra dig.3. Placer LED 2 i samme retning med anoden (+) i tilslutningsklemmen på LED 1 katoden.4. Brug en lille jumper wire til at forbinde anoden på LED 1 med katoden på LED 2.5. Gentag, indtil hvert par lysdioder er blevet tilføjet til brættet. Jeg bruger det, der normalt ville være strømbussstrimlerne på brødbrættet som busstrimler til BS2 I/O -benene. Fordi der kun er 4 busstrimler, bruger jeg en terminalstrimmel til P4 (den femte I/O -forbindelse). Dette kan ses på det større billede herunder. Tilslut klemmebåndet til LED 1 -katoden til busstrimlen P0. Gentag for hver ulige nummererede LED og erstat den korrekte P* for hvert par (se skematisk).7. Tilslut klemlisten til LED 2 -katoden til busstrimlen P1. Gentag for hver ulige nummererede LED og erstat den korrekte P* for hvert par (se skematisk).8. Tilslut hver busstrimmel til den relevante I/O-pin på BS2 (P0-P4).9. Kontroller alle forbindelser for at sikre, at de matcher skematisk. BEMÆRK: I close-up vil du se, at det ikke ser ud til, at jeg fulgte trin 7, da forbindelsen til den anden I/O-pin er på anoden for de ulige nummererede lysdioder. Husk, at katoden for de lige nummererede lysdioder er forbundet til anoden på de ulige nummererede lysdioder, så forbindelsen er den samme begge veje. Hvis denne note forvirrer dig, skal du bare ignorere den.

Trin 4: Grundlæggende om programmering

For at charlieplexing skal fungere, tænder du kun én LED ad gangen. For at dette kan fungere med vores BS2 har vi brug for to grundlæggende trin: 1. Indstil udgangstilstandene til benene ved hjælp af kommandoen OUTS. Fortæl BS2, hvilke ben der skal bruges som output ved hjælp af DIRS -kommandoen Dette virker, fordi BS2 kan få at vide, hvilke ben der skal køre højt og lavt, og vil vente med at gøre det, indtil du angiver, hvilke stifter der er udgange. Lad os se, om tingene er tilsluttet korrekt af forsøger bare at blinke LED 1. Hvis du ser på skematikken, kan du se, at P0 er tilsluttet katoden (-) på LED 1, og P1 er tilsluttet anoden på den samme LED. Det betyder, at vi vil køre P0 lavt og P1 højt. Dette kan gøres sådan: "OUTS = % 11110", der driver P4-P1 højt og P0 lavt. (% Angiver, at et binært tal skal følge. Det laveste binære ciffer er altid til højre. 0 = LAV, 1 = HØJ) BS2 gemmer disse oplysninger, men handler ikke efter dem, før vi har erklæret, hvilke ben der er output. Dette trin er nøglen, da kun to ben skal være output på samme tid. Resten skal være input, som sætter disse ben til High Impedance -tilstand, så de ikke synker nogen strøm. Vi skal køre P0 og P1, så vi indstiller dem til output og resten til input sådan: "DIRS = % 00011". (% Angiver, at et binært tal skal følge. Det laveste binære ciffer er altid til højre. 0 = INPUT, 1 = OUTPUT) Lad os sammensætte det til en nyttig kode: '{$ STAMP BS2e}' {$ PBASIC 2.5} DO OUTS = %11110 'Drive P0 low og P1-P4 high DIRS = %00011' Set P0- P1 som udgange og P2-P4 som indgange PAUSE 250 'Pause for LED til at forblive tændt DIRS = 0' Indstil alle ben til Input. Dette vil slukke for LED PAUSE 250 'Pause for LED at forblive slukket LOOP

Trin 5: Udviklingscyklussen

Nu hvor vi har set en pin-arbejdstid for at sikre, at de alle fungerer. 20led_Zig-Zag.bseDenne vedhæftede kode skal lyse hver af de 20 LED'er i et zig-zag-mønster. Du vil bemærke, at efter hver pin har tændt bakken, bruger jeg "DIRS = 0" til at vende alle stifter tilbage til input. Hvis du ændrer OUTS uden at slukke for outputpinnene, kan du få nogle "ghosting", hvor en LED, der ikke bør tændes, kan blinke mellem cyklusser. Hvis du ændrer W1 -variablen i begyndelsen af denne kode til "W1 = 1" der vil kun være en pause på 1 millisekund mellem hvert LED -blink. Dette vil medføre en vedvarende synseffekt (POV) -effekt, der får det til at se ud som om alle lysdioder er tændt. Dette har den virkning, at lysdioderne bliver svagere, men er essensen af, hvordan vi vil vise tegn på denne matrix. 20led_Interpreter_Proto.bseJeg besluttede på dette tidspunkt, at jeg var nødt til at udvikle en form for tolkekode for at vende de skøre kombinationer, der var nødvendige for at tænde LED'er i et brugbart mønster. Denne fil er mit første forsøg. Du vil se, at tegnene i bunden af filen er gemt i fire linjer med 5 -cifret binær. Hver linje læses ind, parses, og der kaldes en subrutine hver gang en LED skal tændes. Denne kode fungerer og går gennem tallene 1-0. Hvis du prøver at køre det, bemærker du, at det er plaget af en meget langsom opdateringshastighed, der får tegnene til at blinke næsten for langsomt til at blive genkendt. Denne kode er dårlig af mange grunde. For det første fylder fem cifre i binær lige så meget plads i EEPROM som 8 cifre i binær, da al information lagres i grupper på fire bits. For det andet kræver SELECT CASE, der bruges til at bestemme hvilken pin, der skal tændes, 20 sager. BS2 er begrænset til 16 sager pr. SELECT -operation. Det betyder, at jeg var nødt til at hacke uden om denne begrænsning med en IF-THEN-ELSE-erklæring. Der må være en bedre måde. Efter et par timers hovedskrabning opdagede jeg det.

Trin 6: En bedre tolk

Hver række i vores matrix består af 4 lysdioder, hver kan være tændt eller slukket. BS2 gemmer information i sin EEPROM i grupper på fire bits. Denne sammenhæng burde gøre tingene meget lettere for os. Ud over denne kendsgerning svarer fire bits til decimaltalene 0-15 for i alt 16 muligheder. Dette gør eller SELECT CASE meget lettere. Her er tallet 7 som gemt i EEPROM: '7 %1111, %1001, %0010, %0100, %0100, Hver række har en decimal svarende til 0-15, så vi læser en række ind fra hukommelsen og indfør den direkte til funktionen SELECT CASE. Dette betyder, at den menneskeligt læsbare binære matrix, der bruges til at lave hvert tegn (1 = ledet til, 0 = slukket), er nøglen til tolken. For at bruge den samme VÆLG CASE for hver af de 5 rækker, brugte jeg et andet select case for at indstille DIRS og OUTS som variabler. Jeg læste først i hver af fem linjer i tegnet til variablerne ROW1-ROW5. Hovedprogrammet kalder derefter underprogrammet for at vise karakteren. Denne underprogram tager den første række og tildeler de fire mulige OUTS-kombinationer til variabel outp1-outp4 og de to mulige DIRS-kombinationer til direc1 & direc2. Lysdioder blinker, ræktælleren øges, og den samme proces køres for hver af de fire andre rækker. Dette er meget hurtigere end det første tolkeprogram. Når det er sagt, er der stadig mærkbar flimmer. Tag et kig på videoen, kameraet får flimmeren til at se meget værre ud, men du forstår ideen. At overføre dette koncept til en meget hurtigere chip, som en picMicro eller en AVR -chip, ville muliggøre visning af disse tegn uden en mærkbar flimmer.

Trin 7: Hvor skal man hen herfra

Jeg har ikke en CNC -mølle eller ætsningsmateriel til at lave printkort, så jeg vil ikke tilslutte dette projekt. Hvis du har en mølle og er interesseret i at samarbejde for at komme videre herfra, så send mig en besked. Jeg vil gerne betale for materialer og forsendelse endnu gladere for at vise noget af et færdigt produkt til dette projekt.

Andre muligheder: 1. Port denne til en anden chip. Dette matrixdesign kan bruges med enhver chip, der har 5 i/o-pins til rådighed, der er i stand til tri-state (pins, der kan være høje, lave eller input (høj impedans)). 2. Ved hjælp af en hurtigere chip (måske AVR eller picMicro) kan du øge skalaen. Med en 20 -pins chip kan du bruge 14 pins til at opbygge en 8x22 skærm og bruge de resterende pins til at modtage serielle kommandoer fra en computer eller en anden controller. Brug yderligere tre 20-pins chips, og du kan have et rullende display, der er 8x88 for i alt 11 tegn på én gang (afhængigt af bredden af hvert tegn selvfølgelig). Held og lykke hav det sjovt!

Anbefalede: