Cuprins:

5x4 LED Display Matrix folosind o ștampilă de bază 2 (bs2) și Charlieplexing: 7 pași
5x4 LED Display Matrix folosind o ștampilă de bază 2 (bs2) și Charlieplexing: 7 pași

Video: 5x4 LED Display Matrix folosind o ștampilă de bază 2 (bs2) și Charlieplexing: 7 pași

Video: 5x4 LED Display Matrix folosind o ștampilă de bază 2 (bs2) și Charlieplexing: 7 pași
Video: Easy LED Matrix Control: Arduino and 8x8 1088AS Matrix Multiplexing 2024, Noiembrie
Anonim
5x4 LED Display Matrix folosind o ștampilă de bază 2 (bs2) și Charlieplexing
5x4 LED Display Matrix folosind o ștampilă de bază 2 (bs2) și Charlieplexing

Aveți o ștampilă de bază 2 și câteva LED-uri suplimentare? De ce să nu te joci cu conceptul charlieplexing și să creezi o ieșire folosind doar 5 pini.

Pentru acest instructiv voi folosi BS2e, dar orice membru al familiei BS2 ar trebui să lucreze.

Pasul 1: Charlieplexing: ce, de ce și cum

Să scăpăm mai întâi motivul. De ce să folosim charlieplexarea cu un ștampil de bază 2? --- Dovada conceptului: Aflați cum funcționează charlieplexing și aflați ceva despre BS2. Acest lucru mi-ar putea fi util mai târziu folosind cipuri mai rapide cu 8 pini (doar 5 dintre ele vor fi i / o).-- Motiv util: Practic nu există. BS2 este mult prea lent pentru a fi afișat, fără să pâlpâie vizibil. Am aflat despre charlieplexing de la www.instructables.com și poți și tu: Charlieplexing LEDs- Theory Cum să conduci o mulțime de LED-uri de la câțiva pini de microcontroler. De asemenea, pe wikipedia: Charlieplexing Cum pot conduce 20 de led-uri cu 5 pini i / o? --- Vă rugăm să citiți cele trei linkuri de la „Ce este charlieplexing?”. Asta o explică mai bine decât aș fi putut vreodată. Charlieplexing este diferit de multiplexarea tradițională care are nevoie de un pin I / O pentru fiecare rând și fiecare coloană (care ar fi un total de 9 pini I / O pentru un afișaj 5/4).

Pasul 2: Hardware și schemă

Hardware și schemă
Hardware și schemă

Lista materialelor: 1x - Basic Stamp 220x - diode emițătoare de lumină (LED-uri) de același tip (culoare și cădere de tensiune) 5x - rezistențe (vezi mai jos referitoare la valoarea rezistorului) Auxiliar / opțional: Metoda de programare a butonului BS2 Momentary buton ca un comutator de resetare 6v -9v Alimentare în funcție de versiunea dvs. de BS2 (citiți manualul) Schema: Această schemă este pusă împreună cu aspectul mecanic în minte. Veți vedea grila de LED-uri configurată în stânga, aceasta este orientarea pentru care a fost scris codul BS2. Observați că fiecare pereche de LED-uri are anodul conectat la catodul celuilalt. Acestea sunt apoi conectate la unul dintre cei cinci pini i / o. Valori ale rezistorului: ar trebui să calculați propriile valori ale rezistorului. Verificați fișa tehnică pentru LED-urile dvs. sau utilizați setarea LED-ului de pe multimetrul dvs. digital pentru a găsi căderea de tensiune a LED-urilor dvs. Să facem câteva calcule: Tensiune de alimentare - Cadere de tensiune / Curent dorit = Valoare rezistor BS2 furnizează energie reglată 5v și poate sursa 20ma de curent. LED-urile mele au o scădere de 1.6v și funcționează la 20ma.5v - 1.6v /.02amps = 155ohms Pentru a vă proteja BS2, ar trebui să utilizați următoarea valoare a rezistorului mai mare din ceea ce obțineți cu calculul, în acest caz cred că ar fi 180ohms. Am folosit 220ohmi, deoarece placa de dezvoltare are acea valoare de rezistență încorporată pentru fiecare pin I / O. NOTĂ: Cred că, deoarece există un rezistor pe fiecare pin, acest lucru dublează efectiv rezistența pe fiecare led, deoarece un pin este V + și celălalt este Gnd. Dacă acesta este cazul, ar trebui să reduceți valorile rezistenței la jumătate. Efectul advers al unei rezistențe prea mari este un LED mai slab. Poate cineva să verifice acest lucru și să-mi lase un PM sau un comentariu pentru a putea actualiza aceste informații? Programare: Am folosit o placă de dezvoltare care are un conector DB9 pentru a programa cipul chiar pe placă. De asemenea, folosesc acest cip pe panoul meu fără lipire și am inclus un antet de programare în circuit (ICSP). Antetul are 5 pini, pinii 2 până la 5 se conectează la pinii 2-5 pe un cablu serial DB9 (pinul 1 este neutilizat). Vă rugăm să rețineți că pentru a utiliza acest antet ICSP pinii 6 și 7 de pe cablul DB9 trebuie conectați între ei. Resetare: un buton de resetare momentan este opțional. Acest lucru trage pinul 22 la sol atunci când este împins.

Pasul 3: Breadboarding

Breadboarding
Breadboarding
Breadboarding
Breadboarding

Acum este timpul să construim matricea pe o placă de panou. Am folosit o bandă de borne pentru a conecta câte un picior de la fiecare pereche de leduri și un fir mic jumper pentru a conecta celelalte picioare. Acest lucru este detaliat în fotografia de prim plan și este explicat în detaliu aici: 1. Orientează-ți panoul pentru a se potrivi cu imaginea mai mare2. Așezați LED-ul 1 cu anodul (+) spre dvs. și catodul (-) departe de dvs. Așezați LED-ul 2 în aceeași orientare cu anodul (+) în banda de conectare a catodului LED 1. Utilizați un fir mic jumper pentru a conecta anodul LED 1 cu catodul LED 2.5. Repetați până când fiecare pereche de LED-uri a fost adăugată la placă. Deoarece există doar 4 benzi de autobuz, eu folosesc o bandă de borne pentru P4 (a cincea conexiune I / O). Acest lucru poate fi văzut în imaginea mai mare de mai jos. Conectați banda de borne pentru catodul LED 1 la banda de bus P0. Repetați pentru fiecare LED cu număr impar, înlocuind P * corespunzător pentru fiecare pereche (vezi schema).7. Conectați banda de borne pentru catodul LED 2 la banda de bus P1. Repetați pentru fiecare LED cu număr impar, înlocuind P * corespunzător pentru fiecare pereche (vezi schema).8. Conectați fiecare bandă de magistrală la pinul I / O corespunzător de pe BS2 (P0-P4).9. Verificați toate conexiunile pentru a vă asigura că corespund schemei. NOTĂ: În prim-plan veți vedea că nu pare că am urmat pasul 7, deoarece conexiunea la al doilea pin I / O este pe anodul LED-urilor cu număr impar. Amintiți-vă că catodul LED-urilor numerotate pare este conectat la anodul LED-urilor cu număr impar, astfel încât conexiunea este aceeași în ambele sensuri. Dacă această notă vă încurcă, ignorați-o.

Pasul 4: Noțiuni de bază despre programare

Pentru ca charlieplexingul să funcționeze, porniți doar un led la rând. Pentru ca acest lucru să funcționeze cu BS2, avem nevoie de doi pași de bază: 1. Setați modurile de ieșire pentru pini utilizând comanda OUTS. Spuneți BS2 ce pini să utilizați ca ieșiri utilizând comanda DIRS Acest lucru funcționează deoarece BS2 poate fi informat ce pini să conducă în sus și în jos și va aștepta să facă acest lucru până când specificați ce pini sunt ieșiri. Să vedem dacă lucrurile sunt conectate corect de către doar încercând să clipească LED-ul 1. Dacă vă uitați la schemă, puteți vedea că P0 este conectat la catodul (-) al LED-ului 1 și P1 este conectat la anodul aceluiași LED. Aceasta înseamnă că vrem să conducem P0 la nivel scăzut și P1 la nivel ridicat. Acest lucru se poate face astfel: "OUTS =% 11110" care determină P4-P1 în sus și P0 în jos. (% Indică un număr binar care urmează. Cea mai mică cifră binară este întotdeauna în dreapta. 0 = LOW, 1 = HIGH) BS2 stochează acele informații, dar nu va acționa asupra lor până când nu declarăm ce pini sunt ieșiri. Acest pas este cheia, deoarece numai doi pini ar trebui să fie ieșiri în același timp. Restul ar trebui să fie intrări, care setează acei pini în modul Impedanță mare, astfel încât să nu scadă niciun curent. Trebuie să conducem P0 și P1, așa că le vom seta la ieșiri, iar restul la intrări așa: "DIRS =% 00011". (% Indică un număr binar care urmează. Cea mai mică cifră binară este întotdeauna în dreapta. 0 = INPUT, 1 = OUTPUT) Să punem acest lucru împreună într-un cod util: '{$ STAMP BS2e}' {$ PBASIC 2.5} DO OUTS =% 11110 'Drive P0 low și P1-P4 high DIRS =% 00011' Set P0- P1 ca ieșiri și P2-P4 ca intrări PAUSE 250 'Pauză pentru ca LED-ul să rămână aprins = 0' Setați toți pinii la intrare. Aceasta va opri LED PAUSE 250 'Pauză pentru ca LED-ul să rămână OFFLOOP

Pasul 5: Ciclul de dezvoltare

Acum, că am văzut un singur timp de lucru pentru a ne asigura că funcționează toate. 20led_Zig-Zag.bse Acest cod atașat ar trebui să lumineze fiecare dintre cele 20 de LED-uri într-un model în zig-zag. Veți observa că după ce fiecare pin se aprinde, folosesc „DIRS = 0” pentru a transforma toți pinii în intrări. Dacă schimbați OUTS-ul fără a opri pinii de ieșire, puteți obține o „fantomă” în care un led care nu ar trebui aprins poate clipi între cicluri. Dacă schimbați variabila W1 la începutul acestui cod la „W1 = 1” acolo va fi doar o pauză de 1 milisecundă între fiecare clipire LED. Acest lucru va provoca un efect de persistență a vederii (POV) care face să pară că toate LED-urile sunt aprinse. Acest lucru are efectul de a face LED-urile mai estompate, dar este esența modului în care vom afișa caractere pe această matrice. 20led_Interpreter_Proto.bse LED-urile într-un model utilizabil. Acest fișier este prima mea încercare. Veți vedea că în partea de jos a fișierului caracterele sunt stocate în patru linii de 5 cifre binare. Fiecare linie este citită, analizată și se apelează un subrutină de fiecare dată când este nevoie să fie aprins un led. Acest cod funcționează, parcurgând numerele 1-0. Dacă încercați să îl rulați, observați că este afectat de o rată de reîmprospătare foarte lentă, determinând caracterele să clipească aproape prea lent pentru a fi recunoscute. Acest cod este rău din multe motive. În primul rând, cinci cifre binare ocupă la fel de mult spațiu în EEPROM ca 8 cifre binare, întrucât toate informațiile sunt stocate în grupuri de patru biți. În al doilea rând, SELECT CASE folosit pentru a decide care pin trebuie iluminat necesită 20 de cazuri. BS2 este limitat la 16 cazuri pentru fiecare operație SELECT. Acest lucru înseamnă că a trebuit să scap de limitele respective cu o declarație IF-THEN-ELSE. Trebuie să existe o modalitate mai bună. După câteva ore de zgârieturi la cap am descoperit-o.

Pasul 6: un interpret mai bun

Fiecare rând al matricei noastre este compus din 4 LED-uri, fiecare poate fi pornit sau oprit. BS2 stochează informații în EEPROM în grupuri de patru biți. Această corelație ar trebui să ne ușureze lucrurile. Pe lângă acest fapt, patru biți corespund cifrelor zecimale 0-15 pentru un total de 16 posibilități. Acest lucru face sau SELECT CASE mult mai ușor. Iată numărul 7 așa cum este stocat în EEPROM: „7% 1111,% 1001,% 0010,% 0100,% 0100, fiecare rând are o zecimală echivalentă cu 0-15, așa că citim un rând în memoria și alimentați-l direct la funcția SELECT CASE. Aceasta înseamnă că matricea binară lizibilă de om folosită pentru a face fiecare caracter (1 = led on, 0 = led off) este cheia pentru interpret. Pentru a utiliza același SELECT CASE pentru fiecare dintre cele 5 rânduri am folosit un alt caz selectat pentru a seta DIRS și OUTS ca variabile. Am citit mai întâi în fiecare din cele cinci rânduri ale caracterului variabilele ROW1-ROW5. Programul principal apelează apoi subrutina pentru a afișa caracterul. Acest subrutină ia primul rând și atribuie cele patru combinații posibile OUTS variabilei outp1-outp4 și cele două combinații posibile DIRS către direc1 și direc2. LED-urile sunt intermitente, contorul de rânduri este incrementat și același proces este rulat pentru fiecare dintre celelalte patru rânduri. Acest lucru este mult mai rapid decât primul program de interpretare. Acestea fiind spuse, există încă o sclipire vizibilă. Uită-te la videoclip, camera face ca pâlpâirea să arate mult mai rău, dar îți vine ideea. Portarea acestui concept pe un cip mult mai rapid, cum ar fi un picMicro sau un cip AVR, ar permite afișarea acestor caractere fără o sclipire vizibilă.

Pasul 7: Unde să mergeți de aici

Nu am o fabrică de cnc sau consumabile de gravat pentru a face plăci de circuite, așa că nu voi cabla acest proiect. Dacă aveți o moară și sunteți interesat să colaborați pentru a merge mai departe de aici, trimiteți-mi un mesaj. Aș fi fericit să plătesc materiale și transportul și mai fericit pentru a arăta un produs finit pentru acest proiect.

Alte posibilități: 1. Portați acest lucru pe un alt cip. Acest design matricial poate fi utilizat cu orice cip care are 5 pini I / O disponibili care sunt capabili de tri-stare (pini care pot fi mari, mici sau de intrare (impedanță ridicată)). 2. Folosind un cip mai rapid (poate AVR sau picMicro) puteți mări scala. Cu un cip de 20 pini, puteți utiliza 14 pini pentru a încărca un ecran 8x22 și utilizați pini rămași pentru a primi comenzi seriale de la un computer sau alt controler. Utilizați încă trei jetoane cu 20 de pini și puteți avea un afișaj de defilare de 8x88 pentru un total de 11 caractere simultan (în funcție de lățimea fiecărui caracter, desigur). Noroc sa te distrezi!

Recomandat: