آردوینو قطعات الکترونیک

راه اندازی آی سی شیفت رجیستر ۷۴HC595 با برد آردوینو Arduino

getting-started-with-74hc595-shift-register-with-arduino-digispark
نوشته شده توسط پریسا پوربلورچیان

قطعا برای همه ی ما پیش آمده است که در حال اجرای یک پروژه هستیم و ناگهان با اتمام پایه های GPIO I/O در برد آردوینو رو به رو می‌شویم! شاید برد آردوینو مگا Mega2560 در ذهن شما تداعی شود اما در حال حاضر متداول‌ترین برذ آردوینو که هر کسی این روزها دارد، برد آردوینو UNO و Nano است. پس همچنان مشکل پابرجاست! ازران ترین راه حل برای افزایش پایه استفاده از شیفت رجیستر Shift register است. شیفت رجیستر امکان افزایش پایه های ورودی – خروجی دیجیتال را برای هر میکروکنترلر فراهم کرده و همیشه در دسترس است. در ادامه معرفی شیفت رجیستر و راه اندازی با آردوینو Arduino با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

پروژه شیفت رجیستر با برد آردوینو - دیجی اسپارک

 


شیفت رجیستر Shift register


شیفت رجیستر از تراشه SN74HC595N مشهور به ۵۹۵ طراحی شده است. تراشه ۵۹۵ به ترییب ۸ پایه خروجی را به صورت جداگانه کنترل کرده و فقط از سه پایه ورودی استفاده می‌کند. در این حالت اگر به بیش از ۸ خط ورودی خروجی Input – Output اضافی نیاز دارید، به راحتی می‌توانید هر تعداد شیفت ریجیستری را به میکروکنترلر متصل کرده و تعداد بسیار زیادی ورودی و خروجی I/O را ایجاد کنید. از شیفت رجیستر در جهت کمترین استفاده از پایه های ورودی – خروجی میکروکنترلر استفاده می‌شود و به عبارتی در پایه های استفاده شده صرفه جویی می‌شود. به عنوان مثال برای کنترل چندین ال ای دی LED توسط پایه های آردوینو عملا با کاهش پایه ها رو به رو می‌شویم. پس بهترین کار سری شدن چندین شیفت رجیستر در مسیر یک دیگر است. هر شیفت رجیستر سه پایه از ورودی – خروجی I/O را درگیر کرده و میتوانید با استفاده از سری شدن بیشترین بهره برداری را کنید. شیفت رجیستر در یک تعریف کلی آرایه ای از فلیپ فلیپ ها Latch هستند که برای ذخیره سازی و انتقال دیتا در سیستم های دیجیتال استفاده می‌شود.

آی سی شیفت رجیستر SN74HC595 - دیجی اسپارک

 


عملکرد شیفت رجیستر Shift Registor


تراشه ۵۹۵ از دو شیفت رجیستر ۸ بیتی حافظه تشکیل شده است که ورودی ها را دریافت کرده و در مسیر مدار قرار میگیرد. زمانی که یک پالس ساعت را به تراشه ۵۹۵ اعمال کنیم، بیت های شیفت رجیستر یک به یک به سمت چپ حرکت کرده و مقادیر یکدیگر را دریافت می‌کنند. به این صورت که اگر یک بلوک ۸ خانه ای را در نظر بگیرید، بیت شماره ۷ مقادیری که در بیت شماره ۶ بوده است را دریافت کرده و به همین ترتیب بیت شماره ۶ مقادیر بیت شماره ۵، بیت شماره ۵ مقادیر بیت شماره ۴، بیت شماره ۴ مقادیر بیت شماره ۳، بیت شماره ۳ مقادیر بیت شماره ۲ و بیت شماره ۲ مقادیر بیت شماره ۱ را دریافت می‌کند. در این حالت بیت شماره صفر در شیف رجیستر مقادیری که در پایه های دیتا پین Data pin شیفت رجیستر است را در لحظه دریافت می‌کند. طبق قواننی الکترونیک در لبه بالا رونده پالس اگر پایه دیتا High باشد، ۱ وارد شیفت رجیستر می شود و در غیر اینصورت عدد صفر وارد شیفت رجیستر می‌شود. لچ Latch سطح مدار منطقی است که دارای دو ورودی و یک خروحی است. یکی از ورودی ها SET و دیگری Reset است. با فعال سازی پین لچ Latch در فاصله بسیار کمی تغییراتی که در ورودی اعمال می‌شود، در خروجی قابل مشاهده است. لچ در زمانیکه ورودی Set باشد، خروجی را یک کرده و در زمانیکه ورودی Reset باشد، خروجی را صفر می‌کند. در ساحتار شیفت رجیسترها از فیلپ فلاپ D استفاده می‌شود که دارای یک ورودی دیتا و یک سیگنال کلاک و خروجی است. در صورتیکه دیتا برابر با یک منطقی باشد و در سیگنال کلاک لبه بالارونده ایجاد شود، خروجی هم یک منطقی خواهد شد. در مقابل در صورتیکه دیتا برابر با یک باشد و لبه بالا رونده  در سیگنال کلاک باشد خروجی برابر با صفر خواهد شد.

 


بررسی پایه های ۷۴HC595


آی سی شیفت رجیستر ۷۴HC595 طبق ظاهر و اطلاعات درج شده در دیتاشیت دارای ۱۶ پایه است. برای اتصال آی سی به آردوینو از دیتاشیت برای تحلیل پایه های تراشه کمک میگیریم. با توجه به اینکه هدف اصلی از این آموزش برطرف شدن دغدغه ی افزایش پایه های ورودی خروجی در بردهای میکروکنترلر است، ابتدا پایه ها را بررسی و سپس روش اتصال به برد آردوینو را بررسی خواهیم کرد. در تصویر پایه های تراشه با نام آن ها مشخص شده است.

  • پایه GND و VCC به ترتیب برای تغذیه استفاده می‌شود.
  • پایه SER یا همان پایه Serial Input برای تغذیه همزمان دیتا در شیفت رجیستر استفاده می‌شود.
  • پایه SRCLK با همان Shift Register Clock پایه کلاک شیفت رجیستر است و برای جابه جایی بیت در شیفت رجیستر بایستی سیگنال کلاک در لبه بالارونده ایجاد شود.
  • پایه RCLK یا همان Register Clock/Latch است که پایه فعال ساز است. زمانیکه دیتا در یک منطقی است، محتوای شیفت رجیستر در رجیستر لچ ذخیره شده و همزمان در خروجی نمایش داده می‌شود.
  • پایه SRCLR یا همان Shift Register Clear پایه تنظیم شیفت رجیستر است که تمامی پایه ها را صفر می‌کند. این پایه منطقی منفی است و برای ریست شدن ابتدا باید پین SRCLR غیرفعال شود. در صورتیکه ریست در مدار اتفاق نیفتد، این پایه بایستی فعال باشد.
  • پایه OE پایه Output Enable است که در زمان افزایش ولتاژ جریان در مدار را کنترل کرده و خروجی ها را غیرفعال می‌کند.
  • پایه QA – QH به ترتیب تصویر پایه های خروجی هستند که به ترتیب به خروجی های مورد نظر متصل می‌شود.

 

پایه های آی سی شیفت رجیستر 74HC595 - دیجی اسپارک

 


اتصال شیفت رجیستر به آردوینو


 

 اتصال شیفت رجیستر به آردوینو - دیجی اسپارک

 

دو پایه ۱۶ و ۱۰ به ترتیب برای تغذیه VCC مدار استفاده می‌شود که به ۵ ولت برد میکروکنترلر متصل می‌شود. پین ۸ و پین ۱۳ پایه های GND هستند که به پایه GND برد میکروکنترلر متصل می‌شود. با توجه به اینکه در هر آردوینو تعداد پایه های دیجیتال I/O متفاوت است به دلخواه از یکی از پایه های دیجیتال برای پایه شیفت رجیستر کلاک، پایه ریست شیفت رجیستر و پایه سریال ورودی انتخاب کنید.

 

پروژه شیفت رجیستر با ال ای دی و برد آردوینو - دیجی اسپارک

 

 


کد آردوینو Arduino


در این آموزش از متداول ترین برد آردوینو که در بین ۹۰ درصد کاربران مشترک است استفاده می‌کنیم. آردوینو Arduino UNO دارای ۱۴ پایه دیجیتال و ۶ پایه آنالوگ است. از ۱۴ پایه فقط سه پایه برای شیفت رجیستر درگیر خواهد شد. برای درک عملکرد شیفت رجیستر ۷۴HC595 از چند ال ای دی استفاده می‌کنیم. تمامی ال ای دی ها به شیفت رجیستر متصل شده و فقط سه پایه اصلی به برد آردوینو متصل می‌شود. در ادامه یک نمونه کد برای تست و راه اندازی ضمیمه شده است. ابتدا اتصالات را انجام داده و سپس کد را به نرم افزار آردوینو Arduino انتقال دهید.

کد را کپی و به نرم افزار آردوینو Arduino انتقال دهید.

 


تحلیل کد آردوینو شیفت رجیستر


اولین مرحله برای تحلیل کد تعریف ۳ پایه برای شیفت رجیستر است. این سه پایه مربوط به پایه لچ Latch هستند که به ترتیب Latch pin , Clock Pin, Data Pin هستند. به دلخواه از سه پایه ۴،۵ و ۶ دیجیتال آردوینو برای اتصال به پایه های شیفت رجیستر استفاده شده است.

متغیر بعدی مربوط به ال ای دی ها است. در این متغیر مقادیر ال ای دی به ترتیب ذخیره شده و طی شرط خاصی تغییر می‌کند. نوع داده بیت است که اعداد را با هشت بیت ذخیره کرده و هر بیت میتواند روشن و یا خاموش باشد و جهت بررسی اینکه کدام بیت از ال ای دی ها روشن و یا خاموش است، انتخاب نوع داده byte بسیار مناسب است. از این داده برای ذخیره سازی اعداد بین بازه ۰ تا ۲۵۵ است.

تعریف تابع اصلی برنامه با Void Setup

در Voidsetup توابع اصلی برنامه تعریف می‌شود که در این بخش ورودی و خروجی ها مشخص شده است.

تعریف حلقه برنامه Void Loop

نوبت به اجرای دستورات است!

 در ابتدا مقدار اولیه متغیر ال ای دی Leds را صفر در نظر گرفته و سپس تابع شیفت رجیستر را فراخوانی می‌کنیم.

تابع شیفت رجیستر به صورت زیر تعریف می‌شود.

استفاده از تابع For برای ساختار تکرار

به صورت پیش فرض در برنامه نویسی آردوینو، دستورات برنامه از اولین دستور به آخرین دستور اجرا شده و تحت شرایط خاصی دستورات را اجرا می‌کنند که به عبارتی تحت کنترل هستند. یکی از ساختار های کنترلی ساختار تکرار است که تحت شرایط خاصی یک یا چند دستور چندین بار متوالی اجرا و تکرار می‌شوند. یکی از این ساختارهای تکرار پرکاربرد ساختار تکرار for است. از ساختار تکرار for در زمانیکه تعداد دفعات تکرار حلقه از قبل مشخص باشد، استفاده می‌شود. توسط متغیری که در این ساختار تعریف می‌شود، تعداد دفعات تکرار حلقه در برنامه کنترل می‌شود. در ساختار for یک مقدار اولیه تعریفش شده و در هر بار اجرای دستورات حلقه مقداری به آن اضافه می‌شود و سپس این مقدار به گام حرکت اضافه می‌شود. در نهایت نوبت به شرط حلقه می‌رسد. شرط حلقه مشخص می‌کند که دستورات نوشته شده در حلقه تا کی اجرا شود.

استفاده از تابع For برای ساختار تکرار - دیجی اسپارک

 

ساختار for  یکی از امکانات ایجاد حلقه است و در حالتی که تعداد دفعات تکرار حلقه از قبل مشخص است، به کار می‌رود:

  • متغیر شمارنده ( اندیس حلقه تکرار ) تعداد دفعات تکرار حلقه را کنترل می‌کند.
  • شمارنده دارای یک مقدار اولیه است و در هر بار اجرای دستورات حلقه، مقداری به آن اضافه می‌شود.
  • مقداری که پس از هر بار اجرای حلقه به شمارنده اضافه می‌شود، گام حرکت گفته می‌شود.
  • گام حرکت می‌تواند عددی صحیح، اعشاری، مثبت یا منفی و یا کاراکتری باشد.
  • شرط حلقه مشخص می‌کند که دستورات داخل حلقه تا کی باید اجرا شوند.

  در ابتدا حلقه با اعمال عدد صفر به متغیر leds تمام ال ای دی ها را خاموش می‌کند. سپس updateshiftregistor فراخوانی کرده تا متغیر Leds را به شیفت رجیستر انتقال دهد. سپس حلقه برنامه به  مدت نیم ثانیه توقف کرده و سپس با استفاده از حلقه For و متغیر i در برنامه شروع به شمارش هشت بیت از ۰ تا ۷ می‌کند. همپچنین از تابع bitset برای تغییر مقادیر بیت ال ای دی ها با متغیر i استفاده شده است.  در تابع شیفت رجیستر Updateshiftregistor پایه لچ پین غیرفعال شده و Low می‌شود. سپس در خروجی شیفت رجیستر که به ترتیب پایه های دیتا، پایه کلاک و پایه ریست است فعال می‌شود. سپس پایه لچ فعال می‌شود.

پروژه شیفت رجیستر 74hc595 با ال ای دی و آردوینو Arduino - دیجی اسپارک

 


استفاده از پایه PWM


جهت کنترل شدت نور ال ای دی ها از پایه OE پایه فعال خروجی استفاده می‌کنیم. در بخش اول پایه OE مسقیم به GND منصل شد اما در این بخش از این پایه برای PWM استفاده می‌کنیم.پایه OE همانند سوییچ عمل کرده و زمانیکه فعال باشد پین های خروجی غیرفعال می‌شود و زمانیکه این پایه غیرفعال باشد، خروجی ها عمل می‌کند. به همین دلیل در بخش اول با اتصال این پایه به زمین GND که به معنی غیرفعال بودن است، خروجی ها طبق روال و عادی فعال است. با اتصال این پایه به یکی از پایه های دیجیتال میکروکنترلر وضعیت تمامی خانه های حافظه رجیستر به صورت یک خواهد بود و همیشه مقدار  در آن ذخیره می‌شود. برای استفاده از PWM از دستور برنامه نویسی Analogwrite استفاده می‌کنیم. در این خصوص از ADC مخفف Analog to Digital Converter است که به معنی مبدل آنالوگ به دیجیتال بوده و ولتاژهای ورودی آنالوگ که بر روی پایه را به اعداد دیجیتال تبدیل می‌کند. با تبدیل اعداد آنالوگ به اعداد دیجیتال ارتباط با آنالوگ ها را خواهیم داشت. ADC که در برد آردوینو۱۰ بیتی می‌باشد،  یعنی می‌تواند یه ولتاژ آنالوگ را با با دقت ۲۱۰ (۱۰۲۴) بخواند. منظور از این جمله این است که که هر ولتاژ آنالوگ که روی پایه است به آن یک عدد از ۰ تا ۱۰۲۳ نسبت میدهد و هر چه این ولتاژ بالاتر باشد عدده نمایش داده شده نیز بالا تر است. به عنوان مثال  ولتاژ صفر بباشد عدد ۰ رو خوانده و اگه ولتاژ ۵ باشد عدد ۱۰۲۳ را خواهد خواند.

راه اندازی ال ای دی با آی سی 74HC595 - دیجی اسپارک

 


کد آردوینو شیفت رجیستر PWM


در مرحله دوم یک تب جدید در نرم افزار آردوینو Arduino باز کنید. سپس کد را کپی و به نرم افزار آردوینو انتقال دهید.

 

 

 


تحلیل کد آردوینو


در ابتدا طبق کد قبل ۳ پایه برای شیفت رجیستر shiftregistor است. این سه پایه مربوط به پایه لچ Latch هستند که به ترتیب Latch pin , Clock Pin, Data Pin هستند. به دلخواه از سه پایه ۴،۵ و ۶ دیجیتال آردوینو برای اتصال به پایه های شیفت رجیستر استفاده شده است. پایه OE برای پایه PWM استفاده می‌شود.

انتخاب یک متغیر برای Brightness

در ابتدا مقدار اولیه برای شدت نور Brightness بیشترین مقدار یعنی ۲۵۵ را در نظر میگیریم. سپس برای تغییر مقادیر بین ۰ تا ۲۵۵ از تایع شرطی for استفاده می‌کنیم.

استفاده از تابع for دیگر برای شدت نور

یکی از این ساختارهای تکرار پرکاربرد ساختار تکرار for است. از ساختار تکرار for در زمانیکه تعداد دفعات تکرار حلقه از قبل مشخص باشد، استفاده می‌شود. توسط متغیری که در این ساختار تعریف می‌شود، تعداد دفعات تکرار حلقه در برنامه کنترل می‌شود. در ساختار for یک مقدار اولیه تعریفش شده و در هر بار اجرای دستورات حلقه مقداری به آن اضافه می‌شود و سپس این مقدار به گام حرکت اضافه می‌شود. در نهایت نوبت به شرط حلقه می‌رسد. شرط حلقه مشخص می‌کند که دستورات نوشته شده در حلقه تا کی اجرا شود.

استفاده از دستور AnalogWrite

برای ذخیره مقادیر ورودی از تایع AnalogWrite استفاده می‌کنیم. این تابع مقادیر دریافتی را از پین خوانده و در خروجی رایت می‌کند.

 با توجه به اینکه خروجی دیجیتال بین ۰ تا ۲۵۵ قابل تغییر است و شدت نور ال ای دی بر بازه ی ۰ تا ۲۵۵ است.

 

شناخت آی سی Shif Register 74HC595 و راه اندازی با آردوینو - دیجی اسپارک

 

 


جمع بندی لیدی پای


اگر نمیخواهید تمامی پایه های برد آردوینو برای خروجی ال ای دی ها استفاده شود، کافیست از شیفت رجیستر استفاده کنید و برای اتصال ۸ ال ای دی به آردوینو فقط ۳ پایه را درگیر کنید. قطعا با این روش در استفاده از تعداد پایه ها صرفه جویی کرده و اتصالات بسیار منظم تر از قبل خواهد بود. با اتصال چندین شیفت رجیستر Shift Registor در مسیر یکدیگر بی نهایت ال ای دی را به آردوینو متصل کنید. قبل از اتصال تغذیه مطابق با دیتاشیت پایه ها را شناسایی کنید. ال ای دی در این آموزش فقط برای مثال و درک موضوع انتخاب شده است. این خروجی میتواند هر سنسور دیجیتالی باشد.

 


وسایل مورد نیاز


شیفت رجیستر ۷۴HC595

برد آردوینو Arduino UNO

ال ای دی LED

مقاومت ۳۳۰ اهم

کابل فلت

برد بورد Breadbaord

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۴ دیدگاه

  • سلام
    با اینکه در سطح وب راجع بهش زیاد پرداخته شده اما هیچ جا برنامه نویسی یاد ندادن!
    این که سطح دیجی اسپارک مشخص کرده واقعا خسته نباشید و دمتون گرم

    • با سلام
      در حلقه برنامه این مورد کاملا اختیاری است و میتوانید برنامه ی دیگری برای ال ای دی بنویسید.

    • با سلام
      این مورد کاملا دلخواه است و تاثیری در عملکرد تراشه و برنامه نخواهد داشت.

    • با سلام
      در این خصوص بسته به نیاز پروژه و فضای مورد نیاز برای پروتوتایپ اولیه این مورد مشخص خواهد شد.

  • سلام
    عجب آموزش کامل و درجه یکی، واقعا توی وب چنین آموزشی ندیده بودم. دمتون گرم‌خسته نباشید

    • با سلام
      کاربر گرامی ضمن تشکر از همراهی شما، امیدوارم مفید واقع شده باشد.

  • با عرض سلام و احترام،
    همه جا نمونه کد برای خروجی گفته شده. اگر خواسته باشیم به عنوان ورودی باشه باید چیکار کنیم؟ مثلا ۸ تا سنسور حرکت وصل کنیم؟
    با تشکر