در این آموزش قصد داریم به راه اندازی شیفت رجیستر 74HC595 بپردازیم . 74HC595 یک شفیت رجیستر 8 بیتی SIPO با فرکانس بالا است که می توانید از آن برای توسعه خروجی های آردوینو استفاده کنید . این شیفت رجیستر را می توانید از طریق سه پین کنترل کنید . همچنین امکان سری کردن چندین 74HC595 وجود دارد . در ارتباط های یک طرفه همانند راه اندازی LCD های کاراکتری به راحتی می توانید از این شیفت رجیستر اسفتاده کنید .
در تصویر زیر پایه های 74HC595 نشان داده شده است :
پین های این IC به شرح زیر است :
1- پین های Qa تا Qh خروجی های ماژول هستند .پین ‘Qh نیز معکوس Qh می باشد که از آن برای توسعه ماژول استفاده می شود .
2- پین های Vcc و GND به ترتیب تغذیه و زمین ماژول هستند .
3-پین SER ورودی دیتا است که از طریق آن دیتا به داخل شیفت رجیستر شیفت داده می شود .
4-QE (پین 13 ) این پین جهت فعال و غیر فعال کردن خروجی است که با صفر شدن آن خروجی فعال و با یک شدن آن خروجی غیر فعال می شود .
5-RCLK این پین وظیفه قرار دادن داده در خروجی را دارد . با یک پالس بارونده به این پین دیتا در خروجی قرار خواهد گرفت . در پایان هر ارسال این پین یک بار باید تغییر وضعیت پیدا کند .
6-SRCLK پین ورودی پالس ساعت می باشد . پین 10 معکوس این پین است .
راه اندازی 74HC595 با آردوینو :
برای راه اندازی این شیفت رجیستر ابتدا پین RCLK را در وضعیت صفر قرار داده و سپس به ازای هر بیت از دیتای وارده به پین SER ،باید یک پالس بر روی پین SRCLK قرار داده شود . در پایان ارسال هشت بیت ، با یک شدن پین RCLK دیتا در خروجی شیفت رجیستر قرار خواهد گرفت .
در تصویر زیر نحوه اتصال 74HC595 به آردوینو نشان داده شده است :
کد های آردوینو :
int latchPin = 5; // Latch pin of 74HC595 is connected to Digital pin 5 int clockPin = 6; // Clock pin of 74HC595 is connected to Digital pin 6 int dataPin = 4; // Data pin of 74HC595 is connected to Digital pin 4 byte leds = 0; // Variable to hold the pattern of which LEDs are currently turned on or off /* * setup() - this function runs once when you turn your Arduino on * We initialize the serial connection with the computer */ void setup() { // Set all the pins of 74HC595 as OUTPUT pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); } /* * loop() - this function runs over and over again */ void loop() { leds = 0; // Initially turns all the LEDs off, by giving the variable 'leds' the value 0 updateShiftRegister(); delay(500); for (int i = 0; i < 8; i++) // Turn all the LEDs ON one by one. { bitSet(leds, i); // Set the bit that controls that LED in the variable 'leds' updateShiftRegister(); delay(500); } } /* * updateShiftRegister() - This function sets the latchPin to low, then calls the Arduino function 'shiftOut' to shift out contents of variable 'leds' in the shift register before putting the 'latchPin' high again. */ void updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }
منبع : https://lastminuteengineers.com/74hc595-shift-register-arduino-tutorial/