Indikator sa sedam segmenata. Arduino i četvorocifreni sedmosegmentni indikator 4 cifre 7 segmentni indikatorski krug


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 naziv 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 gornjoj slici) 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 uredu koristi se struktura upravljačkog tranzistora NPN(upravlja logičkom jedinicom)
- za indikator sa OA- strukturni tranzistor PNP(kontrolisano logičkom nulom)

Ovaj put, članak će razmotriti jedan od najzanimljivijih modula, naime - višecifreni sedmosegmentni indikator baziran na MAX7219 čipu. Zašto multi-bit? Odgovor je jednostavan - broj cifara je broj cifara koje modul može prikazati. Na primjer, na slici ispod prikazane su tri vrste višecifrenih indikatora, s lijeva na desno - 4-cifrene, 6-cifrene, 8-cifrene. Štaviše, prvi je 4-cifreni indikator biranja. Razlika između indikatora brojčanika i običnog je u tome što ima znak dvotočka, dok je u bilo kojem regularnom indikatoru ovaj znak zamijenjen tačkom na dnu, pored broja.

U ovom članku dotični moduli rade na bazi mikrokola MAX7219. Ovaj čip je drajver za sedmosegmentne LED indikatore, kao i 8x8 LED matrice, a dijagrame kola za povezivanje ovog drajvera nećemo razmatrati. Gotovi moduli se jednostavno uzimaju kao osnova; Arduino UNO i radio sa bibliotečkim funkcijama LedControl. Inače, kao što je već pomenuto, 8x8 LED matrice takođe rade na osnovu drajvera MAX7219, a ako nekoga zanima, dobrodošli u članke:

Dakle, da počnemo... Mislim da je dat dobar opis multi-bita, ali evo zašto sedmosegmentni? Odgovor također nije tako komplikovan - jer se sedam LED dioda, indeksiranih slovima, koristi za formiranje simbola ili prikazivanje broja A, B, C, D, E, F, G, Tabela ispod pokazuje kako je to naznačeno:

Kao što se vidi iz tabele, tu je i osma LED dioda - D.P. Možete potpuno kodirati znak ili cifru u 1 bajt postavljanjem ili brisanjem određenog bita, kao što je prikazano u primjeru kodiranja znakova J. U primjeru su bitovi postavljeni B, C, D, E, koji vam omogućava da prikažete određeni znak na indikatoru od sedam segmenata.

Od teorije do prakse - spojimo 8-bitni modul na Arduino Uno ploču prema dijagramu ispod:

Za prikaz simbola koristi se nekoliko funkcija iz biblioteke dodataka LedControl.h. Pogledajmo svaku od ovih funkcija redom, počevši od funkcije setDigit().

Prototip deklaracije funkcije za prikaz broja i argumenata proslijeđenih funkciji:

setDigit(int addr, int digit, byte value, boolean dp);

Gdje -

int addr -adresa modula na sabirniciSPI 0 SPI počinje od nule)

int cifra - 0 , 7

vrijednost bajta -vrijednost (broj od 0 do 9) koja se mora prikazati u cifri čiji je broj naveden u parametru int digit

boolean dp - int cifra. Ako je parametar istinito tada će tačka biti prikazana ako false tada tačka neće biti prikazana.

Prototip deklaracije funkcije za prikaz simbola i argumenata proslijeđenih funkciji:

setChar(int addr, int cifra, char vrijednost, boolean dp);

int addr - adresa modula na sabirniciSPI za koju se poziva funkcija, ako postoji samo jedan modul, tada je ovaj parametar jednak0 (podrazumevano adresiranje uređaja na magistraliSPI počinje od nule)

int cifra - serijski broj cifre u modulu displeja prema zadanim postavkama, za višecifrene indikatore, numerisanje cifara počinje krajnjom desnom cifrom, odnosno, broj krajnje desne cifre je jednak;0 , a broj krajnje lijeve cifre u našem slučaju je jednak7

vrijednost char - znak koji bi trebao biti prikazan u cifri čiji je broj specificiran parametromint cifra

boolean dp - ovaj parametar je odgovoran za prikaz tačke na cifri čiji je broj naveden u parametru int cifra. Ako je parametar istinito tada će tačka biti prikazana ako false tada tačka neće biti prikazana.

Posebna stvar koju vrijedi spomenuti je funkcija setChar() može prikazati samo ograničen skup znakova, kao što su:

  • 0 1 2 3 4 5 6 7 8 9 cifra se prikazuje kao simbol
  • Aa
  • B b
  • Sa sa znak će biti prikazan malim slovima
  • D d znak će biti prikazan malim slovima
  • E e znak će se pojaviti velikim slovima
  • F f znak će se pojaviti velikim slovima
  • H h znak će biti prikazan malim slovima
  • Ll znak će se pojaviti velikim slovima
  • P str znak će se pojaviti velikim slovima
  • - znak minus"
  • . , point display
  • _ donja crta
  • <Пробел> postavite znak za razmak

U probnoj skici možete postaviti zadatak ovako:

  1. Prikažite brojeve od 1 do 8 jedan po jedan bez tačke
  2. Popunite sve cifre displejnog modula brojevima od 1 do 8, plus prikažite sve tačke naznačenih cifara
  3. Nacrtajte bitni niz sa znakovima unaprijed kodiranim u binarnom kodu, rezultat bi trebao biti “Arduino pravila!!!”

Zbog ograničenog skupa znakova, funkcija setChar() nije prikladan za probnu skicu, jer neće moći normalno nacrtati frazu naveden u tački 3. Umjesto ove funkcije koristit ćemo funkciju setRow(). Dakle... funkcija setRow() već smo testirali u člancima o proučavanju 8x8 LED matrica, hajde da ponovo opišemo prototip poziva i parametre ove funkcije.

Prototip deklaracije funkcije setRow() i argumenti proslijeđeni funkciji:

setRow(int addr, int row, byte value);

int addr - adresa modula na sabirniciSPI za koju se poziva funkcija, ako postoji samo jedan modul, tada je ovaj parametar jednak0 (podrazumevano adresiranje uređaja na magistraliSPI počinje od nule)

int row - serijski broj cifre u modulu displeja prema zadanim postavkama, za višecifrene indikatore, numerisanje cifara počinje krajnjom desnom cifrom, odnosno, broj krajnje desne cifre je jednak;0 , a broj krajnje lijeve cifre u našem slučaju je jednak7

vrijednost bajta- vrijednost u binarnom formatu (primjer B00000000, moguće su i alternative u decimalnom i heksadecimalnom), koja kodira traženi znak. Tabela kodiranja znakova pomoći će vam da ispravno kodirate željeni znak.

Pa, na kraju članka, probna skica i video kako to radi:

#include "LedControl.h" /* * Povezujemo LedControl.h biblioteku * i kreiramo objekat klase LedControl * u ovom slučaju, 7-segmentni ekran sa MAX72xx drajverom * mora biti povezan na Arduino ploču na sledeći način : * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * */ LedControl lc( = LedControl lc, 1210,10) 1); //Niz sa kodiranim znakovima, //Fraza "Arduino pravila!!!" Bajt AR = (B011101111, // A B00000101, // R B001111101, // D B00011100, // U B00010000, // I B00010101, // N B00011101, //0 O B0010 //0 B0010 1100 , //l B01001111, //E B01011011, //S B10110000, // B10110000 //! void setup() ( //Uređaj (7-segmentni displej) je izbačen iz stanja mirovanja lc.shutdown(0, false); //Postavite svjetlinu zaslona na 8 //Ukupno mogući modovi svjetline od 0 do 15 lc. setIntensity(0,8) //Obriši prikaz lc.clearDisplay(0) (/Najjednostavnija iteracija brojeva od 1 do 8 ciframa for(int i = 0, j = 7);< 8, j >= 0; i++, j--) ( lc.setDigit(0, j, byte(i + 1), false); delay(400); lc.clearDisplay(0); ) //Iteracija kroz brojeve bez brisanja ekrana for(int i = 0, j = 7;< 8, j >= 0; i++, j--) ( lc.setDigit(0, j, byte(i + 1), true); kašnjenje (400); ) lc.clearDisplay(0); //Rendering fraze "Arduino ruLES!!!" int n = 0; for(int i = 0; i< 2; i ++) { for(int j = 7; j >= 0; j --) ( if(n > 6 && !(i % 2)) ( nastavi; ) else ( lc.setRow(0, j, ar[n]); kašnjenje (400); n ++; ) ) lc .clearDisplay(0); ) kašnjenje (400); lc.clearDisplay(0); )


Omogućite javascript da bi komentari radili.

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 do i kupite gotov indikator sa integrisanim štitom (tako se zove odgovarajuća kartica), ali mi 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: među posjetiteljima će se pojaviti želja - 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 pokušati da ga prilagodimo 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), mada ako budete pažljivi možete i bez njih. Skica indikatora se može videti na slici 1, a njegov dijagram na slici 2. Takođe ću napomenuti da je bolje da na svaki segment ovog indikatora napajate najviše 2,1V (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

Bilješka

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 - odnosno 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 informacije) 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 specificirati 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 će pin porta 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, a 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.

Hajde da 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

Tablica 3. Korespondencija prikazanog bita s 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čki 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

Sedmosegmentni LED indikatori su veoma popularni među uređajima za digitalni prikaz vrednosti i koriste se na prednjim panelima mikrotalasnih pećnica, mašina za pranje veša, digitalnih satova, brojača, tajmera itd. U poređenju sa LCD indikatorima, segmenti LED indikatora svetle sjajno i vidljivi su preko velike udaljenosti i pod širokim uglom gledanja. Za povezivanje sedmosegmentnog 4-bitnog indikatora na mikrokontroler, biće potrebno najmanje 12 I/O linija. Stoga je gotovo nemoguće koristiti ove indikatore sa mikrokontrolerima sa malim brojem pinova, na primjer, serije iz kompanije. Naravno, možete koristiti različite metode multipleksiranja (čiji opis možete pronaći na web stranici u odjeljku “Šeme”), ali čak i u ovom slučaju postoje određena ograničenja za svaku metodu, a često koriste složene softverske algoritme.

Pogledaćemo način povezivanja indikatora preko SPI interfejsa, koji će zahtevati samo 3 I/O linije mikrokontrolera. Istovremeno, kontrola svih segmenata indikatora će ostati.

Za povezivanje 4-bitnog indikatora sa mikrokontrolerom preko SPI magistrale koristi se specijalizovani upravljački čip koji proizvodi kompanija. Mikrokolo je sposobno pokretati osam sedmosegmentnih indikatora sa zajedničkom katodom i uključuje BCD dekoder, segmentne drajvere, sklop za multipleksiranje i statički RAM za pohranjivanje vrijednosti cifara.

Struja kroz segmente indikatora se podešava pomoću samo jednog eksternog otpornika. Dodatno, čip podržava kontrolu svjetline indikatora (16 nivoa svjetline) koristeći ugrađeni PWM.

Kolo o kojem se govori u članku je kolo modula displeja sa SPI interfejsom koji se može koristiti u dizajnu radio amatera. I više nas zanima ne sam krug, već rad s mikrokolo preko SPI sučelja. Napajanje modula +5 V se napaja na Vcc pin, MOSI, CLK i CS signalne linije su namijenjene za komunikaciju između glavnog uređaja (mikrokontrolera) i slave (MAX7219 čip).

Mikrokolo se koristi u standardnoj vezi jedine potrebne vanjske komponente su otpornik koji postavlja struju kroz segmente, zaštitna dioda za napajanje i filter kondenzator za napajanje.

Podaci se prenose na čip u 16-bitnim paketima (dva bajta), koji se stavljaju u ugrađeni 16-bitni pomakni registar na svakoj rastućoj ivici CLK signala. 16-bitni paket označavamo kao D0-D15, gdje bitovi D0-D7 sadrže podatke, D8-D11 sadrže adresu registra, bitovi D12-D15 nemaju značenje. Bit D15 je najznačajniji bit i prvi je primljen bit. Iako je čip sposoban da kontroliše osam indikatora, razmotrićemo rad sa samo četiri. Njima upravljaju izlazi DIG0 - DIG3, locirani u nizu s desna na lijevo, 4-bitne adrese (D8-D11) koje im odgovaraju su 0x01, 0x02, 0x03 i 0x04 (heksadecimalni format). Registar cifara je implementiran korišćenjem RAM-a na čipu sa organizacijom 8x8 i direktno je adresiran tako da se svaka pojedinačna cifra na displeju može ažurirati u bilo kom trenutku. Sljedeća tabela prikazuje adresabilne cifre i kontrolne registre MAX7219 čipa.

Registrirajte se

Adresa

HEX vrijednost

Nema operacije

Način dekodiranja

Broj indikatora

Ugasiti

Test indikatora

Kontrolni registri

MAX1792 čip ima 5 kontrolnih registara: način dekodiranja (Decode-Mode), kontrolu svjetline indikatora (Intenzitet), registar broja povezanih indikatora (Scan Limit), on/off kontrolu (Shutdown), test mod (Display Test).

Uključivanje i isključivanje čipa

Kada se napajanje priključi na čip, svi registri se resetuju i on prelazi u režim isključivanja. U ovom načinu rada displej je isključen. Za prelazak na normalan način rada, bit D0 registra za isključivanje (adresa 0Sh) mora biti postavljen. Ovaj bit se može obrisati u bilo kom trenutku kako bi se natjerao drajver da se isključi, ostavljajući sadržaj svih registara nepromijenjenim. Ovaj režim se može koristiti za uštedu energije ili u alarmnom režimu treperenjem indikatora (uzastopno aktiviranje i deaktiviranje režima isključenja).

Mikrokolo se prebacuje u režim isključivanja uzastopnim prenosom adrese (0Sh) i podataka (00h), i prenosom 0Ch (adresa) i zatim 01h (podaci) se vraća u normalan rad.

Način dekodiranja

Koristeći registar za odabir načina dekodiranja (adresa 09h), možete koristiti dekodiranje BCD koda B (prikaz znakova 0-9, E, H, L, P, -) ili bez dekodiranja za svaku cifru. Svaki bit u registru odgovara jednoj cifri, postavljanje logičkog odgovara uključivanju dekodera za ovaj bit, postavljanje 0 znači da je dekoder onemogućen. Ako se koristi BCD dekoder, tada se uzima u obzir samo najniži zalogaj podataka u registrima cifara (D3-D0), bitovi D4-D6 se zanemaruju, bit D7 ne ovisi o BCD dekoderu i odgovoran je za uključivanje decimalna točka na indikatoru ako je D7 = 1. Na primjer, kada se bajtovi 02h i 05h šalju u nizu, indikator DIG1 (druga cifra s desne strane) će prikazati broj 5. Slično, kada šaljete 01h i 89h, indikator DIG0 će prikazati broj 9 sa uključenom decimalnom zarezom . Tabela ispod prikazuje kompletnu listu znakova prikazanih kada se koristi IC-ov BCD dekoder.

Simbol

Podaci u registrima

Omogućeni segmenti = 1

Prazan

*Decimalna tačka je postavljena bitom D7=1

Kada je BCD dekoder isključen iz rada, bitovi podataka D7-D0 odgovaraju segmentnim linijama (A-G i DP) indikatora.

Kontrola svjetline indikatora

Čip vam omogućava da programski kontrolirate svjetlinu indikatora pomoću ugrađenog PWM-a. PWM izlaz je kontroliran nibble-om nižeg reda (D3-D0) registra intenziteta (adresa 0Ah), koji vam omogućava da postavite jedan od 16 nivoa svjetline. Kada su svi bitovi grickanja postavljeni na 1, odabire se maksimalna svjetlina indikatora.

Broj povezanih indikatora

Registar Scan-Limit (adresa 0Bh) postavlja vrijednost broja bitova koje servisira mikrokolo (1 ... 8). Za našu 4-bitnu verziju, vrijednost 03h treba biti upisana u registar.

Indikatorski test

Registar odgovoran za ovaj način rada nalazi se na adresi 0Fh. Postavljanjem bita D0 u registar, korisnik uključuje sve segmente indikatora, dok se sadržaj kontrolnih i podatkovnih registara ne mijenja. Da biste onemogućili način rada Display-Test, bit D0 mora biti 0.

Interfejs sa mikrokontrolerom

Indikatorski modul se može povezati na bilo koji mikrokontroler koji ima tri slobodne I/O linije. Ako mikrokontroler ima ugrađen SPI hardverski modul, onda se indikatorski modul može povezati kao slave uređaj na magistralu. U ovom slučaju, SPI signalne linije SDO (serijski izlaz podataka), SCLK (serijski sat) i SS (odabir slave) mikrokontrolera mogu se direktno povezati na MOSI, CLK i CS pinove MAX7219 čipa (modula), CS signal je aktivan nizak.

Ako mikrokontroler nema hardverski SPI, interfejs se može organizovati softverski. Komunikacija sa MAX7219 počinje povlačenjem i držanjem CS linije nisko, zatim slanjem 16 bitova podataka uzastopno (prvo MSB) na MOSI liniji na rastućoj ivici CLK signala. Po završetku prenosa, CS linija ponovo ide visoko.

U odjeljku preuzimanja korisnici mogu preuzeti izvorni tekst testnog programa i HEX datoteku firmvera, koji implementira konvencionalni 4-bitni brojač s prikazom vrijednosti na indikatorskom modulu sa SPI sučeljem. Korišteni mikrokontroler je softverski implementiran interfejs, signalne linije CS, MOSI i CLK indikatorskog modula su povezane na portove GP0, GP1 i GP2, respektivno. Koristi se mikroC kompajler za PIC mikrokontrolere (mikroElektronika

Da biste komentirali materijale sa stranice i dobili puni pristup našem forumu, trebate registar .

mob_info