Mikroprocesor ATmega8 a LED display

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.

000981_logo

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.

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:

000981_nakres_displeja_diodyNa 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é.

000981_0_nula000981_1_jednotka000981_2_dvojka000981_3_trojka000981_4_stvorka
000981_5_patka000981_6_sestka000981_7_sedmicka000981_8_osmicka000981_9_deviatka

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.

ZnakABCDEFGBinárneDecimálneHexadecimálne
011111100111111633F
101100000000110606
211011011011011915B
311110011001111794F
40110011110011010266
5101101111011011096D
6101111111111011257D
711100000000111707
8111111111111111277F
9111101111011111116F

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):

000981_Schema_MikroPC_Displej

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:

Get the Flash Player to see this content.

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:

000981_led_A

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ť.

Get the Flash Player to see this content.

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.

Autorom článku je : Lukáš

Lukáš je človek, venujúci sa všetkému možnému, ktorý sa dosť často niekde poflakuje s foťákom, alebo bicyklom. Profesionálne sa venuje silnoprúdovej elektrotechnike, amatérsky slaboprúdovej.