U ugrađenom dizajnu postoje mogućnosti kada u vašem mikrokontroleru nema dovoljno U / I pinova. To može biti iz bilo kojeg razloga, možda vašoj aplikaciji treba više LED-a ili želite koristiti više 7-segmentnih zaslona, ali u mikrokontroleru nemate potrebne I / O igle. Evo savršene komponente, registar pomaka. Shift registar prihvaća serijske podatke i daje paralelni izlaz. Za povezivanje s mikrokontrolerom potrebna su vam samo 3 pina i od njega ćete dobiti više od 8 izlaznih pinova. Jedan od popularnih registara smjena je 74HC595. Ima 8-bitni registar za pohranu i 8-bitni pomični registar. Ovdje saznajte više o registrima smjena.
Pružit ćete serijske podatke registru smjene i oni će biti zakvačeni na registru pohrane, a zatim će registar pohrane kontrolirati 8 izlaza. Ako želite više rezultata, dodajte još jedan registar pomaka. Do kaskadno dvije smjene registre, dobit ćete dodatnih 8 izlaza, ukupne 16bit izlaz.
Registar smjene 74HC595:
Ovdje je dijagram pin-a 74HC595 prema tablici-

HC595 ima 16 pinova; ako vidimo tablicu, razumjet ćemo pin funkcije -

QA za QH, od klina brojevima 1 do 7 i 15 koriste kao 8-bitni izlaz iz registra smjene, gdje je kao klin 14 se koristi za primanje serijskih podataka. Također postoji tablica istine o tome kako koristiti druge pinove i koristiti druge funkcije registra smjene.

Kada napišemo kod za povezivanje 74HC595, primijenit ćemo ovu tablicu istine za dobivanje željenih rezultata.
Sada ćemo spojiti 74HC595 s PIC16F877A i kontrolirati 8 LED. Povezali smo pomični registar 74HC595 s drugim mikrokontrolerima:
- Povezivanje registra serijskog pomicanja 74HC595 s Raspberry Pi
- Kako koristiti Shift Registry 74HC595 s Arduino Uno?
- Povezivanje LCD-a s NodeMCU-om pomoću pomičnog registra
Potrebne komponente:
- PIC16F877A
- 2kom 33pF kondenzatori s keramičkim diskom
- Kristal od 20 MHz
- Otpor 4.7k
- 8kom LED
- 1k otpor -1 kom (8 kom 1k otpornika potrebno ako su potrebni odvojeni otpornici na svakoj ledici)
- 74HC595 ik
- 5V zidni adapter
- Programsko okruženje PIC
- Breadboard i žice
Kružni dijagram:

U shemu spojeva povezali smo serijski podatkovni pin; igla sata i zaslona (zasun) na pinu mikrokontrolera RB0, RB1 i RB2. Ovdje smo koristili jedan otpornik za 8 LED dioda. Prema tablici istine, omogućili smo izlaz spajanjem pina 13 od 74HC595 na masu. Brza igla ostala otvorena kao nećemo kaskadni još 74HC595 s njom. Mi onemogućen jasan ulazni zastavu spajanjem pin 10 registra smjene sa VCC.
Kristalni oscilator povezan je na OSC pinove mikrokontrolera. PIC16F877A nemaju nijedan unutarnji oscilator. U ovom ćemo projektu osvijetliti jedan po jedan od Q0 do Q7 pomoću pomičnog regittera.
Konstruirali smo krug u ploči-

Objašnjenje koda:
Kompletni kod za upravljanje LED-ima s registrom pomaka dan je na kraju članka. Kao i uvijek, konfiguracijske bitove moramo postaviti u PIC mikrokontroleru.
#pragma config FOSC = HS // Bitovi za odabir oscilatora (HS oscilator) #pragma config WDTE = OFF // Bit za aktiviranje nadzornika (WDT onemogućen) #pragma config PWRTE = OFF // Bit za omogućavanje timera za uključivanje (PWRT onemogućen) # pragma config BOREN = ON // bit smeštanja Reset Enable bit (omogućen BOR) #pragma config LVP = OFF // bit za omogućavanje serijskog programiranja u krugu niskog napona (jedan napajanje) (pin RB3 / PGM ima PGM funkciju; nizak -programiranje napona omogućeno) #pragma config CPD = OFF // Bit zaštite podataka EEPROM memorijskog koda (isključena zaštita podataka EEPROM koda) #pragma config WRT = OFF // Bitovi za aktiviranje memorije flash programa (isključena zaštita; sva memorija programa može biti napisano od strane EECON kontrole) #pragma config CP = OFF // Bit programa za zaštitu memorijskog koda Flash programa (zaštita koda isključena)
Nakon toga proglasili smo kristalnu frekvenciju potrebnu za kašnjenje i pin-out izjavu za 74HC595.
#include
Dalje smo proglasili funkciju system_init () za inicijalizaciju smjera pina.
praznina system_init (void) { TRISB = 0x00; }
Puls sata i zasun kreirali smo pomoću dvije različite funkcije
/ * * Ova funkcija će omogućiti Sat. * / void clock (void) { CLK_595 = 1; __zakasniti_us (500); CLK_595 = 0; __zakasniti_us (500); }
i
/ * * Ova će funkcija strobo i omogućiti izlazni pokretač. * / void Strobe (void) { STROBE_595 = 1; __zakasniti_us (500); STROBE_595 = 0; }
Nakon ove dvije funkcije proglasili smo funkciju data_submit (nepotpisani int podaci) za slanje serijskih podataka na 74HC595.
void data_submit (nepotpisani int podaci) { for (int i = 0; i <8; i ++) { DATA_595 = (data >> i) & 0x01; sat(); } strobo (); // Podaci konačno poslani }
U ovoj funkciji prihvaćamo 8-bitne podatke i svaki bit šaljemo pomoću dva bitna operatora lijevi pomak i operator AND. Prvo premještamo podatke jedan po jedan i saznajemo točan bit je li 0 ili 1 pomoću operatora AND s 0x01. Svi se podaci pohranjuju u impulsu takta i konačnom izlazu podataka koji se rade pomoću impulsa zasuna ili stroba. U ovom će procesu izlaz podataka najprije biti MSB (najznačajniji bit).
U glavnoj funkciji predali smo binarni zapis i izlaze pinova podigli jedan po jedan.
system_init (); // Sustav se priprema dok (1) { data_submit (0b00000000); __zakašnjenje_ms (200); data_submit (0b10000000); __zakašnjenje_ms (200); data_submit (0b01000000); __zakašnjenje_ms (200); data_submit (0b00100000); __zakašnjenje_ms (200); data_submit (0b00010000); __zakašnjenje_ms (200); data_submit (0b00001000); __zakašnjenje_ms (200); data_submit (0b00000100); __zakašnjenje_ms (200); data_submit (0b00000010); __zakašnjenje_ms (200); data_submit (0b00000001); __zakašnjenje_ms (200); data_submit (0xFF); __zakašnjenje_ms (200); } povratak; }
Tako se registar pomaka može koristiti za dobivanje više slobodnih I / O pinova u bilo kojem mikrokontroleru za povezivanje više senzora.

