A beágyazott tervezésben vannak olyan lehetőségek, amelyekben nincs elegendő I / O tű a mikrovezérlőben. Ennek oka lehet bármilyen ok, lehet, hogy az alkalmazásának több LED-re van szüksége, vagy több 7 szegmenses kijelzőt szeretne használni, de a mikrovezérlőben nincs szüksége I / O tűkre. Itt jön egy tökéletes alkatrész, műszak regiszter. A Shift regiszter elfogadja a soros adatokat és párhuzamos kimenetet ad. Csak 3 érintkező szükséges a mikrovezérlőhöz való csatlakozáshoz, és több mint 8 kimeneti tűt kap belőle. Az egyik népszerű műszakregiszter a 74HC595. Ez 8 bites tároló regiszter és 8 bit léptető regiszter. Tudjon meg többet a műszakregiszterekről itt.
Meg fog nyújtani a soros adatokat a shift regiszter és ez lesz becsukott a tároló regiszter, majd a tároló regiszter vezérli a 8 kimenet. Ha több kimenetet szeretne, adjon hozzá egy másik váltóregisztert. By lépcsőzetes két shift regiszterek, akkor kap további 8 kimenettel, a teljes 16 bites kimenet.
Váltási regisztráció 74HC595:
Itt található a 74HC595 kitűzési diagramja az adatlap szerint -
A HC595 16 tűvel rendelkezik; ha meglátjuk az adatlapot, megértjük a pin funkciókat-
A QA-tól QH-ig, az 1-től 7-ig és 15-ig terjedő tűktől kezdve, 8 bites kimenetként a shift regiszterből, ahol a 14 tűként soros adatok fogadására szolgálnak. Van egy igazságtáblázat arról is, hogy miként használhatunk más csapokat és hogyan használhatjuk a shift regiszter egyéb funkcióit.
Amikor megírjuk a 74HC595 interfész kódját, ezt az igazságtáblát alkalmazzuk a kívánt kimenetek megszerzéséhez.
Most összekapcsoljuk a 74HC595-et a PIC16F877A-val, és 8 LED-et vezérelünk. Csatlakoztattuk a 74HC595 shift regisztert más mikrovezérlőkhöz:
- Összekötő 74HC595 soros műszak regiszter a Raspberry Pi-vel
- A Shift Register 74HC595 használata az Arduino Uno-val?
- Összekötő LCD és NodeMCU a shift Register használatával
Szükséges alkatrészek:
- PIC16F877A
- 2db 33pF kerámia tárcsás kondenzátorok
- 20Mhz kristály
- 4.7k ellenállás
- 8db LED-ek
- 1k ellenállás -1 pc (8 db 1k ellenállás szükséges, ha minden ledhez külön ellenállás szükséges)
- 74HC595 ic
- 5V-os fali adapter
- PIC programozási környezet
- Kenyérlemez és huzalok
Kördiagramm:
A kapcsolási rajzon összekötöttük a soros adat csapot; óra és strobe (retesz) tű a mikrokontroller RB0, RB1 és RB2 tűjén. Itt egy ellenállást használtunk 8 LED-hez. Az igazságtáblázatnak megfelelően engedélyeztük a kimenetet a 74HC595 13- as érintkezőjének a földdel való összekötésével. A QH tüske nyitva marad, mivel nem fogunk újabb 74HC595-ös kaszkádot végezni vele. Mi van tiltva a tiszta bemeneti zászló összekötő csap 10 léptető regiszter VCC.
A kristályoszcillátor a mikrovezérlő OSC csapjaira van csatlakoztatva. A PIC16F877A nem rendelkezik belső oszcillátorral. Ebben a projektben egyenként megvilágítjuk a vezetést Q0-tól Q7-ig a shift regitster segítségével.
Az áramkört kenyérsütőben építettük
Kód Magyarázat:
A váltókarral ellátott LED-ek vezérlésének teljes kódja a cikk végén található. Mint mindig, a PIC mikrokontrollerben be kell állítanunk a konfigurációs biteket.
#pragma config FOSC = HS // Oszcillátor választóbitek (HS oszcillátor) #pragma config WDTE = KI // Watchdog Timer Engedélyezés bit (WDT letiltva) #pragma config PWRTE = KI // Bekapcsolási időzítő bit engedélyezése (PWRT letiltva) # pragma config BOREN = BE // Brown-out Reset bit engedélyezése (BOR engedélyezve) #pragma config LVP = OFF // Kisfeszültségű (egyszeres tápellátás) Áramkörön belüli soros programozás Engedélyező bit (RB3 / PGM csapnak PGM funkciója van; alacsony -feszültség programozás engedélyezve) #pragma config CPD = OFF // Data EEPROM memóriakód védelmi bit (Data EEPROM kód védelem ki van kapcsolva) #pragma config WRT = OFF // Flash program memória írása Bitek engedélyezése (Írásvédelem kikapcsolva; az összes programmemória lehet az EECON ellenőrzése írta) #pragma config CP = KI // Flash program memóriájának kódvédelmi bitje (a kód védelme ki van kapcsolva)
Ezt követően deklaráltuk a késéshez szükséges kristályfrekvenciát és a 74HC595 kitűző deklarációját.
#include
Ezután deklaráltuk a system_init () függvényt a tű irányának inicializálásához.
void system_init (void) { TRISB = 0x00; }
Két különböző funkció segítségével hoztuk létre az óra impulzus és a retesz impulzust
/ * * Ez a funkció engedélyezi az Órát. * / void óra (érvénytelen) { CLK_595 = 1; __késleltetés_ (500); CLK_595 = 0; __késleltetés_ (500); }
és
/ * * Ez a funkció villog és engedélyezi a kimeneti ravaszt. * / void strobe (void) { STROBE_595 = 1; __késleltetés_ (500); STROBE_595 = 0; }
E két függvény után deklaráltuk a data_submit (unsigned int data) függvényt, hogy soros adatokat küldjünk a 74HC595-be.
void data_submit (aláíratlan int adatok) { for (int i = 0; i <8; i ++) { DATA_595 = (adatok >> i) & 0x01; óra(); } strobe (); // Végül beküldött adatok }
Ebben a funkcióban elfogadunk 8 bites adatokat, és mindegyik bitet két bitenkénti operátor bal váltás és AND operátor segítségével küldjük el. Először egyenként eltoljuk az adatokat, és a 0x01 AND operátorral megtudjuk a pontos bitet, hogy 0 vagy 1. Minden adatot az óra impulzus és a végső adat kimenet tárol a retesz vagy a villogó impulzus segítségével. Ebben a folyamatban az adatkimenet először az MSB lesz (Most Significant Bit).
A fő funkcióban beküldtük a bináris dokumentumot, és egyesével magasra tettük a kimeneti csapokat.
system_init (); // A rendszer készül, míg (1) { data_submit (0b00000000); __késleltetési_ms (200); data_submit (0b10000000); __késleltetési_ms (200); data_submit (0b01000000); __késleltetési_ms (200); data_submit (0b00100000); __késleltetési_ms (200); data_submit (0b00010000); __késleltetési_ms (200); data_submit (0b00001000); __késleltetési_ms (200); data_submit (0b00000100); __késleltetési_ms (200); data_submit (0b00000010); __késleltetési_ms (200); data_submit (0b00000001); __késleltetési_ms (200); data_submit (0xFF); __késleltetési_ms (200); } visszatérés; }
Így egy eltolási regiszter segítségével több szabad I / O tű kapható bármelyik mikrovezérlőben több érzékelő csatlakoztatásához.