01. Úvod : Článok je o tom, ako sá dá k mikroprocesoru pripojiť LED displej a vypisovať na ňom rôzne znaky. Prvá časť bude venovaná jednoduchému popisu a spôsobu ovládania sedemsegmentového displeja, potom bude nasledovať jeho ovládanie s mikroprocesorom.
02. Sedemsegmentovka… Podstata LED displeja je veľmi jednoduchá. Vo vnútri sa nachádza sedem LED diód ( odtiaľ vznikol názov sedemsegmentovka ), ktoré vykresľujú znak a ôsma dióda kvôli desatinnej bodke. Ich vhodným rozsvietením sa dajú vykresliť čísla od 0 po 9 a väčšia časť znakov abecedy.
03. TDSR 5150 je označenie displeja s ktorým budem robiť prvé pokusy. Ak máte nejaký display, na začiatok je dobré nájst na ňom označenie a podľa neho vyhľadať na internete datasheet. Tam sa dočítate všetko dôležité, čo potrebujete k jeho ovládaniu.
- Datasheet k displeju TDSR_5150
Z neho som sa dočítal, že maximálny prúd tečúci každým segmentom LED displeja môže byť 25mA a napätie je 1.6V. Z toho môžem určiť, že pri 5V napájaní musí mať predradený rezistor hodnotu minimálne 136Ω. Aby bol displej chránený a mal som určitú rezervu, použijem radšej 470Ω rezistor. Najdôležitejšou informáciou z datasheetu je spôsob, ako displej zapojiť. Tu je nákres, ako je to zapojené vo vnútri displeja:
Na tomto nákrese sa snažím ukázať, že LED displej nie je nič viac, ako vhodne umiestnené LED diódy. Podľa toho, ktoré budú rozsvietené, zjaví sa príslušné číslo alebo znak.
Na pin čin 3. alebo č. 8. stačí priviesť kladný pól napájacieho napätia ( veľkosti napríklad 5V), niektorých z pinov 1,2,4,5,6,7,9 alebo 10 pripojiť cez rezistor na záporný pól a príslušný segment sa rozsvieti. Ak chcete vykresliť číslo 1, potrebujete rozsvietit segmenty označené ako “B” a “C”, číslo 2 vykreslíte rozsvietením segmentov “A”, “B”, “G”, “E” a “D”. V prípade osmičky potrebujete vysvietiť všetky.
Okrem čísiel sa dajú vykresliť aj niektoré abecedné znaky. Je to však o kompromise, pretože niektoré písmenka musíte vykresľovať len malé (b, d, t, n, r…), niektoré len veľké (A, E, F, …), niektoré sa nedajú jednoznačne (U, V, …) a niektoré sa nedajú rozumne vôbec (M, m, W, w, X, x, K, k, …). Iba malá časť je bez problémov (C, c, H, h, L, l, …).
04. Tabuľka s číslami Vám ukáže, ako sú vykresľované jednotlivé číselné znaky. Je to dôležité pre ďalší výklad článku. Všímajte si hlavne, ktoré segmenty sú rozsvietené a ktoré sú zhasnuté.
Ak si to porovnám s obrázkom vyššie, tak pri čísle “1″ svietia segmenty B a C, všetky ostatné sú zhasnuté. Pri čísle “8″ sú vysvietené všetky segmenty. Teraz začnem uvažovať iným smerom. Každý segment, ktorý je rozsvietený, dostane číslo “1″, zhasnuté segmenty budú označené “0″. Tým dostanem pre každý vysvietený znak kód.
| Znak | A | B | C | D | E | F | G | Binárne | Decimálne | Hexadecimálne |
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0111111 | 63 | 3F |
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0000110 | 6 | 06 |
| 2 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1011011 | 91 | 5B |
| 3 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1001111 | 79 | 4F |
| 4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1100110 | 102 | 66 |
| 5 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1101101 | 109 | 6D |
| 6 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1111101 | 125 | 7D |
| 7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0000111 | 7 | 07 |
| 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1111111 | 127 | 7F |
| 9 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1101111 | 111 | 6F |
Displej je pripojený tak, aby segmenty boli spínané abecedne. Prvý je zopnutý segment označený ako “A”, druhý segment označený ako “B”, …. až po segment “G”, ktorý je spínaný ako posledný, siedmy. Ak chcem zobraziť znak “0″ na displeji, rozsvietim všetky segmenty okrem “G”. V tabuľke teda vidno, že všetky majú vyznačenú 1. iba segment “G” má 0. Keď si pozriete znak “6″, tak okrem segmentu “B” majú všetky v tabuľke 1. Týmto prechádzam k tomu, že každý zobrazený znak môžem zapísať ako binárne číslo (Zapisuje sa odzadu!) . Znak “0″ má teda binárny zápis 0111111. Ostatné znaky si kuknite v tabuľke. Každý má svoj vlastný kód. Tým som sa dostal k hlavnému záveru:
Sedemsegmentový displej používa na vykreslenie znaku sedem segmentov. Každý segment predstavuje premennú, ktorá nadobúda dva stavy. Stav 0, keď segment nesvieti a stav 1, keď segment svieti. Po vykreslení znaku na displeji, môžem na základe týchto premenných odčítať binárny kód pre každý vykresľovaný znak.
05. Pripojenie mikroprocesora k displeju. Najprv schéma zapojenia(kliknite na schému, aby sa zväčšila):
Namiesto TDSR5150 je tam napísaný iný typ displeja, ale vývody súhlasia. Tranzistory môžete použitť zo “šuplíka”, napríklad KC238, KF507, alebo niektorý z rady BC547, BC548, … . R8 až R14 sú predradné rezistory pre napájanie jednotlivých segmentov displeja. Väčšia hodnota znamená menší jas, menšia hodnota väčší jas, ale aj spotrebu a nižšiu životnosť.
06. Prvý program bude o tom, že predvediem význam tabuľky s binárnymi kódmi pre mikroprocesor. V 5. bode je schéma zapojenia obvodu, kde je vidno, že tranzistory ovládajúce jednotlivé segmenty displeja sú pripojené k portu D mikroprocesora. Systém v schéme je nasledovný:
- 0. pin portu D ovláda cez R1 tranzistor Q1. ktorý spína cez R8 segment “A” led displeja
- 1. pin portu D ovláda cez R2 tranzistor Q2. ktorý spína cez R9 segment “B” led displeja
- 2. pin portu D ovláda cez R3 tranzistor Q3. ktorý spína cez R10 segment “C” led displeja
- 3. pin portu D ovláda cez R4 tranzistor Q4. ktorý spína cez R11 segment “D” led displeja
- 4. pin portu D ovláda cez R5 tranzistor Q5. ktorý spína cez R12 segment “E” led displeja
- 5. pin portu D ovláda cez R6 tranzistor Q6. ktorý spína cez R13 segment “F” led displeja
- 6. pin portu D ovláda cez R7 tranzistor Q7. ktorý spína cez R14 segment “G” led displeja
Tento systém je dôležitý, pretože spĺňa podmineku uvedenú vyššie. Segmenty a ich ovládanie sú zoradené v poradí, takže pre každý znak, ktorý chcem vykresliť, stačí poslať správny kód na port “D” mikroprocesora. V tabuľke s kódmi sú uvedené v posledných dvoch stĺpcoch čísla v decimálnej a hexadecimálnej forme. Toto číslo vzniklo prevodom z binárneho kódu. A toto číslo znova reprezentuje hodnotu, ktorú treba poslať na port “D” mikroprocesora. Takže prvý program:
#include <avr/io.h>
#include <avr/iom8.h>
#define outp(a, b) b = a
#define F_CPU 12000000
#include <util/delay.h>
int main(void)
{
DDRD=0xff;
PORTD = 0x00;
while(1)
{
PORTD = 63;
_delay_ms(100);
PORTD = 6;
_delay_ms(100);
PORTD = 91;
_delay_ms(100);
}
return(1);
}
Upozornenie : Program je tvorený v linuxovej distribúci Ubuntu, písaný cez Gedit, prekladaný cez avr-gcc a avr-objcopy. Posielam to do mikroprocesora cez programátor AVRISP mkII a program avr-dude. Neviem aké prostriedky používate vy, takže netuším, či Vám to bude fungovať. Ak máte najké nápady pripomienky, využite diskusiu alebo kontakty.
Hlavná časť programu sa nachádza za while(1). Prvý príkaz pre mikroprocesor znamená, že na port “D” odosiela číslo 63, čo je podľa tabuľky znak “0″. Potom mikroprocesor chvíľu počká ( _delay_ms(100); ) a znova posiela číslo, tentokrát 6, čo vykreslí znak “1″. Znova čaká a potom posiela číslo 91, čo vykreslí znak “2″. A takto dookola. Tu je video výsledku:
V kóde programu sa dá namiesto decimálneho zápisu použiť aj hexadecimálny zápis znaku. Hodnoty si stačí pozrieť v tabuľke, hlavná časť programu by potom vyzerala takto:
PORTD = 0x3F; _delay_ms(100); PORTD = 0x06; _delay_ms(100); PORTD = 0x5B; _delay_ms(100);
Teraz je už popísané, ako vykresliť jednotlivé čísla pomocu mikroprocesora na sedemsegmentovom LED displeji. Aby som spravil nejaké zhrnutie, uvádzam na koniec zjednodušený postup. Ako príklad bude písmeno “A”. Na displeji vyzerá takto:

Podľa schémy zapojenia môžem povedať, že všetky segmenty okrem “D” sú rozsvietené. Zapíšem to v poradí, pričom zhasnutý segment zvýrazním: ABCDEFG. Teraz rozsvietené segmenty nahradím 1, zhasnuté 0 : 1110111. Zmením poradie na opačné (čo nebude mať efekt, lebo je to číslo zrkadlové, ale robiť sa to musí) : 1110111. Prevediem číslo na decimálne : 1110111 = 119 Toto číslo som odoslal na port D, aby sa rozsvietil znak “A”. Nakoniec si môžete pozrieť video, kde mikroprocesor postupne na port D posiela čísla od 0 do 127. Tu je vidno všetky znaky, ktoré je možné vykresliť.
07. Na záver len popíšem, že tento článok je úvodom k tomu, ako používať a chápať vykreslovanie znakov na sedemsegmentovom LED displeji pomocou mikroprocesora. Tieto informácie sú dôležité pre ďalšie články, ktoré sa tu postupne zjavia.

Dík za upozornenie, mne takéto detaily uchádzajú.
Dám to do plánu opráv a vylepšení
Moc pěkný článek, díky němu jsem to hned pochopil, ale bylo by vhodné do schématu naznačit kde má být napájení (já to vim jen pro ostatní uživatele, kterým by to nedocvaklo