Der er muligheder i integreret design, hvor du ikke har nok I / O-ben tilgængelige i din mikrocontroller. Det kan skyldes en eller anden grund, kan være, at din applikation har brug for flere lysdioder, eller at du vil bruge flere 7-segmentskærme, men du har ikke krævet I / O-ben i din mikrocontroller. Her kommer en perfekt komponent, skiftregister. Shift-register accepterer serielle data og giver parallel output. Det kræver kun 3 ben for at oprette forbindelse til din mikrocontroller, og du får mere end 8 udgangsnåle fra den. Et af det populære skiftregister er 74HC595. Det har 8 bit lagerregister og 8 bit shift register. Lær mere om skiftregistre her.
Du leverer serielle data til skiftregisteret, og de låses i lagerregistret, og derefter styrer lagerregistret de 8 udgange. Hvis du vil have mere output, skal du blot tilføje et andet skiftregister. Ved at kaskade to skiftregistre får du yderligere 8 udgange, i alt 16 bit output.
Skiftregister 74HC595:
Her er pin-out-diagrammet for 74HC595 i henhold til databladet-
HC595 har 16 ben; hvis vi ser databladet, vil vi forstå pin-funktionerne-
Den QA til QH, fra ben numre 1 til 7 og 15 anvendes som 8 bit output fra skifteregistret, hvor som tappen 14 anvendes til at modtage serielle data. Der er også sandhedstabel om, hvordan man bruger andre stifter og benytter andre funktioner i skiftregisteret.
Når vi skriver koden til grænseflade mellem 74HC595, anvender vi denne sandhedstabel for at få de ønskede output.
Nu vil vi interface 74HC595 med PIC16F877A og styre 8 lysdioder. Vi har interfacet 74HC595 skiftregister med andre mikrocontrollere:
- Interfacing 74HC595 Serial Shift Register med Raspberry Pi
- Sådan bruges Shift Register 74HC595 med Arduino Uno?
- Interfacing LCD med NodeMCU ved hjælp af shift-register
Nødvendige komponenter:
- PIC16F877A
- 2stk 33pF keramiske diskkondensatorer
- 20Mhz krystal
- 4,7 k modstand
- 8stk LED'er
- 1k modstand -1 stk (8 stk. 1k modstande kræves, hvis der er behov for separate modstande på hver lysdiode)
- 74HC595 ic
- 5V vægadapter
- PIC programmeringsmiljø
- Brødbræt og ledninger
Kredsløbsdiagram:
I kredsløbsdiagram har vi tilsluttet den serielle datapin ur og strobe (lås) pin på henholdsvis microcontroller RB0, RB1 og RB2 pin. Her har vi brugt en modstand til 8 lysdioder. I henhold til sandhedstabellen aktiverede vi output ved at forbinde pin 13 på 74HC595 til jorden. Den QH pin efterlades åben, da vi ikke vil kaskade anden 74HC595 med det. Vi deaktiverede det klare input-flag ved at forbinde pin 10 i skiftregisteret med VCC.
Crystaloscillatoren er tilsluttet på OSC-stifterne på mikrokontrolleren. PIC16F877A har ingen intern oscillator. I dette projekt lyser vi ledningen en efter en fra Q0 til Q7 ved hjælp af skiftregitster.
Vi har konstrueret kredsløbet i et brødbræt-
Kode Forklaring:
Komplet kode til styring af lysdioder med skiftregister findes i slutningen af artiklen. Som altid er vi nødt til at indstille konfigurationsbitene i PIC-mikrocontrolleren.
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT deaktiveret) # pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT deaktiveret) # 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 har PGM funktion; lav -spændingsprogrammering aktiveret) #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 af EECON-kontrol) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
Derefter erklærede vi den krystalfrekvens, der kræves for forsinkelsen, og pin-out-erklæringen for 74HC595.
#omfatte
Dernæst erklærede vi system_init () -funktionen for at initialisere pinretningen .
ugyldigt system_init (ugyldigt) { TRISB = 0x00; }
Vi oprettede urimpulsen og låsepulsen ved hjælp af to forskellige funktioner
/ * * Denne funktion aktiverer uret. * / ugyldigt ur (ugyldigt) { CLK_595 = 1; __forsinkelse (500); CLK_595 = 0; __forsinkelse (500); }
og
/ * * Denne funktion vil strobe og aktivere output triggeren. * / ugyldig strobe (ugyldig) { STROBE_595 = 1; __forsinkelse (500); STROBE_595 = 0; }
Efter disse to funktioner erklærede vi data_submit-funktionen (usigneret int-data) for at sende serielle data til 74HC595.
ugyldige data_submit (usignerede int-data) { for (int i = 0; i <8; i ++) { DATA_595 = (data >> i) & 0x01; ur(); } strobe () // Data endelig indsendt }
I denne funktion accepterer vi 8bit data og sender hver bit ved hjælp af to bitvise operatorer left shift og AND operator. Vi skifter først dataene en efter en og finder ud af den nøjagtige bit, om det er 0 eller 1 ved hjælp af AND-operator med 0x01. Hver data lagres af urimpulsen og den endelige dataoutput, der udføres ved hjælp af låse- eller strobepulsen. I denne proces vil dataoutputtet først være MSB (Most Significant Bit).
I den primære funktion indsendt vi den binære og gjorde output pins høje én efter én.
system_init (); // System gør sig klar, mens (1) { data_submit (0b00000000); __forsinkelse (200); data_submit (0b10000000); __forsinkelse (200); data_submit (0b01000000); __forsinkelse (200); data_submit (0b00100000); __forsinkelse (200); data_submit (0b00010000); __forsinkelse (200); data_submit (0b00001000); __forsinkelse (200); data_send (0b00000100); __forsinkelse (200); data_submit (0b00000010); __forsinkelse (200); data_submit (0b00000001); __forsinkelse (200); data_submit (0xFF); __forsinkelse (200); } vende tilbage; }
Sådan kan et skiftregister bruges til at få flere gratis I / O-ben i en hvilken som helst mikrokontroller til tilslutning af flere sensorer.