Panel s displejem

 

Pro jeden větší projekt jsem potřeboval vyrobit pětimístný LED displej s bargrafem a několika signalizačními LED.
Navrhnul jsem malý plošňák s řízením pomocí obvodu MAX7219. Tento obvod zvládne obsloužit až 8 sedmisegmentovek.
Místo dvou z nich jsem připojil několik obyčejných LED.

K řízení je možné použít běžné knihovny pro práci s MAX7219 (například LED control).
Já jsem ale potřeboval ještě co nejmenší kód a proto jsem si ovladač napsal sám - bez použití knihoven, které obsahují spoustu zbytečností.



Ukázkový program pro Arduino:


Ukázkový program se řídí přes sériový terminál (rychlost 9600). V úvodu se zobrazí malá nápověda s příklady.




Ovládání zobrazení displeje se provádí pomocí několika podprogramů:


displej_init() Základní nastavení displeje (režim zobrazování, jas, ...)
zobraz_bargraf(n) Rozsvícení požadovaného počtu LED v bargrafu (n je hodnota v intervalu  0 až 5)
zobraz_LED(n,stav) Rozsvícení, nebo zhasnutí jedné ze 3 horních LED.
  n je číslo LED (1 až 3), stav je true nebo false pro rozsvícení nebo zhasnutí LED
zobraz_cislo(n) Zobrazení čísla na displeji v rozsahu <-9999 až 99999> s automatickým zformátováním na požadovaný počet desetinných míst.
pozice_tecky Globální proměnná 'pozice_tecky' udává, kolik desetinných míst má displej ukazovat.
Povolené hodnoty jsou 0 až 4.
Podprogram zobraz_cislo() pak bude automaticky formátovat zadané číslo a zobrazí ho na displeji.
SPI_kom(registr, data) Přímá komunikace s obvodem MAX7219 (změna jasu, speciální znaky ....).
displej_CLS() Zhasne 5 sedmisegmentovek (bargraf a horní LED zůstávají beze změny).



Pravidla formátování zadávaných čísel v podprogramu zobraz_cislo() jsou následující:


Při kladném čísle se zobrazuje až 5 cifer.
Při záporném čísle je na levé sedmisegmentovce znaménko '-' a zbylé 4 sedmisegmentovky mohou zobrazovat až 4 cifry.

Nuly před číslem se nezobrazují.
Zobrazuje se pouze jedna nula - pokud se nachází hned před desetinnou tečkou.
Jedinou výjimkou z tohoto pravidla je stav, kdy je nastavený počet desetinných míst na 4 a zobrazuje se záporné číslo.
V tom případě se místo 0 na levé sedmisegmentovce zobrazuje jen mínus s tečkou.

Pokud je nastavený počet desetinných míst na 0, desetinná tečka se na pravé sedmisegmentovce nezobrazí.

Pozici tečky stačí nastavit jen jednou a program si pak všechny další zobrazení automaticky přizpůsobí.
Pokud se provede změna polohy tečky, projeví se to až při příštím volání podprogramu:
 zobraz_cislo()

Okamžitá změna zobrazení tečky (s posledním zadaným číslem) podle nastavené proměnné pozice_tecky je možná zavoláním podprogramu:
zobraz_tecku()

Při překročení minimálního, nebo maximálního čísla se na displeji objeví nápis "- Err", nebo "  Err".
 


Příklady skutečného zobrazení:



pozice_tecky = 0;
zobraz_cislo(12345);
;
kladné číslo může mít až 5 cifer
 
pozice_tecky = 0;
zobraz_cislo(-1234);

záporné číslo může mít až 4 cifry
 
 
proměnná 'pozice_tecky' je libovolná
zobraz_cislo(100000);

Překročení kladného rozsahu.
 
   
proměnná 'pozice_tecky' je libovolná
zobraz_cislo(-10000);

Překročení záporného rozsahu.
 
   
pozice_tecky = 0;
zobraz_cislo(24);

Nuly před číslem se nezobrazují,
desetinná tečka za číslem se nezobrazí.
 
 
pozice_tecky = 0;
zobraz_cislo(-60);

Nuly před číslem se nezobrazují.
Mínus je vždycky úplně vlevo.
 
 
pozice_tecky = 1;
zobraz_cislo(5);

Automaticky se doplní nula před desetinnou tečkou.
 
 
pozice_tecky = 3;
zobraz_cislo(-7);

Automaticky se doplní nula před desetinnou
tečkou a případně i za desetinnou tečkou.
 
 
pozice_tecky = 4;
zobraz_cislo(-123);

V tomhle jediném případě se nula před tečkou nepíše.
 
 
pozice_tecky = 4;
zobraz_cislo(67);

Při kladném čísle se nula před tečkou normálně zobrazí.
 



 
zobraz_bargraf(0);

Všechny spodní LED jsou zhasnuté.
 

zobraz_bargraf(4);

4 z 5 spodních LED svítí.
 

 
zobraz_LED(1,true);

Rozsvítí první horní LED.
   
 
zobraz_LED(1,false);
zobraz_LED(2,true);

Zhasne první horní LED a rozsvítí druhou.
 


Pro přímou komunikaci s obvodem MAX7219 se používá podprogram:
 SPI_kom(adresa_registru, data)

Tímto způsobem je možné například nastavit jas displeje na maximum:
 SPI_kom(0b00001010, 15 );


Na sedmisegmentovky je možné zapsat libovolnou kombinaci svítících / zhasnutých segmentů.
Pokud je třeba nastavit na druhé sedmisegmentovce zprava například znak 'A', je to možné provést jednoduše:
SPI_kom(2, 0b01110111 );

 Dvojka je číslo segmentovky zprava. Binární zápis udává, které segmenty mají svítit.
   (přiřazení segmentů bitům v datovém bajtu je uvedeno v katalogovém listu obvodu MAX7219).




Stejně jednoduše je možné nějakou sedmisegmentovku úplně zhasnout:
Jednička znamená první sedmisegmentovku zprava. Nula znamená, že  jsou na vybrané pozici všechny segmenty zhasnuté.
SPI_kom(1 , 0);   


Když je třeba na nějakou pozici zapsat číslici (0 až 9), je grafická předloha jednotlivých čísel už předpřipravená v poli graf_def[]
Takže třeba číslo 7 se na čtvrtou sedmisegmentovku zprava zapíše takto:
SPI_kom(4,  graf_def[7]);






Schéma a plošňák:

 
(verze pro EAGLE zde)


(verze pro EAGLE zde)



úvodní strana webu AstroMiK.org

poslední úprava stránky 12.3.2020