Ve vestavěném designu existují možnosti, kdy ve svém mikrokontroléru nemáte k dispozici dostatek I / O pinů. To může být z jakéhokoli důvodu, může to být tak, že vaše aplikace potřebuje více LED diod nebo chcete použít více 7segmentových displejů, ale ve svém mikrokontroléru nepotřebujete I / O piny. Přichází perfektní komponenta, posuvný registr. Posuvný registr přijímá sériová data a poskytuje paralelní výstup. Pro připojení k mikrokontroléru je zapotřebí pouze 3 piny a získáte z něj více než 8 výstupních pinů. Jedním z populárních posuvných registrů je 74HC595. Má 8bitový registr úložiště a 8bitový posuvný registr. Další informace o posuvných registrech se dozvíte zde.
Do posuvného registru poskytnete sériová data, která se zablokují v registru úložiště a poté bude registr úložiště řídit 8 výstupů. Pokud chcete více výstupu, přidejte další posuvný registr. Tím, kaskádové dvou posuvných registrů, dostanete dalších 8 výstupů, celkové 16bit výstup.
Posuvný registr 74HC595:
Zde je schéma vyvedení 74HC595 podle datového listu -
HC595 má 16 pinů; pokud uvidíme datový list, porozumíme pinovým funkcím -
QA na QH, z čísla PIN 1 až 7 a 15 použity jako 8 bitový výstup z posuvného registru, kde jako čep 14 se používá pro příjem sériových dat. Existuje také pravdivostní tabulka o tom, jak používat další piny a využívat další funkce posuvného registru.
Když napíšeme kód pro propojení 74HC595, použijeme tuto pravdivostní tabulku pro získání požadovaných výstupů.
Nyní budeme propojovat 74HC595 s PIC16F877A a ovládat 8 LED. Propojili jsme posuvný registr 74HC595 s dalšími mikrokontroléry:
- Propojení sériového posuvného registru 74HC595 s Raspberry Pi
- Jak používat posuvný registr 74HC595 s Arduino Uno?
- Propojení LCD s NodeMCU pomocí posuvného registru
Požadované komponenty:
- PIC16F877A
- 2ks keramické diskové kondenzátory 33pF
- 20MHz krystal
- 4,7k rezistor
- 8ks LED
- 1k rezistor -1 ks (8 ks 1k rezistorů, pokud jsou potřeba samostatné rezistory na každé LED)
- 74HC595 ic
- 5V nástěnný adaptér
- Programovací prostředí PIC
- Nepájivé pole a dráty
Kruhový diagram:
V schématu zapojení jsme připojili pin sériových dat; hodinový a zábleskový (západkový) kolík na mikrokontroléru RB0, RB1 a RB2. Zde jsme použili jeden rezistor pro 8 LED. Podle tabulky pravdivosti jsme povolili výstup připojením kolíku 13 74HC595 k zemi. QH pin je ponechána otevřená, protože nebudeme kaskády další 74HC595 s ním. Deaktivovali jsme příznak vymazání vstupu připojením kolíku 10 posuvného registru k VCC.
Crystal oscilátor je připojen na OSC piny mikrokontroléru. PIC16F877A nemají žádný interní oscilátor. V tomto projektu rozsvítíme jeden po druhém led od Q0 do Q7 pomocí řadiče posunů.
Zkonstruovali jsme obvod v prkénku
Vysvětlení kódu:
Kompletní kód pro ovládání LED s posuvným registrem je uveden na konci článku. Jako vždy musíme nastavit konfigurační bity v mikrokontroléru PIC.
#pragma config FOSC = HS // Výběr bitů oscilátoru (HS oscilátor) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT deaktivováno) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT deaktivováno) # pragma config BOREN = ON // Brown-out Reset Enable bit (BOR povoleno) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (pin RB3 / PGM má funkci PGM; low -voltové programování povoleno) #pragma config CPD = VYPNUTO // Ochrana datového kódu paměti EEPROM bit (ochrana datového EEPROM kódu vypnuta) #pragma config WRT = VYPNUTO // Flash zápis do paměti programu Povolení bitů (ochrana proti zápisu vypnuta; může být veškerá programová paměť zapsáno do kontroly EECON) #pragma config CP = OFF // Bit kódu ochrany kódu paměti programu (ochrana kódu vypnuta)
Poté jsme deklarovali frekvenci krystalu, která je požadována pro zpoždění, a deklaraci pin-out pro 74HC595.
#zahrnout
Dále jsme deklarovali funkci system_init () pro inicializaci směru kolíku.
void system_init (void) { TRISB = 0x00; }
Hodinový a západkový impuls jsme vytvořili pomocí dvou různých funkcí
/ * * Tato funkce povolí hodiny. * / void hodiny (void) { CLK_595 = 1; __delay_us (500); CLK_595 = 0; __delay_us (500); }
a
/ * * Tato funkce bude strobovat a povolí spouštění výstupu. * / void strobe (void) { STROBE_595 = 1; __delay_us (500); STROBE_595 = 0; }
Po těchto dvou funkcích jsme deklarovali funkci data_submit (unsigned int data) k odeslání sériových dat do 74HC595.
void data_submit (unsigned int data) { for (int i = 0; i <8; i ++) { DATA_595 = (data >> i) & 0x01; hodiny(); } stroboskop (); // Data konečně odeslána }
V této funkci přijímáme 8bitová data a každý bit odesíláme pomocí dvou bitových operátorů levý posun a operátor AND. Nejprve posuneme data jeden po druhém a pomocí operátoru AND s 0x01 zjistíme přesný bit, ať už je to 0 nebo 1. Každá data jsou uložena pomocí hodinového impulzu a výstup konečných dat provedený pomocí západkového nebo stroboskopického impulzu. V tomto procesu bude datový výstup nejprve MSB (Most Significant Bit).
V hlavní funkci jsme odeslali binární soubor a nastavili výstupní piny vysoko jeden po druhém.
system_init (); // Systém se připravuje while (1) { data_submit (0b00000000); __delay_ms (200); data_submit (0b10000000); __delay_ms (200); data_submit (0b01000000); __delay_ms (200); data_submit (0b00100000); __delay_ms (200); data_submit (0b00010000); __delay_ms (200); data_submit (0b00001000); __delay_ms (200); data_submit (0b00000100); __delay_ms (200); data_submit (0b00000010); __delay_ms (200); data_submit (0b00000001); __delay_ms (200); data_submit (0xFF); __delay_ms (200); } návrat; }
Takto lze posuvný registr použít k získání více volných I / O pinů v libovolném mikrokontroléru pro připojení více senzorů.