Iegultā dizainā ir iespējas, kad jūsu mikrokontrollerī nav pietiekami daudz I / O tapu. Tas var būt jebkura iemesla dēļ, iespējams, jūsu lietojumprogrammai ir nepieciešamas vairākas gaismas diodes vai vēlaties izmantot vairākus 7 segmentu displejus, taču mikrokontrollerī nav nepieciešami I / O kontakti. Šeit nāk ideāls komponents, maiņu reģistrs. Shift reģistrs pieņem sērijas datus un dod paralēlu izvadi. Lai izveidotu savienojumu ar mikrokontrolleru, ir nepieciešami tikai 3 kontakti, un no tā jūs iegūsiet vairāk nekā 8 izvades tapas. Viens no populārajiem maiņu reģistriem ir 74HC595. Tam ir 8 bitu krātuves reģistrs un 8 bitu nobīdes reģistrs. Uzziniet vairāk par maiņu reģistriem šeit.
Jūs sniegsit sērijas datus maiņu reģistrā, un tie tiks fiksēti krātuves reģistrā, un pēc tam krātuves reģistrs kontrolēs 8 izejas. Ja vēlaties vairāk izejas, vienkārši pievienojiet citu maiņu reģistru. Ar kaskādes divās maiņās reģistriem, jūs saņemsiet papildus 8 izejas, kopējais 16bit produkciju.
Maiņu reģistrs 74HC595:
Šeit ir 74HC595 tapas diagramma, kā norādīts datu lapā -
HC595 ir 16 adatas; ja redzēsim datu lapu, mēs sapratīsim piespraudes funkcijas-
QA QH, no pin skaitļiem no 1 līdz 7, un 15 izmantots kā 8 bitu izejas no maiņas reģistra, kur kā pin 14 tiek izmantota saņem sērijas datiem. Ir arī patiesības tabula par to, kā izmantot citas tapas un izmantot citas maiņu reģistra funkcijas.
Uzrakstot kodu 74HC595 saskarnei, mēs izmantosim šo patiesības tabulu, lai iegūtu vēlamos rezultātus.
Tagad mēs saskarnēsim 74HC595 ar PIC16F877A un vadīsim 8 gaismas diodes. Mēs esam sasaistījuši 74HC595 maiņu reģistru ar citiem mikrokontrolleriem:
- Saskarnes 74HC595 sērijas maiņas reģistrs ar Raspberry Pi
- Kā lietot Shift Register 74HC595 ar Arduino Uno?
- LCD saskarne ar NodeMCU, izmantojot maiņu reģistru
Nepieciešamās sastāvdaļas:
- PIC16F877A
- 2gb 33pF keramikas disku kondensatori
- 20Mhz kristāls
- 4.7k rezistors
- 8gab. Gaismas diodes
- 1k rezistors -1 pc (nepieciešami 8 gab 1k rezistori, ja katram ledam ir nepieciešami atsevišķi rezistori)
- 74HC595 ic
- 5V sienas adapteris
- PIC programmēšanas vide
- Maizes dēlis un stieples
Ķēdes shēma:
Shēmas shēmā mēs esam savienojuši sērijas datu tapu; pulksteņa un strobe (fiksatora) tapa attiecīgi uz mikrokontrollera RB0, RB1 un RB2 tapām. Šeit mēs izmantojām vienu rezistoru 8 gaismas diodēm. Saskaņā ar patiesības tabulu mēs iespējojām izvadi, savienojot 74HC595 tapu 13 ar zemi. ĀP pin ir atstāts atklāts, jo mums nebūs kaskādes vēl 74HC595 ar to. Mēs atspējojām skaidras ievades karodziņu, savienojot maiņu reģistra tapu 10 ar VCC.
Kristāla oscilators ir savienots ar mikrokontrollera OSC tapām. PIC16F877A nav iekšējā oscilatora. Šajā projektā mēs iedegsim vienu pēc otra no Q0 līdz Q7, izmantojot shift regitster.
Mēs esam izveidojuši ķēdi maizes dēlī-
Koda skaidrojums:
Pilnīgs kods LED vadībai ar maiņu reģistru ir norādīts raksta beigās. Kā vienmēr, mums jāiestata konfigurācijas biti PIC mikrokontrollerī.
#pragma config FOSC = HS // Oscilatora izvēles biti (HS oscilators) #pragma config WDTE = OFF // Watchdog taimera iespējošanas bits (WDT atspējots) #pragma config PWRTE = OFF // Ieslēgšanas taimera iespējošanas bits (PWRT atspējots) # pragma config BOREN = ON // Brown-out Reset Enable bit (BOR iespējots) #pragma config LVP = OFF // Zemsprieguma (vienas piegādes) ķēdes seriālās programmēšanas iespējošanas bits (RB3 / PGM tapai ir PGM funkcija; zema iespējota sprieguma programmēšana) #pragma config CPD = OFF // Datu EEPROM atmiņas koda aizsardzības bits (datu EEPROM koda aizsardzība izslēgta) #pragma config WRT = Izslēgta // Flash programmas atmiņas rakstīšana Iespējot bitus (Rakstīšanas aizsardzība izslēgta; visa programmas atmiņa var būt uzrakstījis EECON vadība) #pragma config CP = OFF // Flash programmas atmiņas koda aizsardzības bits (koda aizsardzība izslēgta)
Pēc tam mēs paziņojām kristāla frekvenci, kas nepieciešama aizkavei, un piespiešanas deklarāciju 74HC595.
# iekļaut
Pēc tam mēs deklarējām funkciju system_init (), lai inicializētu tapas virzienu.
void system_init (void) { TRISB = 0x00; }
Mēs izveidojām pulksteņa impulsu un fiksatora impulsu, izmantojot divas dažādas funkcijas
/ * * Šī funkcija ļaus aktivizēt pulksteni. * / void pulkstenis (void) { CLK_595 = 1; __kavēšanās_us (500); CLK_595 = 0; __kavēšanās_us (500); }
un
/ * * Šī funkcija darbosies un aktivizēs izvades trigeri. * / void strobe (void) { STROBE_595 = 1; __kavēšanās_us (500); STROBE_595 = 0; }
Pēc šīm divām funkcijām mēs paziņojām funkciju data_submit (neparakstīti int dati), lai iesniegtu sērijas datus 74HC595.
void data_submit (neparakstīti int dati) { for (int i = 0; i <8; i ++) { DATA_595 = (dati >> i) & 0x01; pulkstenis (); } strobe (); // dati beidzot iesniegti }
Šajā funkcijā mēs pieņemam 8 bitu datus un katru bitu nosūtām, izmantojot divus bitu kustības operatorus kreisajā maiņā un AND operatoru. Vispirms mēs pārvietojam datus pa vienam un uzzinām precīzu bitu, vai tas ir 0 vai 1, izmantojot AND operatoru ar 0x01. Katru informāciju glabā pulksteņa impulss, un galīgo datu izvade tiek veikta, izmantojot fiksatoru vai strobe impulsu. Šajā procesā datu izvade vispirms būs MSB (vissvarīgākais bits).
Ar galveno funkciju mēs iesniedzām bināro un padarīja augsto vienu izejas pins pa vienam.
system_init (); // Sistēma gatavojas, kamēr (1) { data_submit (0b00000000); __kavēšanās_ms (200); data_submit (0b10000000); __kavēšanās_ms (200); data_submit (0b01000000); __kavēšanās_ms (200); data_submit (0b00100000); __kavēšanās_ms (200); data_submit (0b00010000); __kavēšanās_ms (200); data_submit (0b00001000); __kavēšanās_ms (200); data_submit (0b00000100); __kavēšanās_ms (200); data_submit (0b00000010); __kavēšanās_ms (200); data_submit (0b00000001); __kavēšanās_ms (200); data_submit (0xFF); __kavēšanās_ms (200); } atgriešanās; }
Tādā veidā maiņu reģistru var izmantot, lai iegūtu vairāk bezmaksas I / O tapas jebkurā mikrokontrollerī, lai pievienotu vairāk sensoru.