7 a 16 segmentový display

Segments

Na této stránce naleznete jednu z nejjenodušších periferií, se kterou se dá ale zažít spousta srandy a dost se na ní naučit. Jedná se o zapojení klasického 7 resp. 16 segmentového displaye.

Oba displaye jsou se společnou anodou - tj. mají přívodní +5V pin a jednotlivé led diody uvnitř se spínají aktivní nulou - tedy pokud na příslušný pin přivedete G (0V) segment se rozsvítí (vznikne potenciál 5V), pokud přivedete 5V, segment zůstane zhaslý. Každé led diodě jsem předřadil vlastní odpor (přestože právě v zapojení se společnou anodou by stačil jeden) proto, aby jednotlivé segmenty pěkně svítily (stejně) a navíc vedením prostředkem rezitoru se dá zmenšit počet ručních propojek. Odpor na diodu spočtete jednoduše z Ohmova zákona: R = U / I. U = 5V, I zjistíme z katalogu výrobce - často u těchto displayů kolem 10mA. Odpor pak zoukrouhlíme nahoru k blízké vyráběné hodnotě. Já jsem zvolil odpory o velikosti 560KΩ.

U sedmisegmentu jsem vyrobil dvě samostatné destičky, ale navrhl jsem je tak, aby se v případě potřeby daly dát k sobě aby vytvořily 2x7 segment. Samozřejmě by to bylo mrháním pinů, ale těch mám dost. U více jednotek se řízení provádí pomocí multiplexování a využívá se nedokonalostí lidského oka. Funguje to následovně: vybere se 1. jednotka, na tu se zapíše 8 hodnot (7 segmentů + desetinná tečka). Pak se vybere druhý, .... Celá záležitost se cyklicky provádí a provádí se rychle (min. 30x za vteřinu musíte projít všechny segmenty). Výsledkem je, že ,,svítí naráz" všechny jednotky. (LCD a CRT se též vykreslují po bodech, ale to už je pekelně rychlé vykreslování.)

Zapojení vskutku mrhá piny procesoru. Nejefektivnější řízení takových to segmentů je pomocí posuvných regitrů, nejlépe pak posuvných registrů s pamětí. Pomocí jednoho vodiče simulujeme hodiny, druhým pak nahráváme data, třetím přepisujeme paměť (vykreslení segmentů).

Pro tyto destičky jsem si napsal knihovny (byl to výborný trénink, jak si to vyzkoušet a osvojit si to na jednoduchém příkladě) a pak jeden soubor s jejich aplikací. Zdrojové kódy naleznete v sekci SW - knihovny na předchozí stránce. Princip knihovny je jednoduchý - na začátku si deklaruju pro každý symbol číslo - každý bit odpovídá jednomu segmentu. Pak vymaskuji první bit tohoto čísla a zjistím hodnotu pro první segment. Číslo bitově posunu doprava - druhý bit se stane prvním, vymaskuji ho a zapíšu na druhý segment. Vše tedy probíhá v jednoduché smyčce, která vymaskuje a zapíše na výstupní pin. Jediný problém je vytvořit daná čísla - k tomuto účelu jsem si naprogramoval v jazyce Visual Basic 6.0 jednoduchou aplikaci, kde se kliknutím nakreslený segment rozsvítí nebo zhasne a dále vygeneruje přímo řádek s kódem pro jazyk c, který se pak jednoduše přidá do souboru, ve kterém jsou jednotlivé znaky umístěné.

Kliknutím na název zobrazíte zdrojový kód
Segments-2x7.brd: eagle board
Download
Segments-16.brd: eagle board
Download
Segments-display_koder.rar: Visual Basic 6.0 project
Download

Realizace dvou sedmisegmentových modulů
Realizace dvou sedmisegmentových modulů
Schéma dvou sedmisegmentových modulů
Schéma dvou sedmisegmentových modulů
Realizace 16 segmentového modulu
Realizace 16 segmentového modulu
Schéma 16 segmentového modulu
Schéma 16 segmentového modulu

Go back to Arduino