آموزش پروژه محور آردوینو – جلسه چهارم
به نام خدا
آموزش پروژه محور آردوینو – جلسه چهارم
امروز میخواهیم 8 ال ای دی را توسط آردوینو و البته بدون نیاز به 8 پین در آردوینو ، کنترل کنیم .
با این که این 8 ال ای دی را میتوانیم مستقیما به آردوینو وصل کنیم و کنترلشان کنیم اما این کار را نمیکنیم . زیرا پایه های زیادی از ال ای دی هایمان اشغال میشود و ما میخواهیم در این جلسه روشی را به شما ارائه بدهیم که از تعداد پایه های کمتری استفاده کنید تا اگر در پروژه های گسترده تر و پیچیده تری بخواهید از آردوینو استفاده کنید بتوانید روش هایی را مثل روش این جلسه به کار بگیرید تا پایه های آردوینو برای پروژه شما کم نیاید .
برای این کار از آی سی مبدل سریال به موازی 74HC595 استفاده میکنیم . این آی سی دارای 8 خروجی و 3 ورودی میباشد .
قطعات مورد نیاز :
هشت عدد ال ای دی 5 میلی متر
مقاومت 270 اهم ( قرمز – بنفش – قهوه ای )
آی شیفت رجیستر 74HC595
بردبورد
برد آردوینو UNO
تعدادی سیم
توضیحات مدار :
مطابق شکل زیر هشت عدد ال ای دی با هشت عدد مقاومت 270 اهم به آی سی نام برده وصل شده اند .
پین شماره یک این آی سی پین بالا سمت چپ میباشد .(مطابق شکل بالا )
پین دیجیتال شماره 4 آردوینو به پین شماره 14 آی سی شیفت رجیستر وصل میشود .
پین دیجیتال شماره 5 آردوینو به پین شماره 12 آی سی شیفت رجیستر وصل میشود .
پین دیجیتال شماره 6 آردوینو به پین شماره 11 آی سی شیفت رجیستر وصل میشود .
همانطور که در مدار بالا میبینید خروجی های این آی سی شیفت رجیستر در سمت چپ آی هستند . پایه بلند تر ال ای دی ها یعنی پایه مثبا آن ها به مقاومت و از آنجا به آی سی شیفت رجیستر میرود و سر دیگر آن ها به منفی بردبورد میخورد .
قبل از این که سراغ کد های آردوینو برویم بریم سراغ عملکرد آی سی شیفت رجیستر 74HC595 .
میشود گفت این شیفت رجیستر یک مکان حافظه 8 بیتی دارد که هر کدام ازین بیت ها میتوانند 1 یا 0 باشند . برای مشخص کردن ارزش هر یک از این ها باید از دو پین Clock و Data در این آی سی استفاده کرد .
پین کلاک به پالس های هشتایی احتیاج دارد . اگر مقدار پالس High باشد مقدار 1 شیفت رجیستر را هل میدهد! و در غیر این صورت عدد 0 . پس از این که پالس های هشتایی دریافت شدند پین Latch فعال میشود و مقدار 8 بیت شیفت رجیستر در رجیستر Latch کپی میشود . اگر این کار صورت نگیرد ال ای دی ها به ترتیب روشن و خاموش نمیشوند .
این آی سی یک پین OE دارد که برای فعال سازی یا غیر فعال سازی پین های خروجی استفاده میشوند . میتونیم این پایه رو به موج PWM وصل کنیم و توسط تابع analogWrite در آردوینو میزان شدت روشنایی ال ای دی ها را نیز کنترل کنیم . این پین موقعی خروجی ها را فعال میکند که صفر باشد یعنی به عنوان مثال برای فعال سازی خروجی ها میتوانیم این پین را به زمین مدارمان وصل کنیم .
کد های آردوینو :
آردوینو توابع مخصوصی که shiftOut نامیده میشوند دارد که این توابع مشخصا برای ارسال داده به شیفت رجیستر ها استفاده میشوند .
برای دانلود کد های برنامه بر روی لینک زیر کلیک کنید .
[maxbutton id=”35″ url=”http://avatrobo.ir/wp-content/uploads/2015/11/shift-register.txt” text=”دانلود فایل” ]
در ابتدای این کد ما سه پین را تعریف کرده ایم که این پین ها ، خروجی های دیجیتال آردوینو هستند که به پین های Latch ، Clock و Data آی سی 74HC595 وصل میشوند .
int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
بعد از آن ، یک متغیر به نام leds تعریف کرده ایم . این متغیر ، الگوی روشن و خاموش شدن ال ای دی ها را نگه میدارد . این متغیر از نوع بایت است که نشان دهنده مقدار بیت های هشتایی است . هر یک از این بیت ها میتواند یک شود یا صفر پس میتوانیم با آن ال ای دی های خود را روشن و خاموش کنیم .
byte leds = 0;
تابع setup فقط نام پین هایی که ما به عنوان خروجی استفاده کرده ایم را مشخص میکند .
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
این تابع loop ابتدا همه ال ای دی ها را روشن میکند . این کار با دادن مقدار صفر به متغیر leds انجام میشود . سپس updateShiftRegister فراخوانی میشود تا الگوی متغیر leds را به شیفت رجیستر بدهد بنابراین همه ال ای دی ها خاموش میشود . این حلقه برای نیم ثانیه میایستد و سپس از 0 تا 7 برای حلقه for میشمارد این شمارش با متغیر i انجام میشود . در هر بار اجرای حلقه for (که با هر بار اجرا یک واحد به i اضافه میشود ) تابع bitSet اجرا میشود .
void loop()
{
leds = 0;
updateShiftRegister();
delay(500);
for (int i = 0; i < 8; i++)
{
bitSet(leds, i);
updateShiftRegister();
delay(500);
}
}
تابع updateShiftRegister در ابتدا پین latchPin را low (صفر ) میکند . سپس قبل از این که پین latchpin یک ( high ) شود تابع shiftOut فراخوانی میشود . این تابع از چهار پارامتر استفاده میکند که دو تای اول آن مربوط به پین های Data و Clock است . پارامتر سوم مربوط به موقعیت شروع ال ای دی ها است که ما همان طور که در خطوط زیر میبینید از بیت های LSB شروع کرده ایم . پارامتر چهارم هم همانطور که گفته شد متغیری از نوع بایت برای مقدار دهی به شیفت رجیستر است .
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
پست های مرتبط
اردیبهشت 9, 1398
اسفند 5, 1397
بهمن 2, 1397
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام دمت گرم خیلی ممنون از مطالبتون
سلام.
خیلی ممنون از انرژیتون… 🙂