Innholdsfortegnelse:

5x4 LED -skjermmatrise ved hjelp av et grunnleggende stempel 2 (bs2) og Charlieplexing: 7 trinn
5x4 LED -skjermmatrise ved hjelp av et grunnleggende stempel 2 (bs2) og Charlieplexing: 7 trinn

Video: 5x4 LED -skjermmatrise ved hjelp av et grunnleggende stempel 2 (bs2) og Charlieplexing: 7 trinn

Video: 5x4 LED -skjermmatrise ved hjelp av et grunnleggende stempel 2 (bs2) og Charlieplexing: 7 trinn
Video: Токовое сопротивление электрических проводов - эксперимент 2024, Juli
Anonim
5x4 LED -skjermmatrise ved hjelp av et grunnleggende stempel 2 (bs2) og Charlieplexing
5x4 LED -skjermmatrise ved hjelp av et grunnleggende stempel 2 (bs2) og Charlieplexing

Har du et Basic Stamp 2 og noen ekstra lysdioder? Hvorfor ikke leke med begrepet charlieplexing og lage en output med bare 5 pins.

For denne instruksen vil jeg bruke BS2e, men ethvert medlem av BS2 -familien bør jobbe.

Trinn 1: Charlieplexing: Hva, hvorfor og hvordan

La oss få hvorfor ut av veien først. Hvorfor bruke charlieplexing med et Basic Stamp 2? --- Bevis for konsept: Lær hvordan charlieplexing fungerer og lær noe om BS2. Dette kan være nyttig for meg senere ved å bruke raskere 8-pinners chips (bare 5 av dem vil være i/o).--- Nyttig grunn: I utgangspunktet er det ingen. BS2 er altfor treg til å vises uten merkbar flimmer. Hva er charlieplexing? --- Charlieplexing er en metode for å drive et stort antall lysdioder med et lite antall mikroprosessor i/o-pinner. Jeg lærte om charlieplexing fra www.instructables.com, og du kan også: Charlieplexing LEDs- TheoryHow to drive a lot of LEDs from a few microcontroller pins. Også på wikipedia: CharlieplexingHvordan kan jeg kjøre 20 lysdioder med 5 i/o-pinner? --- Les gjennom de tre koblingene under "Hva er charlieplexing?". Det forklarer det bedre enn jeg noen gang kunne. Charlieplexing er forskjellig fra tradisjonell multiplexing som trenger en i/o -pin for hver rad og hver kolonne (det vil være totalt 9 i/o pins for en 5/4 display).

Trinn 2: Maskinvare og skjematisk

Maskinvare og skjematisk
Maskinvare og skjematisk

Materialeliste: 1x - Basic Stamp 220x - lysdioder (lysdioder) av samme type (farge og spenningsfall) 5x - motstander (se nedenfor angående motstandsverdi) Hjelp/tilleggsutstyr: Metode for programmering av din BS2Momentary trykknapp som en tilbakestillingsbryter6v -9v Strømforsyning avhengig av din versjon av BS2 (les håndboken din) Skjematisk: Denne skjemaet er satt sammen med det mekaniske oppsettet i tankene. Du vil se rutenettet med lysdioder satt opp til venstre, dette er retningen som BS2 -koden er skrevet for. Legg merke til at hvert par lysdioder har anoden koblet til den andre katoden. De er deretter koblet til en av de fem i/o -pinnene. Motstandsverdier: Du bør beregne dine egne motstandsverdier. Sjekk databladet for lysdiodene dine, eller bruk LED -innstillingen på det digitale multimeteret ditt for å finne spenningsfallet til lysdiodene dine. La oss gjøre noen beregninger: Forsyningsspenning - Spenningsfall / Ønsket strøm = Motstandsverdi BS2 leverer 5v regulert effekt og kan levere 20ma av nåværende. Mine lysdioder har et fall på 1,6 V og fungerer ved 20ma.5v - 1.6v /.02amps = 155ohms For å beskytte BS2 bør du bruke den neste høyere motstandsverdien fra det du får med beregningen, i dette tilfellet tror jeg det ville være 180ohms. Jeg brukte 220ohms fordi utviklingsbordet mitt har den verdien av motstand som er innebygd i det for hver i/o -pinne. MERK: Jeg tror at siden det er en motstand på hver pinne, dobler dette effektivt motstanden på hver LED siden den ene pinnen er V+ og den andre er Gnd. Hvis dette er tilfellet, bør du redusere motstandsverdiene med det halve. Den negative effekten av en for høy motstandsverdi er en dimmer LED. Kan noen verifisere dette og legge igjen en PM eller kommentere meg slik at jeg kan oppdatere denne informasjonen? Programmering: Jeg har brukt et utviklingskort som har en DB9 -kontakt for å programmere brikken rett på brettet. Jeg bruker også denne brikken på mitt loddfrie brødbrett og har inkludert et In Circuit Serial Programming (ICSP) -hodet. Overskriften er 5 pinner, pinner 2 til 5 kobles til pinner 2-5 på en DB9 seriell kabel (pinne 1 er ubrukt). Vær oppmerksom på at for å bruke denne ICSP -toppnålene 6 og 7 på DB9 -kabelen må de være koblet til hverandre. Tilbakestill: En kort trykk på tilbakestillingsknappen er valgfri. Dette trekker bare pinne 22 til bakken når den skyves.

Trinn 3: Breadboarding

Breadboarding
Breadboarding
Breadboarding
Breadboarding

Nå er det på tide å bygge matrisen på et brødbrett. Jeg brukte en rekkeklemme for å koble ett ben fra hvert led par sammen og en liten jumper wire for å koble de andre benene. Dette er detaljert i nærbildet og forklares grundig her: 1. Orienter brødbrettet for å matche det større bildet 2. Plasser LED 1 med anoden (+) mot deg og katoden (-) vekk fra deg. Plasser LED 2 i samme retning med anoden (+) i tilkoblingsklemmen til LED 1 -katoden. Bruk en liten jumper wire for å koble anoden til LED 1 med katoden til LED 2.5. Gjenta til hvert par LED -er er lagt til brettet. Jeg bruker det som normalt ville være strømbussstrimlene på brødbrettet som busslister for BS2 I/O -pinnene. Fordi det bare er 4 busslister, bruker jeg en terminallist for P4 (den femte I/O -tilkoblingen). Dette kan sees på det større bildet nedenfor. Koble klemmelisten for LED 1 -katoden til busstrimmelen P0. Gjenta for hver ulik nummerert LED ved å erstatte riktig P* for hvert par (se skjemaet).7. Koble klemmelisten for LED 2 -katoden til P1 -busslisten. Gjenta for hver ulik nummerert LED ved å erstatte riktig P* for hvert par (se skjemaet).8. Koble hver busslist til den aktuelle I/O-pinnen på BS2 (P0-P4).9. Kontroller alle tilkoblinger for å sikre at de samsvarer med skjemaet. MERK: I nærbildet vil du se at det ikke ser ut til at jeg fulgte trinn 7 da forbindelsen til den andre I/O-pinnen er på anoden til de ulige nummererte lysdiodene. Husk at katoden til de partallede lysdiodene er koblet til anoden til de ulige nummererte lysdiodene, så tilkoblingen er den samme begge veier. Hvis dette notatet forvirrer deg, bare ignorer det.

Trinn 4: Grunnleggende om programmering

For at charlieplexing skal fungere, slår du på bare én LED om gangen. For at dette skal fungere med vår BS2 trenger vi to grunnleggende trinn: 1. Still ut utgangsmodusene for pinnene ved å bruke kommandoen OUTS. Fortell BS2 hvilke pinner som skal brukes som utganger ved hjelp av DIRS -kommandoen Dette fungerer fordi BS2 kan bli fortalt hvilke pinner som skal kjøres høyt og lavt, og vil vente med å gjøre det til du angir hvilke pinner som er utganger. La oss se om ting er koblet til riktig av prøver bare å blinke LED 1. Hvis du ser på skjematikken, kan du se at P0 er koblet til katoden (-) på LED 1 og P1 er koblet til anoden til den samme LED-en. Dette betyr at vi ønsker å kjøre P0 lavt og P1 høyt. Dette kan gjøres slik: "OUTS = % 11110" som driver P4-P1 høyt og P0 lavt. (% Indikerer at et binært tall skal følge. Det laveste binære sifferet er alltid til høyre. 0 = LAV, 1 = HØY) BS2 lagrer denne informasjonen, men vil ikke handle på den før vi har erklært hvilke pinner som er utganger. Dette trinnet er nøkkelen ettersom bare to pinner skal være utganger samtidig. Resten skal være innganger, som setter disse pinnene til høyimpedansmodus, slik at de ikke synker noen strøm. Vi må kjøre P0 og P1, så vi setter disse til utganger og resten til innganger slik: "DIRS = % 00011". (% Indikerer at et binært tall skal følge. Det laveste binære sifferet er alltid til høyre. 0 = INNGANG, 1 = UTGANG) La oss sette det sammen til en nyttig kode: '{$ STAMP BS2e}' {$ PBASIC 2.5} DO OUTS = %11110 'Kjør P0 lav og P1-P4 høy DIRS = %00011' Sett P0- P1 som utganger og P2-P4 som innganger PAUSE 250 'Pause for LED å forbli på DIRS = 0' Sett alle pinner til inngang. Dette vil slå av LED PAUSE 250 'Pause for LED å forbli slukket LOOP

Trinn 5: Utviklingssyklusen

Nå som vi har sett en pin-arbeidstid for å sikre at de alle fungerer. 20led_Zig-Zag.bseDenne vedlagte koden skal lyse opp hver av de 20 lysdiodene i et sikksakk-mønster. Du vil legge merke til at etter at hver pinne har skuffen tent, bruker jeg "DIRS = 0" for å gjøre alle pinnene tilbake til innganger. Hvis du endrer OUTS uten å slå av utgangspinnene, kan du få noen "spøkelser" der en LED som ikke skal lyse kan blinke mellom syklusene. Hvis du endrer W1 -variabelen i begynnelsen av denne koden til "W1 = 1" der vil bare være en pause på 1 millisekund mellom hvert LED -blink. Dette vil føre til en vedvarende synseffekt (POV) som får det til å se ut som om alle lysdiodene lyser. Dette har den effekten at lysdiodene blir svakere, men er essensen i hvordan vi skal vise tegn på denne matrisen. 20led_Interpreter_Proto.bse Jeg bestemte meg på dette tidspunktet for at jeg måtte utvikle en eller annen tolkekode for å snu de vanvittige kombinasjonene som trengs for å tenne LED -er i et brukbart mønster. Denne filen er mitt første forsøk. Du vil se at nederst i filen er tegnene lagret i fire linjer med 5 -sifret binær. Hver linje leses inn, analyseres, og en subrutine kalles hver gang en LED må tennes. Denne koden fungerer og går gjennom tallene 1-0. Hvis du prøver å kjøre den, merker du at den er plaget av en veldig langsom oppdateringsfrekvens som får tegnene til å blinke nesten for sakte til å bli gjenkjent. Denne koden er dårlig av mange grunner. For det første tar fem siffer i binær like mye plass i EEPROM som 8 siffer i binær som all informasjon lagres i grupper på fire biter. For det andre krever SELECT CASE som ble brukt for å bestemme hvilken pin som skal tennes 20 kasser. BS2 er begrenset til 16 saker per SELECT -operasjon. Dette betyr at jeg måtte hacke meg rundt denne begrensningen med en IF-THEN-ELSE-setning. Det må være en bedre måte. Etter noen timer med riper i hodet oppdaget jeg det.

Trinn 6: En bedre tolk

Hver rad i matrisen består av 4 lysdioder, hver kan være på eller av. BS2 lagrer informasjon i sin EEPROM i grupper på fire bits. Den korrelasjonen burde gjøre ting mye enklere for oss. I tillegg til dette faktum, tilsvarer fire biter desimaltallene 0-15 for totalt 16 muligheter. Dette gjør eller SELECT CASE mye enklere. Her er tallet 7 som er lagret i EEPROM: '7 %1111, %1001, %0010, %0100, %0100, Hver rad har en desimal som tilsvarer 0-15 så vi leser en ro inn fra minnet og mat det direkte til SELECT CASE -funksjonen. Dette betyr at den menneskelige lesbare binære matrisen som ble brukt til å lage hvert tegn (1 = ledd på, 0 = ledd av) er nøkkelen for tolken. For å bruke samme SELECT CASE for hver av de 5 radene brukte jeg et annet select case for å sette DIRS og OUTS som variabler. Jeg leste først i hver av fem linjer i tegnet til variablene ROW1-ROW5. Hovedprogrammet kaller deretter delprogrammet for å vise tegnet. Denne underrutinen tar den første raden og tildeler de fire mulige OUTS-kombinasjonene til variabel outp1-outp4 og de to mulige DIRS-kombinasjonene til direc1 & direc2. Lysdioder blinker, radtelleren økes, og den samme prosessen kjøres for hver av de fire andre radene. Dette er mye raskere enn det første tolkeprogrammet. Når det er sagt, er det fortsatt merkbar flimmer. Ta en titt på videoen, kameraet får flimmeren til å se mye verre ut, men du skjønner ideen. Å overføre dette konseptet til en mye raskere brikke, som en picMicro eller en AVR -brikke, ville muliggjøre visning av disse tegnene uten merkbar flimring.

Trinn 7: Hvor skal du gå herfra

Jeg har ikke en CNC -mølle eller etsningstilbehør for å lage kretskort, så jeg vil ikke koble dette prosjektet. Send meg en melding hvis du har en fabrikk og er interessert i å samarbeide for å komme videre herfra. Jeg vil gjerne betale for materialer og frakt enda gladere for å vise noe av et ferdig produkt for dette prosjektet.

Andre muligheter: 1. Port denne til en annen brikke. Denne matrisedesignet kan brukes med alle brikker som har 5 i/o-pinner tilgjengelig som er i stand til tri-state (pinner som kan være høye, lave eller input (høye impedanser)). 2. Ved å bruke en raskere brikke (kanskje AVR eller picMicro) kan du øke skalaen. Med en 20 -pinners brikke kan du bruke 14 pinner til å kombinere en 8x22 skjerm og bruke de resterende pinnene til å motta serielle kommandoer fra en datamaskin eller en annen kontroller. Bruk ytterligere tre 20-pinners sjetonger, og du kan ha en rullende skjerm som er 8x88 for totalt 11 tegn samtidig (avhengig av bredden på hvert tegn selvfølgelig). Lykke til HA det gøy!

Anbefalt: