Sedemsegmentový indikátor. Arduino a štvormiestny sedemsegmentový indikátor 4-miestny 7-segmentový indikátorový obvod


Schéma zapojenia jednomiestneho sedemsegmentového indikátora
Schéma zapojenia pre viacmiestny sedemsegmentový indikátor

Digitálne informačné zobrazovacie zariadenie. Toto je najjednoduchšia implementácia indikátora, ktorý môže zobrazovať arabské číslice. Na zobrazenie písmen sa používajú zložitejšie viacsegmentové a maticové indikátory.

Ako hovorí jeho názov, pozostáva zo siedmich zobrazovacích prvkov (segmentov), ​​ktoré sa zapínajú a vypínajú samostatne. Ak ich zahrniete do rôznych kombinácií, možno ich použiť na vytvorenie zjednodušených obrázkov arabských číslic.
Segmenty sú označené písmenami A až G; ôsmy segment - desatinná čiarka (desatinná bodka, DP), určený na zobrazenie zlomkových čísel.
Na sedemsegmentovom ukazovateli sa občas zobrazia písmená.

Prichádzajú v rôznych farbách, zvyčajne biela, červená, zelená, žltá a modrá. Okrem toho môžu mať rôzne veľkosti.

LED indikátor môže byť tiež jednomiestny (ako na obrázku vyššie) alebo viacmiestny. V zásade sa v praxi používajú jedno-, dvoj-, troj- a štvormiestne LED indikátory:

Okrem desiatich číslic sú sedemsegmentové indikátory schopné zobrazovať písmená. Ale len málo písmen má intuitívne sedemsegmentové znázornenie.
V latinčine: veľké A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, malé písmená a, b, c, d, e, g , h, i, n, o, q, r, t, u.
V azbuke: A, B, V, G, g, E, i, N, O, o, P, p, R, S, s, U, Ch, Y (dve číslice), b, E/Z.
Preto sa sedemsegmentové indikátory používajú len na zobrazenie jednoduchých správ.

Celkovo môže sedemsegmentový LED indikátor zobraziť 128 znakov:

Typický LED indikátor má deväť vodičov: jeden vedie ku katódam všetkých segmentov a ďalších osem vedie k anóde každého segmentu. Táto schéma sa nazýva "obvod so spoločnou katódou", existujú aj schémy so spoločnou anódou(potom je to naopak). Na rôznych koncoch základne sa často nevyrába jedna, ale dve spoločné svorky - to zjednodušuje zapojenie bez zväčšenia rozmerov. Existujú aj takzvané „univerzálne“, ale ja som sa s takými osobne nestretol. Okrem toho existujú indikátory so vstavaným posuvným registrom, čo výrazne znižuje počet zapojených pinov portu mikrokontroléra, ale sú oveľa drahšie a v praxi sa používajú len zriedka. A keďže tá nesmiernosť sa nedá uchopiť, nebudeme nateraz o takýchto ukazovateľoch uvažovať (sú však aj ukazovatele s oveľa väčším počtom segmentov, maticové).

Viacmiestne LED indikátoryčasto fungujú na dynamickom princípe: výstupy segmentov s rovnakým názvom všetkých číslic sú navzájom spojené. Na zobrazenie informácie o takomto indikátore musí riadiaci mikroobvod cyklicky privádzať prúd na spoločné svorky všetkých číslic, pričom prúd je privádzaný na svorky segmentov v závislosti od toho, či daný segment na danej číslici svieti.

Pripojenie jednomiestneho sedemsegmentového indikátora k mikrokontroléru

Nižšie uvedený diagram ukazuje ako je pripojený jednomiestny sedemsegmentový ukazovateľ k mikrokontroléru.
Treba brať do úvahy, že ak ukazovateľ s SPOLOČNÁ KATÓDA, potom je pripojený jeho spoločný výstup "zem" a segmenty sa zapália podávaním logická jednotka na výstup portu.
Ak je indikátor SPOLOČNÁ ANÓDA, potom sa dodáva na jeho spoločný vodič "plus" napätie a segmenty sa zapália prepnutím výstupu portu do stavu logická nula.

Indikácia v jednocifernom LED indikátore sa vykonáva aplikáciou binárneho kódu na kolíky portu mikrokontroléra zodpovedajúcej číslice zodpovedajúcej logickej úrovne (pre indikátory s OK - logické jednotky, pre indikátory s OA - logické nuly).

Rezistory obmedzujúce prúd môže alebo nemusí byť v diagrame. Všetko závisí od napájacieho napätia dodávaného do indikátora a technických charakteristík indikátorov. Ak je napríklad napätie privádzané do segmentov 5 voltov a sú navrhnuté pre prevádzkové napätie 2 volty, musia byť nainštalované odpory obmedzujúce prúd (aby sa obmedzil prúd cez ne pre zvýšené napájacie napätie a nespálili sa nielen indikátor, ale aj port mikrokontroléra).
Je veľmi ľahké vypočítať hodnotu odporov obmedzujúcich prúd pomocou vzorca starého otca Ohm.
Napríklad charakteristiky indikátora sú nasledovné (prevzaté z údajového listu):
— prevádzkové napätie — 2 volty
— prevádzkový prúd — 10 mA (= 0,01 A)
— napájacie napätie 5 voltov
Vzorec na výpočet:
R= U/I (všetky hodnoty v tomto vzorci musia byť v ohmoch, voltoch a ampéroch)
R= (napájacie napätie - prevádzkové napätie)/prevádzkový prúd
R= (5-2)/0,01 = 300 Ohm

Schéma zapojenia viacmiestneho sedemsegmentového LED indikátora V podstate rovnako ako pri zapojení jednociferného ukazovateľa. Jediná vec je, že do katód (anód) indikátorov sú pridané riadiace tranzistory:

Na diagrame to nie je znázornené, ale medzi bázami tranzistorov a kolíkmi portu mikrokontroléra je potrebné zahrnúť odpory, ktorých odpor závisí od typu tranzistora (hodnoty rezistorov sú vypočítané, ale môžete tiež skúsiť použiť odpory s nominálnou hodnotou 5-10 kOhm).

Indikácia výbojmi sa vykonáva dynamicky:
— binárny kód príslušnej číslice sa nastaví na výstupoch portu PB pre 1. číslicu, potom sa logická úroveň aplikuje na riadiaci tranzistor prvej číslice
— binárny kód príslušnej číslice sa nastaví na výstupoch portu PB pre 2. číslicu, potom sa logická úroveň aplikuje na riadiaci tranzistor druhej číslice
— binárny kód príslušnej číslice sa nastaví na výstupoch portu PB pre 3. číslicu, potom sa logická úroveň aplikuje na riadiaci tranzistor tretej číslice
- tak v kruhu
V tomto prípade je potrebné vziať do úvahy:
— pre ukazovatele s OK používa sa štruktúra riadiaceho tranzistora NPN(riadené logickou jednotkou)
- pre indikátor s OA- štruktúrny tranzistor PNP(riadené logickou nulou)

Tentoraz sa článok bude zaoberať jedným z najzaujímavejších modulov, a to - viacmiestny sedemsegmentový indikátor založený na čipe MAX7219. Prečo? viacbitový? Odpoveď je jednoduchá – počet číslic je počet číslic, ktoré dokáže modul zobraziť. Napríklad na fotografii nižšie sú zobrazené tri typy viacmiestnych indikátorov zľava doprava - 4-miestne, 6-miestne, 8-miestne. Navyše, prvý je 4-miestny číselník. Rozdiel medzi číselníkom a bežným je v tom, že má znamienko dvojbodky, zatiaľ čo v každom bežnom indikátore je tento znak nahradený bodkou v spodnej časti vedľa čísla.

V tomto článku príslušné moduly fungujú na báze mikroobvodu MAX7219. Tento čip je ovládačom pre sedemsegmentové LED indikátory, ako aj matice LED 8x8 a nebudeme brať do úvahy schémy zapojenia tohto ovládača. Pripravený modul sa jednoducho berie ako základ; budú uvedené príklady pripojenia k doske Arduino UNO a pracovali s funkciami knižnice LedControl. Mimochodom, ako už bolo spomenuté, matice LED 8x8 fungujú aj na základe ovládača MAX7219, a ak má niekto záujem, vitajte pri článkoch:

Takže, začnime... Myslím, že o multibite bol podaný dobrý popis, ale tu je dôvod sedemsegmentový? Odpoveď tiež nie je taká zložitá - pretože sedem LED diód, indexovaných písmenami, sa používa na vytvorenie symbolu alebo zobrazenie čísla A, B, C, D, E, F, G, Nižšie uvedená tabuľka ukazuje, ako sa to označuje:

Ako je zrejmé z tabuľky, je tu aj ôsma LED - D.P. Znak alebo číslicu môžete úplne zakódovať do 1 bajtu nastavením alebo vymazaním konkrétneho bitu, ako je znázornené na príklade kódovania znakov J. V príklade sú bity nastavené B, C, D, E, ktorý umožňuje zobraziť určený znak na sedemsegmentovom indikátore.

Od teórie k praxi – pripojíme 8-bitový modul k doske Arduino Uno podľa schémy nižšie:

Na zobrazenie symbolov slúži niekoľko funkcií z knižnice zásuvných modulov LedControl.h. Pozrime sa na každú z týchto funkcií v poradí, počnúc funkciou setDigit().

Prototyp deklarácie funkcie na zobrazenie čísla a argumentov odovzdaných funkcii:

setDigit(int addr, int cifra, hodnota bajtu, boolean dp);

Kde -

int addr -adresa modulu na zberniciSPI 0 SPI začína od nuly)

int číslica - 0 , 7

hodnota bajtu -hodnota (číslo od 0 do 9), ktorú je potrebné zobraziť v číslici, ktorej číslo je uvedené v parametri int digit

boolovská hodnota dp - int číslica. Ak je parameter pravda potom sa bod zobrazí, ak falošné potom sa bod nezobrazí.

Prototyp deklarácie funkcie na zobrazenie symbolu a argumentov odovzdaných funkcii:

setChar(int addr, int cifra, hodnota znaku, boolean dp);

int addr - adresa modulu na zberniciSPI pre ktorú sa funkcia volá, ak existuje iba jeden modul, potom sa tento parameter rovná0 (predvolené adresovanie zariadení na zberniciSPI začína od nuly)

int číslica - poradové číslo číslice v module displeja štandardne pre viacmiestne indikátory číslovanie číslic začína číslicou úplne vpravo, respektíve číslo číslice úplne vpravo sa rovná;0 , a číslo číslice úplne vľavo sa v našom prípade rovná7

hodnota znaku - znak, ktorý sa má zobraziť v číslici, ktorej číslo je špecifikované parametromint číslica

boolovská hodnota dp - tento parameter je zodpovedný za zobrazenie bodky na číslici, ktorej číslo je uvedené v parametri int číslica. Ak je parameter pravda potom sa bod zobrazí, ak falošné potom sa bod nezobrazí.

Samostatným bodom, ktorý stojí za zmienku, je funkcia setChar() môže zobraziť iba obmedzenú množinu znakov, ako napríklad:

  • 0 1 2 3 4 5 6 7 8 9 číslica sa zobrazí ako symbol
  • A a
  • B b
  • S s znak sa zobrazí malými písmenami
  • D d znak sa zobrazí malými písmenami
  • E e znak sa zobrazí veľkými písmenami
  • F f znak sa zobrazí veľkými písmenami
  • H h znak sa zobrazí malými písmenami
  • Ll znak sa zobrazí veľkými písmenami
  • P p znak sa zobrazí veľkými písmenami
  • - znamienko mínus"
  • . , bodové zobrazenie
  • _ podčiarknuť
  • <Пробел> nastaviť znak medzery

V testovacom náčrte môžete nastaviť úlohu takto:

  1. Zobrazte čísla od 1 do 8 po jednom bez bodky
  2. Vyplňte všetky číslice modulu displeja číslami od 1 do 8 a zobrazte všetky body uvedených číslic
  3. Nakreslite bitové pole so znakmi vopred zakódovanými v binárnom kóde, výsledkom by malo byť „pravidlá Arduina!!!“

Vzhľadom na obmedzenú znakovú sadu je funkcia setChar() nie je vhodný pre skúšobný náčrt, pretože nebude schopný normálne nakresliť frázu špecifikovanú v bode 3. Namiesto tejto funkcie použijeme funkciu setRow(). Takže... funkcia setRow() už bol nami testovaný v článkoch o štúdiu matíc 8x8 LED, poďme si opäť popísať prototyp volania a parametre tejto funkcie.

Prototyp deklarácie funkcie setRow() a argumenty odovzdané funkcii:

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

int addr - adresa modulu na zberniciSPI pre ktorú sa funkcia volá, ak existuje iba jeden modul, potom sa tento parameter rovná0 (predvolené adresovanie zariadení na zberniciSPI začína od nuly)

int riadok - poradové číslo číslice v module displeja štandardne pre viacmiestne indikátory číslovanie číslic začína číslicou úplne vpravo, respektíve číslo číslice úplne vpravo sa rovná;0 , a číslo číslice úplne vľavo sa v našom prípade rovná7

hodnota bajtu- hodnota v binárnom formáte (príklad B00000000, možné sú aj alternatívy v desiatkovej a šestnástkovej sústave), ktorá zakóduje požadovaný znak. Tabuľka kódovania znakov vám pomôže správne zakódovať požadovaný znak.

No a na konci článku testovací náčrt a video, ako to funguje:

#include "LedControl.h" /* * Zahrňte knižnicu LedControl.h * a vytvorte objekt triedy LedControl * v tomto prípade musí byť 7-segmentový displej s ovládačom MAX72xx * pripojený k doske Arduino nasledovne: * Arduino -> Modul displeja MAX72xx * Arduino -> Modul displeja MAX72xx * Arduino -> Modul displeja MAX72xx * Arduino -> Modul displeja MAX72xx * Arduino -> Modul displeja MAX72xx * */ LedControl lc = LedControl(12, 11, 10 ); //Pole so zakódovanými znakmi, //Fráza "Arduino pravidlá!!!" Bajt AR = (b0111101111, // A b00000101, // R B001111101, // D B00011100, // U B00010000, // I B00010101, // N B000, /11101 R01.01 00, // U B00001100 , //l B01001111, //E B01011011, //S B10110000, //! void setup() ( //Zariadenie (7-segmentový displej) sa prepne z režimu spánku lc.shutdown(0, false); //Nastaví jas displeja na 8 //Celkové možné režimy jasu od 0 do 15 lc. setIntensity(0 ,8) //Vymazanie displeja lc.clearDisplay(0) ( //Najjednoduchšia iterácia čísel od 1 do 8 podľa číslic 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); ) //Iterovanie čísel bez vymazania obrazovky pre (int i = 0, j = 7;< 8, j >= 0; i++, j--) ( lc.setDigit(0, j, byte(i + 1), pravda); oneskorenie(400); ) lc.clearDisplay(0); //Vykreslenie frázy "Arduino pravidlá!!!" int n = 0; for(int i = 0; i< 2; i ++) { for(int j = 7; j >= 0; j --) ( if(n > 6 && !(i % 2)) ( pokračovať; ) else ( lc.setRow(0, j, ar[n]); delay(400); n ++; ) ) lc .clearDisplay(0); ) oneskorenie(400); lc.clearDisplay(0); )


Povoľte javascript, aby komentáre fungovali.

V dnešnom článku si povieme niečo o 7-segmentových indikátoroch a o tom, ako sa „spriateliť“ s Arduinom. Možností je viacero. Najjednoduchšie je, samozrejme, ísť do a kúpiť si hotový indikátor s integrovaným štítom (tak sa volá zhodná karta), no nehľadáme jednoduché cesty, tak sa vyberieme trochu náročnejšou cestou. Začiatočníci – nezľaknite sa, tento článok, rovnako ako moje predchádzajúce články ( A ) len pre teba. Nechajte guruov písať pre tých istých skúsených guruov a ja som začiatočník – píšem pre začiatočníkov.

Prečo 7-segmentový indikátor? Koniec koncov, existuje toľko rôznych obrazoviek s veľkým počtom znakov, čiar, rôznych uhlopriečok a rozlíšení, čiernobielych a farebných, z ktorých najdostupnejšie stoja pár dolárov... A tu: „starý“ jeden, neuveriteľne jednoduchý, ale vyžadujúci veľké množstvo kolíkov 7-segmentový indikátor, ale tento „starý muž“ má tiež výhodu. Faktom je, že pomocou tu uvedených náčrtov môžete oživiť nielen indikátor s výškou číslic 14 mm, ale aj vážnejšie (hoci domáce) projekty a číslice metrov sú v tomto prípade ďaleko od limitu. Pre obyvateľov hlavných miest to nemusí byť také zaujímavé, ale obyvatelia Novokatsapetovky alebo Nizhnyaya Kedrovky budú veľmi radi, ak sa v klube alebo dedinskej rade objavia hodiny, ktoré dokážu zobraziť aj dátum a teplotu, a budú hovoriť o tvorcovi. týchto hodín na veľmi dlhú dobu. Ale takéto hodinky sú témou samostatného článku: medzi návštevníkmi bude túžba - napíšem. Všetko napísané vyššie možno považovať za úvod. Rovnako ako môj posledný článok, aj tento bude pozostávať z častí, tentokrát z dvoch. V prvej časti indikátor jednoducho „spravujeme“ a v druhej sa ho pokúsime prispôsobiť niečomu aspoň trochu užitočnému. Pokračujme teda:

Časť prvá. Experimentálne – edukačné

Základom tohto projektu je ARDUINO UNO, ktoré je nám už dobre známe z predchádzajúcich článkov. Dovoľte mi pripomenúť, že najjednoduchší spôsob nákupu je tu: alebo tu: , navyše budete potrebovať 4-miestny 7-segmentový indikátor. Mám najmä GNQ-5641BG-11. Prečo práve tento? Áno, jednoducho preto, že som ho pred 5 rokmi omylom kúpil, bol som lenivý ísť ho vymeniť, a tak celý ten čas ležal a čakal v krídlach. Myslím si, že to zvládne každý so spoločnou anódou (a so spoločnou katódou je to možné, ale budete musieť invertovať údaje poľa a iné hodnoty portov - teda zmeniť ich na opačné), pokiaľ nie je príliš výkonný, aby nespálil Arduino. Okrem toho sa zo širšieho dajú „odtrhnúť“ 4 odpory obmedzujúce prúd, každý cca 100 Ohmov a kúsok kábla (mne stačilo 10 cm) na 12 pinov (jadier), čo som spravil. Alebo ich môžete dokonca spájkovať samostatnými drôtmi, nebudú žiadne problémy. Na tabuľu budete potrebovať aj špendlíky (11 kusov), aj keď ak budete opatrní, zaobídete sa aj bez nich. Náčrt indikátora je možné vidieť na obrázku 1 a jeho diagram na obrázku 2. Tiež si všimnem, že je lepšie dodávať nie viac ako 2,1 V do každého segmentu tohto indikátora (obmedzeného 100-ohmovými odpormi) a v tomto prípade nebude spotrebovať viac ako 20 mA. Ak sa rozsvieti číslica „8“, spotreba nepresiahne 7x20=140 mA, čo je pre Arduino výstupy celkom prijateľné. Zvedavý čitateľ si položí otázku: „Ale 4 výboje po 140 mA sú už 4x140 = 560 mA, a to je už príliš veľa!“ Odpoviem - zostane 140 Ako? Pokračuj v čítaní! Umiestnenie kolíkov na indikátore je vidieť na obrázku 3. A zapojenie urobíme podľa tabuľky 1.


Ryža. 1 - Náčrt indikátora


Ryža. 2 - Obvod indikátora


Ryža. 3 - Umiestnenie kolíka

stôl 1

Pin Arduino Uno

Indikátorový kolík

Poznámka

Segment G

Segment F

Segment E

Segment D

Segment C

Segment B

Segment A

Spoločnú anódu segmentu č. 1 pripojte cez odpor 100 Ohm.

Spoločnú anódu segmentu č. 2 pripojte cez odpor 100 Ohm.

Spoločnú anódu segmentu č. 3 pripojte cez odpor 100 Ohm.

Spoločnú anódu segmentu č. 6 pripojte cez odpor 100 Ohm.



Vyplníme jednoduchý náčrt, ktorým je jednoduchá „počítacia tabuľka“ od 0 do 9:


Teraz trochu objasnenia. DDRD je register portu D (DDRB - resp. port B) za "strašidelným" slovom "register" je len "skrytá" funkcia, ktorá indikuje, či port bude niečo čítať svojim pinom (prijímať informácie), alebo naopak. naopak tam bude možné niečo urobiť a potom napísať (poskytnúť informácie). V tomto prípade riadok DDRD=B11111111; označuje, že všetky piny portu D sú výstupné, t.j. vyjdú z nich informácie. Písmeno „B“ znamená, že do registra je zapísané binárne číslo. Netrpezlivý čitateľ sa okamžite opýta: "Je možné desatinné číslo!?!" Ponáhľam sa vás uistiť, že je to možné, ale o tom trochu neskôr. Ak by sme chceli použiť polovicu portu pre vstup a polovicu pre výstup, mohli by sme to špecifikovať takto: DDRD=B11110000; jedničky zobrazujú piny, ktoré budú poskytovať informácie, a nuly tie, ktoré tieto informácie dostanú. Hlavná vymoženosť registra spočíva aj v tom, že nie je potrebné registrovať všetky piny 8x, t.j. v programe uložíme 7 riadkov. Teraz sa pozrime na nasledujúci riadok:

PORTB=B001000; // nastaviť kolík 11 portu B na vysokú úroveň

PORTB je dátový register portu B, t.j. Zapísaním čísla do neho označíme, ktorý pin portu bude mať jednotku a ktorý nulu. Okrem komentára poviem, že ak zoberiete Arduino Uno tak, že vidíte ovládač a digitálne piny sú navrchu, zápis do registra bude jasný, t.j. ktorá „nula“ (alebo „jedna“) zodpovedá ktorému kolíku, t.j. Nula úplne vpravo na porte B je zodpovedná za 8. kolík a ľavá za 13. (ktorý má zabudovanú LED). Pre port D je pravý pre pin 0, ľavý pre pin 7.
Dúfam, že po takýchto podrobných vysvetleniach je všetko jasné, ale keďže je to jasné, navrhujem vrátiť sa k systému desatinných čísel, ktorý je nám známy a milovaný od detstva. A ešte jedna vec - náčrt 25 riadkov sa môže zdať málo, ale pre začiatočníka je stále trochu ťažkopádny. Znížime to.

Vyplňte ešte jednoduchší náčrt, rovnakú „počítaciu tabuľku“:


Video 1.
Len 11 riadkov! Toto je naša cesta, „nová cesta“! Upozorňujeme, že namiesto binárnych čísel sa do registrov zapisujú desatinné čísla. Samozrejme, pre desatinné čísla nie sú potrebné žiadne písmená na začiatku. Myslím, že by nebolo na škodu dať všetky čísla do tabuliek.

Tabuľka 2. Zhoda zobrazeného znaku s údajmi portu

Spoločná anóda

Spoločná katóda

Binárny systém

Desatinná sústava

Binárny systém

Desatinná sústava

Tabuľka 3. Zhoda zobrazenej číslice s údajmi o porte

Spoločná anóda

Spoločná katóda

Binárny systém

Desatinná sústava

Binárny systém

Desatinná sústava



Pozor! Údaje v tabuľkách 2 a 3 platia len pri zapojení podľa tabuľky 1.
Teraz nahrajte náčrt s „počítacou tabuľkou“ od 0 do 9999:




Ryža. 4 - Počítacia tabuľka

Náčrt v akcii môžete vidieť naVideo 2.

V tomto náčrte je viac komentárov ako samotného kódu. Nemali by byť žiadne otázky... Okrem toho, čo je to za „cyklus blikania“, čo tam v skutočnosti bliká a prečo? A na to existuje aj nejaká premenná...
A celá pointa je v tom, že segmenty s rovnakým názvom všetkých štyroch kategórií sú spojené v jednom bode. Al, A2, A3 a A4 majú spoločnú katódu; A1, B1,…..G1 spoločná anóda. Takže súčasným použitím „1234“ na 4-ciferný indikátor dostaneme „8888“ a budeme veľmi prekvapení. Aby ste tomu zabránili, musíte najskôr rozsvietiť „1“ vo vašej kategórii, potom ju vypnúť, rozsvietiť „2“ vo vašej atď. Ak to urobíte veľmi rýchlo, blikanie čísel sa zlúči ako rámčeky na filme a oko si to prakticky nevšimne. A maximálna hodnota blikajúcej premennej v tomto prípade riadi rýchlosť zmeny čísel na indikátore. Mimochodom, práve vďaka tomuto „blikaniu“ je maximálna spotreba prúdu iba 140 mA namiesto 560. Teraz navrhujem prejsť na niečo užitočnejšie.

Druhá časť. Aspoň trochu užitočné

V tejto časti vypíšeme znaky z osobného počítača do 7-segmentového indikátora pomocou ARDUINO MEGA. Prečo zrazu vznikla myšlienka „vymeniť kone na križovatke“? Existujú dva dôvody: po prvé, nikdy predtým som vo svojich článkoch neuvažoval o ARDUINO MEGA; a za druhé, v ARDUINO UNO som stále neprišiel na to, ako môžem dynamicky prehodiť COM port a port D. Ale som nováčik - dá sa mi odpustiť. Tento ovládač si samozrejme môžete zakúpiť tu: . Na realizáciu plánu som musel zobrať spájkovačku a znovu spájkovať kábel zo strany Arduina a tiež napísať nový náčrt. Ako je kábel spájkovaný, môžete vidieť na obrázku 5. Ide o to, že ARDUINO MEGA a ARDUINO UNO majú rôzne piny portov a Mega má oveľa viac portov. Zhoda použitých kolíkov je uvedená v tabuľke 4.



Ryža. 5 - Nové káblové rozvody

Tabuľka 4

Port Mega


Pozor! Táto tabuľka platí len pre tento projekt!

Mali by ste tiež poznamenať, že port C Arduino Mega „začína“ od kolíka 37 a potom v zostupnom poradí a port A začína od kolíka 22 a potom vo vzostupnom poradí.



Ryža. 6 - Celkový pohľad



Malé implementačné funkcie: vydáme 4 znaky. Znaky musia byť čísla. Ak ste zadali „1234“ a my uvidíme „1234“, ak ste zadali „123456“, stále uvidíme „1234“, ak ste zadali „ytsuk“, „fyva1234“, „otiog485909oapom“ - nič sa nám nezobrazí. Ak ste zadali „pp2345mm“, uvidíme „23“, t.j. malé, vstavané „zabezpečenie proti chybám“.

Skutočný náčrt:



Ako tento program funguje, môžete vidieť naVideo 3.



Recenziu pripravil Pavel Sergeev

Sedemsegmentové LED indikátory sú veľmi obľúbené medzi digitálnymi zobrazovacími zariadeniami a používajú sa na predných paneloch mikrovlnných rúr, práčok, digitálnych hodín, počítadiel, časovačov atď. na veľké vzdialenosti a v širokom pozorovacom uhle. Na pripojenie sedemsegmentového 4-bitového indikátora k mikrokontroléru bude potrebných aspoň 12 I/O liniek. Preto je takmer nemožné použiť tieto indikátory s mikrokontrolérmi s malým počtom kolíkov, napríklad série od spoločnosti. Samozrejme, môžete použiť rôzne metódy multiplexovania (ich popis nájdete na webovej stránke v časti „Schémy“), ale aj v tomto prípade existujú určité obmedzenia pre každú metódu a často používajú zložité softvérové ​​​​algoritmy.

Pozrieme sa na spôsob pripojenia indikátora cez rozhranie SPI, ktorý si vyžiada len 3 I/O linky mikrokontroléra. Súčasne zostane ovládanie všetkých segmentov indikátora zachované.

Na pripojenie 4-bitového indikátora k mikrokontroléru cez zbernicu SPI sa používa špecializovaný čip ovládača vyrobený spoločnosťou. Mikroobvod je schopný riadiť osem sedemsegmentových indikátorov so spoločnou katódou a obsahuje dekodér BCD, segmentové budiče, multiplexný obvod a statickú pamäť RAM na ukladanie číselných hodnôt.

Prúd cez segmenty indikátora sa nastavuje iba pomocou jedného externého odporu. Čip navyše podporuje ovládanie jasu indikátora (16 úrovní jasu) pomocou vstavaného PWM.

Obvod diskutovaný v článku je obvod zobrazovacieho modulu s rozhraním SPI, ktorý možno použiť v amatérskych rádiových konštrukciách. A nás viac nezaujíma samotný obvod, ale práca s mikroobvodom cez rozhranie SPI. Napájanie +5 V modulu je privedené na pin Vcc, signálne linky MOSI, CLK a CS sú určené na komunikáciu medzi nadriadeným zariadením (mikrokontrolérom) a podriadeným (čip MAX7219).

Mikroobvod sa používa v štandardnom zapojení, jedinými potrebnými externými komponentmi sú odpor, ktorý nastavuje prúd cez segmenty, ochranná dióda pre napájanie a filtračný kondenzátor pre napájanie.

Dáta sa na čip prenášajú v 16-bitových paketoch (dva bajty), ktoré sú umiestnené v zabudovanom 16-bitovom posuvnom registri na každej stúpajúcej hrane signálu CLK. 16-bitový paket označujeme ako D0-D15, kde bity D0-D7 obsahujú dáta, D8-D11 obsahujú adresu registra, bity D12-D15 nemajú význam. Bit D15 je najvýznamnejší bit a je prvým prijatým bitom. Čip je síce schopný ovládať osem ukazovateľov, no budeme uvažovať o práci len so štyrmi. Sú riadené výstupmi DIG0 - DIG3, umiestnenými v poradí sprava doľava, 4-bitové adresy (D8-D11), ktoré im zodpovedajú sú 0x01, 0x02, 0x03 a 0x04 (hexadecimálny formát). Register číslic je implementovaný pomocou RAM na čipe s organizáciou 8x8 a je priamo adresovateľný, takže každú jednotlivú číslicu na displeji je možné kedykoľvek aktualizovať. Nasledujúca tabuľka zobrazuje adresovateľné číslice a riadiace registre čipu MAX7219.

Registrovať

Adresa

HEX hodnota

Žiadna operácia

Režim dekódovania

Počet ukazovateľov

Vypnúť

Test indikátora

Riadiace registre

Čip MAX1792 má 5 riadiacich registrov: režim dekódovania (Decode-Mode), ovládanie jasu indikátora (Intensity), register počtu pripojených indikátorov (Scan Limit), ovládanie zapnutia/vypnutia (Shutdown), testovací režim (Display Test).

Zapnutie a vypnutie čipu

Po privedení napájania na čip sa všetky registre vynulujú a čip prejde do režimu vypnutia. V tomto režime je displej vypnutý. Ak chcete prejsť do normálneho prevádzkového režimu, musíte nastaviť bit D0 registra Shutdown (adresa 0Сh). Tento bit je možné kedykoľvek vymazať, aby sa prinútil ovládač vypnúť, pričom obsah všetkých registrov zostane nezmenený. Tento režim možno použiť na úsporu energie alebo v režime alarmu blikaním indikátora (postupná aktivácia a deaktivácia režimu vypnutia).

Mikroobvod sa prepne do režimu vypnutia postupným prenosom adresy (0Сh) a údajov (00h) a prenosom 0Ch (adresa) a potom 01h (údaje) sa vráti do normálnej prevádzky.

Režim dekódovania

Pomocou registra výberu režimu dekódovania (adresa 09h) môžete použiť dekódovanie BCD kódu B (zobrazenie znakov 0-9, E, H, L, P, -) alebo bez dekódovania pre každú číslicu. Každý bit v registri zodpovedá jednej číslici, nastavenie logickej jednotky zodpovedá zapnutiu dekodéra pre tento bit, nastavenie 0 znamená, že dekodér je vypnutý. Ak sa použije dekodér BCD, potom sa berie do úvahy iba najnižší úryvok údajov v číslicových registroch (D3-D0), bity D4-D6 sa ignorujú, bit D7 nezávisí od dekodéra BCD a je zodpovedný za zapnutie. desatinná čiarka na indikátore, ak D7 = 1. Napríklad, keď sa bajty 02h a 05h posielajú za sebou, indikátor DIG1 (druhá číslica sprava) zobrazí číslo 5. Podobne pri odosielaní 01h a 89h indikátor DIG0 zobrazí číslo 9 vrátane desatinnej čiarky . V tabuľke nižšie je uvedený úplný zoznam znakov zobrazených pri použití dekodéra BCD integrovaného obvodu.

Symbol

Údaje v registroch

Povolené segmenty = 1

Prázdny

*Desatinná čiarka sa nastavuje bitom D7=1

Keď je BCD dekodér vyradený z prevádzky, dátové bity D7-D0 zodpovedajú segmentovým čiaram (A-G a DP) indikátora.

Ovládanie jasu indikátora

Čip umožňuje programovo ovládať jas indikátorov pomocou vstavaného PWM. Výstup PWM je riadený nibble nízkeho rádu (D3-D0) registra Intensity (adresa 0Ah), ktorý umožňuje nastaviť jednu zo 16 úrovní jasu. Keď sú všetky bity kúskov nastavené na 1, zvolí sa maximálny jas indikátora.

Počet pripojených indikátorov

Register Scan-Limit (adresa 0Bh) nastavuje hodnotu počtu bitov obsluhovaných mikroobvodom (1 ... 8). Pre našu 4-bitovú verziu by sa do registra mala zapísať hodnota 03h.

Test indikátora

Register zodpovedný za tento režim sa nachádza na adrese 0Fh. Nastavením bitu D0 v registri užívateľ zapne všetky segmenty indikátora, pričom sa obsah riadiaceho a dátového registra nemení. Ak chcete deaktivovať režim testu displeja, bit D0 musí byť 0.

Rozhranie s mikrokontrolérom

Modul indikátora je možné pripojiť k akémukoľvek mikrokontroléru, ktorý má tri voľné I/O linky. Ak má mikrokontrolér zabudovaný hardvérový modul SPI, potom je možné indikačný modul pripojiť ako podriadené zariadenie na zbernicu. V tomto prípade môžu byť SPI signálové linky SDO (sériový výstup dát), SCLK (sériové hodiny) a SS (podriadený výber) mikrokontroléra priamo pripojené k pinom MOSI, CLK a CS čipu (modulu) MAX7219, Signál CS je aktívny nízko.

Ak mikrokontrolér nemá hardvérové ​​SPI, rozhranie môže byť usporiadané softvérovo. Komunikácia s MAX7219 začína potiahnutím a podržaním linky CS na nízkej úrovni a následným odoslaním 16 bitov dát sekvenčne (najprv MSB) na linke MOSI na vzostupnej hrane signálu CLK. Po dokončení prenosu sa čiara CS opäť zvýši.

V sekcii na stiahnutie si používatelia môžu stiahnuť zdrojový text testovacieho programu a HEX súbor firmvéru, ktorý implementuje konvenčné 4-bitové počítadlo so zobrazením hodnôt na indikačnom module s rozhraním SPI. Použitý mikrokontrolér je softvérovo implementované rozhranie, signálové vedenia CS, MOSI a CLK modulu indikátora sú pripojené k portom GP0, GP1 a GP2, resp. Použitý je kompilátor mikroC pre mikrokontroléry PIC (mikroElektronika

Ak chcete komentovať materiály zo stránky a získať plný prístup do nášho fóra, potrebujete Registrovať .

mob_info