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ů:
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í:
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:
|