Nuts and Bolts (2): 74HC165 IC
U situacijama kada nam zatrebaju digitalni ulazi, rešenje ne mora biti Mega. Elegantnije i mnogo kompaktnije rešenje može biti dodavanje jednog ili više integralnih kola sa oznakom 74HC165. Ova integralna kola spadaju u grupu 8-bitnih pomeračkih (shift) registara i funkcionišu po principu Paralel In/Serial Out (PISO). Razlika između Serial In(puta) i Paralel In(puta) jeste da se kod paralelnog svih osam bita mogu koristiti u jednom ciklusu kloka, dok se kod serijskog može koristiti samo jedan bit. Sa druge strane, mi kod ovog čipa imamo input na svih osam bita odjednom, ali s obzirom na to da je serijski output, to znači da će ih čip dalje slati bit za bitom. Ovaj pomerač registra ima osam bita memorije, ili jedan bajt, a sastavljen je iz flip-flop kola (slično kao i 74HC595 o kome je bilo malo reči u SK 6/2017). Integralno kolo ima osam paralelnih inputa preko kojih ćemo slati podatke sa senzora ili tastera ka mikrokontroleru, u našem slučaju Arduino Nano. U slučaju da se ukaže potreba za više od osam digitalnih inputa, možemo vezati više njih kaskadno. Čip 74HC165 se ne može koristiti za analogne inpute, već samo za digitalne. Čip pripada porodici logičkih komponenti, samim tim ne može direktno kontrolisati mnogo struje (do 20 miliampera). HC u oznaci se odnosi na High Speed CMOS uređaj. Zadnja tri broja se odnose na podvrstu 74xx porodice čipova. Nakon inicijalizacije svih neophodnih pinova, postavljamo ih kao OUTPUT, sem dataPin-a (Q7) koji je INPUT i preko njega vršimo očitavanja. Clock (CP) i Shift (PL) pri inicijalizaciji idu na HIGH. Funkcijom reg_values() šaljemo puls našem pomeraču registra da prikupi podatke. Prema dokumentaciji, potrebno je Shift pinu postaviti logičku nulu, a zatim jedinicu sa zadržavanjem od pet mikrosekundi, što i radimo. Takođe, iz istog razloga je potrebno postaviti stanja CP, Q7i CE izvodima da bismo uz pomoć Arduino shiftIn() funkcije preuzeli dolazeće vrednosti gde za redosled stavljamo MSBFIRST. Funkcija print_values() nam služi da dobijene vrednosti ispišemo na terminalu. const int dataPin = 11; // Q7 const int loadPin = 9; // PL const int clockPin = 8; // CP const int clockEnablePin = 10; // CE byte values; void setup(){ Serial.begin(9600); pinMode(loadPin, OUTPUT); pinMode(clockEnablePin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, INPUT); digitalWrite(clockPin, HIGH); digitalWrite(loadPin, HIGH); } void loop(){ values = reg_values(); print_values(values); delay(2000); } byte reg_values(){ byte reading = 0; digitalWrite(loadPin, LOW); delayMicroseconds(5); digitalWrite(loadPin, HIGH); delayMicroseconds(5); pinMode(clockPin, OUTPUT); pinMode(dataPin, INPUT); digitalWrite(clockPin, HIGH); digitalWrite(clockEnablePin, LOW); reading = shiftIn(dataPin, clockPin, MSBFIRST); digitalWrite(clockEnablePin, HIGH); return reading; } void print_values(byte val){ byte i; for(byte i=0; i<=7; i++){ Serial.print(val >> i & 1, BIN); } Serial.print(„\n”); } Kao i uvek, najpraktičnije je koristiti ovakva integralna kola sa namenskom bibliotekom. Naš izbor je biblioteka ArduinoShiftIn, koju možete preuzeti sa adrese bit. #include <ShiftIn.h> ShiftIn<1> shift; void setup() { Serial.begin(9600); // declare pins: LoadPin, clockEnablePin, // dataPin, clockPin shift.begin(9, 10, 11, 8); } void displayValues() { for(int i = 0; i < shift.getDataWidth(); i++) Serial.print( shift.state(i) ); Serial.println(); Serial.println(shift.state(7)); } } void loop() { if(shift.update()) displayValues(); delay(100); } Dejan PETROVIĆ |
| ||||||||||||||||||||
Home / Novi broj | Arhiva • Opšte teme | Internet | Test drive | Test run | PD kutak | CeDeteka | WWW vodič • Svet igara Svet kompjutera Copyright © 1984-2018. Politika a.d. • Redakcija | Kontakt | Saradnja | Oglasi | Pretplata • Help • English | |
SKWeb 3.22 |