Sulautetussa suunnittelussa on mahdollisuuksia, joissa mikrokontrollerissasi ei ole tarpeeksi I / O-nastoja. Tämä voi johtua mistä tahansa syystä, voi olla, että sovelluksesi tarvitsee useita LEDejä tai haluat käyttää useita 7-segmenttisiä näyttöjä, mutta et tarvitse mikro-ohjaimessa I / O-nastoja. Täältä tulee täydellinen komponentti, siirtorekisteri. Vaihtorekisteri hyväksyy sarjatiedot ja antaa rinnakkaislähdön. Se vaatii vain 3 nastaa yhteyden muodostamiseksi mikrokontrolleriin ja saat siitä yli 8 lähtöniittää. Yksi suosituimmista vuoristorekistereistä on 74HC595. Siinä on 8-bittinen tallennusrekisteri ja 8-bittinen siirtorekisteri. Lisätietoja vuoristorekistereistä on täällä.
Annat sarjatiedot siirtorekisteriin, ja ne lukitaan tallennusrekisteriin ja sitten varastorekisteri ohjaa 8 lähtöä. Jos haluat lisää lähtöä, lisää vain toinen siirtorekisteri. By CSS kaksi siirtorekisteristä saat lisää 8 ulostuloa, yhteensä 16bit tuotos.
Vaihtorekisteri 74HC595:
Tässä on 74HC595: n pin-out-kaavio tietolomakkeen mukaisesti -
HC595: ssä on 16 nastaa; jos näemme tietolomakkeen, ymmärrämme pin-toiminnot-
QA QH, pin numerot 1-7 ja 15 käytettiin 8-bittinen ulostulo siirtorekisterin, jos sillä tappi 14 käytetään vastaanottamaan sarjadatan. Siellä on myös totuustaulukko siitä, miten muita nastoja käytetään ja mitä muita siirtorekisterin toimintoja käytetään.
Kun kirjoitamme koodin 74HC595 liitäntää varten, käytämme tätä totuustaulukkoa haluttujen lähtöjen saamiseksi.
Nyt liitämme 74HC595: n PIC16F877A: n kanssa ja ohjaamme 8 LEDiä. Olemme liittäneet 74HC595-siirtorekisterin muihin mikrokontrollereihin:
- Rajapinnan 74HC595 sarjamuutosrekisteri Raspberry Pi: n kanssa
- Kuinka käyttää vaihtorekisteriä 74HC595 Arduino Unon kanssa?
- LCD: n ja NodeMCU: n yhdistäminen siirtorekisterin avulla
Vaaditut komponentit:
- PIC16F877A
- 2kpl 33pF keraamisia levykondensaattoreita
- 20MHz kristalli
- 4.7k vastus
- 8 kpl ledejä
- 1k vastus -1 kpl (tarvitaan 8 kpl 1k vastuksia, jos jokaiselle ledille tarvitaan erilliset vastukset)
- 74HC595 ic
- 5V seinäadapteri
- PIC-ohjelmointiympäristö
- Leipälauta ja johdot
Piirikaavio:
Piirikaaviossa olemme yhdistäneet sarjatietotapin; kello ja strobotappi (salpa) mikrokontrollerin RB0-, RB1- ja RB2- nastassa. Tässä olemme käyttäneet yhtä vastusta 8 LEDille. Totuustaulukon mukaan otimme käyttöön lähdön liittämällä 74HC595: n nasta 13 maahan. Ohjeet tappi jättää avoimeksi, sillä emme Cascade toista 74HC595 kanssa. Olemme poistaneet selkeitä tulo lippua liittämällä tappi 10 siirtorekisterin VCC.
Kideoskillaattori on kytketty mikro-ohjaimen OSC-nastoihin. PIC16F877A: lla ei ole sisäistä oskillaattoria. Tässä projektissa valaistaan ledit yksitellen Q0: sta Q7: een käyttämällä shift regitsteriä.
Olemme rakentaneet piirin leipälautaan -
Koodin selitys:
Täydellinen koodi LED-ohjaimille siirtorekisterillä on artikkelin lopussa. Kuten aina, meidän on asetettava konfigurointibitit PIC-mikrokontrollerissa.
#pragma config FOSC = HS // Oskillaattorin valintabitit (HS-oskillaattori) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT pois käytöstä) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT pois käytöstä) # pragma-konfiguraatio BOREN = PÄÄLLE // Ruskea-nollaus Nollaa bitti (BOR käytössä) #pragma-konfiguraatio LVP = POIS // Pienjännite (yksi syöttö) Piirin sisäinen sarjaohjelmointi Aktivoi bitti (RB3 / PGM-nastalla on PGM-toiminto; matala -jänniteohjelmointi käytössä) #pragma config CPD = OFF // Data EEPROM -muistikoodisuojabitti (Data EEPROM- koodisuojaus pois päältä) #pragma config WRT = OFF // Flash-ohjelmamuistin kirjoitus Salli bitit (kirjoitussuoja pois; kaikki ohjelmamuistit voivat olla kirjoittanut EECON-valvonta) #pragma config CP = OFF // Flash-ohjelman muistikoodin suojausbitti (koodisuojaus pois päältä)
Sen jälkeen ilmoitimme kristallitaajuuden, jota vaaditaan viiveelle ja PIN-out-ilmoitukselle 74HC595: lle.
#sisältää
Seuraavaksi ilmoitimme funktion system_init () alustamaan nastan suunnan.
void system_init (void) { TRISB = 0x00; }
Luomme kellopulssin ja salpa-pulssin kahdella eri toiminnolla
/ * * Tämä toiminto ottaa kellon käyttöön. * / mitätöity kello (mitätön) { CLK_595 = 1; __viivästys (500); CLK_595 = 0; __viivästys (500); }
ja
/ * * Tämä toiminto välähtää ja sallii lähtöliipaisimen. * / void strobe (void) { STROBE_595 = 1; __viivästys (500); STROBE_595 = 0; }
Tämän kahden toiminnon jälkeen ilmoitimme, että data_submit (allekirjoittamaton int-data) -toiminto lähettää sarjatiedot 74HC595: lle.
void data_submit (allekirjoittamaton int-data) { for (int i = 0; i <8; i ++) { DATA_595 = (data >> i) & 0x01; kello(); } strobe (); // lopullisesti lähetetyt tiedot }
Tässä toiminnossa hyväksytään 8-bittinen data ja lähetetään kukin bitti käyttämällä kahta bittioperaattoria vasenta siirtymää ja AND- operaattoria. Siirrämme ensin tietoja yksitellen ja selvitämme tarkan bitin, onko se 0 vai 1 AND-operaattorilla 0x01: llä. Jokainen data tallennetaan kellopulssilla ja lopullinen datauloste tehdään salpa- tai välähdyspulssilla. Tässä prosessissa datalähtö on ensin MSB (Most Significant Bit).
Vuonna tärkein toiminto esitimme binary ja teki tuotoksen nastat korkean yksitellen.
system_init (); // Järjestelmä valmistautuu (1) { data_submit (0b00000000); __viive_ms (200); data_submit (0b10000000); __viive_ms (200); data_submit (0b01000000); __viive_ms (200); data_submit (0b00100000); __viive_ms (200); data_submit (0b00010000); __viive_ms (200); data_submit (0b00001000); __viive_ms (200); data_submit (0b00000100); __viive_ms (200); data_submit (0b00000010); __viive_ms (200); data_submit (0b00000001); __viive_ms (200); data_submit (0xFF); _ viive_ms (200); } paluu; }
Siten siirtorekisteriä voidaan käyttää saamaan enemmän vapaita I / O-nastoja mihin tahansa mikro-ohjaimeen useamman anturin liittämistä varten.