V zabudovanom dizajne existujú možnosti, keď vo svojom mikrokontroléri nemáte k dispozícii dostatok I / O pinov. To môže byť z akéhokoľvek dôvodu, môže to byť tak, že vaša aplikácia vyžaduje viac LED alebo chcete použiť viac 7-segmentových displejov, ale vo svojom mikrokontroléri nepotrebujete I / O piny. Prichádza perfektný komponent, posuvný register. Posuvný register akceptuje sériové dáta a poskytuje paralelný výstup. Na pripojenie k vášmu mikrokontroléru sú potrebné iba 3 piny a získate z neho viac ako 8 výstupných pinov. Jedným z populárnych posuvných registrov je 74HC595. Má 8-bitový pamäťový register a 8-bitový posuvný register. Viac informácií o posuvných registroch sa dozviete tu.
Budete poskytovať sériových dát do posuvného registra a bude naklonený na pamäťovom registri a skladovanie register bude ovládať 8 výstupmi. Ak chcete viac výstupu, pridajte ďalší posuvný register. Tým, kaskádové dvoch posuvných registrov, dostanete ďalších 8 výstupov, celkové 16bit výstup.
Posuvný register 74HC595:
Tu je vývodový diagram 74HC595 podľa údajového listu -
HC595 má 16 pinov; ak uvidíme údajový list, pochopíme funkcie pinov-
QA na QH, z čísla PIN 1 až 7 a 15 použité ako 8 bitový výstup z posuvného registra, kde ako čap 14 sa používa pre príjem sériových dát. Existuje tiež pravdivá tabuľka o tom, ako používať ďalšie piny a využívať ďalšie funkcie posuvného registra.
Keď napíšeme kód na prepojenie 74HC595, použijeme túto pravdivostnú tabuľku na získanie požadovaných výstupov.
Teraz prepojíme 74HC595 s PIC16F877A a budeme ovládať 8 LED diód. Prepojili sme posuvný register 74HC595 s inými mikrokontrolérmi:
- Prepojenie Registra sériového posuvu 74HC595 s Raspberry Pi
- Ako používať posuvný register 74HC595 s Arduino Uno?
- Prepojenie LCD s NodeMCU pomocou posuvného registra
Požadované komponenty:
- PIC16F877A
- 2ks keramické diskové kondenzátory 33pF
- 20MHz kryštál
- 4,7k rezistor
- 8ks LED diód
- 1k rezistor -1 ks (8 ks 1k rezistorov potrebných, ak sú potrebné samostatné rezistory na každej LED)
- 74HC595 ic
- 5V nástenný adaptér
- Programovacie prostredie PIC
- Nepájivé pole a drôty
Schéma zapojenia:
V schéme zapojenia sme pripojili pin sériových údajov; hodiny a zábleskový (západkový) pin na pinoch mikrokontroléra RB0, RB1 a RB2. Tu sme použili jeden rezistor pre 8 LED diód. Podľa tabuľky pravdivosti sme výstup povolili pripojením kolíka 13 74HC595 k zemi. QH pin je ponechaná otvorená, pretože nebudeme kaskády ďalšie 74HC595 s ním. Deaktivovali sme príznak čistého vstupu pripojením kolíka 10 posuvného registra k VCC.
Oscilátor Crystal je pripojený k pinom OSC mikrokontroléra. PIC16F877A nemajú žiadny interný oscilátor. V tomto projekte rozsvietime vedené jeden po druhom od Q0 do Q7 pomocou radiča regulácií.
Obvod sme zostrojili v doske
Vysvetlenie kódu:
Kompletný kód na ovládanie LED diód s posuvným registrom je uvedený na konci článku. Ako vždy je potrebné nastaviť konfiguračné bity v mikrokontroléri PIC.
#pragma config FOSC = HS // Oscilátory pre výber bitov (HS oscilátor) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT deaktivovaný) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT deaktivovaný) # pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (pin RB3 / PGM má funkciu PGM; low -voltové programovanie povolené) #pragma config CPD = OFF // bit ochrany kódu pamäte EEPROM dát (ochrana kódu kódu EEPROM vypnutá) #pragma config WRT = OFF // zapisovanie do pamäte Flash programu Povolenie bitov (ochrana proti zápisu vypnutá; môže byť všetka pamäť programu) zapísané kontrolou EECON) #pragma config CP = OFF // Bit ochrany kódu pamäte programu Flash (ochrana kódu vypnutá)
Potom sme deklarovali kryštálovú frekvenciu, ktorá je potrebná pre oneskorenie, a deklaráciu pin-out pre 74HC595.
#include
Ďalej sme deklarovali funkciu system_init () na inicializáciu smeru kolíka.
void system_init (void) { TRISB = 0x00; }
Hodinový a západkový impulz sme vytvorili pomocou dvoch rôznych funkcií
/ * * Táto funkcia povolí hodiny. * / void hodiny (void) { CLK_595 = 1; __delay_us (500); CLK_595 = 0; __delay_us (500); }
a
/ * * Táto funkcia aktivuje stroboskop a aktivuje výstupné spúšťanie. * / void strobe (void) { STROBE_595 = 1; __delay_us (500); STROBE_595 = 0; }
Po týchto dvoch funkciách sme deklarovali funkciu data_submit (unsigned int data) na odoslanie sériových údajov do 74HC595.
void data_submit (unsigned int data) { for (int i = 0; i <8; i ++) { DATA_595 = (data >> i) & 0x01; hodiny (); } stroboskop (); // Údaje boli konečne odoslané }
V tejto funkcii prijímame 8bitové dáta a každý bit posielame pomocou dvoch bitových operátorov ľavého posunu a operátora AND. Najprv posunieme údaje jeden po druhom a pomocou operátora AND s 0x01 zistíme presný bit, či je to 0 alebo 1. Každé dáta sú uložené hodinovým impulzom a výstupom konečných údajov pomocou západkového alebo strobovacieho impulzu. V tomto procese bude dátovým výstupom najskôr MSB (najdôležitejší bit).
V hlavnej funkcii sme zadali binárne súbory a nastavili výstupné piny vysoko jeden po druhom.
system_init (); // Systém sa pripravuje while (1) { data_submit (0b00000000); __delay_ms (200); data_submit (0b10000000); __delay_ms (200); data_submit (0b01000000); __delay_ms (200); data_submit (0b00100000); __delay_ms (200); data_submit (0b00010000); __delay_ms (200); data_submit (0b00001000); __delay_ms (200); data_submit (0b00000100); __delay_ms (200); data_submit (0b00000010); __delay_ms (200); data_submit (0b00000001); __delay_ms (200); data_submit (0xFF); __delay_ms (200); } návrat; }
Takto možno posuvný register použiť na získanie väčšieho množstva voľných I / O pinov v ľubovoľnom mikrokontroléri na pripojenie viacerých senzorov.