Indicator arduino de 4 x 7 segmente. Arduino și indicator cu 4 cifre, cu 7 segmente

În articolul de astăzi vom vorbi despre indicatorii cu 7 segmente și despre cum să ne „împrietenim” cu Arduino. Există mai multe opțiuni. Cel mai ușor, de departe, este să mergi la și cumpărați un indicator gata făcut cu un scut integrat (acesta este numele eșarfei potrivite), dar nu căutăm căi ușoare, așa că vom merge pe drumul puțin mai complicat. Newbies - nu vă alarmați, acest articol, ca și articolele mele anterioare ( și ) doar pentru tine. Lasă-i pe guru să scrie pentru aceiași guru experimentați, iar eu sunt un începător - scrie pentru începători.

De ce exact un indicator pe 7 segmente? La urma urmei, există atât de multe ecrane diferite, cu un număr mare de caractere, linii, diferite diagonale și rezoluții, alb-negru și color, dintre care cele mai accesibile costă câțiva dolari ... Și aici: „vechi”, extrem de simplu, dar necesită un număr mare de indicatori cu 7 segmente, dar acest „bătrân” are și un avantaj. Faptul este că folosind schițele date aici, puteți reînvia nu numai un indicator cu o înălțime de cifre de 14 mm, ci și proiecte mai serioase (deși deja făcute de casă), iar cifrele contorului în acest caz sunt departe de limită. Este posibil ca locuitorii din capitale să nu fie atât de interesați, dar populația din Novokatsapetovka sau Nizhnyaya Kedrovka va fi foarte fericită dacă va apărea un ceas la un consiliu al clubului sau al satului care poate afișa în continuare data și temperatura și vor vorbi despre creatorul acestei ceas pentru o perioadă foarte lungă de timp. Dar, un astfel de ceas este subiectul unui articol separat: va exista o dorință în rândul vizitatorilor - Voi scrie. Tot ceea ce este scris mai sus poate fi considerat o introducere. La fel ca ultimul meu articol, acesta va fi format din părți, de data aceasta în două. În prima parte, pur și simplu „controlăm” indicatorul, iar în a doua, vom încerca să-l adaptăm pentru ceva cel puțin puțin util. Deci, să continuăm:

Prima parte. Experimental - cognitiv

Acest proiect se bazează pe ARDUINO UNO, deja bine cunoscut din articolele anterioare. Permiteți-mi să vă reamintesc că cel mai simplu mod de a-l obține este aici: sau aici: aveți nevoie și de un indicator cu 4 cifre și 7 segmente. În special, am un GNQ-5641BG-11. De ce acesta? Da, pur și simplu pentru că acum 5 ani l-am cumpărat din greșeală, era prea leneș să mă duc să mă schimb, așa că el a mințit tot acest timp, așteptând în aripi. Cred că oricine are un anod comun va face (și cu un catod comun puteți, dar va trebui să inversați datele matricei și restul valorilor portului - adică să le schimbați la opus), deci ca să nu fie prea puternic pentru a nu arde Arduinka. În plus, 4 rezistențe cu limitare de curent, aproximativ 100 Ohm fiecare și o bucată de buclă (10 cm mi-a fost suficient) pentru 12 pini (nuclee) pot fi „smulse” dintr-unul mai larg, ceea ce am făcut. Și, în general, puteți lipi cu fire separate, nu vor exista probleme. De asemenea, veți avea nevoie de ace pentru tablă (11 buc.), Deși, dacă puteți avea grijă fără ele. O schiță a indicatorului poate fi văzută în Figura 1, iar circuitul său în Figura 2. Observ, de asemenea, că este mai bine să furnizați nu mai mult de 2,1 V la fiecare segment al acestui indicator (limitat de rezistențe de 100 ohmi), și în în acest caz nu va consuma mai mult de 20 mA. Dacă numărul „8” se aprinde, consumul nu depășește 7x20 \u003d 140 mA, ceea ce este destul de acceptabil pentru ieșirile Arduino. Un cititor curios va pune întrebarea: "Dar 4 descărcări de 140 mA sunt deja 4x140 \u003d 560 mA, iar acest lucru este deja cam prea mult!" Voi răspunde - vor fi 140. Cum? Citește mai departe! Amplasarea pinilor pe indicator poate fi văzută în Figura 3. Iar conexiunea se face conform Tabelului 1.


Figura: 1 - Schița indicatorului


Figura: 2 - Diagrama indicatorului


Figura: 3 - Localizarea pinului

tabelul 1

Pin Arduino Uno

Pin indicator

Notă

Segmentul G

Segmentul F

Segmentul E

Segmentul D

Segmentul C

Segmentul B

Segmentul A

Anod comun al segmentului 1, conectați printr-un rezistor de 100 Ohm.

Anod comun al segmentului 2, conectați printr-un rezistor de 100 Ohm.

Anod comun al segmentului 3, conectați printr-un rezistor de 100 Ohm.

Anod comun al segmentului 6, conectați printr-un rezistor de 100 ohmi.



Completați o schiță simplă, care este o simplă „linie de numărare” de la 0 la 9:


Și acum o mică explicație. DDRD este registrul portului D (DDRB - respectiv, portul B) din spatele cuvântului „teribil” „registru” există doar o funcție „ascunsă” care indică dacă portul va citi ceva (va primi informații) cu pinul sau vice versa va exista ceva apoi scrieți (dați informații). În acest caz, linia DDRD \u003d B11111111; indică faptul că toți pinii portului D sunt ieșiți, adică informațiile de la ei vor ieși. Litera „B” înseamnă că un număr binar (binar) este scris în registru. Cititorul nerăbdător va întreba imediat: „Este posibil zecimalul!?!”. Mă grăbesc să vă liniștesc - puteți, dar mai multe despre asta mai târziu. Dacă am dori să folosim jumătate din port pentru intrare și jumătate pentru ieșire, am putea specifica după cum urmează: DDRD \u003d B11110000; unele arată acele pini care vor da informații și zerouri - cele care vor primi chiar aceste informații. Principala comoditate a registrului constă, de asemenea, în faptul că nu este necesar să înregistrați toți pinii de 8 ori, adică salvăm 7 linii în program. Acum să analizăm următoarea linie:

PORTB \u003d B001000; // setați nivelul înalt 11 pini ai portului B

PORTB este registrul de date Port B, adică după ce am scris orice număr în el, indicăm pe ce port al portului va fi unul și pe care - zero. În plus față de comentariu, voi spune că dacă luați Arduino Uno în așa fel încât să puteți vedea controlerul și pinii digitali de sus, intrarea în registru va fi clară, adică care „zero” (sau „unul”) este responsabil pentru care pin, adică zero cel din dreapta al portului B este responsabil pentru pinul 8, iar zero din partea stângă pentru al 13-lea (care are un LED încorporat). Pentru portul D, respectiv, dreapta pentru pinul 0, stânga pentru pinul 7.
Sper, după astfel de explicații detaliate, totul să fie clar, dar, din moment ce este clar, vă propun să revin la sistemul de numere zecimale cunoscut de noi și dragi din copilărie. Și totuși - o schiță de 25 de linii pare a fi mică, dar pentru un începător este încă oarecum greoaie. Vom scădea.

Completați o schiță și mai simplă, aceeași „rimă”:


Videoclipul 1.
Doar 11 rânduri! Acesta este drumul nostru, „newbie”! Vă rugăm să acordați atenție în loc de numere binare, numerele zecimale sunt scrise în registre. Bineînțeles, pentru numerele zecimale, nu sunt necesare litere în față. Cred că nu va fi de prisos să aducem toate numerele în tabele.

Tabelul 2. Corespondența semnului afișat cu datele portului

Anod comun

Catod comun

Sistem binar

Sistem zecimal

Sistem binar

Sistem zecimal

Tabelul 3. Corespondența bitului afișat cu datele portului

Anod comun

Catod comun

Sistem binar

Sistem zecimal

Sistem binar

Sistem zecimal



Atenţie! Datele din tabelele 2 și 3 sunt valabile numai pentru cablare conform tabelului 1.
Acum, să completăm o schiță cu o „numărare” de la 0 la 9999:




Figura: 4 - Cititor

Lucrarea schiței poate fi vizualizată laVideoclipul 2.

Există mai multe comentarii în această schiță decât în \u200b\u200bcodul în sine. Nu ar trebui să existe nicio întrebare ... Cu excepția unui singur lucru, ce este acest „ciclu pâlpâitor” care pâlpâie de fapt acolo și pentru ce? Și, de asemenea, un fel de variabilă pentru asta ...
Și chestia este că segmentele cu același nume din toate cele patru cifre sunt conectate la un moment dat. A1, A2, A3 și A4 au un catod comun; A1, B1, ... ..G1 anod comun. Deci, dacă aplicăm simultan „1234” indicatorului din 4 cifre, vom obține „8888” și vom fi foarte surprinși de acest lucru. Pentru a preveni acest lucru, trebuie mai întâi să aprindeți „1” în descărcare, apoi să îl opriți, să aprindeți „2” în al vostru etc. Dacă faceți acest lucru foarte repede, atunci pâlpâirea numerelor se va contopi, ca niște cadre pe film, iar ochii cu greu o vor observa. Și valoarea maximă a variabilei de pâlpâire în acest caz controlează rata la care se schimbă numerele de pe indicator. Apropo, datorită acestui „pâlpâit”, consumul maxim de curent este de numai 140 mA, în loc de 560. Și acum vă propun să treceți la ceva mai util.

Partea a doua. Cel puțin puțin util

În această parte, vom genera caractere cu calculator personal Afișaj pe 7 segmente la ajutor ARDUINO MEGA. De ce ai avut brusc ideea să „schimbi caii la trecere”? Există două motive: primul - înainte, în articolele mele, nu am considerat niciodată ARDUINO MEGA; iar al doilea - în ARDUINO UNO, încă nu mi-am dat seama cum să schimb dinamic portul COM și portul D. Dar sunt un începător - sunt iertat. Puteți cumpăra acest controler, desigur, aici: ... Pentru a pune în aplicare planul, a trebuit să iau un fier de lipit și să re-lipesc bucla din partea Arduino, precum și să scriu o nouă schiță. Modul în care bucla este lipită poate fi văzut în Figura 5. Ideea este că ARDUINO MEGA și ARDUINO UNO au porturi diferite și există mai multe porturi în Mega. Corespondența pinilor utilizați poate fi văzută din Tabelul 4.



Figura: 5 - Cablare nouă a buclei

Tabelul 4

Mega port


Atenţie! Aceasta masa este valabil doar pentru acest proiect!

De asemenea, trebuie remarcat faptul că portul C de la Arduino Mega „pornește” de la pinul 37 și mai jos, iar portul A - de la pinul 22 și mai jos.



Figura: 6 - Vedere generală



Caracteristici mici de implementare: vom afișa 4 caractere. Simbolurile trebuie să fie numere. Dacă am introdus „1234” și vedem „1234”, dacă am introdus „123456” vom vedea în continuare „1234”, dacă am introdus „itsuk”, „phyva1234”, „otiog485909oapom” - nu vom vedea nimic. Dacă ați introdus „pp2345mm” vom vedea „23” adică mic, încorporat „infailibil”.

Schița în sine:



Cum functioneazã acest program poate fi privitVideo 3.



Recenzie pregătită de Pavel Sergeev

Cu această abordare, doar 2 ieșiri digitale Arduino sunt utilizate pentru a ieși un număr cu orice număr de cifre.

De exemplu, vom afișa pe indicatori numărul de secunde care au trecut de la începutul lucrului.

Componentele inițiale

Principiul de funcționare

Un indicator cu șapte segmente este doar o colecție de LED-uri convenționale într-un singur pachet. Doar că sunt așezate în opt și au forma unui segment de băț. Puteți să-l conectați direct la Arduino, dar apoi vor fi ocupați 7 pini, iar programul va trebui să implementeze un algoritm pentru convertirea unui număr dintr-o reprezentare binară în semnale corespunzătoare „fontului calculatorului”.

Pentru a simplifica această sarcină, există un driver de 7 segmente. Acesta este un microcircuit simplu cu un contor intern. Are 7 ieșiri pentru conectarea tuturor segmentelor (a, b, c, d, e, f, g pini), un contact pentru resetarea contorului la 0 (pin de resetare) și un contact pentru creșterea valorii cu unul (pinul de ceas) . Valoarea contorului intern este convertită în semnale (pornit / oprit) pornite contacte a-g astfel încât să vedem cifra arabă corespunzătoare.

Există încă o ieșire pe microcircuit, denumită „÷ 10”. Valoarea sa este scăzută tot timpul, cu excepția momentului de revărsare, când valoarea contorului este 9 și este incrementată cu una. În acest caz, valoarea contorului devine din nou 0, dar ieșirea "÷ 10" devine HIGH până la următoarea creștere. Poate fi conectat la știftul de ceas al unui alt șofer și astfel obține un contor pentru numere din două cifre. Continuând acest lanț, puteți imprima numere lungi în mod arbitrar.

Microcircuitul poate funcționa la o frecvență de până la 16 MHz, adică va comite modificări la pinul ceasului chiar dacă apar de 16 milioane de ori pe secundă. Arduino funcționează la aceeași frecvență și acest lucru este convenabil: pentru a afișa un anumit număr, este suficient să resetați contorul la 0 și să creșteți rapid valoarea cu una la cea specificată. Nu se observă la ochi.

Conexiune

Mai întâi, să instalăm indicatori și drivere pe panou. Toate au picioare pe ambele părți, prin urmare, pentru a nu scurtcircuita contactele opuse, aceste componente trebuie plasate deasupra canelurii centrale a panoului. O canelură împarte panoul în două jumătăți neconectate.

    16 - la șina de alimentare: aceasta este puterea microcircuitului

    2 „dezactivați ceasul” - la șina de la sol: nu o folosim

    3 „activați afișajul” - la șina de alimentare: aceasta este puterea indicatorului

    8 "0V" - la șina de sol: acesta este terenul comun

    1 "ceas" - printr-un rezistor de tragere la sol. Vom conecta semnalul de la Arduino la acest pin mai târziu. Prezența unui rezistor este utilă pentru a evita fals pozitiv din cauza zgomotului ambiental, intrarea nu este încă conectată la nimic. O valoare adecvată este de 10 kΩ. Când conectăm acest pin la pinul Arduino, rezistența nu va juca un rol: semnalul va trage microcontrolerul la masă. Prin urmare, dacă știți că driverul va fi întotdeauna conectat la Arduino în timpul funcționării, nu puteți utiliza deloc un rezistor.

    15 „resetare” și 5 „÷ 10” vor fi lăsate neconectate deocamdată, dar luați notă - vom avea nevoie de ele în viitor

Pinii 3 și 8 de pe indicator sunt desemnați ca „catod”, sunt comuni pentru toate segmentele și trebuie să fie conectați direct la masa comună.

Aceasta este urmată de cea mai dureroasă lucrare: conectarea ieșirilor microcircuitului cu anodii indicatori corespunzători. Acestea trebuie conectate prin rezistențe cu limitare de curent, cum ar fi LED-urile convenționale. În caz contrar, curentul din această secțiune a circuitului va fi mai mare decât în \u200b\u200bmod normal, iar acest lucru poate duce la defectarea indicatorului sau a microcircuitului. Un rating de 220 ohmi este în regulă.

Este necesar să vă conectați comparând pinout-ul microcircuitului ( ieșiri a-g) și pinout indicator (intrări a-g)

Repetăm \u200b\u200bprocedura pentru a doua categorie

Acum să ne amintim contactul „resetare”: trebuie să le conectăm împreună și să le tragem la sol printr-un rezistor de tragere. Ulterior, vom aduce un semnal de la Arduino către ei, astfel încât să poată reseta valoarea în totalitate în ambii drivere.

De asemenea, trimitem un semnal de la „÷ 10” de la driverul din dreapta la intrarea „ceas” a celui din stânga. Acest lucru ne va oferi un circuit capabil să afișeze numere cu două cifre.

Trebuie remarcat faptul că „ceasul” șoferului din stânga nu ar trebui să fie tras cu o rezistență la masă, așa cum s-a făcut pentru cel corect: conexiunea sa la „÷ 10” în sine va face semnalul stabil și trăgând la solul poate perturba doar stabilitatea transmisiei semnalului.

Fierul este pregătit, rămâne să implementăm un program simplu.

Programare

7segment.pde #define CLOCK_PIN 2 #define RESET_PIN 3 / * * Funcția resetNumber resetează valoarea curentă * de pe contor * / void resetNumber () ( // Pentru a reseta pentru o clipă, puneți un contact // resetați la HIGH și puneți-l din nou la LOW digitalWrite (RESET_PIN, HIGH); digitalWrite (RESET_PIN, LOW); ) / * * Funcția showNumber setează citirile indicatorului * la numărul negativ specificat `n` indiferent * de valoarea anterioară * / void showNumber (int n) ( // În primul rând, resetați valoarea curentă resetNumber (); // Apoi, „faceți clic” rapid pe contorul dorit // valori while (n--) (digitalWrite (CLOCK_PIN, HIGH); digitalWrite (CLOCK_PIN, LOW);)) void setup () (pinMode (RESET_PIN, OUTPUT); pinMode (CLOCK_PIN, OUTPUT); // Resetați contorul la început, astfel încât să nu apară // într-o stare aleatorie resetNumber (); ) bucla void () ( // Obțineți numărul de secunde într-un minut incomplet // din momentul pornirii și afișați-l pe indicatoare showNumber ((millis () / 1000)% 60); întârziere (1000); )

Rezultat

Conectăm pinul 2 al Arduino la pinul de ceas al driverului mai tânăr (dreapta), pinul 3 la resetarea generală a driverelor; crescem hrană; pornește-l - funcționează!

Să conectăm un segment de șapte indicator cu LED pe placa Arduino și aflați cum să o controlați utilizând biblioteca Led4Digits.h.

Lecția anterioară descrisă în detaliu pentru microcontrolere. Să conectăm un astfel de indicator la placa Arduino.

Diagrama pentru conectarea indicatorului la placa Arduino arată astfel.

L-am asamblat pe o placă de circuit.

Pentru a gestiona indicatorii, am scris biblioteca Led4Digits.h:

Și plătește.

Biblioteca vă permite să gestionați indicatori cu șapte segmente:

  • până la patru cifre;
  • cu orice variante de polaritate a impulsurilor de control (toate);
  • lucrează într-un proces paralel;
  • vă permite să afișați pe indicator:
    • segmente ale fiecărei categorii;
    • numărul fiecărei categorii;
    • întreg 0 ... 9999;
  • numărul de cifre poate fi specificat pentru a afișa un număr întreg;
  • există un mod de stingere a descărcărilor nesemnificative.

Puteți descărca biblioteca Led4Digits.h de pe acest link:

Și plătește. Doar 25 de ruble. lunar pentru acces la toate resursele site-ului!

Cum se instalează este scris în.

Nu voi da codul sursă. Le puteți vedea în fișierele bibliotecii. Ca întotdeauna, există suficiente comentarii. Voi descrie în detaliu, cu exemple, modul de utilizare a bibliotecii.

Biblioteca de control Indicatoare LED pentru Arduino Led4Digits.

Iată o descriere a clasei. Am furnizat numai metode și proprietăți publice.

clasa Led4Digits (
public:
cifra de octeți; // coduri de control segment segment
void regen (); // regenerare, metoda trebuie apelată în mod regulat
void tetradToSegCod (octet sap, octet tetrad); // convertirea unei tetrad în coduri de segment
print boolean (valoare int nesemnată, octet cifrăNum, octet gol); // ieșire întreagă



} ;

Constructor.

Led4Digits (octet tipLed, octet digitPin0, octet digitPin1, octet digitPin2, octet digitPin3,
octet segPinA, octet segPinB, octet segPinC, octet segPinD,
octet segPinE, octet segPinF, octet segPinG, octet segPinH);

tipLedSetează polaritatea impulsurilor de control pentru semnalele de selecție de biți și segmente. Suportă orice schemă de conexiune ().

tipLed Selectarea descărcării Selectarea segmentelor Tipul schemei
0 -_- -_- Anod comun cu taste de selectare a descărcării
1 _-_ -_- Anod comun
2 -_- _-_ Catod comun
3 _-_ _-_ Catod comun cu taste de selectare a descărcării

digitPin0 ... digitPin3 - concluziile alegerii categoriilor. Dacă digitPin \u003d 255, atunci cifra este dezactivată. Acest lucru vă permite să conectați indicatori cu mai puține cifre. digitPin0 - cifra cea mai puțin semnificativă (dreapta).

segPinA ... segPinH - Pinii de control al segmentelor.

De exemplu,

înseamnă: indicator tip 1; rezultatele categoriilor 5,4,3,2; concluziile segmentului 6,7,8,9,10,11,12,13.

Metoda Void regen ()

Metoda trebuie apelată în mod regulat într-un proces paralel. Regenerează imaginea de pe indicatori. Timpul ciclului de reîmprospătare este egal cu perioada de apel a metodei de numărul de biți.

De exemplu,

// handler de întrerupere 2ms
void timerInterrupt () (
disp.regen (); // regenerarea indicatorului
}

Matrice de cifre de octeți

Conține starea segmentelor. cifra este bitul cel mai puțin semnificativ, bitul cel mai puțin semnificativ al cifrei este segmentul „A” al bitului cel mai puțin semnificativ. Starea de biți egală cu 1 înseamnă că segmentul este aprins.

De exemplu,

cifra \u003d B0000101;

înseamnă că în a doua cifră segmentele „A” și „C” sunt aprinse.

Un exemplu de program care luminează secvențial toate segmentele fiecărui bit.

// segmente de rulare
#include
#include

//
Led4Digits disp (1, 5,4,3,2,6,7,8,9,10,11,12,13);

configurare nulă () (
timer întrerupe 2 ms
MsTimer2 :: start (); // activați întreruperea
}

bucla void () (
pentru (int i \u003d 0; i< 32; i++) {
if (i \u003d\u003d 0) disp.digit \u003d 1;
else if (i \u003d\u003d 8) disp.digit \u003d 1;
else if (i \u003d\u003d 16) disp.digit \u003d 1;
else if (i \u003d\u003d 24) disp.digit \u003d 1;
altceva (
disp.digit \u003d disp.digit<< 1;
disp.digit \u003d disp.digit<< 1;
disp.digit \u003d disp.digit<< 1;
disp.digit \u003d disp.digit<< 1;
}
întârziere (250);
}
}

// handler de întrerupere 2ms
void timerInterrupt () (
disp.regen (); // regenerarea indicatorului
}

În cifra matricei, 1 este deplasat și indicatorii indică acest lucru.

Metoda Void tetradToSegCod (octet sap, octet tetrad)

Metoda permite afișarea numerelor și literelor unui cod hexazecimal pentru a separa cifrele. Are argumente:

  • dig - numărul de biți 0 ... 3;
  • tetrad - cod caracter zecimal. Codul 0 va afișa numărul "0", codul 1 - numărul "1", codul 14 - litera "E".

De exemplu,

tetrad (2, 7);

va afișa numărul „7” în a treia cifră.

Un exemplu de program care schimbă caracterele pe fiecare bit pe rând.

// numerele la rândul lor
#include
#include

// indicator tip 1; rezultatele categoriilor 5,4,3,2; concluziile segmentului 6,7,8,9,10,11,12,13
Led4Digits disp (1, 5,4,3,2,6,7,8,9,10,11,12,13);

configurare nulă () (
MsTimer2 :: set (2, timerInterrupt); // timer întrerupe 2 ms
MsTimer2 :: start (); // activați întreruperea
}

bucla void () (
pentru (int i \u003d 0; i< 64; i++) {
disp.tetradToSegCod (i \u003e\u003e 4, i);
întârziere (250);
}
}

// handler de întrerupere 2ms
void timerInterrupt () (
disp.regen (); // regenerarea indicatorului
}

Metoda de imprimare booleană (valoare int nesemnată, octet cifră Număr, octet gol)

Metoda afișează un număr întreg pe indicatori. Convertește un număr binar în BCD pentru fiecare cifră. Are argumente:

  • valoare - numărul care este afișat pe indicator.
  • digitNum - numărul de cifre pentru numărul. Nu trebuie confundat cu numărul de cifre indicatoare. Poate doriți să imprimați numărul la 2 cifre și să afișați caractere pe celelalte două folosind cifre.
  • gol - semn al golirii cifrelor nesemnificative. gol \u003d 0 înseamnă că numărul trebuie afișat cu toate zerourile. Numărul „7” va arăta ca „0007”. Dacă golul este diferit de 0, zerourile nesemnificative vor fi șterse.

Dacă valoarea numărului depășește valoarea admisă pentru numărul de cifre selectat (cifrăNum), funcția va afișa „---” pe indicator și va reveni la fals.

Un exemplu de program pentru ieșirea numerelor.

// afișează numărul
#include
#include

// indicator tip 1; rezultatele categoriilor 5,4,3,2; concluziile segmentului 6,7,8,9,10,11,12,13
Led4Digits disp (1, 5,4,3,2,6,7,8,9,10,11,12,13);

configurare nulă () (
MsTimer2 :: set (2, timerInterrupt); // timer întrerupe 2 ms
MsTimer2 :: start (); // activați întreruperea
}

bucla void () (
pentru (int i \u003d 0; i< 12000; i++) {
imprimare disp. (i, 4, 1);
întârziere (50);
}
}

// handler de întrerupere 2ms
void timerInterrupt () (
disp.regen (); // regenerarea indicatorului
}

Ultimele două metode nu modifică starea segmentului „H” - punctul zecimal. Pentru a schimba starea unui punct, puteți utiliza comenzile:

cifră | \u003d 0x80; // aprinde punctul zecimal
cifră & \u003d 0x7f; // stinge punctul zecimal

Afișarea numerelor negative (int) la indicatori.

Numerele negative pot fi afișate după cum urmează:

  • Verificați semnul numărului.
  • Dacă numărul este negativ, atunci tipăriți semnul minus pe cel mai semnificativ bit și schimbați semnul numărului în pozitiv în funcția print ().
  • Dacă numărul este pozitiv, atunci suprimați cifra semnului și imprimați numărul utilizând funcția print ().

Iată un program care demonstrează această metodă. Tipărește numere de la -999 la 999.

// ieșire numere negative
#include
#include

// indicator tip 1; rezultatele categoriilor 5,4,3,2; concluziile segmentului 6,7,8,9,10,11,12,13
Led4Digits disp (1, 5,4,3,2,6,7,8,9,10,11,12,13);

configurare nulă () (
MsTimer2 :: set (2, timerInterrupt); // timer întrerupe 2 ms
MsTimer2 :: start (); // activați întreruperea
}

bucla void () (

pentru (int i \u003d -999; i< 1000; i++) {

dacă eu< 0) {
// numărul este negativ
disp.digit \u003d B01000000; // semn -
imprimare disp (i * -1, 3, 1);
}
altceva (
disp.digit \u003d B00000000; // golirea semnului
imprimare disp. (i, 3, 1);
}

întârziere (50);
}
}

// handler de întrerupere 2ms
void timerInterrupt () (
disp.regen (); // regenerarea indicatorului
}

Afișarea numerelor fracționate, format float.

Există multe modalități de a afișa numerele cu virgulă mobilă (flotante) folosind funcțiile standard C. În primul rând, funcția sprint (). Funcționează foarte încet, necesită conversii suplimentare de coduri de caractere în coduri binare-zecimale, este necesar să selectați un punct din șir. Alte funcții au aceleași probleme.

Folosesc un mod diferit de a afișa valorile variabilelor flotante. Metoda este simplă, fiabilă și rapidă. Redus la următoarele operațiuni:

  • Numărul în virgulă mobilă este înmulțit cu 10 la puterea corespunzătoare numărului necesar de zecimale. Dacă trebuie să afișați 1 zecimal pe indicatori, înmulțiți cu 10, dacă este 2, apoi înmulțiți cu 100, 3 zecimale - cu 1000.
  • Mai mult, numărul în virgulă mobilă este convertit în mod explicit într-un număr întreg (int) și afișat pe indicatori prin funcția print ().
  • Un punct este pus în locul dorit.

De exemplu, următoarele linii vor afișa o variabilă plutitoare cu două zecimale pe LED-urile cu șapte segmente.

float x \u003d 2.12345;

cifră disp. | \u003d 0x80; //

Înmulțim numărul cu 100 și punând un punct în a treia cifră, împărțim rezultatul la 100.

Iată un program care transmite numerelor în virgulă mobilă de la 0,00 la 99,99 la indicatori.

// ieșire în virgulă mobilă
#include
#include

// indicator tip 1; rezultatele categoriilor 5,4,3,2; concluziile segmentului 6,7,8,9,10,11,12,13
Led4Digits disp (1, 5,4,3,2,6,7,8,9,10,11,12,13);

configurare nulă () (
MsTimer2 :: set (2, timerInterrupt); // timer întrerupe 2 ms
MsTimer2 :: start (); // activați întreruperea
}

bucla void () (
float x \u003d 0;

pentru (int i \u003d 0; i< 10000; i++) {
x + \u003d 0,01;

imprimare disp ((int) (x * 100.), 4, 1);
cifră disp. | \u003d 0x80; // luminează punctul clasei a treia

întârziere (50);
}
}

// handler de întrerupere 2ms
void timerInterrupt () (
disp.regen (); // regenerarea indicatorului
}

După cum puteți vedea, biblioteca Led4Digits.h simplifică foarte mult lucrul cu indicatoare LED cu șapte segmente conectate la placa Arduino. Nu am găsit un analog al unei astfel de biblioteci.

Există biblioteci pentru lucrul cu afișaje LED printr-un registru de schimbare. Cineva mi-a scris că a găsit o bibliotecă care funcționează cu un afișaj LED conectat direct la placa Arduino. Dar când îl utilizați, indicatorul descarcă strălucire neuniformă, face cu ochiul.

Spre deosebire de analogi, biblioteca Led4Digits.h:

  • Funcționează în paralel. În bucla principală, programul încarcă date în anumite variabile, care sunt afișate automat pe afișaj. Ieșirea informațiilor și regenerarea indicatorului au loc într-o întrerupere a temporizatorului, neobservată de programul principal.
  • Cifrele afișajului se aprind uniform, fără să clipească. Această proprietate este asigurată de faptul că regenerarea are loc într-un ciclu strict definit de o întrerupere a temporizatorului.
  • Biblioteca are un cod compact, se execută rapid, încarcă minim controlerul.

În următoarea lecție, vom conecta un indicator LED și o matrice de butoane la placa Arduino în același timp. Să scriem o bibliotecă pentru o astfel de construcție.

Categorie:. Puteți adăuga la marcaje.

Indicatoarele LED cu șapte segmente sunt foarte populare printre dispozitivele de afișare digitală și sunt utilizate în panourile frontale ale cuptoarelor cu microunde, mașinilor de spălat, ceasurilor digitale, contoarelor, cronometrelor etc. În comparație cu indicatoarele LCD, segmentele LED strălucesc puternic și se disting de la distanță și unghi larg de vizualizare. Cel puțin 12 linii I / O sunt necesare pentru a conecta un afișaj de 7 segmente cu 4 cifre la microcontroler. Prin urmare, este aproape imposibil să utilizați acești indicatori cu microcontrolere cu un număr mic de pini, de exemplu, o serie de la companie. Desigur, puteți utiliza diferite metode de multiplexare (a căror descriere poate fi găsită pe site-ul web în secțiunea „Scheme”), dar în acest caz există anumite restricții pentru fiecare metodă și adesea utilizează algoritmi software complexi.

Vom lua în considerare metoda de conectare a indicatorului prin interfața SPI, care va necesita doar 3 linii I / O ale microcontrolerului. În acest caz, controlul tuturor segmentelor indicatorului va fi păstrat.

Pentru a conecta un indicator de 4 cifre la microcontroler prin intermediul magistralei SPI, se utilizează un microcircuit de driver specializat fabricat de companie. Microcircuitul este capabil să conducă opt afișaje cu șapte segmente cu un catod comun și include un decodor BCD, drivere de segmente, un circuit de multiplexare și o memorie RAM statică pentru stocarea valorilor cifrelor.

Curentul prin segmentele indicatorului este setat cu un singur rezistor extern. În plus, microcircuitul acceptă controlul luminozității indicatorilor (16 niveluri de luminozitate) prin intermediul PWM încorporat.

Circuitul luat în considerare în articol este un circuit al unui modul de afișare cu o interfață SPI, care poate fi utilizat în proiectele de radio amator. Și ne interesează mai mult nu circuitul în sine, ci lucrul cu microcircuitul prin interfața SPI. Puterea modulului +5 V este furnizată pinului Vcc, liniile de semnal MOSI, CLK și CS sunt destinate comunicării între dispozitivul master (microcontroler) și dispozitivul slave (microcircuitul MAX7219).

Microcircuitul este utilizat într-o conexiune standard, de la componentele externe este nevoie doar de un rezistor care setează curentul prin segmente, o diodă de protecție pentru alimentarea cu energie și un condensator de filtrare pentru alimentarea cu energie.

Datele sunt transferate către microcircuit în pachete de 16 biți (doi octeți), care sunt plasate în registrul de schimbare încorporat pe 16 biți pe fiecare margine ascendentă a semnalului CLK. Vom desemna un pachet de 16 biți D0-D15, unde biții D0-D7 conțin date, D8-D11 conțin adresa registrului, biții D12-D15 nu contează. Bitul D15 este cel mai semnificativ bit și este primul bit primit. Deși microcircuitul este capabil să conducă opt indicatori, vom lua în considerare lucrul doar cu patru. Acestea sunt controlate la ieșirile DIG0 - DIG3, situate în secvența de la dreapta la stânga, adresele de 4 biți (D8-D11) care le corespund sunt 0x01, 0x02, 0x03 și 0x04 (format hexazecimal). Registrul de cifre este implementat pe baza memoriei RAM cu o organizație de 8 × 8 și este direct adresabil, astfel încât fiecare cifră individuală de pe afișaj să poată fi actualizată în orice moment. Următorul tabel listează cifrele adresabile și registrele de control pentru MAX7219.

Inregistreaza-te

Adresa

Valoarea HEX

Fără operație

Mod de decodare

Numărul de indicatori

Închide

Testul indicatorului

Registre de control

Cipul MAX1792 are 5 registre de control: Decode-Mode, Intensity, Scan Limit, Shutdown, Display Test.

Pornirea și oprirea microcircuitului

Când puterea este aplicată microcircuitului, toate registrele sunt șterse și intră în modul Oprire. În acest mod, afișajul este dezactivat. Pentru a trece la funcționarea normală, setați bitul D0 al registrului de oprire (adresa 0Сh). Acest bit poate fi șters oricând pentru a opri șoferul, păstrând în același timp toate registrele neschimbate. Acest mod poate fi folosit pentru a economisi energie sau în modul de semnalizare prin intermitentul indicatorului (activare și dezactivare secvențială a modului de închidere).

Transferul microcircuitului în modul Oprire se efectuează prin transmiterea secvențială a adresei (0Ch) și a datelor (00h), iar transferul 0Ch (adresă) și apoi 01h (date) revine la funcționarea normală.

Mod de decodare

Cu registrul de selectare a modului de decodare (adresa 09h), puteți utiliza codificarea BCD B decodare (caractere afișate 0-9, E, H, L, P, -) sau fără decodificare pentru fiecare cifră. Fiecare bit din registru corespunde unei cifre, setarea unei unități logice corespunde activării decodorului pentru acest bit, setarea 0 - decodorul este exclus. Dacă se folosește un decodor BCD, atunci este luată în considerare doar cea mai puțin semnificativă informație din registrele de cifre (D3-D0), biții D4-D6 sunt ignorați, bitul D7 nu depinde de decodorul BCD și este responsabil pentru activarea punctului zecimal pe indicator dacă D7 \u003d 1. De exemplu, când octeții 02h și 05h sunt trimiși secvențial, indicatorul DIG1 (a doua cifră din dreapta) va afișa numărul 5. În mod similar, atunci când sunt trimise 01h și 89h, indicatorul DIG0 va afișa numărul 9 cu punctul zecimal activat . Tabelul de mai jos oferă o listă completă a caracterelor afișate atunci când se utilizează cipul decodor BCD.

Simbol

Date din registre

Segmente incluse \u003d 1

Gol

*Punctul zecimal este setat de bitul D7 \u003d 1

Când decodorul BCD este exclus din funcționare, biții de date D7-D0 corespund liniilor de segment (A-G și DP) ale indicatorului.

Controlul luminozității indicatorilor

Microcircuitul vă permite să controlați programatic luminozitatea indicatorilor prin PWM încorporat. Ieșirea PWM este controlată de butucul scăzut (D3-D0) al registrului de intensitate (adresa 0Ah), care vă permite să setați unul dintre cele 16 niveluri de luminozitate. Setând toți biții de nibble la 1 se selectează luminozitatea maximă a indicatorului.

Numărul de indicatori conectați

În registrul Scan-Limit (adresa 0Bh) este setată valoarea numărului de biți deserviți de microcircuit (1 ... 8). Pentru varianta noastră cu 4 cifre, valoarea 03h ar trebui să fie scrisă în registru.

Testul indicatorului

Registrul responsabil pentru acest mod este situat la 0Fh. Prin setarea bitului D0 în registru, utilizatorul pornește toate segmentele indicatorilor, în timp ce conținutul registrelor de control și de date nu se modifică. Pentru a dezactiva modul Display-Test, bitul D0 trebuie să fie 0.

Interfața microcontrolerului

Modulul indicator poate fi conectat la orice microcontroler care are trei linii I / O gratuite. Dacă microcontrolerul are un modul SPI hardware încorporat, atunci modulul indicator poate fi conectat ca dispozitiv slave pe magistrală. În acest caz, liniile de semnal SPI ale interfeței SDO (ieșire serială), SCLK (ceas serial) și interfața SS (selecție slave) a microcontrolerului pot fi conectate direct la pinii MOSI, CLK și CS ai microcircuitului MAX7219 (modul ), semnalul CS este activ scăzut.

Dacă microcontrolerul nu are SPI hardware, atunci interfața poate fi organizată în software. Comunicarea cu MAX7219 începe prin setarea și menținerea scăzută pe linia CS și apoi trimiterea secvențială a 16 biți de date (MSB mai întâi) pe linia MOSI pe marginea ascendentă a CLK. Când transmisia este finalizată, linia CS se ridică din nou.

În secțiunea de descărcări, utilizatorii pot descărca codul sursă al programului de testare și fișierul HEX al firmware-ului, care implementează un contor convențional pe 4 biți cu afișarea valorilor pe un modul indicator cu o interfață SPI. Microcontrolerul utilizat este, interfața este implementată în software, liniile de semnal CS, MOSI și CLK ale modulului indicator sunt conectate la porturile GP0, GP1 și respectiv GP2. Se folosește compilatorul mikroC pentru microcontrolerele PIC (), totuși codul poate fi modificat pentru alte compilatoare de nivel înalt. Microcontrolerul funcționează la o frecvență de ceas de 4 MHz de la oscilatorul RC încorporat, ieșirea MCLR este dezactivată.

Acest modul poate fi conectat și la platforma Arduino. Pentru a lucra cu acesta, aveți nevoie de biblioteca LedControl, disponibilă pentru descărcare pe site-ul web Arduino.

Descărcări

Testați codul sursă al programului și fișierul HEX pentru firmware-ul microcontrolerului -

  • NU E CORECT!!! Ar fi mai corect să numim subiectul „conectarea unei matrice LED cu un controler inteligent printr-o interfață cu fir redus”. Puteți construi singur un astfel de oraș - puneți pe indicator ce din PIC12-PIC16 cu protocolul adecvat (microLAN, SPI, I2C, rs232 sau altceva de casă - doar modul USART sincron). Acum, diferite familii de MK au divorțat în număr suficient - este timpul să treceți la lucrul cu scheme formate din mai mulți MK, fiecare dintre care își îndeplinește propria sarcină și să nu încercați să încărcați totul „pe o singură golgva”.
  • Aceasta este pentru micul articol blestemat burghez! Cipurile de la Maxim sunt prea scumpe. Există o soluție mult mai simplă - registre de deplasare seriale-paralele. Adevărat, vor fi necesare mai multe fire - comutați concluziile generale ale indicatorilor. Sau, după cum a remarcat pe bună dreptate un coleg, utilizați două MC-uri. Este încă mai ieftin decât jetoanele lui Max ... ZY Cu toate acestea, este posibil să sculptăm o schemă universală în două registre. Apoi, puteți trece cu patru fire: ceas, date, înregistrare și semn / loc. Numărul de familiaritate va fi limitat doar de mărimea registrelor.
  • Am început eu cu registrele de schimbare. Dar apoi a refuzat. Motivul este simplu. Timp semnificativ de procesare necesar pentru afișare. Pentru programe simple va face. Pe măsură ce software-ul crește, luminozitatea scade. De asemenea, curentul indicator nu poate fi mărit la valori care depășesc curentul continuu al segmentului. Programul se poate bloca. Un procesor separat nu este, de asemenea, o opțiune. Rezistențele procesorului și dimensiunile plăcii și cablajul vor costa 2/3 din costul MAX7219 pe placă. Adică afișajul pe 8 biți. În mod repetat, a părăsit Terraelectronics cu o grămadă de ceva strâns în mână. Și pentru ce ai dat 6000-10000 de lemn? Și atunci când predați dispozitivul clientului, vă amintiți și vă gândiți câte probleme m-a salvat și merită. În timp, îți vei schimba punctul de vedere.
  • Permiteți-mi să nu fiu de acord;) Setul minim pentru un indicator este de 4 poziții * 8 segmente: pic16f628a sau attiny2313 (mănâncă mult mai mult) în modul de scanare „raster”, luminozitatea nu este într-adevăr prea mare, dar detaliile sunt minime. În majoritatea soluțiilor cu un curent suficient de semnificativ al segmentelor și o tensiune crescută (+11 - +27 Volți constant nestabilizat), doar comutatoarele „superioare” creează o problemă (indiferent de ce alimentăm din + U - un segment sau un anod de matricea indicatorului). Set standard: pic16f628a / attiny2313 /, pic16f676 uln2803 tpic6b595 (hc595hc595 + uln2803) și un set de tranzistori npn (conform schemei de comutare a emițătorului) ca comutatoare „superioare” ca surse de curent active o soluție standard pe LM317TL) (LM317TL) Cu un nivel cunoscut și stabil de tensiune care alimentează anodii, calculul rezistențelor de bază ale comutatoarelor superioare este destul de simplu. Unele probleme apar atunci când se hrănește cu o tensiune constantă nestabilizată crescută ...: nebun: O soluție este posibilă cu ajutorul microcircuitelor specializate - dar acestea sunt destul de scumpe, prin urmare a fost inventat un "obstacol", a cărui viteză este suficientă, iar detaliile sunt foarte populare - un set de mai multe rezistențe, 4N33 și un puternic tranzistor npn (vezi diagrama de la linkul http://radiokot.ru/forum/download/file.php?id\u003d93485) :)
  • În unele cazuri, registrele de schimbare sunt justificate. Ei bine, nu îmi asum desenele de bani. Dacă, de exemplu, fac un teodolit electronic pentru 80. Acesta este un LCD cu patru linii pentru 1t.r. trebuie să cumpăr. Este doar păcat să pierzi timpul cu indicația. Cheile de lipit, pierderea timpului procesorului este cel mai scump. Iar clientul este de obicei pretențios. Luminozitatea ar trebui să fie normală. Da, ați uitat să calculați costul unui set de piese și nu uitați să includeți acolo diferența dintre costul PCB (va fi mai mare) și timpul de instalare. Și încă ceva. Iată specificul lucrării. De exemplu, PIC se blochează. Este posibil să înțelegem motivul. Puteți vedea cele mai recente date înainte de blocare. Iată un exemplu recent de 3 luni, un eșec foarte rar și de neînțeles în program. Nu știam unde să mă uit. Aici și degetele l-au strâns în mod specific pe muncitor. Și când am văzut ultimele date înainte de eșec, am înțeles motivul.
  • Diferența dintre echipamentele profesionale și produsele de casă pentru amatori a fost întotdeauna, este și va fi - am predat schemei dezvoltate chinezilor și o vor construi pe o „picătură” :) Primitivul LED nu este un concurent pentru un monobloc pe ecranul LCD (deși cu rare excepții). Dar pentru un exemplu de aplicație tipică a MK în indicatori detașabili, nu trebuie să mergeți departe - ar trebui să acordați atenție soluției așa-numiților registratori fiscali (afișarea clientului) - acolo, un dispozitiv poate utiliza orice opțiune ( fluorescent / LCD / LED) - a fost acceptat doar un protocol de comunicare și clientului i-a plăcut (sunt gata să stabilesc banii pentru asta) ... Ce zici de marcajul din dezvoltare pe principiul „clientul poate plăti mai mult „... Duc este cel care are o mulțime de bani gata de la firma cumpără și se îndreaptă către constructorul de locuințe fie„ din sărăcie ”, fie capricii complet, care știu cum să găsească vreun motiv pentru înșelătorie ulterioară ...: nebun: Pentru mine, ceea ce este disponibil în acest moment va face (și nu întotdeauna cel mai proaspăt - nu voi vedea ceasuri Ramtron deja în vânzare de 12 ani :)). Printre altele - de fapt, majoritatea LSI-urilor „specializate” sunt create pe baza aceluiași MC cu un program de mască. ;)


Schema de conexiune a unui indicator cu șapte segmente dintr-o cifră
Schema de conexiune a unui indicator cu șapte segmente cu mai multe cifre

Dispozitiv de afișare a informațiilor digitale. Aceasta este cea mai simplă implementare a unui indicator care poate afișa cifre arabe. Pentru a afișa litere, se utilizează indicatori mai complecși cu mai multe segmente și matrice.

După cum sugerează și numele său, este format din șapte elemente de afișare (segmente) care pot fi pornite și dezactivate separat. Includându-le în diferite combinații, puteți compune din ele imagini simplificate cu cifre arabe.
Segmentele sunt desemnate prin litere de la A la G; al optulea segment - punctul zecimal (punct zecimal, DP) pentru afișarea numerelor fracționate.
Ocazional, literele sunt afișate pe afișajul cu șapte segmente.

Sunt disponibile în diferite culori, de obicei alb, roșu, verde, galben și albastru. În plus, pot fi de diferite dimensiuni.

De asemenea, indicatorul LED poate fi cu o singură cifră (ca în imaginea de mai sus) și cu mai multe cifre. În principal, în practică, se utilizează indicatori LED cu una, două, trei și patru cifre:

În plus față de zece cifre, afișajele cu șapte segmente sunt capabile să afișeze litere. Dar doar câteva dintre litere au o reprezentare intuitivă în șapte segmente.
Latină: majuscule A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, minuscule a, b, c, d, e, g, h, i, n, o, q, r, t, u.
În chirilică: A, B, C, D, d, E, U, H, O, o, P, n, P, S, s, U, H, Y (două cifre), L, E / Z.
Prin urmare, indicatorii cu șapte segmente sunt utilizați numai pentru afișarea celor mai simple mesaje.

Afișajul LED cu 7 segmente poate afișa 128 de caractere:

Un afișaj tipic cu LED are nouă cabluri: unul merge la catodele tuturor segmentelor, iar celălalt opt \u200b\u200bla anodul fiecărui segment. Acest circuit se numește "Circuit catodic comun", există și scheme cu anod comun (atunci este adevărat opusul). Adesea nu fac una, ci două concluzii comune la capete diferite ale bazei - acest lucru simplifică cablajul fără a crește dimensiunile. Există și așa-numitele „universale”, dar eu personal nu am întâlnit asemenea. În plus, există indicatori cu un registru de schimbare încorporat, ceea ce reduce numărul de pini ai portului microcontrolerului implicați, dar sunt mult mai scumpi și sunt folosiți rar în practică. Și întrucât imensitatea nu poate fi înțeleasă, nu vom lua în considerare astfel de indicatori pentru moment (și există, de asemenea, indicatori cu un număr mult mai mare de segmente, cei matriciali).

Indicatoare LED cu mai multe cifre de multe ori funcționează conform principiului dinamic: pinii segmentelor cu același nume al tuturor cifrelor sunt conectați împreună. Pentru a afișa informații despre un astfel de indicator, microcircuitul de comandă trebuie să furnizeze ciclic curent la bornele comune ale tuturor descărcărilor, în timp ce curentul este furnizat la bornele segmentului în funcție de faptul dacă acest segment este aprins într-o descărcare dată.

Conectarea unui indicator cu șapte segmente de o cifră la un microcontroler

Diagrama de mai jos arată cum este conectat un indicator de șapte segmente dintr-o cifră la microcontroler.
Trebuie avut în vedere faptul că dacă indicatorul cu CATODA GENERALĂ, atunci pinul său comun este conectat la "Pământ", iar segmentele se aprind prin hrănire unitate logică la pinul portului.
Dacă indicatorul cu ANOD COMUN, atunci firul său comun este alimentat "un plus" tensiune, iar aprinderea segmentelor are loc prin transferul ieșirii portului în stare zero logic.

Indicarea într-un indicator LED de o cifră se realizează prin alimentarea codului binar al cifrei corespunzătoare a nivelului logic corespunzător pinilor portului microcontrolerului (pentru indicatori cu OK - unități logice, pentru indicatori cu OA - zerouri logice).

Rezistoare de limitare a curentului poate fi sau nu prezent în schemă. Totul depinde de tensiunea de alimentare furnizată indicatorului și de caracteristicile tehnice ale indicatorilor. Dacă, de exemplu, tensiunea furnizată segmentelor este de 5 volți și sunt proiectate pentru o tensiune de funcționare de 2 volți, atunci trebuie instalate rezistențe de limitare a curentului (pentru a limita curentul prin ele pentru o tensiune de alimentare crescută și nu pentru a arde nu numai indicatorul, ci și portul microcontrolerului).
Este foarte ușor să calculați valoarea rezistențelor care limitează curentul, conform formulei bunicului Ohm.
De exemplu, caracteristicile indicatorului sunt următoarele (preluate din foaia tehnică):
- tensiune de funcționare - 2 volți
- curent de funcționare - 10 mA (\u003d 0,01 A)
- tensiune de alimentare 5 volți
Formula de calcul:
R \u003d U / I (toate valorile din această formulă trebuie să fie în ohmi, volți și amperi)
R \u003d (tensiune de alimentare - tensiune de funcționare) / curent de funcționare
R \u003d (5-2) / 0,01 \u003d 300 Ohm

Schema de conectare a unui indicator LED cu șapte segmente din mai multe cifre practic la fel ca atunci când conectați un indicator de o cifră. Singurul lucru este că tranzistoarele de control sunt adăugate în catodii (anodi) ai indicatorilor:

Nu este prezentat în diagramă, dar între bazele tranzistoarelor și terminalele portului microcontrolerului, este necesar să se includă rezistențe, a căror rezistență depinde de tipul tranzistorului (valorile rezistenței sunt calculate, dar dvs. poate încerca, de asemenea, să utilizeze rezistențe cu o valoare nominală de 5-10 kOhm).

Indicarea prin descărcare se efectuează într-un mod dinamic:
- codul binar al cifrei corespunzătoare este setat la ieșirile portului PB pentru 1 bit, apoi se aplică un nivel logic tranzistorului de control al primului bit
- codul binar al cifrei corespunzătoare este setat la ieșirile portului PB pentru 2 cifre, apoi un nivel logic este alimentat la tranzistorul de control al celei de-a doua cifre
- codul binar al cifrei corespunzătoare este setat la ieșirile portului PB pentru 3 cifre, apoi un nivel logic este alimentat la tranzistorul de control al celei de-a treia cifre
- deci într-un cerc
În acest caz, trebuie să se țină cont de:
- pentru indicatori cu O.K se aplică o structură de tranzistor de control NPN (controlat de unitate logică)
- pentru indicator cu OA - structura tranzistorului PNP (condus de zero logic)