Indikator sa sedam segmenata. Arduino i četvorocifreni sedmosegmentni indikator LED 4-cifreni indikator

20.07.2023

Povežimo sedmosegment LED indikator na Arduino ploču i naučite kako je kontrolirati koristeći Led4Digits.h biblioteku.

U prethodnoj lekciji su detaljno opisani mikrokontroleri. Povežimo takav indikator na Arduino ploču.

Dijagram za povezivanje indikatora na Arduino ploču izgleda ovako.

Sastavio sam ga na ploči.

Za upravljanje indikatorima, napisao sam Led4Digits.h biblioteku:

I plati.

Biblioteka vam omogućava da upravljate indikatorima od sedam segmenata:

  • do četiri cifre veličine;
  • sa bilo kojom varijantom polariteta kontrolnih impulsa (sve);
  • radi u paralelnom procesu;
  • omogućava vam da prikažete na indikatoru:
    • segmenti svake kategorije;
    • znamenku svake cifre;
    • cijeli broj 0 ... 9999;
  • za izlaz cijelog broja može se specificirati broj cifara;
  • Postoji mod za potiskivanje beznačajnih cifara.

Led4Digits.h biblioteku možete preuzeti sa ovog linka:

I plati. Samo 25 rub. mjesečno za pristup svim resursima stranice!

Kako instalirati je napisano u .

Neću dati izvorne tekstove. Možete ih potražiti u datotekama biblioteke. Kao i uvek, ima dosta komentara. Detaljno ću opisati, uz primjere, kako koristiti biblioteku.

LED kontrolna biblioteka za Arduino Led4Digits.

Evo opisa klase. Dao sam samo javne metode i svojstva.

klasa Led4Digits (
javno:
bajt cifra; // kontrolni kodovi bitnog segmenta
void regen(); // regeneracije, metoda se mora redovno pozivati
void tetradToSegCod(byte dig, byte tetrad); // pretvaranje tetrade u segmentne kodove
boolean print(vrijednost int bez predznaka, broj cifara bajta, prazan bajt); // cjelobrojni izlaz



} ;

Constructor.

Led4Digits (tip bajtaLed, bajt digitPin0, bajt digitPin1, bajt digitPin2, bajt digitPin3,
bajt segPinA, bajt segPinB, bajt segPinC, bajt segPinD,
bajt segPinE, bajt segPinF, bajt segPinG, bajt segPinH);

typeLed Postavlja polaritet kontrolnih impulsa za signale odabira bitova i segmenata. Podržava sve šeme povezivanja ().

typeLed Izbor kategorije Odabir segmenta Vrsta kola
0 -_- -_- Zajednička anoda sa tipkama za odabir pražnjenja
1 _-_ -_- Zajednička anoda
2 -_- _-_ Zajednička katoda
3 _-_ _-_ Zajednička katoda sa tipkama za odabir pražnjenja

digitPin0...digitPin3– izlazi za izbor cifara. Ako je digitPin = 255, cifra je onemogućena. Ovo vam omogućava da povežete indikatore sa manje cifara. digitPin0 – donja (desna) cifra.

segPinA...segPinH– segmentni kontrolni izlazi.

na primjer,

znači: indikator tip 1; ispusni izlazi 5,4,3,2; izlazi segmenata 6,7,8,9,10,11,12,13.

void regen() metoda

Metoda se mora redovno pozivati ​​u paralelnom procesu. Regeneriše sliku na indikatorima. Vrijeme ciklusa regeneracije jednako je periodu poziva metode pomnoženom sa brojem bitova.

na primjer,

// rukovalac prekida 2 ms
void timerInterrupt() (
disp.regen(); // regeneracija indikatora
}

Niz cifara bajtova

Sadrži stanje segmenata. cifra je najmanji bitni bit, najmanji bitni bit cifre je segment “A” najmanjeg bita. Stanje bita 1 znači da je segment upaljen.

na primjer,

cifra = B0000101;

znači da u drugoj cifri svijetle segmenti “A” i “C”.

Primjer programa koji uzastopno svijetli sve segmente svake cifre.

// trkaći segmenti
#include
#include

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

void setup() (
prekid tajmera 2 ms
MsTimer2::start(); // prekid prekida
}

void loop() (
za (int i = 0; i< 32; i++) {
if (i == 0) disp.digit= 1;
inače if (i == 8) disp.digit= 1;
inače if (i == 16) disp.digit= 1;
inače if (i == 24) disp.digit= 1;
drugo(
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
}
kašnjenje (250);
}
}

//rukovalac prekida 2 ms
void timerInterrupt() (
disp.regen(); // regeneracija indikatora
}

U nizu cifara, 1 se pomera i indikatori to prikazuju.

Metoda void tetradToSegCod(byte dig, byte tetrad)

Metoda vam omogućava da prikažete brojeve i slova heksadecimalnog koda u pojedinačnim znamenkama. ima argumente:

  • dig – cifra broj 0 ... 3;
  • tetrad – decimalni kod znakova. Kod 0 će prikazati broj "0", kod 1 - broj "1", kod 14 - slovo "E".

na primjer,

tetrada(2, 7);

će prikazati broj “7” u trećoj cifri.

Primjer programa koji mijenja znakove u svakoj cifri redom.

// brojevi jedan po jedan
#include
#include

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

void setup() (
MsTimer2::set(2, timerInterrupt); // prekid tajmera 2 ms
MsTimer2::start(); // prekid prekida
}

void loop() (
za (int i = 0; i< 64; i++) {
disp.tetradToSegCod(i>>4, i);
kašnjenje (250);
}
}

// rukovalac prekida 2 ms
void timerInterrupt() (
disp.regen(); // regeneracija indikatora
}

Metoda boolean print (unsigned int vrijednost, bajt digitNum, bajt prazan)

Metoda prikazuje cijeli broj na indikatorima. Konvertuje binarni broj u BCD za svaku cifru. ima argumente:

  • vrijednost – broj koji se prikazuje na indikatoru.
  • digitNum – broj cifara za broj. Ovo ne treba brkati sa brojem cifara indikatora. Možda ćete htjeti prikazati broj na 2 cifre i prikazati znakove na druge dvije pomoću cifre.
  • prazno – znak potiskivanja beznačajnih cifara. blank=0 znači da broj treba biti prikazan sa svim nulama. Broj "7" će izgledati kao "0007". Ako se blank razlikuje od 0, beznačajne nule će biti potisnute.

Ako vrijednost broja premašuje dozvoljeni broj za odabrani broj cifara (digitNum), funkcija će prikazati “---” na indikatoru i vratiti netačno.

Primjer programa za izlaz brojeva.

// izlazni broj
#include
#include

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

void setup() (
MsTimer2::set(2, timerInterrupt); // prekid tajmera 2 ms
MsTimer2::start(); // prekid prekida
}

void loop() (
za (int i = 0; i< 12000; i++) {
disp.print(i, 4, 1);
kašnjenje (50);
}
}

// rukovalac prekida 2 ms
void timerInterrupt() (
disp.regen(); // regeneracija indikatora
}

Posljednje dvije metode ne mijenjaju stanje segmenta "H" - decimalne točke. Za promjenu stanja točke možete koristiti naredbe:

cifra |= 0x80; // upaliti decimalni zarez
cifra &= 0x7f; // ugasiti decimalni zarez

Izlaz u indikatore negativnih brojeva (int).

Negativni brojevi se mogu ispisati na sljedeći način:

  • Provjerite znak broja.
  • Ako je broj negativan, ispišite znak minus na najznačajnijoj cifri i promijenite predznak broja u pozitivan u funkciji print().
  • Ako je broj pozitivan, isključite predznak i ispišite broj pomoću funkcije print().

Evo programa koji demonstrira ovu metodu. Izlazi brojeve od -999 do 999.

// izlaz negativnih brojeva
#include
#include

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

void setup() (
MsTimer2::set(2, timerInterrupt); // prekid tajmera 2 ms
MsTimer2::start(); // prekid prekida
}

void loop() (

za (int i = -999; i< 1000; i++) {

ako (i< 0) {
// broj je negativan
disp.digit= B01000000; // znak -
disp.print(i * -1, 3, 1);
}
drugo(
disp.digit= B00000000; // brisanje znaka
disp.print(i, 3, 1);
}

kašnjenje (50);
}
}

// rukovalac prekida 2 ms
void timerInterrupt() (
disp.regen(); // regeneracija indikatora
}

Izlaz u indikatore razlomaka, float format.

Postoji mnogo načina za prikaz brojeva s pomičnim zarezom (floats) koristeći standardne funkcije jezika C. Ovo je, prije svega, funkcija sprint(). Radi vrlo sporo, zahtijeva dodatne konverzije znakovnih kodova u binarne decimalne kodove, potrebno je izdvojiti tačku iz niza. Isti problemi sa drugim funkcijama.

Koristim drugačiju metodu prikaza vrijednosti varijabli float na indikatorima. Metoda je jednostavna, pouzdana, brza. Svodi se na sljedeće operacije:

  • Broj s pomičnim zarezom se množi sa 10 na stepen koji odgovara potrebnom broju decimalnih mjesta. Ako trebate prikazati 1 decimalno mjesto na indikatorima, pomnožite sa 10, ako 2, zatim pomnožite sa 100, 3 decimalna mjesta sa 1000.
  • Zatim se broj s pokretnim zarezom eksplicitno pretvara u cijeli broj (int) i prikazuje na indikatorima pomoću funkcije print().
  • U traženu cifru stavlja se tačka.

Na primjer, sljedeći redovi će dati float varijablu sa dva decimalna mjesta za LED diode od sedam segmenata.

float x = 2,12345;

disp.digit |= 0x80; //

Pomnožimo broj sa 100, a stavljanjem tačke u treću cifru rezultat podijelimo sa 100.

Evo programa koji prikazuje brojeve s pokretnim zarezom od 0,00 do 99,99 na indikatorima.

// izlaz s pomičnim zarezom
#include
#include

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

void setup() (
MsTimer2::set(2, timerInterrupt); // prekid tajmera 2 ms
MsTimer2::start(); // prekid prekida
}

void loop() (
float x = 0;

za (int i = 0; i< 10000; i++) {
x += 0,01;

disp.print((int)(x * 100.), 4, 1);
disp.digit |= 0x80; // osvetli tačku trećeg nivoa

kašnjenje (50);
}
}

//rukovalac prekida 2 ms
void timerInterrupt() (
disp.regen(); // regeneracija indikatora
}

Kao što vidite, biblioteka Led4Digits.h uvelike pojednostavljuje rad sa sedmosegmentnim LED indikatorima koji su povezani na Arduino ploču. Nisam pronašao analog takve biblioteke.

Postoje biblioteke za rad sa LED displejima preko registra pomeranja. Neko mi je napisao da su pronašli biblioteku koja radi sa LED displejom direktno povezanim na Arduino ploču. Ali kada ga koristite, cifre indikatora svijetle neravnomjerno i namiguju.

Za razliku od svojih analoga, biblioteka Led4Digits.h:

  • Radi kao paralelni proces. U glavnoj petlji program učitava podatke u određene varijable, koje se automatski prikazuju na ekranu. Izlaz informacija i regeneracija indikatora se dešavaju u prekidu tajmera, nevidljivom glavnom programu.
  • Brojevi na displeju svetle ravnomerno, bez treptanja. Ovo svojstvo je osigurano činjenicom da se regeneracija događa u ciklusu koji je striktno definiran prekidom tajmera.
  • Biblioteka ima kompaktan kod, brzo se izvršava i minimalno učitava kontroler.

U sljedećoj lekciji ćemo istovremeno povezati LED indikator i matricu gumba na Arduino ploču. Hajde da napišemo biblioteku za takav dizajn.

Kategorija: . Možete ga označiti.


Dijagram povezivanja jednocifrenog sedmosegmentnog indikatora
Dijagram povezivanja za višecifreni sedmosegmentni indikator

Uređaj za digitalni prikaz informacija. Ovo je najjednostavnija implementacija indikatora koji može prikazati arapske brojeve. Za prikaz slova koriste se složeniji višesegmentni i matrični indikatori.

Kao što mu ime kaže, sastoji se od sedam displejnih elemenata (segmenata) koji se zasebno uključuju i isključuju. Uključujući ih u različite kombinacije, mogu se koristiti za kreiranje pojednostavljenih slika arapskih brojeva.
Segmenti su označeni slovima od A do G; osmi segment - decimalni zarez (decimalni zarez, DP), dizajniran za prikaz razlomaka.
Povremeno se na indikatoru sa sedam segmenata prikazuju slova.

Dolaze u raznim bojama, obično bijeloj, crvenoj, zelenoj, žutoj i plavoj. Osim toga, mogu biti različitih veličina.

Takođe, LED indikator može biti jednocifreni (kao na slici iznad) ili višecifreni. U osnovi se u praksi koriste jedno-, dvo-, tro- i četverocifreni LED indikatori:

Pored deset cifara, indikatori sa sedam segmenata mogu da prikazuju slova. Ali malo slova ima intuitivni prikaz od sedam segmenata.
Na latinskom: velika A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, mala slova a, b, c, d, e, g , h, i, n, o, q, r, t, u.
Na ćirilici: A, B, V, G, g, E, i, N, O, o, P, p, R, S, s, U, Ch, Y (dvije cifre), b, E/Z.
Stoga se indikatori sa sedam segmenata koriste samo za prikaz jednostavnih poruka.

Ukupno, LED indikator od sedam segmenata može prikazati 128 znakova:

Tipičan LED indikator ima devet izvoda: jedan ide na katode svih segmenata, a ostalih osam ide na anodu svakog segmenta. Ova šema se zove "kolo zajedničke katode", postoje i šeme sa zajedničkom anodom(onda je obrnuto). Često se ne jedan, već dva uobičajena terminala izrađuju na različitim krajevima baze - to pojednostavljuje ožičenje bez povećanja dimenzija. Ima i takozvanih „univerzalnih“, ali lično se sa takvima nisam susreo. Osim toga, postoje indikatori sa ugrađenim registrom pomaka, što uvelike smanjuje broj uključenih pinova porta mikrokontrolera, ali su mnogo skuplji i rijetko se koriste u praksi. A kako se neizmjernost ne može dokučiti, takve indikatore za sada nećemo razmatrati (ali ima i indikatora sa mnogo većim brojem segmenata, matričnih).

Višecifreni LED indikatoričesto rade na dinamičkom principu: izlazi segmenata istog imena svih cifara su povezani zajedno. Da bi se prikazale informacije o takvom indikatoru, upravljačko mikrokolo mora ciklički dovoditi struju do zajedničkih terminala svih cifara, dok se struja dovodi do terminala segmenta u zavisnosti od toga da li je dati segment upaljen u datoj cifri.

Povezivanje jednocifrenog sedmosegmentnog indikatora na mikrokontroler

Dijagram ispod pokazuje kako priključen je jednocifreni indikator od sedam segmenata na mikrokontroler.
Treba uzeti u obzir da ako indikator sa COMMON CATHODE, tada je njegov zajednički izlaz povezan na "zemlja", a segmenti se zapaljuju hranjenjem logička jedinica na izlaz porta.
Ako je indikator COMMON ANODE, zatim se napaja na svoju zajedničku žicu "plus" napon, a segmenti se pale prebacivanjem izlaza porta u stanje logička nula.

Indikacija u jednocifrenom LED indikatoru se vrši primjenom binarnog koda na pinove porta mikrokontrolera odgovarajuće cifre odgovarajućeg logičkog nivoa (za indikatore sa OK - logičke, za indikatore sa OA - logičke nule).

Otpornici za ograničavanje struje može ili ne mora biti prisutan na dijagramu. Sve ovisi o naponu napajanja koji se dovodi do indikatora i tehničkim karakteristikama indikatora. Ako je, na primjer, napon koji se dovodi do segmenata 5 volti, a oni su dizajnirani za radni napon od 2 volta, tada se moraju ugraditi otpornici koji ograničavaju struju (kako bi se ograničila struja kroz njih radi povećanog napona napajanja i ne izgarala ne samo indikator, već i port mikrokontrolera).
Vrlo je lako izračunati vrijednost otpornika koji ograničavaju struju, koristeći djedovu formulu Ohm.
Na primjer, karakteristike indikatora su sljedeće (preuzete iz tablice):
— radni napon — 2 volta
— radna struja — 10 mA (=0,01 A)
— napon napajanja 5 volti
Formula za obračun:
R= U/I (sve vrijednosti u ovoj formuli moraju biti u omima, voltima i amperima)
R= (napon napajanja - radni napon)/radna struja
R= (5-2)/0,01 = 300 Ohm

Šema povezivanja za višecifreni LED indikator sa sedam segmenata U osnovi isto kao i kod povezivanja jednocifrenog indikatora. Jedina stvar je da se kontrolni tranzistori dodaju u katode (anoda) indikatora:

Nije prikazano na dijagramu, ali između baza tranzistora i pinova priključka mikrokontrolera potrebno je uključiti otpornike čiji otpor ovisi o vrsti tranzistora (vrijednosti otpornika se izračunavaju, ali također možete pokušati koristiti otpornike nominalne vrijednosti 5-10 kOhm).

Indikacija pražnjenjima se vrši dinamički:
— binarni kod odgovarajuće cifre se postavlja na izlazima PB porta za 1. znamenku, zatim se logički nivo primjenjuje na upravljački tranzistor prve cifre
— binarni kod odgovarajuće cifre se postavlja na izlazima PB porta za 2. znamenku, zatim se logički nivo primjenjuje na upravljački tranzistor druge cifre
— binarni kod odgovarajuće cifre se postavlja na izlazima PB porta za 3. znamenku, zatim se logički nivo primjenjuje na upravljački tranzistor treće cifre
- tako u krug
U ovom slučaju potrebno je uzeti u obzir:
— za indikatore sa OK koristi se struktura upravljačkog tranzistora NPN(upravlja logičkom jedinicom)
- za indikator sa OA- strukturni tranzistor PNP(kontrolisano logičkom nulom)

Sigurno ste već vidjeli indikatore "osam". Ovo je LED indikator od sedam segmenata, koji služi za prikaz brojeva od 0 do 9, kao i decimalne zapete ( D.P.- decimalni zarez) ili zarez.

Strukturno, ovaj proizvod je sklop LED dioda. Svaka LED dioda u sklopu osvjetljava svoj segment znaka.

U zavisnosti od modela, sklop se može sastojati od 1 - 4 grupe od sedam segmenata. Na primjer, indikator ALS333B1 se sastoji od jedne grupe od sedam segmenata, koja može prikazati samo jednu znamenku od 0 do 9.

Ali KEM-5162AS LED indikator već ima dvije grupe od sedam segmenata. Dvocifren je. Sljedeća fotografija prikazuje različite LED indikatore od sedam segmenata.

Tu su i indikatori sa 4 grupe od sedam segmenata - četvorocifreni (na slici - FYQ-5641BSR-11). Mogu se koristiti u domaćim elektronskim satovima.

Kako su indikatori sa sedam segmenata prikazani na dijagramima?

Budući da je sedmosegmentni indikator kombinovani elektronski uređaj, njegova slika na dijagramima malo se razlikuje od njegovog izgleda.

Treba samo obratiti pažnju na činjenicu da svaki pin odgovara određenom segmentu znaka na koji je povezan. Postoji i jedan ili više terminala zajedničke katode ili anode, ovisno o modelu uređaja.

Karakteristike indikatora sa sedam segmenata.

Uprkos prividnoj jednostavnosti ovog dijela, on također ima svoje posebnosti.

Prvo, sedmosegmentni LED indikatori dolaze sa zajedničkom anodom i zajedničkom katodom. Ovu značajku treba uzeti u obzir prilikom kupovine za domaći dizajn ili uređaj.

Evo, na primjer, pinout 4-cifrenog indikatora koji nam je već poznat FYQ-5641BSR-11.

Kao što vidite, anode LED dioda svake znamenke se kombinuju i izlaze na poseban pin. Katode LED dioda koje pripadaju segmentu znakova (npr. G), povezani zajedno. Mnogo ovisi o tome kakav dijagram povezivanja ima indikator (sa zajedničkom anodom ili katodom). Ako pogledate dijagrame sklopova uređaja koji koriste indikatore od sedam segmenata, bit će jasno zašto je to toliko važno.

Pored malih indikatora, postoje veliki, pa čak i vrlo veliki. Mogu se vidjeti na javnim mjestima, obično u obliku zidnih satova, termometara i informatora.

Da bi se povećala veličina brojeva na ekranu i istovremeno održala dovoljna svjetlina svakog segmenta, koristi se nekoliko LED dioda, povezanih u seriju. Evo primjera takvog indikatora - staje na dlan. Ovo FYS-23011-BUB-21.

Jedan segment sastoji se od 4 LED diode povezane u seriju.

Da biste osvijetlili jedan od segmenata (A, B, C, D, E, F ili G), potrebno je na njega primijeniti napon od 11,2 volta (2,8 V za svaku LED diodu). Možete napraviti manje, na primjer, 10V, ali će se i svjetlina smanjiti. Izuzetak je decimalni zarez (DP), njegov segment se sastoji od dvije LED diode. Potrebno mu je samo 5 - 5,6 volti.

Dvobojni indikatori se također nalaze u prirodi. Na primjer, crvene i zelene LED diode su ugrađene u njih. Ispostavilo se da postoje, takoreći, dva indikatora ugrađena u kućište, ali sa LED diodama različitih boja. Ako dovedete napon na oba LED kruga, možete dobiti žuti sjaj iz segmenata. Evo dijagrama ožičenja za jedan od ovih dvobojnih indikatora (SBA-15-11EGWA).

Ako spojite pinove 1 ( RED) i 5 ( ZELENI) na “+” napajanje preko ključnih tranzistora, možete promijeniti boju prikazanih brojeva iz crvene u zelenu. A ako spojite pinove 1 i 5 u isto vrijeme, boja sjaja će biti narandžasta. Ovako se možete igrati sa indikatorima.

Upravljanje indikatorima od sedam segmenata.

Za kontrolu sedmosegmentnih indikatora u digitalnim uređajima koriste se pomični registri i dekoderi. Na primjer, široko korišten dekoder za kontrolu indikatora serije ALS333 i ALS324 je mikro krug K514ID2 ili K176ID2. Evo primjera.

A za kontrolu modernih uvezenih indikatora obično se koriste registri pomaka 74HC595. U teoriji, segmenti displeja se mogu kontrolisati direktno sa izlaza mikrokontrolera. Ali takav sklop se rijetko koristi, jer to zahtijeva korištenje dosta pinova samog mikrokontrolera. Stoga se u tu svrhu koriste pomačni registri. Osim toga, struja koju troše LED diode segmenta znaka može biti veća od struje koju može pružiti običan izlaz mikrokontrolera.

Za kontrolu velikih indikatora od sedam segmenata, kao što je FYS-23011-BUB-21, koriste se specijalizovani drajveri, na primjer, mikrokolo MBI5026.

Šta se nalazi unutar indikatora od sedam segmenata?

Pa, nešto ukusno. Nijedan inženjer elektronike ne bi bio takav da ga ne zanimaju "unutrašnjosti" radio komponenti. Ovo je ono što se nalazi unutar indikatora ALS324B1.

Crni kvadrati na bazi su LED kristali. Ovdje možete vidjeti zlatne skakače koji spajaju kristal na jedan od terminala. Nažalost, ovaj indikator više neće raditi, jer su ti isti džamperi otkinuti. Ali možemo vidjeti šta se krije iza dekorativnog panela semafora.

U današnjem članku ćemo govoriti o 7-segmentnim indikatorima i kako se “sprijateljiti” sa Arduinom. Postoji nekoliko opcija. Najlakše je, naravno, otići i kupite gotov indikator sa integrisanim štitom (tako se zove odgovarajuća kartica), ali ne tražimo lake puteve, pa ćemo krenuti malo težim putem. Početnici - ne brinite, ovaj članak, kao i moji prethodni članci ( I ) samo za tebe. Neka gurui pišu za iste iskusne gurue, a ja sam početnik - pišem za početnike.

Zašto indikator sa 7 segmenata? Na kraju krajeva, ima toliko različitih ekrana, sa velikim brojem znakova, linija, raznih dijagonala i rezolucija, crno-bijelih i kolor, od kojih najpovoljniji koštaju par dolara... A evo: "stari" jedan, nečuveno jednostavan, ali zahteva ogroman broj pinova 7-segmentni indikator, ali ipak ovaj „stari“ takođe ima prednost. Činjenica je da pomoću ovdje navedenih skica možete oživjeti ne samo indikator s visinom znamenke od 14 mm, već i ozbiljnije (iako domaće) projekte, a brojke metra u ovom slučaju su daleko od granice. Ovo možda i nije toliko interesantno za stanovnike glavnih gradova, ali stanovništvo Novokatsapetovke ili Nizhnyaya Kedrovka će biti veoma srećno ako se u klubu ili seoskom savetu pojavi sat koji takođe može da prikaže datum i temperaturu, a oni će pričati o kreatoru ovog sata veoma dugo. Ali takvi satovi su tema zasebnog članka: posjetitelji će poželjeti - Pisaću. Sve gore napisano može se smatrati uvodom. Kao i moj prošli članak, i ovaj će se članak sastojati od dijelova, ovaj put iz dva. U prvom dijelu ćemo jednostavno “upravljati” indikatorom, a u drugom ćemo ga pokušati prilagoditi za nešto barem malo korisno. Pa da nastavimo:

Prvi dio. Eksperimentalno - edukativno

Osnova za ovaj projekat je ARDUINO UNO, koji nam je već dobro poznat iz prethodnih članaka. Da vas podsjetim da je najlakši način da ga kupite ovdje: ili ovdje: , osim toga, trebat će vam 4-cifreni, 7-segmentni indikator. Ja imam, posebno, GNQ-5641BG-11. Zašto ovaj? Da, jednostavno zato što sam ga prije 5 godina kupio greškom, bio sam previše lijen da ga promijenim, tako da je sve ovo vrijeme ležao i čekao na krilima. Mislim da će to učiniti svako sa zajedničkom anodom (a sa zajedničkom katodom je to moguće, ali morat ćete invertirati podatke niza i druge vrijednosti portova - odnosno promijeniti ih u suprotne), sve dok nije previše moćan da ne bi spalio Arduino. Uz to, 4 strujno ograničavajuća otpornika, cca 100 Ohma svaki, i komad kabla (meni je bilo dovoljno 10 cm) za 12 pinova (jezgri) mogu se "otkinuti" od šireg, što sam i uradio. Ili ih čak možete lemiti odvojenim žicama, neće biti problema. Trebat će vam i igle za dasku (11 komada), iako ako budete pažljivi možete i bez njih. Skica indikatora se može vidjeti na slici 1, a njegov dijagram na slici 2. Također ću napomenuti da je bolje napajati ne više od 2,1V na svaki segment ovog indikatora (ograničeno otpornicima od 100 oma), i u ovom slučaju neće trošiti više od 20 mA. Ako zasvetli broj “8”, potrošnja neće prelaziti 7x20=140 mA, što je sasvim prihvatljivo za Arduino izlaze. Radoznali čitatelj će postaviti pitanje: "Ali 4 pražnjenja od po 140 mA svako je već 4x140 = 560 mA, a ovo je već previše!" Ja ću odgovoriti - ostaće 140 Kako? Čitajte dalje! Položaj pinova na indikatoru može se vidjeti na slici 3. I spajamo prema tabeli 1.


Rice. 1 - Skica indikatora


Rice. 2 - Krug indikatora


Rice. 3 - Lokacija pina

Tabela 1

Pin Arduino Uno

Indikator pin

Napomena

Segment G

Segment F

Segment E

Segment D

Segment C

Segment B

Segment A

Zajedničku anodu segmenta br. 1 spojiti preko otpornika od 100 Ohma.

Zajedničku anodu segmenta br. 2 spojiti preko otpornika od 100 Ohma.

Zajedničku anodu segmenta br. 3 spojiti preko otpornika od 100 Ohma.

Zajedničku anodu segmenta br. 6 spojiti preko otpornika od 100 Ohma.



Ispunjavamo jednostavnu skicu, koja je jednostavna „tabela brojanja“ od 0 do 9:


A sada malo pojašnjenja. DDRD je registar porta D (DDRB - respektivno, port B) iza "strašne" riječi "register" postoji samo "skrivena" funkcija koja označava da li će port nešto čitati svojim pinom (primiti informaciju) ili vice obrnuto, tamo će se moći nešto napraviti pa onda pisati (davati informacije). U ovom slučaju, linija DDRD=B11111111; označava da su svi pinovi porta D izlazni, tj. informacije će izaći iz njih. Slovo “B” znači da je binarni broj upisan u registar. Nestrpljivi čitalac će odmah upitati: „Da li je decimalno moguće!?!” Požurim da vas uvjerim da je to moguće, ali o tome nešto kasnije. Ako želimo da koristimo polovinu porta za ulaz, a pola za izlaz, mogli bismo to navesti ovako: DDRD=B11110000; jedinice pokazuju one pinove koji će dati informacije, a nule pokazuju one koji će primiti ovu informaciju. Glavna pogodnost registra takođe leži u činjenici da ne morate registrovati sve pinove 8 puta, tj. čuvamo 7 linija u programu. Pogledajmo sada sljedeću liniju:

PORTB=B001000; // postaviti pin 11 porta B visoko

PORTB je registar podataka porta B, tj. Upisivanjem broja u njega označavamo koji pin porta će imati jedinicu, a koji nulu. Uz komentar, reći ću da ako Arduino Uno uzmete na način da se vidi kontroler i digitalni pinovi na vrhu, upis u registar će biti jasan, tj. koja “nula” (ili “jedan”) odgovara kojem pinu, tj. Krajnja desna nula porta B je odgovorna za 8. pin, a krajnja lijeva je za 13. (koji ima ugrađenu LED diodu). Za port D, respektivno, desni je za pin 0, a lijevi za pin 7.
Nadam se da je nakon ovako detaljnih objašnjenja sve jasno, ali pošto je jasno, predlažem da se vratimo na decimalni brojevni sistem koji nam je poznat i voljen od djetinjstva. I još nešto - skica od 25 linija može se činiti malom, ali za početnika je ipak pomalo glomazna. Smanjit ćemo ga.

Popunimo još jednostavniju skicu, istu "tabelu brojanja":


Video 1.
Samo 11 redova! Ovo je naš način, “način za novajlije”! Napominjemo da se umjesto binarnih brojeva u registrima upisuju decimalni brojevi. Naravno, za decimalne brojeve nisu potrebna slova ispred. Mislim da ne bi škodilo staviti sve brojeve u tabele.

Tablica 2. Podudarnost prikazanog znaka sa podacima porta

Zajednička anoda

Zajednička katoda

Binarni sistem

Decimalni sistem

Binarni sistem

Decimalni sistem

Tabela 3. Korespondencija prikazane cifre sa podacima porta

Zajednička anoda

Zajednička katoda

Binarni sistem

Decimalni sistem

Binarni sistem

Decimalni sistem



Pažnja! Podaci u tablicama 2 i 3 vrijede samo kada su spojeni prema tabeli 1.
Sada učitajmo skicu sa "tabelom brojanja" od 0 do 9999:




Rice. 4 - Tablica za brojanje

Skicu u akciji možete vidjeti naVideo 2.

U ovoj skici ima više komentara nego samog koda. Ne bi trebalo biti nikakvih pitanja... Osim jedne stvari, kakav je to „ciklus treperenja“, šta, strogo govoreći, tu treperi i zašto? A postoji i neka vrsta varijable za ovo...
A poenta je u tome da su istoimeni segmenti sve četiri kategorije povezani u jednoj tački. A1, A2, A3 i A4 imaju zajedničku katodu; A1, B1,…..G1 zajednička anoda. Dakle, istovremenom primjenom "1234" na 4-cifreni indikator, dobićemo "8888" i bićemo veoma iznenađeni ovim. Da se to ne bi dogodilo, prvo morate upaliti "1" u svojoj kategoriji, zatim ga ugasiti, upaliti "2" u svojoj, itd. Ako to učinite vrlo brzo, treperenje brojeva će se spojiti, poput kadrova na filmu, a oko to praktično neće primijetiti. A maksimalna vrijednost varijable treperenja u ovom slučaju kontrolira brzinu promjene brojeva na indikatoru. Usput, zahvaljujući ovom "treperenju" maksimalna potrošnja struje je samo 140 mA, umjesto 560. Sada predlažem da pređemo na nešto korisnije.

Drugi dio. Barem malo korisno

U ovom dijelu ćemo prikazati znakove sa personalnog računara na 7-segmentni indikator pomoću ARDUINO MEGA. Zašto se odjednom pojavila ideja o "zamjeni konja na prelazu"? Dva su razloga: prvo, nikada ranije nisam razmatrao ARDUINO MEGA u svojim člancima; i drugo, u ARDUINO UNO-u još uvijek nisam shvatio kako mogu dinamički zamijeniti COM port i port D. Ali ja sam novajlija - može mi biti oprošteno. Naravno, ovaj kontroler možete kupiti ovdje: . Da bih implementirao plan, morao sam uzeti lemilicu i ponovno zalemiti kabel sa Arduino strane, a također napisati novu skicu. Kako je zalemljen kabl možete videti na slici 5. Stvar je u tome da ARDUINO MEGA i ARDUINO UNO imaju različite pinoute portova, a Mega ima mnogo više portova. Korespondencija korišćenih pinova može se videti iz tabele 4.



Rice. 5 - Novo ožičenje kablova

Tabela 4

Port Mega


Pažnja! Ova tabela vrijedi samo za ovaj projekat!

Također treba imati na umu da port C Arduino Mega "počinje" od pina 37, a zatim u opadajućem redoslijedu, a port A počinje od pina 22, a zatim u rastućem redoslijedu.



Rice. 6 - Opšti pogled



Male karakteristike implementacije: izbacit ćemo 4 znaka. Znakovi moraju biti brojevi. Ako ste unijeli “1234” i mi ćemo vidjeti “1234”, ako ste unijeli “123456” i dalje ćemo vidjeti “1234”, ako ste unijeli “ytsuk”, “fyva1234”, “otiog485909oapom” - nećemo vidjeti ništa. Ako ste unijeli “pp2345mm” vidjet ćemo “23”, tj. mali, ugrađeni "zaštićeni od grešaka".

Prava skica:



Možete vidjeti kako ovaj program radi naVideo 3.



Recenziju pripremio Pavel Sergejev

Ovaj članak nastavlja seriju mojih publikacija o organizaciji dinamičke indikacije na PIC mikrokontrolerima i LED indikatorima. Evo linkova do prethodnih postova:

Tabela rada predloženog algoritma (koristi se indikator sa zajedničkom katodom, prva kolona prikazuje izlaze registra u kombinaciji sa ciframa indikatora) prema dole prikazanom dijagramu povezivanja.

U svakom od prekida sa intervalom od 2 ms (u ovom slučaju od TMR0 tajmera) priprema se jedna faza dinamičke indikacije (DI) prema algoritmu koji se sastoji od pet faza kontrole registra i indikatora.

2. faza: Pozitivna ivica na pinu 12 registra (ST_CP) upisuje nulto stanje registra u izlaznu rezu. Ovdje i dalje, prije početka indikacije, indikator se gasi nultim potencijalom na segmentima.

3. faza: kontrolom pinova registra 14 (DS - podaci) i 11 (SH_CP - sat) upisuje se kod za upravljanje segmentima.

4. faza: sa pozitivnim padom na pinu 12 registra, podaci iz registra se upisuju u izlaznu bravu, a zbog pozitivnih nivoa na bitovima indikator ostaje isključen.

5. faza: ovdje se traženi kod isporučuje na terminale indikatorskih cifara, a zatim se javlja stvarna indikacija.

Ako krug koristi jedan 4-cifreni indikator, onda za pravilan rad mora biti postavljen na OK. Ako trebate kontrolirati 8 bitova, tada se koristi 8 portova MK-a, dok preostala 4 porta jednostavno kontroliraju bitove (u fazi 4 bi trebali imati visok nivo). Vrijedi napomenuti da je u ovom slučaju moguće koristiti indikatore i sa OK i OA, povezujući segmente ili cifre u registar, odnosno (iz razloga navedenih u nastavku, u prvom slučaju je poželjno organizirati DI segment po- segment, au drugom - bit-po-bit).

Koristeći ovu metodu, možete spojiti dva četverobitna indikatora na PIC16F676 MCU koristeći jedan pomični registar, ostavljajući pritom čak četiri slobodna porta za korištenje. Na primjer, za takvu vezu ljudi su koristili kombinaciju DI i analognih ulaznih funkcija u nekim MK portovima (po mom mišljenju, krajnje sumnjiva odluka), što je dovelo do značajne komplikacije kola i do nekih ograničenja koja su autori upozoriti o. Koristeći moj dijagram povezivanja, sve bi se riješilo jednostavno i lijepo - odvojeni ulazi, odvojene indikacije, plus još dva porta (uključujući MCLR) za tipke.

Za testiranje ove metode upravljanja, predloženo je sljedeće jednostavno kolo na PIC12F629 MCU i FYQ3641A indikatoru, koji naizmjenično prikazuje riječ "test" i broj 1234 na indikatoru.

Ovdje je odlučeno da se koristi DI segment-po-segment (u svakom trenutku se uključuje jedan segment, a na pinovima bita nalazi se kod, gdje je u svakom bitu: 0 - ako ovaj segment treba svijetliti u datom bitu i 1 - inače), u kojima se vršne struje prenose u registar. Zašto? Dva su razloga za to: prvo, maksimalni kapacitet opterećenja izlaza 74HC595 je 35 mA naspram 25 mA za PIC kontrolere; druga i glavna stvar je da struja blizu granice kroz izlazni port MK teoretski može podići svoj izlazni potencijal na nivo komutacije ulaza registra, što bi dovelo do grešaka u radu. Dakle, struje od 6-7 mA teku u MK portove i potencijali na izlazima sigurno ne prelaze TTL nivoe.

Kao što je već spomenuto, interval prekida je 2 ms, što odgovara brzini osvježavanja indikatora od 64 Hz i njegov sjaj je prilično ugodan za oko.

Ova DI metoda je, između ostalog, omogućila da se prepolovi broj strujno ograničavajućih otpornika (R2-R5).

Uređaj je montiran na takozvanoj "lemnoj" matičnoj ploči.

Indikator se može zamijeniti bilo kojim od 3641A serije.

Kolo se napaja iz stabiliziranog izvora od 5 V. Koristio sam specijalnu stabilizatorsku ploču dizajniranu za korištenje u kombinaciji s gore spomenutom matičnom pločom.

MK upravljački program je napisan na jeziku C i preveden u okruženju.

Kod u MikroC, projekat, HEX fajl u aplikaciji.

Za korištenje ove metode povezivanja u komercijalnim razvojima, kontaktirajte me.

Spisak radioelemenata

Oznaka Tip Denominacija Količina NapomenaShopMoja beležnica
DD1 MK PIC 8-bit

PIC12F629

1 U notes
DD2 Registrirajte se74HC5951 U notes
H.L. IndikatorFYQ36411 U notes
R1 Otpornik

30 kOhm

1 U notes
R2 Otpornik

430 Ohm

1 U notes
R3 Otpornik

430 Ohm

1