Arduino uno 4 cifre 7 segmentni indikator. Indikator sa sedam segmenata. Broj povezanih indikatora

Arduino uno 4 cifre 7 segmentni indikator.  Indikator sa sedam segmenata.  Broj povezanih indikatora
Arduino uno 4 cifre 7 segmentni indikator. Indikator sa sedam segmenata. Broj povezanih indikatora

Sedmosegmentni LED indikatori su vrlo popularni među uređajima za digitalni prikaz vrijednosti i koriste se na prednjim pločama mikrotalasne rerne, mašine za pranje veša, digitalni sat, brojači, tajmeri itd. U poređenju sa LCD indikatorima, segmenti LED indikatora sjajno svijetle i vidljivi su na velika udaljenost 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 da možete koristiti različite metode multipleksiranje (čiji opis se može nać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 na mikrokontroler 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 za prikaz sa SPI sučeljem koji se može koristiti radioamaterski dizajn. I više nas zanima ne sam krug, već rad s mikro krugom 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 filterski 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

Čip MAX1792 ima 5 kontrolnih registara: način dekodiranja (Decode-Mode), kontrolu svjetline indikatora (Intenzitet), registar broja povezanih indikatora (Scan Limit), kontrolu uključivanja/isključivanja (Shutdown), test moda (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 kojem 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čivanja).

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 pokazuje puna lista znakovi koji se prikazuju kada se koristi BCD dekoder čipa.

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 se kontroliše pomoću nižeg reda (D3-D0) registra intenziteta (adresa 0Ah), koji vam omogućava da postavite jedan od 16 nivoa osvetljenosti. 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.

Test indikatora

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 (izlaz serijskih 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 čipom počinje umetanjem i zadržavanjem nizak nivo na CS liniji, nakon čega se 16 bitova podataka šalje sekvencijalno (najznačajniji bit se prvi šalje) duž MOSI linije 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 .

Dobar dan! Nakon moje duge i prisilne pauze nastavićemo sa savladavanjem kursa Arduino programiranja. U jednoj od prethodnih lekcija već smo radili sa nizom LED dioda, sada je vrijeme da pređemo na sljedeću fazu obuke. Tema današnjeg članka će biti - 7- indikator segmenta.

Upoznavanje sa 7-segmentnim indikatorom će se sastojati iz dva dijela. U prvom dijelu ćemo ukratko proći kroz teorijsku komponentu, raditi sa hardverom i pisati jednostavne programe.

Prošli put smo radili sa nizom od 8 LED dioda, danas će ih biti također 8 (7 LED traka i 1 tačka). Za razliku od prethodnog niza, elementi ovog skupa nisu poređani (jedan za drugim), već su raspoređeni određenim redoslijedom. Zahvaljujući tome, koristeći samo jednu komponentu možete prikazati 10 cifara (od 0 do 9).

Još jedna značajna razlika koja ovaj indikator izdvaja od jednostavnih LED dioda. Ima zajedničku katodu (tačnije, dva ekvivalentna kraka 3 i 8, na koje je katoda spojena). Dovoljno je samo spojiti jednu od katoda na masu ( GND). Svi indikatorski elementi imaju pojedinačne anode.

Mala digresija. Sve navedeno vrijedi za 7-segmentne indikatore sa zajedničkom katodom. Međutim, postoje indikatori sa zajedničkom anodom. Povezivanje ovakvih indikatora ima značajne razlike, stoga nemojte brkati „grešno i pravedno“. Morate jasno razumjeti koji tip sedmosegmentnog uređaja imate u rukama!

Osim razlika između jednostavnih LED dioda i 7-segmentnih indikatora, postoje i razlike zajedničke karakteristike. Na primjer: indikatori, poput LED dioda, mogu se postaviti u red (sekvenca) za prikaz dvo-, tro-, četverocifrenih brojeva (cifre). Međutim, ne savjetujem vam da se previše brinete samostalno sastavljanje skupovi segmenata. U prodaji “pored” jednocifrenih indikatora, prodaju se i višecifreni indikatori.

Nadam se da niste zaboravili na potrebu korištenja otpornika za ograničavanje struje prilikom povezivanja LED dioda. Isto vrijedi i za indikatore: svaki element indikatora mora imati svoj vlastiti otpornik. 8 elemenata (7 + 1) – 8 otpornika.

Imao sam pri ruci sedmosegmentnu jedinicu sa oznakom 5161AS (zajednička katoda). Pinout:



Shematski dijagram

Kao što sam ranije rekao, da bismo uključili segment „A“, spajamo masu na bilo koji zajednički pin (3 ili 8) i napajamo 5V na pin 7. Ako indikator ima zajedničku anodu, tada primjenjujemo 5V na anodu i uzemljujemo na izlaz segmenta!

Hajde da sastavimo štand za testiranje. Povezujemo žice redom, počevši od prve noge, koja ide do 2. pina Arduino ploče. Spajamo uzemljenje na pin 8 indikatora.

Nakon što je postolje sastavljeno, možete započeti pisanje firmvera.

Da provjerimo indikator, pokrenimo napisani program. Odaberimo element "A" i bljesnemo ga.


Sada upalimo broj 2. Da bismo to učinili, uključimo još nekoliko elemenata.

Da biste izbacili jednu cifru, morate napisati n-broj linija koda. Teško je, zar ne?

Postoji još jedan način. Da bi se na indikatoru prikazao bilo koji broj, on prvo mora biti predstavljen kao određeni niz bitova.

Tabela korespondencije.

Ako displej ima zajedničku anodu, tada se 1 mora zamijeniti sa 0, a 0 sa 1!

Heksadecimalni stupac je prikaz broja u bajt obliku (o tome ćemo detaljnije govoriti u drugom dijelu).

Broj u binarnom brojevnom sistemu zapisuje se na sljedeći način: 0b00000000. 0b- binarni sistem. Nule znače da su sve LED diode isključene.

Prilikom povezivanja koristili smo pinove 2 do 9. Da biste uključili pin 2, napišite mu jedan = 0b00000001.Četvrti bit s desne strane odgovoran je za tačku. Poslednji bit odgovara liniji u sredini indikatora.

Napišimo primjer izlaza broja 0.

Da bismo smanjili broj ukucanih linija, koristićemo petlju koja vam omogućava da "iterirate" svih 8 bitova. Varijabilna Enable_segment dodjeljuje se vrijednost bita koji se čita. Nakon toga, strujni izlaz se postavlja na odgovarajući način rada ( prisustvo ili odsustvo signala).

Napomena: funkcija bitRead() čita stanje navedenog bita i vraća vrijednost stanja (0 ili 1).bit Read(x, n)gdje je x broj čije bitove treba pročitati; n je broj bita čije stanje treba pročitati. Numerisanje počinje sa najmanjim značajnim (krajnji desnim) bitom sa brojem 0.

I na kraju prvog dijela ćemo napisati malu brojalicu.

Povezivanje sedmosegmentnog displeja na Arduino je odličan projekat ulazni nivo, što vam omogućava da bolje upoznate Arduino ploču. Ali to je prilično lako učiniti. Stoga ćemo malo zakomplicirati zadatak i povezati četveroznamenkasti indikator sa sedam segmenata.



IN u ovom slučaju Koristićemo četvorocifreni LED indikatorski modul sa zajedničkom katodom.


Svaki segment u indikatorskom modulu je multipleksiran, što znači da dijeli jednu tačku anodnog povezivanja sa ostalim segmentima svog pražnjenja. I svaki od četiri bita u modulu ima svoju tačku veze sa zajedničkom katodom. Ovo omogućava da se svaka cifra uključi ili isključi nezavisno. Dodatno, ova metoda multipleksiranja omogućava mikrokontroleru da koristi samo jedanaest ili dvanaest pinova umjesto trideset dva.



LED segmenti indikatora zahtijevaju povezivanje otpornika za ograničavanje struje kada se napajaju od 5 V do logičan zaključak. Vrijednost otpornika se obično uzima između 330 i 470 oma. Također se preporučuje korištenje tranzistora za osiguranje dodatne struje, jer svaki pin mikrokontrolera može napajati maksimalno 40 mA. Ako uključite sve segmente pražnjenja (broj 8), trenutna potrošnja će premašiti ovu granicu. Na slici ispod prikazan je dijagram povezivanja za četverocifreni indikator od sedam segmenata koji koristi tranzistore otpornika koji ograničavaju struju.



Slijede dijagrami za povezivanje indikatora na Arduino pinove. Ovdje se koriste bipolarni NPN tranzistori BC547. Potenciometar od 10 KOhm spojen na ulaz A0 ploče omogućava vam da promijenite vrijednost prikazanu na indikatoru od 0 do 1023.




Na Arduino ploči digitalni izlazi D2-D8 se u ovom slučaju koriste za kontrolu segmenata “a” do “g”, a digitalni izlazi D9-D12 se koriste za kontrolu bitova D0 do D3. Treba napomenuti da se u ovom primjeru tačka ne koristi, ali je na skici ispod moguće koristiti. Pin D13 Arduino ploče je rezervisan za kontrolu segmenta tačke.



Ispod je kod koji vam omogućava da kontrolišete četvorocifreni indikator segmenta pomoću Arduino ploče. U njemu, numerički niz specificira kodove brojeva od 0 do 9 u binarnom obliku. Ova skica podržava i indikatore sa zajedničkom katodom (podrazumevano) i indikatore sa zajedničkom anodom (da biste to učinili, morate dekomentirati jednu liniju na kraju skice).


// bitovi koji predstavljaju segmente od A do G (i tačke), za brojeve 0-9 const int numeral = ( //ABCDEFG /dp B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B01100 // 4 B10110110, // 5 B00111110, // 6 B11100000, // 7 B11111110, // 8 B11100110, // 9 ); // igle za tačku i svaki segment // DP,G,F,E,D,C,B,A const int segmentPins = ( 13,8,7,6,5,4,3,2 ); const int nbrDigits= 4; // broj znamenki LED indikatora // cifre 0 1 2 3 const int digitPins = ( 9,10,11,12 ); void setup() ( for(int i=0; i< 8; i++) { pinMode(segmentPins[i], OUTPUT); // устанавливаем выводы для сегментов и точки на выход } for(int i=0; i < nbrDigits; i++) { pinMode(digitPins[i], OUTPUT); } } void loop() { int value = analogRead(0); showNumber(value); } void showNumber(int number) { if(number == 0) { showDigit(0, nbrDigits-1) ; // отображаем 0 в правом разряде } else { // отображаем значение, соответствующее каждой цифре // крайняя левая цифра 0, правая на единицу меньше, чем число позиций for(int digit = nbrDigits-1; digit >= 0; cifra--) ( if(broj > 0) ( showDigit(broj % 10, cifra) ; broj = broj / 10; ) ) ) ) // Prikaži dati broj na ovu kategoriju 7-segmentni indikator void showDigit(int broj, int cifra) ( digitalWrite(digitPins, HIGH); for(int segment = 1; segment< 8; segment++) { boolean isBitSet = bitRead(numeral, segment); // isBitSet будет истинным, если данный бит будет 1 // isBitSet = ! isBitSet; // опционально // раскомментируйте опциональную строчку выше для индикатора с общим анодом digitalWrite(segmentPins, isBitSet); } delay(5); digitalWrite(digitPins, LOW); }


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

Uređaj za digitalni prikaz informacija. Ovo je najviše jednostavna implementacija indikator koji se može prikazati arapski brojevi. 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 i njih različite kombinacije, od njih možete kreirati pojednostavljene slike 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.

Oni su različite boje, obično su boje bijela, crvena, zelena, žuta i plava. 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 pošto se neizmjernost ne može shvatiti, za sada nećemo razmatrati takve pokazatelje (ali postoje i pokazatelji sa mnogo veliki iznos segmenti, matrica).

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 napajati struju zajedničkim terminalima 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čke karakteristike indikatori. Ako je, na primjer, napon koji se dovodi do segmenata 5 volti, a oni su dizajnirani za radni napon 2 volta, tada je potrebno ugraditi otpornike za ograničavanje struje (da ograničite struju kroz njih za povećan napon napajanja i da ne spalite 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 fotografiji ispod prikazane su tri vrste višecifrenih indikatora, s lijeva na desno - 4-cifrene, 6-cifrene, 8-cifrene. Štaviše, prvi jeste 4-cifreni indikator biranja. Razlika između indikatora brojčanika i običnog je u tome što ima znak debelo crijevo, dok je u bilo kojem redovnom indikatoru ovaj znak zamijenjen tačkom na dnu, pored broja.

U ovom članku dotični moduli rade na bazi mikrokola MAX7219. Ovaj čip je pokretač za sedam segmentnih LED indikatora, kao i 8x8 LED matrice, i nećemo ga razmatrati dijagrami kola povezivanje ovog drajvera. Samo uzeto kao osnova spreman modul, bit će dati primjeri povezivanja na ploču 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 dato o multi-bitu dobar opis, a evo i 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 cifra, vrijednost bajta, 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, onda 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 jednak0 , 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"
  • . , prikaz tačke
  • _ 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 pogodan 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 studiranju Led matrice 8x8, 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, onda 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 jednak0 , 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 = ( B01110111, //A B00000101, //r B00111101, //d B00011100, //u B00010000, //i B00010101, //n B00011101, //o B00011101, //o B00000 B00000 //10 B00000 , //l B01001111, //E B01011011, //S B10110000, //! 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); ) void loop() ( //Najjednostavnije pretraživanje brojeva od 1 do 8 po ciframa for(int i = 0, j = 7; i< 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, i< 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.