Septiņu segmentu indikators. Arduino un četru ciparu septiņu segmentu indikatora LED 4 ciparu indikators

20.07.2023

Savienosim septiņu segmentu LED indikators uz Arduino plati un uzziniet, kā to vadīt, izmantojot Led4Digits.h bibliotēku.

Iepriekšējā nodarbībā sīki aprakstīti mikrokontrolleri. Savienosim šādu indikatoru pie Arduino plates.

Diagramma indikatora savienošanai ar Arduino plati izskatās šādi.

Es to saliku uz shēmas plates.

Lai pārvaldītu rādītājus, es uzrakstīju Led4Digits.h bibliotēku:

Un maksā.

Bibliotēka ļauj pārvaldīt septiņu segmentu indikatorus:

  • līdz četriem cipariem;
  • ar jebkuriem vadības impulsu polaritātes variantiem (visi);
  • darbojas paralēlā procesā;
  • ļauj parādīt indikatorā:
    • katras kategorijas segmenti;
    • katra cipara cipars;
    • vesels skaitlis 0 ... 9999;
  • lai izvadītu veselu skaitli, var norādīt ciparu skaitu;
  • Ir režīms nenozīmīgu ciparu nomākšanai.

Led4Digits.h bibliotēku varat lejupielādēt no šīs saites:

Un maksā. Tikai 25 rubļi. mēnesī, lai piekļūtu visiem vietnes resursiem!

Kā instalēt ir rakstīts .

Avota tekstus nesniegšu. Varat tos meklēt bibliotēkas failos. Kā vienmēr, šeit ir daudz komentāru. Es detalizēti, ar piemēriem aprakstīšu, kā izmantot bibliotēku.

LED vadības bibliotēka Arduino Led4Digits.

Šeit ir klases apraksts. Es sniedzu tikai publiskās metodes un īpašības.

klase Led4Digits (
publiski:
baita cipars; // bitu segmentu kontroles kodi
void regen(); // reģenerācija, metode ir regulāri jāizsauc
void tetradToSegCod(baitu izrakt, baitu tetrāde); // tetra pārvēršana segmentu kodos
Būla druka (neparakstīta int vērtība, baita ciparskaitlis, tukšs baits); // vesela skaitļa izvade



} ;

Konstruktors.

Led4Digits (baita tipsLed, baits digitPin0, baits digitPin1, baits digitPin2, baits digitPin3,
baits segPinA, baits segPinB, baits segPinC, baits segPinD,
baits segPinE, baits segPinF, baits segPinG, baits segPinH);

typeLed Iestata vadības impulsu polaritāti bitu un segmentu atlases signāliem. Atbalsta visas savienojuma shēmas ().

typeLed Kategorijas izvēle Segmentu atlase Ķēdes veids
0 -_- -_- Kopējais anods ar izlādes izvēles taustiņiem
1 _-_ -_- Kopējais anods
2 -_- _-_ Kopējais katods
3 _-_ _-_ Kopējais katods ar izlādes izvēles taustiņiem

digitPin0...digitPin3– izejas ciparu izvēlei. Ja digitPin = 255, cipars ir atspējots. Tas ļauj savienot indikatorus ar mazāk cipariem. digitPin0 – zemais (labais) cipars.

segPinA...segPinH– segmentu vadības izejas.

Piemēram,

nozīmē: indikatora veids 1; izlādes izejas 5,4,3,2; segmentu izejas 6,7,8,9,10,11,12,13.

void regen() metode

Metode regulāri jāizsauc paralēlā procesā. Tas atjauno attēlu uz indikatoriem. Reģenerācijas cikla laiks ir vienāds ar metodes izsaukuma periodu, kas reizināts ar bitu skaitu.

Piemēram,

// pārtraukumu apstrādātājs 2 ms
Void timerInterrupt() (
disp.regen(); // indikatora reģenerācija
}

Baitu ciparu masīvs

Ietver segmentu stāvokli. cipars ir vismazāk nozīmīgais bits, vismazāk nozīmīgais cipara bits ir vismazāk nozīmīgā bita “A” segments. Bitu statuss 1 nozīmē, ka segments ir izgaismots.

Piemēram,

cipars = B0000101;

nozīmē, ka otrajā ciparā ir izgaismoti segmenti “A” un “C”.

Programmas piemērs, kas secīgi izgaismo visus katra cipara segmentus.

// skriešanas segmenti
#iekļauts
#iekļauts

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

anulēt iestatīšanu() (
taimera pārtraukums 2 ms
MsTimer2::start(); // pārtraukuma iespējošana
}

void loop() (
for (int i = 0; i< 32; i++) {
ja (i == 0) disp.digit= 1;
else if (i == 8) disp.digit= 1;
else if (i == 16) disp.digit= 1;
else if (i == 24) disp.digit= 1;
cits(
disp.digit = disp.cipara<< 1;
disp.digit = disp.cipara<< 1;
disp.digit = disp.cipara<< 1;
disp.digit = disp.cipara<< 1;
}
kavēšanās(250);
}
}

//pārtraukumu apstrādātājs 2 ms
Void timerInterrupt() (
disp.regen(); // indikatora reģenerācija
}

Ciparu masīvā 1 tiek pārvietots, un indikatori to parāda.

Metode nevar tetradToSegCod (baitu izrakšana, baitu tetrāde)

Metode ļauj attēlot heksadecimālā koda ciparus un burtus atsevišķos ciparos. Ir argumenti:

  • dig – cipara skaitlis 0 ... 3;
  • tetrāde – decimālzīmju kods. Kods 0 parādīs skaitli "0", kods 1 - skaitlis "1", kods 14 - burts "E".

Piemēram,

tetrāde(2, 7);

trešajā ciparā parādīs skaitli “7”.

Programmas piemērs, kas pēc kārtas maina rakstzīmes katrā ciparā.

// cipari pa vienam
#iekļauts
#iekļauts

// indikatora veids 1; izlādes izejas 5,4,3,2; segmentu izejas 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

anulēt iestatīšanu() (
MsTimer2::set(2, timerInterrupt); // taimera pārtraukums 2 ms
MsTimer2::start(); // pārtraukuma iespējošana
}

void loop() (
for (int i = 0; i< 64; i++) {
disp.tetradToSegCod(i>>4, i);
kavēšanās(250);
}
}

// pārtraukumu apstrādātājs 2 ms
Void timerInterrupt() (
disp.regen(); // indikatora reģenerācija
}

Būla drukas metode (bez paraksta int vērtība, baita ciparskaitlis, tukšs baits)

Metode uz indikatoriem parāda veselu skaitli. Tas pārvērš bināro skaitli BCD katram ciparam. Ir argumenti:

  • vērtība – skaitlis, kas tiek rādīts uz indikatora.
  • digitNum – numura ciparu skaits. To nevajadzētu sajaukt ar indikatora ciparu skaitu. Iespējams, vēlēsities parādīt ciparu ar 2 cipariem un rakstzīmes uz pārējiem diviem cipariem.
  • tukšs – nenozīmīgu ciparu slāpēšanas zīme. tukšs=0 nozīmē, ka skaitlis ir jāparāda ar visām nullēm. Skaitlis "7" izskatīsies kā "0007". Ja tukšā vērtība atšķiras no 0, nenozīmīgas nulles tiks dzēstas.

Ja skaitļa vērtība pārsniedz atļauto skaitu atlasītajam ciparu skaitam (digitNum), tad funkcija uz indikatora parādīs “---” un atgriezīs false.

Ciparu izvades programmas piemērs.

// izvades numurs
#iekļauts
#iekļauts

// indikatora veids 1; izlādes izejas 5,4,3,2; segmentu izejas 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

anulēt iestatīšanu() (
MsTimer2::set(2, timerInterrupt); // taimera pārtraukums 2 ms
MsTimer2::start(); // pārtraukuma iespējošana
}

void loop() (
for (int i = 0; i< 12000; i++) {
disp.print(i, 4, 1);
kavēšanās(50);
}
}

// pārtraukumu apstrādātājs 2 ms
Void timerInterrupt() (
disp.regen(); // indikatora reģenerācija
}

Pēdējās divas metodes nemaina segmenta “H” stāvokli - decimālzīmi. Lai mainītu punkta stāvokli, varat izmantot komandas:

cipars |= 0x80; // iededziet decimālzīmi
cipars &= 0x7f; // dzēst decimālzīmi

Izvade negatīvo skaitļu indikatoriem (int).

Negatīvos skaitļus var izvadīt šādi:

  • Pārbaudiet skaitļa zīmi.
  • Ja skaitlis ir negatīvs, izdrukājiet mīnusa zīmi pie visnozīmīgākā cipara un funkcijā print() mainiet skaitļa zīmi uz pozitīvu.
  • Ja skaitlis ir pozitīvs, izslēdziet zīmes bitu un izdrukājiet skaitli, izmantojot funkciju print().

Šeit ir programma, kas demonstrē šo metodi. Tas izvada skaitļus no -999 līdz 999.

// izvada negatīvus skaitļus
#iekļauts
#iekļauts

// indikatora veids 1; izlādes izejas 5,4,3,2; segmentu izejas 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

anulēt iestatīšanu() (
MsTimer2::set(2, timerInterrupt); // taimera pārtraukums 2 ms
MsTimer2::start(); // pārtraukuma iespējošana
}

void loop() (

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

ja (t.i< 0) {
// skaitlis ir negatīvs
disp.digit= B01000000; // zīme -
disp.print(i * -1, 3, 1);
}
cits(
disp.digit= B00000000; // notīrīt zīmi
disp.print(i, 3, 1);
}

kavēšanās(50);
}
}

// pārtraukumu apstrādātājs 2 ms
Void timerInterrupt() (
disp.regen(); // indikatora reģenerācija
}

Izvade uz daļskaitļu indikatoriem, peldošā formātā.

Ir daudz veidu, kā parādīt peldošā komata skaitļus, izmantojot standarta C valodas funkcijas. Šī, pirmkārt, ir funkcija sprint(). Tas darbojas ļoti lēni, prasa papildu rakstzīmju kodu konvertēšanu uz binārajiem decimālkodiem, jums ir jāizņem punkts no virknes. Tādas pašas problēmas ar citām funkcijām.

Es izmantoju citu metodi peldošo mainīgo vērtību parādīšanai indikatoros. Metode ir vienkārša, uzticama, ātra. Samazina līdz šādām darbībām:

  • Peldošā komata skaitli reizina ar 10 līdz pakāpei, kas atbilst vajadzīgajam zīmju skaitam aiz komata. Ja rādītājos jāparāda 1 zīme aiz komata, reiziniet ar 10, ja 2, tad reiziniet ar 100, 3 zīmes aiz komata ar 1000.
  • Pēc tam peldošā komata skaitlis tiek nepārprotami pārveidots par veselu skaitli (int) un parādīts indikatoros, izmantojot funkciju print().
  • Nepieciešamajā ciparā tiek ievietots punkts.

Piemēram, turpmākajās rindās septiņu segmentu gaismas diodēm tiks izvadīts peldošais mainīgais ar divām zīmēm aiz komata.

pludiņš x = 2,12345;

disp.digit |= 0x80; //

Mēs reizinām skaitli ar 100 un, ievietojot punktu trešajā ciparā, mēs dalām rezultātu ar 100.

Šeit ir programma, kas uz indikatoriem parāda peldošā komata skaitļus no 0,00 līdz 99,99.

// peldošā komata izvade
#iekļauts
#iekļauts

// indikatora veids 1; izlādes izejas 5,4,3,2; segmentu izejas 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

anulēt iestatīšanu() (
MsTimer2::set(2, timerInterrupt); // taimera pārtraukums 2 ms
MsTimer2::start(); // pārtraukuma iespējošana
}

void loop() (
peldēt x = 0;

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

disp.print((int)(x * 100.), 4, 1);
disp.digit |= 0x80; // izgaismojiet trešā līmeņa punktu

kavēšanās(50);
}
}

//pārtraukumu apstrādātājs 2 ms
Void timerInterrupt() (
disp.regen(); // indikatora reģenerācija
}

Kā redzat, Led4Digits.h bibliotēka ievērojami vienkāršo darbu ar septiņu segmentu gaismas diožu (LED) indikatoriem, kas savienoti ar Arduino plati. Es neesmu atradis šādas bibliotēkas analogu.

Ir bibliotēkas darbam ar LED displejiem, izmantojot maiņu reģistru. Kāds man rakstīja, ka atrada bibliotēku, kas darbojas ar LED displeju, kas ir tieši savienots ar Arduino plati. Bet, to lietojot, indikatora cipari spīd nevienmērīgi un mirgo.

Atšķirībā no saviem analogiem, Led4Digits.h bibliotēka:

  • Darbojas kā paralēls process. Galvenajā cilpā programma ielādē datus noteiktos mainīgajos, kas automātiski tiek parādīti displejā. Informācijas izvade un indikatora atjaunošana notiek taimera pārtraukumā, kas nav redzams galvenajai programmai.
  • Displeja skaitļi spīd vienmērīgi, nemirgojot. Šo īpašību nodrošina fakts, ka reģenerācija notiek ciklā, ko stingri nosaka taimera pārtraukums.
  • Bibliotēkai ir kompakts kods, tā tiek ātri izpildīta un minimāli ielādē kontrolleri.

Nākamajā nodarbībā Arduino platei vienlaikus pievienosim LED indikatoru un pogu matricu. Rakstīsim bibliotēku šādam dizainam.

Kategorija: . Varat to atzīmēt ar grāmatzīmi.


Savienojuma shēma viencipara septiņu segmentu indikatoram
Savienojuma shēma daudzciparu septiņu segmentu indikatoram

Digitālās informācijas displeja ierīce. Šī ir vienkāršākā indikatora ieviešana, kas var attēlot arābu ciparus. Burtu attēlošanai tiek izmantoti sarežģītāki vairāku segmentu un matricu indikatori.

Kā norāda nosaukums, tas sastāv no septiņiem displeja elementiem (segmentiem), kas ieslēdzas un izslēdzas atsevišķi. Iekļaujot tos dažādās kombinācijās, tos var izmantot, lai izveidotu vienkāršotus arābu ciparu attēlus.
Segmenti ir apzīmēti ar burtiem A līdz G; astotais segments - decimālzīme (decimālpunkts, DP), paredzēts daļskaitļu attēlošanai.
Reizēm uz septiņu segmentu indikatora tiek parādīti burti.

Tie ir dažādās krāsās, parasti baltā, sarkanā, zaļā, dzeltenā un zilā krāsā. Turklāt tie var būt dažāda izmēra.

Arī LED indikators var būt viencipara (kā attēlā iepriekš) vai daudzciparu. Pamatā praksē tiek izmantoti viena, divu, trīs un četru ciparu LED indikatori:

Papildus desmit cipariem septiņu segmentu indikatori spēj attēlot burtus. Taču dažiem burtiem ir intuitīvs septiņu segmentu attēlojums.
Latīņu valodā: lielie A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, mazie burti a, b, c, d, e, g , h, i, n, o, q, r, t, u.
Kirilicā: A, B, V, G, g, E, i, N, O, o, P, p, R, S, s, U, Ch, Y (divi cipari), b, E/Z.
Tāpēc septiņu segmentu indikatori tiek izmantoti tikai vienkāršu ziņojumu parādīšanai.

Kopumā septiņu segmentu LED indikators var parādīt 128 rakstzīmes:

Tipiskam LED indikatoram ir deviņi vadi: viens iet uz visu segmentu katodiem, bet pārējie astoņi - uz katra segmenta anodu. Šo shēmu sauc "kopējā katoda ķēde", ir arī shēmas ar kopējo anodu(tad ir otrādi). Bieži vien dažādos pamatnes galos tiek izgatavoti nevis viens, bet divi kopīgi spailes - tas vienkāršo elektroinstalāciju, nepalielinot izmērus. Ir arī tā sauktie “universālie”, bet es personīgi ar tādiem neesmu saskāries. Turklāt ir indikatori ar iebūvētu maiņu reģistru, kas ievērojami samazina iesaistīto mikrokontrollera porta tapu skaitu, taču tie ir daudz dārgāki un tiek reti izmantoti praksē. Un tā kā neizmērojamību nevar aptvert, tad šādus rādītājus pagaidām neņemsim vērā (bet ir arī rādītāji ar daudz lielāku segmentu skaitu, matricas).

Daudzciparu LED indikatori bieži darbojas pēc dinamiska principa: visu ciparu viena nosaukuma segmentu izejas ir savienotas kopā. Lai parādītu informāciju par šādu indikatoru, vadības mikroshēmai cikliski jāpiegādā strāva uz visu ciparu kopējiem spailēm, savukārt strāva tiek piegādāta segmenta spailēm atkarībā no tā, vai konkrētais segments ir iedegts noteiktā ciparā.

Viencipara septiņu segmentu indikatora pievienošana mikrokontrollerim

Zemāk redzamā diagramma parāda, kā ir pievienots viencipara septiņu segmentu indikators uz mikrokontrolleru.
Jāņem vērā, ka, ja indikators ar KOPĒJAIS KATODS, tad tā kopējā izeja ir pievienota "zeme", un segmenti tiek aizdedzināti, barojot loģiskā vienība uz porta izvadi.
Ja indikators ir KOPĒJAIS ANODS, tad tas tiek piegādāts tā kopējam vadam "plus" spriegumu, un segmenti tiek aizdedzināti, pārslēdzot porta izeju stāvoklī loģiskā nulle.

Indikāciju viencipara LED indikatorā veic, piemērojot bināro kodu attiecīgā loģiskā līmeņa atbilstošā cipara mikrokontrollera porta tapām (indikatoriem ar OK - loģiskie, indikatoriem ar OA - loģiskās nulles).

Strāvas ierobežošanas rezistori var būt vai var nebūt diagrammā. Tas viss ir atkarīgs no indikatoram piegādātā barošanas sprieguma un indikatoru tehniskajiem parametriem. Ja, piemēram, segmentiem pievadītais spriegums ir 5 volti un tie ir paredzēti 2 voltu darba spriegumam, tad jāuzstāda strāvu ierobežojoši rezistori (lai ierobežotu strāvu caur tiem palielinātam barošanas spriegumam un nedegtu ne tikai indikators, bet arī mikrokontrollera ports).
Ir ļoti viegli aprēķināt strāvu ierobežojošo rezistoru vērtību, izmantojot vectēva formulu Ohm.
Piemēram, indikatora raksturlielumi ir šādi (ņemti no datu lapas):
— darba spriegums — 2 volti
— darba strāva — 10 mA (=0,01 A)
— barošanas spriegums 5 volti
Aprēķinu formula:
R = U/I (visām vērtībām šajā formulā jābūt omos, voltos un ampēros)
R= (barošanas spriegums - darba spriegums)/darba strāva
R = (5-2)/0,01 = 300 omi

Savienojuma shēma daudzciparu septiņu segmentu LED indikatoram Būtībā tas pats, kas pieslēdzot viencipara indikatoru. Vienīgais, ka indikatoru katodos (anodos) ir pievienoti vadības tranzistori:

Diagrammā tas nav parādīts, bet starp tranzistoru pamatiem un mikrokontrollera porta tapām ir jāiekļauj rezistori, kuru pretestība ir atkarīga no tranzistora veida (rezistoru vērtības tiek aprēķinātas, bet varat arī mēģināt izmantot rezistorus ar nominālo vērtību 5-10 kOhm).

Indikācija pēc izlādes tiek veikta dinamiski:
— PB pieslēgvietas izejās 1. ciparam tiek iestatīts atbilstošā cipara binārais kods, pēc tam pirmā cipara vadības tranzistoram tiek piemērots loģiskais līmenis.
— PB porta izejās 2. ciparam tiek iestatīts atbilstošā cipara binārais kods, pēc tam otrā cipara vadības tranzistoram tiek piemērots loģiskais līmenis.
— PB porta izejās 3. ciparam tiek iestatīts atbilstošā cipara binārais kods, pēc tam trešā cipara vadības tranzistoram tiek piemērots loģiskais līmenis.
- tātad aplī
Šajā gadījumā ir jāņem vērā:
— indikatoriem ar Labi tiek izmantota vadības tranzistora struktūra NPN(kontrolē loģiskā vienība)
- indikatoram ar OA- struktūras tranzistors PNP(kontrolē loģiskā nulle)

Protams, jūs jau esat redzējuši "astoņus" rādītājus. Šis ir septiņu segmentu LED indikators, kas kalpo, lai parādītu skaitļus no 0 līdz 9, kā arī decimālzīmi ( D.P.- decimālzīme) vai komats.

Strukturāli šis produkts ir gaismas diožu komplekts. Katra komplekta gaismas diode izgaismo savu zīmes segmentu.

Atkarībā no modeļa komplekts var sastāvēt no 1 - 4 septiņu segmentu grupām. Piemēram, indikators ALS333B1 sastāv no vienas septiņu segmentu grupas, kas spēj attēlot tikai vienu ciparu no 0 līdz 9.

Bet LED indikatoram KEM-5162AS jau ir divas septiņu segmentu grupas. Tas ir divciparu skaitlis. Nākamajā fotoattēlā redzami dažādi septiņu segmentu LED indikatori.

Ir arī rādītāji ar 4 septiņu segmentu grupām - četrciparu (attēlā - FYQ-5641BSR-11). Tos var izmantot paštaisītos elektroniskajos pulksteņos.

Kā diagrammās ir norādīti septiņu segmentu indikatori?

Tā kā septiņu segmentu indikators ir kombinēta elektroniska ierīce, tā attēls diagrammās maz atšķiras no tā izskata.

Atliek tikai pievērst uzmanību tam, ka katra tapa atbilst noteiktam zīmes segmentam, ar kuru tā ir savienota. Atkarībā no ierīces modeļa ir arī viens vai vairāki kopējā katoda vai anoda spailes.

Septiņu segmentu indikatoru iezīmes.

Neskatoties uz šīs daļas šķietamo vienkāršību, tai ir arī savas īpatnības.

Pirmkārt, septiņu segmentu LED indikatori ir aprīkoti ar kopēju anodu un kopīgu katodu. Šī funkcija ir jāņem vērā, pērkot to pašdarinātam dizainam vai ierīcei.

Lūk, piemēram, mums jau pazīstamā 4 ciparu indikatora spraudnis FYQ-5641BSR-11.

Kā redzat, katra cipara gaismas diožu anodi tiek apvienoti un izvadīti uz atsevišķu tapu. LED katodi, kas pieder pie zīmju segmenta (piemēram, G), savienoti kopā. Daudz kas ir atkarīgs no tā, kāda veida savienojuma shēma ir indikatoram (ar kopēju anodu vai katodu). Ja paskatās uz ierīču shēmas, kurās tiek izmantoti septiņu segmentu indikatori, kļūs skaidrs, kāpēc tas ir tik svarīgi.

Papildus maziem rādītājiem ir lieli un pat ļoti lieli. Tos var redzēt sabiedriskās vietās, parasti sienas pulksteņu, termometru un informatoru veidā.

Lai palielinātu displeja ciparu lielumu un vienlaikus saglabātu pietiekamu katra segmenta spilgtumu, tiek izmantotas vairākas gaismas diodes, kas savienotas virknē. Lūk, piemērs šādam rādītājam – tas iederas plaukstā. Šis FYS-23011-BUB-21.

Viens tā segments sastāv no 4 virknē savienotām gaismas diodēm.

Lai apgaismotu vienu no segmentiem (A, B, C, D, E, F vai G), tam jāpieslēdz 11,2 voltu spriegums (2,8 V katrai LED). Var izdarīt mazāk, piemēram, 10V, bet samazināsies arī spilgtums. Izņēmums ir decimālpunkts (DP), tā segments sastāv no divām gaismas diodēm. Tam nepieciešami tikai 5–5,6 volti.

Divu krāsu indikatori ir sastopami arī dabā. Piemēram, tajos ir iebūvētas sarkanās un zaļās gaismas diodes. Izrādās, ka korpusā ir it kā iebūvēti divi indikatori, bet ar dažādu krāsu gaismas diodēm. Ja pieslēdzat spriegumu abām LED ķēdēm, varat iegūt dzeltenu mirdzumu no segmentiem. Šeit ir elektroinstalācijas shēma vienam no šiem divu krāsu indikatoriem (SBA-15-11EGWA).

Ja savienojat tapas 1 ( SARKANA) un 5 ( ZAĻĀ) uz “+” barošanas avotu caur galvenajiem tranzistoriem, varat mainīt parādīto skaitļu krāsu no sarkanas uz zaļu. Un, ja jūs vienlaikus savienojat 1. un 5. tapas, spīduma krāsa būs oranža. Šādi var paspēlēties ar indikatoriem.

Septiņu segmentu rādītāju vadība.

Lai kontrolētu septiņu segmentu indikatorus digitālajās ierīcēs, tiek izmantoti maiņu reģistri un dekoderi. Piemēram, plaši izmantots dekodētājs ALS333 un ALS324 sērijas indikatoru kontrolei ir mikroshēma. K514ID2 vai K176ID2. Šeit ir piemērs.

Un, lai kontrolētu mūsdienu importētos rādītājus, parasti tiek izmantoti maiņu reģistri 74HC595. Teorētiski displeja segmentus var vadīt tieši no mikrokontrollera izejām. Bet šāda shēma tiek izmantota reti, jo tam ir jāizmanto diezgan daudz paša mikrokontrollera tapu. Tāpēc šim nolūkam tiek izmantoti maiņu reģistri. Turklāt zīmju segmenta gaismas diožu patērētā strāva var būt lielāka par strāvu, ko spēj nodrošināt parastā mikrokontrollera izeja.

Lai kontrolētu lielus septiņu segmentu indikatorus, piemēram, FYS-23011-BUB-21, tiek izmantoti specializēti draiveri, piemēram, mikroshēma. MBI5026.

Kas atrodas septiņu segmentu indikatorā?

Nu mazliet kaut kas garšīgs. Neviens elektronikas inženieris nebūtu tāds, ja viņu neinteresētu radio komponentu “iekšpuse”. Tas ir ALS324B1 indikatora iekšpusē.

Melnie kvadrāti uz pamatnes ir LED kristāli. Šeit jūs varat redzēt zelta džemperus, kas savieno kristālu ar vienu no spailēm. Diemžēl šis indikators vairs nedarbosies, jo šie paši džemperi tika noplēsti. Bet mēs varam redzēt, kas slēpjas aiz tablo dekoratīvā paneļa.

Šodienas rakstā mēs runāsim par 7 segmentu rādītājiem un to, kā “sadraudzēties” ar Arduino. Ir vairākas iespējas. Vienkāršākais, protams, ir doties uz un iegādājieties gatavu indikatoru ar integrētu vairogu (tā sauc atbilstošo karti), bet mēs nemeklējam vienkāršus ceļus, tāpēc mēs iesim nedaudz grūtāku ceļu. Iesācēji - neuztraucieties, šis raksts, tāpat kā mani iepriekšējie raksti ( Un ) tieši jums. Lai guru raksta tiem pašiem pieredzējušiem guru, un es esmu iesācējs - es rakstu iesācējiem.

Kāpēc 7 segmentu indikators? Galu galā ir tik daudz dažādu ekrānu, ar lielu skaitu rakstzīmju, līniju, dažādu diagonāļu un izšķirtspēju, melnbaltu un krāsainu, no kuriem lētākais maksā pāris dolārus... Un šeit: “vecais” viens, nežēlīgi vienkāršs, bet prasa milzīgu piespraudes skaitu 7-segmenta indikators, bet tomēr šim "vecajam" ir arī priekšrocība. Fakts ir tāds, ka, izmantojot šeit sniegtās skices, jūs varat atdzīvināt ne tikai indikatoru ar ciparu augstumu 14 mm, bet arī nopietnākus (kaut arī paštaisītus) projektus, un skaitītāja cipari šajā gadījumā ir tālu no robežas. Tas var nebūt tik interesanti galvaspilsētu iedzīvotājiem, taču Novokatsapetovkas vai Nizhnyaya Kedrovkas iedzīvotāji būs ļoti priecīgi, ja klubā vai ciema padomē parādīsies pulkstenis, kas var arī parādīt datumu un temperatūru, un viņi runās par radītāju. no šī pulksteņa ļoti ilgu laiku. Bet šādi pulksteņi ir atsevišķa raksta tēma: apmeklētāji vēlēsies - Es uzrakstīšu. Visu iepriekš rakstīto var uzskatīt par ievadu. Tāpat kā mans pēdējais raksts, arī šis raksts sastāvēs no daļām, šoreiz divās. Pirmajā daļā mēs vienkārši “pārvaldīsim” indikatoru, bet otrajā mēģināsim to pielāgot kaut kam vismaz nedaudz noderīgam. Tātad, turpināsim:

Pirmā daļa. Eksperimentāli – izglītojoši

Šī projekta pamatā ir ARDUINO UNO, kas mums jau ir labi zināms no iepriekšējiem rakstiem. Atgādināšu, ka visvieglāk to iegādāties ir šeit: vai šeit: , turklāt jums būs nepieciešams 4 ciparu, 7 segmentu indikators. Man jo īpaši ir GNQ-5641BG-11. Kāpēc šis? Jā, vienkārši tāpēc, ka pirms 5 gadiem es to nejauši nopirku, man bija slinkums, lai to mainītu, tāpēc tas visu šo laiku nogulēja un gaidīja spārnos. Es domāju, ka derēs ikviens, kam ir kopīgs anods (un ar kopīgu katodu tas ir iespējams, bet jums būs jāapgriež masīva dati un citas portu vērtības - tas ir, jāmaina uz pretējām), ja vien tas nav pārāk spēcīgs, lai nesadedzinātu Arduino. Turklāt no platākā var “noraut” 4 strāvu ierobežojošos rezistorus, aptuveni 100 omi katrs, un kabeļa gabalu (man pietika ar 10 cm) uz 12 tapām (dzīslām), ko es arī izdarīju. Vai pat varat tos pielodēt ar atsevišķiem vadiem, nebūs problēmu. Būs nepieciešamas arī piespraudes dēlim (11 gab.), lai gan, ja esi uzmanīgs, bez tām var iztikt. Indikatora skice ir redzama 1. attēlā un tā diagramma 2. attēlā. Tāpat atzīmēšu, ka labāk katram šī indikatora segmentam (ierobežots ar 100 omu rezistori) piegādāt ne vairāk kā 2,1 V, un šajā gadījumā tas patērēs ne vairāk kā 20 mA. Ja iedegas cipars “8”, patēriņš nepārsniegs 7x20=140 mA, kas Arduino izejām ir diezgan pieņemami. Ziņkārīgs lasītājs uzdos jautājumu: "Bet 4 izlādes pa 140 mA katra jau ir 4x140 = 560 mA, un tas jau ir par daudz!" Atbildēšu - paliks 140 Kā? Lasiet tālāk! Indikatora tapu atrašanās vieta ir redzama 3. attēlā Un mēs veicam savienojumu saskaņā ar 1. tabulu.


Rīsi. 1 - indikatora skice


Rīsi. 2 - indikatora ķēde


Rīsi. 3 — tapas atrašanās vieta

1. tabula

Piespraust Arduino Uno

Indikatora tapa

Piezīme

Segments G

F segments

E segments

D segments

C segments

B segments

A segments

Segmenta Nr. 1 kopējais anods, savienots caur 100 omu rezistoru.

Segmenta Nr. 2 kopējais anods, savienot caur 100 omu rezistoru.

Segmenta Nr. 3 kopējais anods, savienot caur 100 omu rezistoru.

Segmenta Nr. 6 kopējais anods, pievienojiet caur 100 omu rezistoru.



Mēs aizpildām vienkāršu skici, kas ir vienkārša “skaitīšanas tabula” no 0 līdz 9:


Tagad daži precizējumi. DDRD ir porta D reģistrs (DDRB - attiecīgi, ports B) aiz "biedējošā" vārda "reģistrs" ir tikai funkcija "slēpta", kas norāda, vai ports kaut ko nolasīs ar savu tapu (saņems informāciju), vai vice. otrādi tur varēs kaut ko darīt tad rakstīt (dot informāciju). Šajā gadījumā rinda DDRD=B11111111; norāda, ka visas D porta tapas tiek izvadītas, t.i. no tiem iznāks informācija. Burts “B” nozīmē, ka reģistrā ir ierakstīts binārs skaitlis. Nepacietīgs lasītājs uzreiz jautās: "Vai ir iespējams decimāldaļskaitlis!?!" Es steidzos jūs pārliecināt, ka tas ir iespējams, bet par to nedaudz vēlāk. Ja mēs vēlamies izmantot pusi no porta ievadei un pusi izvadei, mēs to varētu norādīt šādi: DDRD=B11110000; vieni rāda tās piespraudes, kas sniegs informāciju, un nulles norāda tās, kuras saņems šo informāciju. Galvenā reģistra ērtība slēpjas arī tajā, ka nav jāreģistrē visas tapas 8 reizes, t.i. programmā saglabājam 7 rindiņas. Tagad apskatīsim šādu rindu:

PORTB=B001000; // iestatiet porta B 11. tapu augstu

PORTB ir porta B datu reģistrs, t.i. Ierakstot tajā skaitli, mēs norādām, kuram porta tapam būs viens un kuram nulle. Papildus komentāram teikšu, ja paņem Arduino Uno tā, ka var redzēt kontrolieri un digitālās tapas ir virsū, tad ieeja reģistrā būs skaidra, t.i. kura “nulle” (vai “viens”) atbilst kuram tapam, t.i. porta B galējā labā nulle ir atbildīga par 8. tapu, bet kreisais - par 13. (kurā ir iebūvēta gaismas diode). Pieslēgvietai D attiecīgi labais ir 0. tapai, kreisais – 7. tapai.
Ceru, ka pēc tik detalizētiem paskaidrojumiem viss ir skaidrs, bet tā kā ir skaidrs, ierosinu atgriezties pie mums zināmās un kopš bērnības iemīļotās decimālskaitļu sistēmas. Un vēl viena lieta - 25 līniju skice var šķist maza, bet iesācējam tas joprojām ir nedaudz apgrūtinošs. Mēs to samazināsim.

Aizpildīsim vēl vienkāršāku skici, to pašu “skaitīšanas tabulu”:


1. video.
Tikai 11 rindas! Tas ir mūsu ceļš, “iesācēju ceļš”! Lūdzu, ņemiet vērā, ka bināro skaitļu vietā reģistros tiek ierakstīti decimālskaitļi. Protams, decimālskaitļiem priekšā nav nepieciešami burti. Es domāju, ka nenāktu par ļaunu ievietot visus skaitļus tabulās.

2. tabula. Parādītās rakstzīmes atbilstība porta datiem

Kopējais anods

Kopējais katods

Binārā sistēma

Decimālsistēma

Binārā sistēma

Decimālsistēma

3. tabula. Parādītā cipara atbilstība porta datiem

Kopējais anods

Kopējais katods

Binārā sistēma

Decimālsistēma

Binārā sistēma

Decimālsistēma



Uzmanību! Dati 2. un 3. tabulā ir derīgi tikai tad, ja tie ir savienoti saskaņā ar 1. tabulu.
Tagad augšupielādēsim skici ar “skaitīšanas tabulu” no 0 līdz 9999:




Rīsi. 4 - Skaitīšanas tabula

Jūs varat redzēt skici darbībā vietnē2. video.

Šajā skicē ir vairāk komentāru nekā paša koda. Jautājumiem nevajadzētu būt... Turklāt, kas tas par “mirgojošo ciklu”, kas, stingri ņemot, tur mirgo un kāpēc? Un šim ir arī kaut kāds mainīgais...
Un visa būtība ir tāda, ka visu četru kategoriju viena nosaukuma segmenti ir savienoti vienā punktā. A1, A2, A3 un A4 ir kopīgs katods; A1, B1,…..G1 kopējais anods. Tātad, vienlaikus uzliekot 4 ciparu indikatoram “1234”, mēs iegūsim “8888” un būsim ļoti pārsteigti. Lai tas nenotiktu, vispirms savā kategorijā jāiedegas “1”, pēc tam jāizslēdz, savā kategorijā jāiedegas “2” utt. Ja to darīsi ļoti ātri, skaitļu mirgošana saplūdīs kā kadri uz filmas, un acs to praktiski nepamanīs. Un mirgojošā mainīgā maksimālā vērtība šajā gadījumā kontrolē indikatora skaitļu maiņas ātrumu. Starp citu, tieši pateicoties šai “mirgošanai”, maksimālais strāvas patēriņš ir tikai 140 mA, nevis 560. Tagad iesaku pāriet uz ko lietderīgāku.

Otrā daļa. Vismaz nedaudz noderīgs

Šajā daļā mēs izvadīsim rakstzīmes no personālā datora uz 7 segmentu indikatoru, izmantojot ARDUINO MEGA. Kāpēc pēkšņi radās ideja par “pārejas pāreju no zirgiem”? Tam ir divi iemesli: pirmkārt, es nekad agrāk savos rakstos nebiju apsvēris ARDUINO MEGA; un, otrkārt, ARDUINO UNO es joprojām neesmu izdomājis, kā es varu dinamiski samainīt COM portu un portu D. Bet es esmu iesācējs - man var piedot. Protams, jūs varat iegādāties šo kontrolieri šeit: . Lai īstenotu plānu, vajadzēja paņemt lodāmuru un pārlodēt kabeli no Arduino puses, kā arī uzrakstīt jaunu skici. Kā kabelis ir pielodēts, var redzēt 5. attēlā. Lieta tāda, ka ARDUINO MEGA un ARDUINO UNO ir dažādi pieslēgvietas, un Mega ir daudz vairāk pieslēgvietu. Izmantoto tapu atbilstība redzama 4. tabulā.



Rīsi. 5 - jauns kabeļa vads

4. tabula

Osta Mega


Uzmanību! Šī tabula ir derīga tikai šim projektam!

Jāņem vērā arī tas, ka Arduino Mega ports C “sākas” no 37. tapas un pēc tam dilstošā secībā, un ports A sākas no 22. tapas un pēc tam augošā secībā.



Rīsi. 6 - vispārīgs skats



Nelielas ieviešanas iespējas: mēs izvadīsim 4 rakstzīmes. Rakstzīmēm jābūt cipariem. Ja ievadījāt “1234” un mēs redzēsim “1234”, ja ievadījāt “123456”, mēs joprojām redzēsim “1234”, ja ievadījāt “ytsuk”, “fyva1234”, “otiog485909oapom” - mēs neko neredzēsim. Ja ievadījāt “pp2345mm”, mēs redzēsim “23”, t.i. maza, iebūvēta “neaizsardzība”.

Faktiskā skice:



Jūs varat redzēt, kā šī programma darbojas3. video.



Pārskatu sagatavojis Pāvels Sergejevs

Šis raksts turpina manu publikāciju sēriju par PIC mikrokontrolleru un LED indikatoru dinamiskās indikācijas organizēšanu. Šeit ir saites uz iepriekšējiem ierakstiem:

Piedāvātā algoritma darbības tabula (tiek izmantots indikators ar kopēju katodu, pirmajā kolonnā parādītas reģistra izejas apvienojumā ar indikatora cipariem) saskaņā ar zemāk norādīto pieslēguma shēmu.

Katrā no pārtraukumiem ar intervālu 2 ms (šajā gadījumā no TMR0 taimera) tiek sagatavots viens dinamiskās indikācijas (DI) posms pēc algoritma, kas sastāv no piecām reģistra un indikatoru vadības fāzēm.

2. fāze: pozitīvā mala pie reģistra 12. kontakta (ST_CP) ieraksta reģistra nulles stāvokli izvades fiksatorā. Šeit un tālāk, pirms indikācijas sākuma indikators tiek dzēsts ar nulles potenciālu uz segmentiem.

3. fāze: kontrolējot reģistra tapas 14 (DS - dati) un 11 (SH_CP - pulkstenis), tajā tiek ierakstīts segmentu vadības kods.

4. fāze: ar pozitīvu kritumu reģistra 12. tapā, dati no reģistra tiek ierakstīti izejas fiksatorā, un, pateicoties pozitīvajiem bitu līmeņiem, indikators paliek izslēgts.

5. fāze: šeit nepieciešamais kods tiek piegādāts indikatora ciparu spailēm, un tad notiek faktiskā indikācija.

Ja ķēdē tiek izmantots viens 4 ciparu indikators, tad pareizai darbībai tas jāiestata uz OK. Ja jums ir jāvada 8 biti, tad tiek izmantoti 8 MK porti, bet pārējie 4 porti vienkārši kontrolē bitus (4. fāzē tiem vajadzētu būt augstam līmenim). Ir vērts atzīmēt, ka šajā gadījumā ir iespējams izmantot indikatorus gan ar OK, gan ar OA, attiecīgi savienojot segmentus vai ciparus ar reģistru (zemāk minēto iemeslu dēļ pirmajā gadījumā ir vēlams organizēt DI segmentus pa- segmentā, bet otrajā - bitu pa bitam).

Izmantojot šo metodi, PIC16F676 MCU var savienot divus četru bitu indikatorus, izmantojot vienu maiņu reģistru, vienlaikus atstājot lietošanai pat četrus brīvus portus. Piemēram, šādam savienojumam cilvēki izmantoja DI un analogās ievades funkciju kombināciju dažos MK portos (manuprāt, ārkārtīgi apšaubāms lēmums), kas izraisīja ievērojamu ķēdes sarežģītību un dažus ierobežojumus, ko autori brīdināt par. Izmantojot manu pieslēguma shēmu, viss atrisinātos vienkārši un skaisti - atsevišķas ieejas, atsevišķas indikācijas, plus vēl divi porti (ieskaitot MCLR) pogām.

Lai pārbaudītu šo vadības metodi, PIC12F629 MCU un FYQ3641A indikatoram tiek piedāvāta šāda vienkārša shēma, kas uz indikatora pārmaiņus parāda vārdu “test” un skaitli 1234.

Šeit tika nolemts izmantot segmentu pa segmentam DI (katru brīdi tiek ieslēgts viens segments, un uz bitu tapām ir kods, kur katrā bitā: 0 - ja šis segments ir jāiedegas dotajā bitā un 1 - citādi), kurā maksimālās strāvas tiek pārnestas uz reģistru . Kāpēc? Tam ir divi iemesli: pirmkārt, 74HC595 izeju maksimālā slodze ir 35 mA pretstatā 25 mA PIC kontrolleriem; otrs un galvenais ir tas, ka strāva, kas ir tuvu robežai caur MK izejas portu, teorētiski var paaugstināt tā izejas potenciālu līdz reģistra ieeju pārslēgšanas līmenim, kas novestu pie darbības kļūdām. Tātad MK pieslēgvietās ieplūst strāvas 6-7 mA, un potenciāli izejās noteikti nepārsniedz TTL līmeni.

Kā minēts iepriekš, pārtraukuma intervāls ir 2 ms, kas atbilst indikatora atsvaidzes intensitātei 64 Hz un tā spīdums ir diezgan ērts acij.

Šī DI metode, cita starpā, ļāva uz pusi samazināt strāvu ierobežojošo rezistoru skaitu (R2-R5).

Ierīce ir samontēta uz tā sauktā “bezlodētā” maizes paneļa.

Indikatoru var aizstāt ar jebkuru no 3641A sērijām.

Ķēde tiek darbināta no stabilizēta 5 V avota. Es izmantoju īpašu stabilizatora plati, kas paredzēta lietošanai kopā ar iepriekš minēto maizes plati.

MK vadības programma ir uzrakstīta C valodā un tulkota vidē.

Kods MikroC, projekts, HEX fails aplikācijā.

Lai izmantotu šo savienojuma metodi komerciālos izstrādēs, lūdzu, sazinieties ar mani.

Radioelementu saraksts

Apzīmējums Tips Denominācija Daudzums PiezīmeVeikalsMans piezīmju bloks
DD1 MK PIC 8 bitu

PIC12F629

1 Uz piezīmju grāmatiņu
DD2 Reģistrēties74HC5951 Uz piezīmju grāmatiņu
H.L. IndikatorsFYQ36411 Uz piezīmju grāmatiņu
R1 Rezistors

30 kOhm

1 Uz piezīmju grāmatiņu
R2 Rezistors

430 omi

1 Uz piezīmju grāmatiņu
R3 Rezistors

430 omi

1