LED sedmisegmentové indikátory. Sedmisegmentový indikátor Časovač na Arduino 4 segmentový indikátor

Připojení 7segmentového displeje k Arduinu je skvělý projekt na základní úrovni, jak lépe poznat svou desku Arduino. Ale je to docela snadné. Úlohu si proto poněkud zkomplikujeme a připojíme čtyřmístný sedmisegmentový ukazatel.



V tomto případě použijeme čtyřmístný LED indikační modul se společnou katodou.


Každý segment v modulu indikátoru je multiplexovaný, což znamená, že sdílí jeden bod připojení anody s ostatními segmenty svého výboje. A každý ze čtyř bitů v modulu má svůj vlastní spojovací bod se společnou katodou. To umožňuje každou číslici zapnout nebo vypnout nezávisle. Tato metoda multiplexování navíc umožňuje mikrokontroléru používat pouze jedenáct nebo dvanáct pinů namísto třiceti dvou.



LED segmenty indikátoru vyžadují připojení proud omezujících odporů při napájení z 5 V na logickém pinu. Hodnota odporu se obvykle bere mezi 330 a 470 ohmy. Doporučuje se také použít tranzistory pro zajištění dodatečného proudu, protože každý pin mikrokontroléru může dodávat maximálně 40 mA. Pokud zapnete všechny segmenty vybíjení (číslo 8), odběr proudu překročí tento limit. Níže uvedený obrázek ukazuje schéma zapojení čtyřmístného sedmisegmentového indikátoru s použitím odporových tranzistorů omezujících proud.



Následují schémata připojení indikátoru k pinům Arduino. Jsou zde použity bipolární NPN tranzistory BC547. Potenciometr 10 KOhm připojený ke vstupu desky A0 umožňuje změnit hodnotu zobrazenou na indikátoru od 0 do 1023.




Na desce Arduino digitální výstupy D2-D8 v tomto případě slouží k ovládání segmentů „a“ až „g“ a digitální výstupy D9-D12 slouží k ovládání bitů D0 až D3. Je třeba poznamenat, že v tomto příkladu není tečka použita, ale v níže uvedeném náčrtu je možné ji použít. Pin D13 desky Arduino je vyhrazen pro ovládání bodového segmentu.



Níže je uveden kód, který vám umožňuje ovládat čtyřmístný indikátor segmentu pomocí desky Arduino. V něm číselné pole určuje kódy čísel od 0 do 9 v binárním tvaru. Tato skica podporuje jak indikátory se společnou katodou (ve výchozím nastavení), tak indikátory se společnou anodou (k tomu je třeba odkomentovat jeden řádek na konci skici).


// bity představující segmenty A až G (a tečky), pro čísla 0-9 const int číslo = ( //ABCDEFG /dp B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B11110010, // 3 B // 4 B10110110, // 5 B00111110, // 6 B11100000, // 7 B11111110, // 8 B11100110, // 9 ); // piny pro bod a každý segment // DP,G,F,E,D,C,B,A const int segmentPins = ( 13,8,7,6,5,4,3,2 ); const int nbrDigits= 4; // počet číslic LED indikátoru // číslice 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; číslice--) ( if(číslo > 0) ( showDigit(číslo % 10, číslice) ; číslo = číslo / 10; ) ) ) ) // Zobrazení zadaného čísla na této číslici 7segmentového indikátoru void showDigit(int číslo, int číslice) ( 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); }


Schéma zapojení pro jednomístný sedmisegmentový indikátor
Schéma zapojení pro vícemístný sedmisegmentový indikátor

Digitální informační zobrazovací zařízení. Toto je nejjednodušší implementace indikátoru, který může zobrazovat arabské číslice. Pro zobrazení písmen se používají složitější vícesegmentové a maticové indikátory.

Jak už jeho název napovídá, skládá se ze sedmi zobrazovacích prvků (segmentů), které se samostatně zapínají a vypínají. Jejich zařazením do různých kombinací je lze použít k vytvoření zjednodušených obrázků arabských číslic.
Segmenty jsou označeny písmeny A až G; osmý segment - desetinná čárka (desetinná čárka, DP), určený k zobrazení zlomkových čísel.
Občas se na sedmisegmentovém indikátoru zobrazí písmena.

Přicházejí v různých barvách, obvykle bílé, červené, zelené, žluté a modré. Navíc mohou mít různé velikosti.

Také LED indikátor může být jednomístný (jako na obrázku výše) nebo vícemístný. V zásadě se v praxi používají jedno-, dvou-, tří- a čtyřmístné LED indikátory:

Kromě deseti číslic jsou sedmisegmentové indikátory schopné zobrazovat i písmena. Ale jen málo písmen má intuitivní sedmisegmentovou reprezentaci.
V latině: velké A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, malá písmena a, b, c, d, e, g , h, i, n, o, q, r, t, u.
V azbuce: A, B, V, G, g, E, i, N, O, o, P, p, R, S, s, U, Ch, Y (dvě číslice), b, E/Z.
Proto se sedmisegmentové indikátory používají pouze k zobrazení jednoduchých zpráv.

Celkem může sedmisegmentový LED indikátor zobrazit 128 znaků:

Typický LED indikátor má devět vodičů: jeden vede ke katodám všech segmentů a dalších osm vede k anodě každého segmentu. Toto schéma se nazývá "obvod se společnou katodou", existují i ​​schémata se společnou anodou(pak je to naopak). Často se na různých koncích základny nevyrábí jedna, ale dvě společné svorky - to zjednodušuje zapojení bez zvětšení rozměrů. Existují i ​​tzv. „univerzální“, ale s takovými jsem se osobně nesetkal. Kromě toho existují indikátory s vestavěným posuvným registrem, což značně snižuje počet zapojených pinů portu mikrokontroléru, ale jsou mnohem dražší a v praxi se používají jen zřídka. A protože ta nesmírnost se nedá uchopit, nebudeme takové ukazatele zatím uvažovat (ale jsou i ukazatele s mnohem větším počtem segmentů, maticové).

Vícemístné LED indikátoryčasto fungují na dynamickém principu: výstupy stejnojmenných segmentů všech číslic jsou propojeny dohromady. Pro zobrazení informace o takovém indikátoru musí řídící mikroobvod cyklicky přivádět proud na společné svorky všech číslic, přičemž proud je přiváděn na svorky segmentů v závislosti na tom, zda daný segment na dané číslici svítí.

Připojení jednomístného sedmisegmentového indikátoru k mikrokontroléru

Níže uvedený diagram ukazuje jak je připojen jednomístný sedmisegmentový ukazatel k mikrokontroléru.
Je třeba vzít v úvahu, že pokud ukazatel s SPOLEČNÁ KATODA, pak je připojen jeho společný výstup "Země" a segmenty jsou zapáleny podáváním logická jednotka na výstup portu.
Pokud je indikátor SPOLEČNÁ ANODA, pak je přiveden na jeho společný vodič "Plus" napětí a segmenty se zapálí přepnutím výstupu portu do stavu logická nula.

Indikace v jednomístném LED indikátoru se provádí aplikací binárního kódu na piny portu mikrokontroléru odpovídající číslice odpovídající logické úrovně (pro indikátory s OK - logické jedničky, pro indikátory s OA - logické nuly).

Odpory omezující proud může nebo nemusí být v diagramu přítomna. Vše závisí na napájecím napětí dodávaném do indikátoru a technických vlastnostech indikátorů. Pokud je například napětí dodávané do segmentů 5 voltů a jsou navrženy pro provozní napětí 2 volty, musí být instalovány odpory omezující proud (aby se omezil proud, který jimi prochází pro zvýšené napájecí napětí a nespálily se nejen indikátor, ale také port mikrokontroléru).
Je velmi snadné vypočítat hodnotu odporů omezujících proud pomocí dědečkova vzorce Ohm.
Charakteristiky indikátoru jsou například následující (převzato z datového listu):
— provozní napětí — 2 volty
— provozní proud — 10 mA (=0,01 A)
— napájecí napětí 5 voltů
Vzorec pro výpočet:
R= U/I (všechny hodnoty v tomto vzorci musí být v ohmech, voltech a ampérech)
R= (napájecí napětí - provozní napětí)/provozní proud
R= (5-2)/0,01 = 300 Ohm

Schéma zapojení pro vícemístný sedmisegmentový LED indikátor V podstatě stejně jako při připojení jednomístného ukazatele. Jediná věc je, že řídicí tranzistory jsou přidány do katod (anod) indikátorů:

Ve schématu to není znázorněno, ale mezi bázemi tranzistorů a kolíky portu mikrokontroléru je nutné zařadit rezistory, jejichž odpor závisí na typu tranzistoru (hodnoty rezistorů jsou vypočteny, ale můžete také zkusit použít rezistory s nominální hodnotou 5-10 kOhm).

Indikace výboji se provádí dynamicky:
— binární kód odpovídající číslice je nastaven na výstupech portu PB pro 1. číslici, poté je logická úroveň aplikována na řídicí tranzistor první číslice
— binární kód příslušné číslice je nastaven na výstupech portu PB pro 2. číslici, poté je logická úroveň aplikována na řídicí tranzistor druhé číslice
— binární kód odpovídající číslice je nastaven na výstupech portu PB pro 3. číslici, poté je logická úroveň aplikována na řídicí tranzistor třetí číslice
- takže v kruhu
V tomto případě je nutné vzít v úvahu:
— pro ukazatele s OK je použita struktura řídicího tranzistoru NPN(řízeno logickou jednotkou)
- pro indikátor s OA- strukturní tranzistor PNP(řízeno logickou nulou)

Určitě jste již viděli „osmičky“ ukazatelů. Jedná se o sedmisegmentový LED indikátor, který slouží k zobrazení čísel od 0 do 9 a také desetinné tečky ( D.P.- desetinná čárka) nebo čárka.

Strukturálně je tento produkt sestavou LED diod. Každá LED v sestavě osvětluje svůj vlastní segment.

V závislosti na modelu může sestava sestávat z 1 - 4 sedmisegmentových skupin. Například indikátor ALS333B1 se skládá z jedné sedmisegmentové skupiny, která je schopna zobrazit pouze jednu číslici od 0 do 9.

Ale LED indikátor KEM-5162AS má již dvě sedmisegmentové skupiny. Je dvoumístný. Následující fotografie ukazuje různé sedmisegmentové LED indikátory.

Existují také indikátory se 4 sedmisegmentovými skupinami - čtyřmístné (na obrázku - FYQ-5641BSR-11). Mohou být použity v domácích elektronických hodinkách.

Jak jsou na diagramech vyznačeny sedmisegmentové indikátory?

Vzhledem k tomu, že sedmisegmentový indikátor je kombinované elektronické zařízení, jeho vyobrazení na schématech se jen málo liší od jeho vzhledu.

Stačí si dát pozor na to, že každý pin odpovídá specifickému segmentu znaku, ke kterému je připojen. Existuje také jeden nebo více vývodů společné katody nebo anody, v závislosti na modelu zařízení.

Vlastnosti sedmisegmentových ukazatelů.

Přes zdánlivou jednoduchost této části má také své vlastní zvláštnosti.

Za prvé, sedmisegmentové LED indikátory se dodávají se společnou anodou a společnou katodou. Tuto vlastnost je třeba vzít v úvahu při nákupu pro domácí design nebo zařízení.

Zde je například pinout nám již známého 4místného ukazatele FYQ-5641BSR-11.

Jak vidíte, anody LED každé číslice jsou spojeny a vyvedeny na samostatný kolík. Katody LED, které patří do segmentu znamení (např. G), spojené dohromady. Hodně záleží na tom, jaké má indikátor schéma zapojení (se společnou anodou nebo katodou). Pokud se podíváte na schémata zapojení zařízení používajících sedmisegmentové indikátory, bude jasné, proč je to tak důležité.

Kromě malých ukazatelů existují velké a dokonce i velmi velké. Lze je vidět na veřejných místech, obvykle ve formě nástěnných hodin, teploměrů a informátorů.

Pro zvětšení velikosti čísel na displeji a zároveň zachování dostatečného jasu každého segmentu je použito více LED, zapojených do série. Zde je příklad takového indikátoru - vejde se do dlaně. Tento FYS-23011-BUB-21.

Jeden jeho segment tvoří 4 LED zapojené do série.

Chcete-li osvětlit jeden ze segmentů (A, B, C, D, E, F nebo G), musíte na něj přivést napětí 11,2 V (2,8 V na každou LED). Můžete udělat méně, například 10V, ale také se sníží jas. Výjimkou je desetinná tečka (DP), její segment tvoří dvě LED. Potřebuje pouze 5 - 5,6 voltů.

Dvoubarevné indikátory se vyskytují i ​​v přírodě. Jsou v nich zabudovány například červené a zelené LED. Ukazuje se, že v pouzdře jsou, jakoby, dva indikátory, ale s LED diodami různých barev. Pokud přivedete napětí na oba obvody LED, můžete ze segmentů získat žlutou záři. Zde je schéma zapojení jednoho z těchto dvoubarevných indikátorů (SBA-15-11EGWA).

Pokud připojíte kolíky 1 ( ČERVENÉ) a 5 ( ZELENÁ) na „+“ napájení přes klíčové tranzistory, můžete změnit barvu zobrazených čísel z červené na zelenou. A pokud zapojíte kolíky 1 a 5 současně, barva záře bude oranžová. Takto si můžete pohrát s indikátory.

Správa sedmisegmentových ukazatelů.

K ovládání sedmisegmentových indikátorů v digitálních zařízeních se používají posuvné registry a dekodéry. Například široce používaným dekodérem pro ovládání indikátorů řady ALS333 a ALS324 je mikroobvod K514ID2 nebo K176ID2. Zde je příklad.

A pro ovládání moderních importovaných indikátorů se obvykle používají posuvné registry 74HC595. Teoreticky lze segmenty displeje ovládat přímo z výstupů mikrokontroléru. Ale takový obvod se používá zřídka, protože to vyžaduje použití několika pinů samotného mikrokontroléru. Proto se k tomuto účelu používají posuvné registry. Navíc proud spotřebovaný LED diodami segmentu znaménka může být větší než proud, který může poskytnout běžný výstup mikrokontroléru.

K ovládání velkých sedmisegmentových indikátorů, jako je FYS-23011-BUB-21, se používají specializované ovladače, například mikroobvod MBI5026.

Co je uvnitř sedmisegmentového indikátoru?

No, něco málo chutného. Žádný inženýr elektroniky by jím nebyl, kdyby se nezajímal o „vnitřnosti“ rádiových součástek. To je to, co je uvnitř indikátoru ALS324B1.

Černé čtverečky na základně jsou LED krystaly. Zde můžete také vidět zlaté propojky, které spojují krystal s jedním z kolíků. Bohužel tento indikátor již nebude fungovat, protože tyto stejné propojky byly odtrženy. Můžeme ale vidět, co se skrývá za ozdobným panelem výsledkové tabule.

S tímto přístupem pro výstup čísla s libovolným počtem číslic se používají pouze 2 digitální výstupy Arduina.

Na indikátorech například zobrazíme počet sekund, které uplynuly od začátku práce.

Zdrojové komponenty

Princip činnosti

Sedmisegmentový indikátor je jednoduše sada obyčejných LED v jednom pouzdře. Jsou jednoduše vyskládány do osmičky a mají tvar tyčového segmentu. Můžete jej připojit přímo k Arduinu, ale pak bude obsazeno 7 pinů a program bude muset implementovat algoritmus pro převod čísel z binární reprezentace na signály odpovídající „fontu kalkulačky“.

Pro zjednodušení této úlohy je k dispozici 7segmentový ovladač. Jedná se o jednoduchý čip s vnitřním čítačem. Má 7 výstupů pro připojení všech segmentů (piny a, b, c, d, e, f, g), kontakt pro reset počítadla na 0 (pin reset) a kontakt pro zvýšení hodnoty o jedničku (pin hodiny) . Hodnota interního čítače je převedena na signály (zapnuto/vypnuto) na pinech a-g, takže vidíme odpovídající arabské číslo.

Na čipu je další výstup, označený „÷10“. Jeho hodnota je vždy NÍZKÁ, kromě okamžiku přetečení, kdy je hodnota čítače 9, a je zvýšena o jedničku. V tomto případě bude hodnota čítače opět 0, ale výstup „÷10“ bude až do dalšího přírůstku VYSOKÝ. Lze jej připojit k hodinovému pinu jiného ovladače a získat tak počítadlo pro dvouciferná čísla. V tomto řetězci můžete tisknout libovolně dlouhá čísla.

Čip může pracovat na frekvencích až 16 MHz, tzn. zaznamená změny na hodinovém kolíku, i když k nim dojde 16 milionůkrát za sekundu. Arduino pracuje na stejné frekvenci a to je výhodné: pro výstup určitého čísla stačí resetovat čítač na 0 a rychle zvýšit hodnotu o jedničku na zadanou hodnotu. To není okem patrné.

Spojení

Nejprve nainstalujme indikátory a ovladače na prkénko. Všechny mají nohy na obou stranách, takže aby nedošlo ke zkratování protilehlých kontaktů, musí být tyto komponenty umístěny nad středovou drážkou prkénka. Drážka rozděluje prkénko na dvě nespojené poloviny.

    16 - do napájecí lišty: toto je napájení pro mikroobvod

    2 „deaktivovat hodiny“ - k zemní kolejnici: nepoužíváme

    3 "enable display" - do napájecí lišty: toto je napájení pro indikátor

    8 "0V" - na zemní lištu: toto je společná zem

    1 „hodiny“ - přes stahovací odpor k zemi. Na tento pin později připojíme signál z Arduina. Přítomnost rezistoru je užitečná, aby se zabránilo falešnému spouštění kvůli okolnímu hluku, když není vstup k ničemu připojen. Vhodná hodnota je 10 kΩ. Když tento pin připojíme k výstupu Arduina, rezistor nebude hrát roli: signál přitáhne mikrokontrolér k zemi. Pokud tedy víte, že ovladač bude za provozu vždy připojen k Arduinu, nemůžete rezistor použít vůbec.

    15 „reset“ a 5 „÷10“ zatím necháme nepřipojených, ale vezměte na vědomí – v budoucnu je budeme potřebovat

Piny 3 a 8 na indikátoru jsou označeny jako „katoda“, jsou společné pro všechny segmenty a musí být přímo spojeny se společnou zemí.

Následuje nejpečlivější práce: propojení výstupů mikroobvodu s odpovídajícími anodami indikátoru. Musí být připojeny přes odpory omezující proud, stejně jako běžné LED. V opačném případě bude proud v této části obvodu vyšší než normálně, což může vést k poruše indikátoru nebo mikroobvodu. Nominální hodnota 220 Ohm bude stačit.

Připojení musí být provedeno sesouhlasením pinu mikroobvodu (výstupy a-g) a pinu indikátoru (vstupy a-g)

Opakujte postup pro druhou kategorii

Nyní si pamatujeme na „resetovací“ kontakt: musíme je spojit a přitáhnout k zemi přes stahovací odpor. Následně k nim připojíme signál z Arduina, aby mohl resetovat celou hodnotu v obou ovladačích.

Také pošleme signál s „÷10“ z pravého ovladače na vstup „hodiny“ levého. Získáme tak obvod schopný zobrazovat čísla se dvěma číslicemi.

Stojí za zmínku, že „hodiny“ levého ovladače by neměly být přitahovány k zemi odporem, jako tomu bylo u pravého: jeho připojení k „÷10“ samo o sobě zajistí stabilitu signálu a jeho přitažení k zemi může pouze narušit stabilitu přenosu signálu.

Hardware je připraven, zbývá jen implementovat jednoduchý program.

Programování

7segment.pde #define CLOCK_PIN 2 #define RESET_PIN 3 /* * Funkce resetNumber vynuluje aktuální hodnotu * na počítadle */ void resetNumber() ( // Chcete-li resetovat, nastavte kontakt na chvíli // reset na HIGH a návrat zpět na LOW digitalWrite(RESET_PIN, HIGH) ; digitalWrite(RESET_PIN, NÍZKÁ) ; ) /* * Funkce showNumber nastaví hodnoty indikátoru * na dané nezáporné číslo `n` bez ohledu na * předchozí hodnotu */ void showNumber(int n) ( // Nejprve resetujte aktuální hodnotu resetNumber() ; // Dále rychle „klikněte“ na počítadlo na požadovaný// hodnoty while (n-- ) ( digitalWrite(CLOCK_PIN, HIGH) ; digitalWrite(CLOCK_PIN, LOW) ; ) ) void setup() ( pinMode(RESET_PIN, OUTPUT) ; pinMode(CLOCK_PIN, OUTPUT) ; // Resetujte počítadlo na začátku, aby se nezobrazovalo // v náhodném stavu resetNumber() ; ) void loop() ( // Získání počtu sekund za neúplnou minutu // od okamžiku spuštění a zobrazí se na indikátorech showNumber((millis() / 1000) % 60); zpoždění(1000); )

Výsledek

Pin 2 z Arduina připojíme k hodinovému pinu juniorského (pravého) driveru, pin 3 k obecnému resetu driverů; distribuujeme jídlo; zapněte - funguje to!

Pojďme si k desce Arduino připojit sedmisegmentový LED indikátor a naučit se jej ovládat pomocí knihovny Led4Digits.h.

V předchozí lekci byly podrobně popsány mikrokontroléry. Pojďme si takový indikátor připojit k desce Arduino.

Schéma připojení indikátoru k desce Arduino vypadá takto.

Sestavil jsem to na desce plošných spojů.

Pro správu indikátorů jsem napsal knihovnu Led4Digits.h:

A platit.

Knihovna umožňuje spravovat sedmisegmentové indikátory:

  • velikost až čtyř číslic;
  • s libovolnými variantami polarit řídicích impulsů (všechny);
  • pracuje v paralelním procesu;
  • umožňuje zobrazit na indikátoru:
    • segmenty každé kategorie;
    • číslice každé číslice;
    • celé číslo 0 ... 9999;
  • pro výstup celého čísla lze zadat počet číslic;
  • Existuje režim pro potlačení nevýznamných číslic.

Knihovnu Led4Digits.h si můžete stáhnout z tohoto odkazu:

A platit. Pouze 25 rublů. za měsíc pro přístup ke všem zdrojům webu!

Jak nainstalovat je napsáno v .

Zdrojové texty neposkytnu. Můžete si je vyhledat v souborech knihovny. Jako vždy je tam spousta komentářů. Popíšu podrobně s příklady, jak knihovnu používat.

Knihovna ovládání LED pro Arduino Led4Digits.

Zde je popis třídy. Poskytl jsem pouze veřejné metody a vlastnosti.

třída Led4Digits (
veřejnost:
bajtová číslice; // řídicí kódy bitových segmentů
void regen(); // regeneraci, je třeba metodu volat pravidelně
void tetradToSegCod(byte dig, byte tetrad); // převod tetrád na segmentové kódy
boolean print(unsigned int value, byte digitNum, byte blank); // celočíselný výstup



} ;

Konstruktér.

Led4Digits (typ bajtuLed, bajt digitPin0, bajt digitPin1, bajt digitPin2, byte digitPin3,
byte segPinA, byte segPinB, byte segPinC, byte segPinD,
byte segPinE, byte segPinF, byte segPinG, byte segPinH);

typLed Nastavuje polaritu řídicího impulsu pro signály výběru bitů a segmentů. Podporuje všechna schémata připojení ().

typLed Výběr kategorie Výběr segmentu Typ obvodu
0 -_- -_- Společná anoda s tlačítky pro výběr výboje
1 _-_ -_- Společná anoda
2 -_- _-_ Společná katoda
3 _-_ _-_ Společná katoda s tlačítky pro výběr výboje

digitPin0...digitPin3– výstupy pro volbu číslic. Je-li digitPin = 255, pak je číslice zakázána. To vám umožní připojit indikátory s méně číslicemi. digitPin0 – nízká (pravá) číslice.

segPinA...segPinH– výstupy pro řízení segmentů.

Například,

znamená: typ indikátoru 1; vybíjecí výstupy 5,4,3,2; výkony segmentů 6,7,8,9,10,11,12,13.

metoda void regen().

Metoda musí být volána pravidelně v paralelním procesu. Regeneruje obraz na indikátorech. Doba cyklu regenerace se rovná periodě volání metody vynásobené počtem bitů.

Například,

// obsluha přerušení 2 ms
void timerInterrupt() (
disp.regen(); // regenerace indikátoru
}

Pole číslic bajtů

Obsahuje stav segmentů. číslice je nejméně významný bit, nejméně významný bit číslice je segment „A“ nejméně významného bitu. Stav bitu 1 znamená, že segment svítí.

Například,

číslice = B0000101;

znamená, že na druhé číslici svítí segmenty „A“ a „C“.

Příklad programu, který postupně rozsvítí všechny segmenty každé číslice.

// běžící segmenty
#zahrnout
#zahrnout

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

void setup() (
přerušení časovače 2 ms
MsTimer2::start(); // povolení přerušení
}

void loop() (
for (int i = 0; i< 32; i++) {
if (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;
jiný(
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
}
zpoždění(250);
}
}

//obsluha přerušení 2 ms
void timerInterrupt() (
disp.regen(); // regenerace indikátoru
}

V poli číslic je posunuta 1 a indikátory to zobrazují.

Metoda void tetradToSegCod(byte dig, byte tetrad)

Metoda umožňuje zobrazit čísla a písmena hexadecimálního kódu v jednotlivých číslicích. Má argumenty:

  • dig – číslice číslo 0 ... 3;
  • tetrad – kód desetinného znaku. Kód 0 zobrazí číslo „0“, kód 1 – číslo „1“, kód 14 – písmeno „E“.

Například,

tetrad(2,7);

zobrazí číslo „7“ jako třetí číslici.

Příklad programu, který postupně mění znaky v každé číslici.

// čísla jedno po druhém
#zahrnout
#zahrnout

// typ indikátoru 1; vybíjecí výstupy 5,4,3,2; segmentové výstupy 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // přerušení časovače 2 ms
MsTimer2::start(); // povolení přerušení
}

void loop() (
for (int i = 0; i< 64; i++) {
disp.tetradToSegCod(i>>4, i);
zpoždění(250);
}
}

// obsluha přerušení 2 ms
void timerInterrupt() (
disp.regen(); // regenerace indikátoru
}

Metoda booleovský tisk (hodnota int bez znaménka, bajt digitNum, bajt prázdný)

Metoda zobrazuje na indikátorech celé číslo. Převádí binární číslo na BCD pro každou číslici. Má argumenty:

  • hodnota – číslo, které se zobrazuje na indikátoru.
  • digitNum – počet číslic čísla. To by nemělo být zaměňováno s počtem číslic indikátoru. Možná budete chtít zobrazit číslo na 2 číslicích a znaky na zbývajících dvou pomocí číslic.
  • prázdné – znak potlačení nevýznamných číslic. blank=0 znamená, že číslo by mělo být zobrazeno se všemi nulami. Číslo "7" bude vypadat jako "0007". Pokud je prázdné místo jiné než 0, nevýznamné nuly budou potlačeny.

Pokud hodnota čísla překročí povolený počet pro zvolený počet číslic (digitNum), funkce zobrazí na indikátoru „---“ a vrátí hodnotu false.

Příklad programu pro výstup čísel.

// číslo výstupu
#zahrnout
#zahrnout

// typ indikátoru 1; vybíjecí výstupy 5,4,3,2; segmentové výstupy 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // přerušení časovače 2 ms
MsTimer2::start(); // povolení přerušení
}

void loop() (
for (int i = 0; i< 12000; i++) {
disp.print(i, 4, 1);
zpoždění(50);
}
}

// obsluha přerušení 2 ms
void timerInterrupt() (
disp.regen(); // regenerace indikátoru
}

Poslední dvě metody nemění stav segmentu „H“ – desetinnou čárku. Chcete-li změnit stav bodu, můžete použít příkazy:

číslice |= 0x80; // rozsviťte desetinnou čárku
číslice &= 0x7f; // zhasnout desetinnou čárku

Výstup do indikátorů záporných čísel (int).

Záporná čísla lze vytisknout následovně:

  • Zkontrolujte znaménko čísla.
  • Pokud je číslo záporné, vytiskněte znaménko mínus na nejvýznamnější číslici a změňte znaménko čísla na kladné ve funkci print().
  • Pokud je číslo kladné, vypněte bit znaménka a vytiskněte číslo pomocí funkce print().

Zde je program, který tuto metodu demonstruje. Vypisuje čísla od -999 do 999.

// výstup záporných čísel
#zahrnout
#zahrnout

// typ indikátoru 1; vybíjecí výstupy 5,4,3,2; segmentové výstupy 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // přerušení časovače 2 ms
MsTimer2::start(); // povolení přerušení
}

void loop() (

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

kdybych< 0) {
// číslo je záporné
disp.digit= B01000000; // podepsat -
disp.print(i * -1, 3, 1);
}
jiný(
disp.digit= B00000000; // vymazat znaménko
disp.print(i, 3, 1);
}

zpoždění(50);
}
}

// obsluha přerušení 2 ms
void timerInterrupt() (
disp.regen(); // regenerace indikátoru
}

Výstup do indikátorů zlomkových čísel, plovoucí formát.

Existuje mnoho způsobů, jak zobrazit čísla s plovoucí desetinnou čárkou (float) pomocí standardních funkcí jazyka C. To je především funkce sprint(). Funguje to velmi pomalu, vyžaduje další převody znakových kódů na binární desítkové kódy, je třeba extrahovat bod z řetězce. Stejné problémy s ostatními funkcemi.

Pro zobrazení hodnot float proměnných na indikátorech používám jinou metodu. Metoda je jednoduchá, spolehlivá, rychlá. Redukuje na následující operace:

  • Číslo s plovoucí desetinnou čárkou se násobí 10 na mocninu odpovídající požadovanému počtu desetinných míst. Pokud potřebujete na indikátorech zobrazit 1 desetinné místo, vynásobte 10, pokud 2, pak násobte 100, 3 desetinná místa 1000.
  • Dále je číslo s pohyblivou řádovou čárkou explicitně převedeno na celé číslo (int) a zobrazeno na indikátorech pomocí funkce print().
  • Na požadovanou číslici se umístí tečka.

Například následující řádky zobrazí proměnnou float se dvěma desetinnými místy k sedmisegmentovým LED diodám.

plovoucí x = 2,12345;

disp.digit |= 0x80; //

Číslo vynásobíme 100 a umístěním tečky do třetí číslice výsledek vydělíme 100.

Zde je program, který na indikátorech zobrazuje čísla s pohyblivou řádovou čárkou od 0,00 do 99,99.

// výstup s plovoucí desetinnou čárkou
#zahrnout
#zahrnout

// typ indikátoru 1; vybíjecí výstupy 5,4,3,2; segmentové výstupy 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // přerušení časovače 2 ms
MsTimer2::start(); // povolení přerušení
}

void loop() (
float x = 0;

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

disp.print((int)(x * 100.), 4, 1);
disp.digit |= 0x80; // rozsviťte bod třetí úrovně

zpoždění(50);
}
}

//obsluha přerušení 2 ms
void timerInterrupt() (
disp.regen(); // regenerace indikátoru
}

Jak můžete vidět, knihovna Led4Digits.h značně zjednodušuje práci se sedmisegmentovými indikátory LED (light-emitting diode) připojenými k desce Arduino. Nenašel jsem obdobu takové knihovny.

K dispozici jsou knihovny pro práci s LED displeji přes posuvný registr. Někdo mi psal, že našli knihovnu, která pracuje s LED displejem přímo připojeným k desce Arduino. Ale při jeho použití svítí číslice indikátoru nerovnoměrně a blikají.

Na rozdíl od svých analogů knihovna Led4Digits.h:

  • Běží jako paralelní proces. V hlavní smyčce program načte data do určitých proměnných, které se automaticky zobrazí na displeji. Výstup informací a regenerace indikátoru probíhá v přerušení časovačem, které je pro hlavní program neviditelné.
  • Čísla na displeji svítí rovnoměrně, bez blikání. Tato vlastnost je zajištěna tím, že regenerace probíhá v cyklu striktně definovaném přerušením časovače.
  • Knihovna má kompaktní kód, spouští se rychle a minimálně zatěžuje kontrolér.

V další lekci připojíme k desce Arduino současně LED indikátor a matici tlačítek. Pojďme napsat knihovnu pro takový design.

Kategorie: . Můžete si to uložit do záložek.