Det er muligheter i innebygd design der du ikke har nok I / O-pinner tilgjengelig i mikrokontrolleren din. Det kan være av en eller annen grunn, kan være at applikasjonen din trenger flere lysdioder, eller at du vil bruke flere 7-segmentdisplayer, men du har ikke nødvendige I / O-pinner i mikrokontrolleren. Her kommer en perfekt komponent, skiftregister. Shift-register godtar serielle data og gir parallell utgang. Det krever bare 3 pinner for å koble til mikrokontrolleren din, og du får mer enn 8 utgangspinner fra den. Et av det populære skiftregisteret er 74HC595. Den har 8 biters lagringsregister og 8 bit skiftregister. Lær mer om skiftregister her.
Du vil gi seriell data til skiftregisteret, og de vil bli låst på lagringsregisteret, og deretter vil lagringsregisteret kontrollere de 8 utgangene. Hvis du vil ha mer produksjon, kan du bare legge til et nytt skiftregister. Ved å kaste to skiftregistre får du ytterligere 8 utganger, totalt 16-biters utgang.
Skiftregister 74HC595:
Her er pin-out-diagrammet til 74HC595 i henhold til databladet-
HC595 har 16 pins; hvis vi ser databladet, vil vi forstå pin-funksjonene-
Den QA til QH, fra PIN-nummer 1 til 7 og 15 anvendes som 8-bits utgang fra skiftregisteret, hvor da stiften 14 blir brukt for å motta serielle data. Det er også sannhetstabell om hvordan du bruker andre pinner og benytter deg av andre funksjoner i skiftregisteret.
Når vi skriver koden for å grensesnitt 74HC595, vil vi bruke denne sannhetstabellen for å få de ønskede utgangene.
Nå vil vi grensesnitt 74HC595 med PIC16F877A og kontrollere 8 lysdioder. Vi har grensesnitt 74HC595 skiftregister med andre mikrokontrollere:
- Grensesnitt 74HC595 Serial Shift Register med Raspberry Pi
- Hvordan bruke Shift Register 74HC595 med Arduino Uno?
- Grensesnitt LCD med NodeMCU ved bruk av skiftregister
Nødvendige komponenter:
- PIC16F877A
- 2stk 33pF keramiske skivekondensatorer
- 20Mhz krystall
- 4,7 k motstand
- 8 stk LED
- 1k motstand -1 stk (8 stk 1k motstand kreves hvis det er behov for separate motstander på hver lysdiode)
- 74HC595 ic
- 5V veggadapter
- PIC programmeringsmiljø
- Brettbrett og ledninger
Kretsdiagram:
I kretsskjema har vi koblet den serielle datapinnen; klokke og strobe (sperre) pinne på henholdsvis mikrokontrollers RB0, RB1 og RB2 pin. Her har vi brukt en motstand for 8 lysdioder. I henhold til sannhetstabellen aktiverte vi utgang ved å koble pinnen 13 på 74HC595 til bakken. Den QH pin er igjen åpen som vi ikke vil cascade annen 74HC595 med det. Vi deaktiverte det klare inngangsflagget ved å koble pin 10 i skiftregisteret til VCC.
Crystal-oscillatoren er koblet til OSC-pinnene på mikrokontrolleren. PIC16F877A har ingen intern oscillator. I dette prosjektet vil vi lyse opp ledet en etter en fra Q0 til Q7 ved hjelp av skiftregister.
Vi har konstruert kretsen i et brødbrett-
Kode Forklaring:
Komplett kode for styring av lysdioder med skiftregister er gitt på slutten av artikkelen. Som alltid må vi sette konfigurasjonsbitene i PIC-mikrokontrolleren.
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT deaktivert) # pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT deaktivert) # 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 (RB3 / PGM pin has PGM function; low -spenningsprogrammering aktivert) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be skrevet til av EECON-kontroll) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
Etter det erklærte vi krystallfrekvensen som kreves for forsinkelsen og pin-out-erklæringen for 74HC595.
#inkludere
Deretter erklærte vi system_init () -funksjonen for å initialisere pinretningen .
ugyldig system_init (ugyldig) { TRISB = 0x00; }
Vi opprettet klokkepulsen og låsepulsen ved hjelp av to forskjellige funksjoner
/ * * Denne funksjonen vil aktivere klokken. * / ugyldig klokke (ugyldig) { CLK_595 = 1; __forsinkelse (500); CLK_595 = 0; __forsinkelse (500); }
og
/ * * Denne funksjonen vil strobe og aktivere utløseren. * / void strobe (void) { STROBE_595 = 1; __forsinkelse (500); STROBE_595 = 0; }
Etter disse to funksjonene erklærte vi data_submit-funksjonen (usignert int-data) for å sende seriell data til 74HC595.
ugyldig data_submit (usignerte int-data) { for (int i = 0; i <8; i ++) { DATA_595 = (data >> i) & 0x01; klokke(); } strobe (); // Data endelig sendt inn }
I denne funksjonen aksepterer vi 8bit data og sender hver bit ved hjelp av to bitvise operatører left shift og AND operator. Vi skifter først dataene en etter en og finner ut den eksakte biten om det er 0 eller 1 ved å bruke AND-operatoren med 0x01. Hver data lagres av klokkepulsen og den endelige datautgangen som gjøres ved hjelp av låse- eller strobepulsen. I denne prosessen blir datautgangen MSB (Most Significant Bit) først.
I hovedfunksjon innsendt vi det binære og gjorde utdatastrømpunkt høy én etter én.
system_init (); // System gjør seg klar mens (1) { data_submit (0b00000000); __forsink_ms (200); data_submit (0b10000000); __forsink_ms (200); data_submit (0b01000000); __forsink_ms (200); data_submit (0b00100000); __forsink_ms (200); data_submit (0b00010000); __forsink_ms (200); data_submit (0b00001000); __forsink_ms (200); data_submit (0b00000100); __forsink_ms (200); data_submit (0b00000010); __forsink_ms (200); data_submit (0b00000001); __forsink_ms (200); data_submit (0xFF); __forsink_ms (200); } returnere; }
Det er slik et skiftregister kan brukes til å få flere gratis I / O-pinner i hvilken som helst mikrokontroller for å koble til flere sensorer.