Vaša IP adresa: 18.191.174.168
Počet návštev: 30495

Posuvný register a displej

Ovládanie štvormiestneho 7-segmentového displeja pomocou posuvného registra

1. Teoretický úvod

Posuvné registre sú dôležitým prvkom digitálnych obvodov. Ich základnou funkciou je „posúvať“ dáta (binárne hodnoty) zo vstupu/vstupov na výstup/výstupy v závislosti od ďalších vstupných signálov (napr. hodinového signálu). Posuvné registre patria do skupiny sekvenčných digitálnych obvodov, ktoré sú najčastejšie tvorené preklápacími obvodmi D alebo RS. Podľa funkcie môžeme posuvné funkcie rozdeliť do štyroch základných skupín:

  1. SIPO (Serial In – Parallel Out),
  2. PISO (Parallel In – Serial Out),
  3. SISO (Serial In – Serial Out),
  4. PIPO (Parallel In – Parallel Out).

V laboratórnom cvičení budeme používať posuvný register typu SIPO, ktorý slúži na zväčšenie počtu výstupov z jedného sériového vstupu. Tento typ registra môžeme využiť v prípadoch, keď mikrokontrolér (MCU) nedisponuje počtom vývodom, ktoré sú potrebné napr. na rozsvietenie LED. Uveďme si konkrétny príklad. MCU ATmega328P obsahuje 23 použiteľných vývodov (vývod PC7 nie je dostupný), na ktoré môžeme teoreticky pripojiť 23 LED. Teoreticky preto, lebo maximálny odporúčaný prúd zo všetkých výstupov je 200 mA. Prekročenie tejto hodnoty môže spôsobiť prehrievanie a nestabilitu MCU. Ak by sme chceli k MCU pripojiť viac ako 23 LED, tak môžeme využiť posuvný register SIPO. Okrem toho, že zväčšíme počet výstupov, tak zamedzíme aj prúdového preťaženiu MCU. V tomto laboratórnom cvičení budeme používať posuvný register 74HC595. Funkčný diagram tohto registra je uvedený na Obr. 1.

Obr. 1   Funkčný diagram registra 74HC595.
Obr. 1 Funkčný diagram registra 74HC595.

Dáta v sérii sú privádzané na vstup SER. Paralelný výstup je tvorený vývodmi QAQH. Na procese prevodu sériových dát na paralelné sa uplatňujú signály na vstupoch SCK, SCL, RCK a OE. V nasledujúcej tabuľke sú uvedené funkcie jednotlivých vývodov.

Tab. 1 Názvy a funckia vývodov posuvného registra 74HC595.
Označenie vývoduVýznam skratkyFunkcia
SERSerial Data InputDátový vstup
SCKShift Register Clock InputHodinový signál pre vstupné dáta
SCLMaster Reset InputVymazanie posuvného registra (Shift Register)
RCKStorage Register Clock InputHodinový signál na presun dát z posuvného registra (Shift Register) do pamäťového registra (Storage Register)
OEOutput EnableAktivácia výstupov registra QA-QH
QA - QHParallel Data OutputParalelný výstup registra
QH*Serial Data OutputSériový výstup registra. Slúži na pripojenie ďalšieho posuvného registra.

Binárne dáta sú zo vstupu SER prenášané na výstupy (QA - QH) podľa časového diagramu na Obr. 2.

Obr. 2   Časový diagram registra 74HC595.
Obr. 2 Časový diagram registra 74HC595.

Z Obr. 2 vyplýva, že ak chceme z jedného dátového vstupu (SER) „vyrobiť“ 8 výstupov (QA - QH), tak spotrebujeme 5 vývodov MCU (SCK, SER, RCK, SCL a OE). Výhodou posuvných registrov je, že sa dajú reťaziť resp. zapájať do kaskády pripojením výstupu registra QH* na vstup SER ďalšieho registra. Takéto rozšírenie nevyžaduje ďalšie navýšenie počtu použitých vývodov MCU a počet pripojených posuvných registrov je prakticky ľubovoľný. Napríklad, ak by sme chceli ovládať 64 LED, tak by sme potrebovali prepojiť 8 registrov 74HC595 a využili by sme iba 5 vývodov MCU.

Hlavnou úlohou laboratórneho cvičenia je zobrazovať číslice na štvormiestnom 7-segmentovom displeji. Vzhľadom na to, že displej si vyžaduje na ovládanie väčší počet vývodov, tak použijeme dva posuvné registre 74HC595 s označením U2 a U3. Displej je súčasťou rozširujúcej DPS k platforme Arduino - Multi-Function Shield. Schéma displeja a pripojenia displeja k posuvným registrom sú uvedené na Obr. 3. Vývod SCL je trvalo pripojený k +5V a vývod G (OE) ku GND, čo nám redukuje počet potrebných vývodov MCU na 3 (pôvodne 5).

Obr. 3   Pripojenie displeja k posuvným registrom.
Obr. 3 Pripojenie displeja k posuvným registrom.

Z Obr. 3 je zrejmé, že register U2 slúži na výber pozície číslice na displeji a register U3 na rozsvietenie jednotlivých segmentov číslice. Napríklad, ak by sme chceli na prvej pozícii displeja rozsvietiť číslo 2, musíme na vstup posuvného registra priviesť postupne binárny kód podľa Obr. 4. Binárny kód posielame do registra od najmenej významného bitu (LSB first).

Obr. 4   Binárny kód zodpovedajúci rozsvieteniu čísla 2 na prvej pozícii displeja.
Obr. 4 Binárny kód zodpovedajúci rozsvieteniu čísla 2 na prvej pozícii displeja.

Postup pri nastavovaní posuvných registrov

Register U2 umožňuje pomocou výstupov QAQD vybrať pozíciu číslice na štvormiestnom displeji. Register U3 umožňuje pomocou výstupov QAQH zobraziť požadované číslo na 7 - segmentovom displeji. Oba registre majú spolu 16 výstupov, pričom register U2 má pripojené k displeju iba 4 výstupy. Dvojicu registrov si môžeme predstaviť ako policu, na ktorú sa zmestí 16 kníh (Obr. 5). Pravá časť police patrí registru U3 a ľavá registru U2. Kniha môže mať modrú farbu (logická 1) alebo oranžovú farbu (logická 0). Knihy sa pridávajú na policu vždy z ľavej strany a po jednej.

Obr. 5   Posuvné registre ako polica na knihy.
Obr. 5 Posuvné registre ako polica na knihy.

Kvôli prehľadnosti a zrozumiteľnosti ďalšieho kódu pre MCU si zadefinujme nasledujúce konštanty a funkcie:

#define SCK PORTD7
#define SER PORTB0
#define RCK PORTD4
#define SCK_H() PORTD|=(1<<SCK)
#define SCK_L() PORTD&=~(1<<SCK)
#define RCK_H() PORTD|=(1<<RCK)
#define RCK_L() PORTD&=~(1<<RCK)

Postup pri nastavovaní posuvných registrov si ukážeme na konkrétnom príklade. Na displeji by sme chceli rozsvietiť číslo 2 na prvej pozícii (Obr. 4). Do posuvného registra musíme postupne poslať 16-bitové číslo 0b1000000000100101 ako je to uvedené na Obr. 4.

Krok 1

Register začíname plniť od najmenej významného bitu (LSB). Najmenej významný bit má hodnotu 1, čo predstavuje modrú knihu (log. 1). Knihu si pripravíme nastavením vývodu SER na hodnotu log. 1. Knihu umiestnime na policu pomocou nábežnej hrany na vývode hodinového signálu SCK. Následne je potrebné vrátiť vstup SCK na logickú nulu, aby bolo možné umiestniť ďalšiu knihu.

Obr. 6   Krok č. 1: Posun log. 1 (modrá kniha) binárneho slova 1000000000100101 do posuvného registra.
Obr. 6 Krok č. 1: Posun log. 1 (modrá kniha) binárneho slova 1000000000100101 do posuvného registra.

Kód na zápis prvej hodnoty do posuvného registra vyzerá nasledovne:

PORTB|=(1<<SER);
SCK_H();
_delay_us(1);
SCK_L();
_delay_us(1);

Krok 2

V druhom kroku potrebujeme do registra zapísať hodnotu logickej nuly, t.j. na policu pridať oranžovú knihu. Knihu pripravíme nastavením vývodu SER na log. 0. Umiestnenie knihy na policu realizujeme opäť nábežnou hranou na linke SCK.
Obr. 7 Krok č. 2: Posun log. 0 (oranžová kniha) binárneho slova 1000000000100101 do posuvného registra.
Obr. 7 Krok č. 2: Posun log. 0 (oranžová kniha) binárneho slova 1000000000100101 do posuvného registra.

Kód na zápis prvej hodnoty do posuvného registra vyzerá nasledovne:

PORTB&=~(1<<SER);
SCK_H();
_delay_us(1);
SCK_L();
_delay_us(1);

Krok 3 až 16

Rovnaký postup opakujeme až pokiaľ na policu neumiestnime všetkých 16 kníh. Na Obr. 8 sú uvedené kroky 3, 8 a 16 pri postupnom posúvaní logických hodnôt do pamäti posuvného registra.
Obr. 8   Kroky 3, 8 a 16 pri postupnom posúvaní logických hodnôt do pamäti posuvného registra.
Obr. 8 Kroky 3, 8 a 16 pri postupnom posúvaní logických hodnôt do pamäti posuvného registra.

Presun obsahu registra na výstup

Polica prestavuje Shift register z Obr. 1. Po naplnení registra 16 bitmi (zaplnení celej police 16 knihami) je potrebné preniesť obsah Shift registra do Storage registra. Túto operáciu zrealizujeme nábežnou hranou na vývode RCK. Podobne ako predtým, vzhľadom na časový diagram, po určitom čase vrátime úroveň linky RCK do logickej nuly. V prípade, že je na vývode G ((OE) ̅) log. 0 (v našom prípade trvalo pripojené na GND), tak sa obsah Storage registra zobrazí na paralelných výstupoch QA – QH registrov U2 a U3.

Uvedenej operácii zodpovedá nasledovný úsek kódu:

RCK_H();
_delay_us(1);
RCK_L();
_delay_us(1);

Po vykonaní hore uvedenej časti kódu dôjde k rozsvieteniu čísla 2 na prvom mieste štvormiestneho LED displeja (Obr. 9).

Obr. 9   Rozsvietenie čísla 2 na 7-segmentovom displeji.
Obr. 9 Rozsvietenie čísla 2 na 7-segmentovom displeji.

2. Použité vybavenie

  1. Hardvér
    • Vývojová doska Mega Development Board 2 (MDB2)
    • Multi-Function Shield
    • PC
  2. Softvér
    • Microchip Studio

3. Schéma zapojenia

Obr. 10   Usporiadanie prepojok na vývojovej doske MDB2 (A) a pripojenie Multi-Function Shield (B).
Obr. 10 Usporiadanie prepojok na vývojovej doske MDB2 (A) a pripojenie Multi-Function Shield (B).

4. Úlohy

  1. Podľa schémy zapojenia na Obr. 10 A usporiadajte prepojky na MDB2, pozície prepojok sú vyznačené červenou. Použite napájanie z adaptéra. Podľa Obr. 10 B pripojte Muti-Function Shield k vývojovej doske MDB2.
  2. V jazyku C vytvorte program pre MCU, ktorý rozsvieti na displeji číslo 2 podľa Obr. 9. Pri tvorbe programu sa inšpirujte úsekmi kódu v Teoretickom úvode.
  3. V jazyku C vytvorte program pre MCU, ktorý rozsvieti na displeji číslo 1234.
  4. V jazyku C vytvorte program pre MCU, ktorý po štarte programu zobrazí na displeji číslo 0. Stlačením tlačidla S0 sa bude hodnota na displeji zvyšovať a stlačením tlačidla S1 sa bude hodnota na displeji znižovať. Minimálna hodnota, ktorú je možné zobraziť na displeji je 0 a maximálna 9999. Po prekročení maximálnej hodnoty sa na displeji nastaví 0 a po prekročení minimálnej hodnoty sa nastaví hodnota 9999.
  5. Zostavte vývojový diagram programu pre úlohu č. 4.
  6. Zhodnoťte priebeh laboratórneho cvičenia. Zamerajte sa na písanie kódu pre MCU a problematické časti.