سخت افزار قطعات الکترونیک میکروکنترلر AVR

راه اندازی LED RGB با چیپ WS2812 توسط میکروکنترلر AVR اتمگا

نوشته شده توسط علی زاهدی

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

 


LED RGB Ws2812


Ws2812 یک LED کنترل هوشمند است که مدار کنترل و تراشه RGB داخل یک پکیج ۵۰۵۰ به صورت یک پارچه قرار گرفته است. کنترل کننده داخلی این LED شامل  پورت داده دیجیتال هوشمند Latch و مدار درایو تقویت کننده  تغییر شکل سیگنال است. پروتکل انتقال داده از حالت ارتباطی تک NZR استفاده می کند. این LED با ولتاژ ۵ ولت کار میکند. و عملکرد آن به صورت سری است. هر LED دارای ۱ پایه ورودی و یک پایه خروجی است. پایه خروجی LED اول به ورودی LED دوم متصل می‌شود. و این حلقه میتواند ادامه پیدا کند.  در ماژول های Neopixel نیز ار این نوع LED استفاده می‌شود.

 

از جمله ویژگی های این نوع LED میتوان به موارد زیر اشاره نمود:

  • حفاظت از اتصال معکوس هوشمند ، اتصال معکوس منبع تغذیه به IC آسیب نمی رساند.
  • مدار کنترل و LED در یک پکیج ۵۰۵۰ به صورت یکپارچه قرار گرفته و از یک منبع تغذیه می‌شوند.
  • سیگنال انتقال پورت آبشاری توسط تک خط.
  • رنگ نور بسیار ثابت و مقرون به صرفه بود.
  • ارسال اطلاعات با سرعت ۸۰۰ کیلوبیت بر ثانیه.
  • و …

 


پروتکل ارتباطی Ws2812


بیایید برای درک بهتر نحوه عملکرد این LED فراید کار آن را بررسی کنیم. هر LED قرمز، سبز و آبی به صورت جداگانه در یک واحد Ws2812 طوری تنظیم شده است که در ۲۵۶ سطح روشنایی میدرخشد. توسط یک دنباله باینری ۸ بیتی که از ۰ تا ۲۵۵ نشان داده می‌شود. هر سه LED کنار هم نیاز به سه مجموعه ۸بیتی (۲۴ بیت) روشنایی دارد. در ادامه یک راهنمای سریع برای راه اندازی این LED نوشته شده است.

  • دنباله ۲۴ بیتی که گفته شد توسط میکروکنترلر به Ws2812 اول ارسال می‌شود.
  • هنگامی که چندین LED وجود دارد ، دنباله داده ای که LED دوم را کنترل می کند بلافاصله پس از اولین با داده های سبز ، قرمز و آبی شروع می شود. دنباله در آن الگو ادامه می یابد تا زمانی که همه LED های موجود را روشن کند.
  • اولین LED اطلاعات کل زنجیره LED ها را دریافت می کند ، سپس همان داده ها را بدون دنباله ای که برای خود اعمال کرده است ، ارسال می کند و LED دوم را به اولین جزء لیست (تا آنجا که می داند) تبدیل می کند.
  • این واحد LED “شماره یک جدید” به انتقال اطلاعات ادامه می دهد تا زمانی که دیگر توالی LED باینری باقی نماند.

 

به تصویر بالا توجه کنید. این تصویر شامل کانال CH1 که خروجی میکروکنترلر متصل به ۲ عدد Ws2812 است. و کانال CH2 که تنها ۲۴ بیت از ۴۸ بیتی که روی کانال CH1 است را شمال می شود. به عبارت دیگر میتوان گفت که کانال CH1 به پایه Din یا همان ورودی Ws2812 اول و کانال CH2 به پایه Din ورودی Ws2812 دوم (این پایه به Dout خروجی Ws2812 اول متصل است) وصل شده است.

در تصویر بالا پالس های پهن نشانگر ۱ و پالس های کوتاه نشانگر ۰ هستند. حالا اگر با دقت بیشتری به موج CH1 توجه کنید. متوجه که این موج تشکیل شده از ۲ عدد پالس ۲۴ بیتی کاملا مشابه که هر کدام برای یک واحد Ws2812 است. در صورتی که این موج روی کانال را به باینری ترجمه کنیم رشته “۰b100101100000000000000000” این رشته به معنای “۰b10010101” یا در مبنای دسیمال ۱۵۰ است. که رنگ سبز را با روشنایی متوسطی روشن میکند. و ۱۶ بیت باقی مانده که برای رنگ های آبی و قرمز است، کاملا خاموش خواهد بود.

 


اتصالات پروژه


انواع مختلفی از این نوع LED در بازار موجود است. از ماژول های خطی و دایره ای شکل تا چیپ های LED به صورت SMD که می‌توانید با شکل مورد نظر خود بر روی PCB مونتاژ کنید. اما همانطور که گفته شد در ماژول های مختلف اتصالات این نوع به LED به این صورت است که پایه VCC به خط مثبت ۵ ولت و پایه GND به خط منفی متصل می شود (بین پایه های تغذیه هر LED یک عدد خازن قرار ۱۰۰ نانو فاراد قرار می‌گیرد) پایه Din مربوط به Ws2812 اول یه یکی از پایه های میکروکنترلر متصل می شود. سپس پایه Dout هر Ws2812 به پایه Din ال ای دی  Ws2812 بعدی متصل می‌شود. برای درک بهتر این مطلب به تصویر زیر توجه کنید.

 


کتابخانه Ws2812


برای راه اندازی این نوع LED می‌توانید با استفاده از روشی که بالا تر توضیح داده شد به صورتی مقدار دهی LED ها را به دست بگیرید. اما این کار بسیار زمانبر خواهد بود و احتمال خطا در آن بسیار زیاد است. در این قسمت قصد داریم کتابخانه ای را به شما معرفی کنیم تا عملیات راه اندازی و کنترل هر تعداد LED که مورد نظرتان است را به راحتی بدست بگیرید. کتابخانه cpldcpu ، کتابخانه بسیار کاملی است که کنترل LED های Ws2812 به راحتی روی میکروکنترلرهای Arduino، AVR و ARM در اختیار شما میگذارد. با کلیک بر روی نام کتابخانه میتوانید وارد صفحه Github کتابخانه شده و آن را دانلود کنید.

 


کدنویسی پروژه


در این آموزش از کامپایلر اتمل استودیو استفاده میکنم. برای استفاده از این کتابخانه ابتدا بایستی فایل هدر آن را به کد خود اضافه کنید.

 

سپس بایستی ارایه ای با استراکچر cRGB ساخته و در قسمت تعداد عناطر آرایه را تعداد LED هایی که مورد استفاده قرار داده اید، مشخص میکند. برای درک بهتر به مثال زیر توجه کنید.

 

پایه ای که به Din ال ای دی Ws2812 اول متصل است را بایستی داخل فایل ws2812_config.h تعین کنید. برای مثال در مثال زیر پایه Din به پورت B پایه شماره ۲ وصل است.

تا به اینجا تظیمات مورد نیاز برای استفاده از این کتابخانه و راه اندازی Ws2812 را انجام داده اید. حالا برای کنترل نور LED ها مطابق کد زیر ۳ پارامتر در اختیار ما قرار میگیرد. پارامتر R برای رنگ قرمز، G رنگ سبز، B رنگ آبی است. هر یک از این پارامتر ها بین ۰ تا ۲۵۵ قابل تنظیم است که این عدد میزان روشنایی هر رنگ است. با تنظیم عدد هر یک از پارامتر ها میتوانید رنگ های مختلف را ایجاد کنید. در کد زیر رنگ سبز با زوشنایی متوسطی روشن شده و رنگ های آبی و قرمز خاموش هستند.

 

پس از تنظیم رنگ ها بایستی تابع آپدیت رنگ تنظیم شده بر روی LED مورد نظر را فراخوانی کنید. این تابع دارای ۲ ورودی است که در ورودی اول بایستی آرایه تعریف شده برای LED هارا نوشته و سپس در ورودی دوم شماره LED مورد نظر که قصد دارید رنگ مورد نظر بر روی آن LED روشن شود را بنویسید.

 

در ادامه برنامه ای با استفاه از این توابع نوشته شده است. پس از کامپایل برنامه با استفاده از پروگرامر این برنامه را روی میکروکنترلر پروگرام کنید.

 


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


برای راه اندازی این پروژه به قطعات زیر نیاز دارید. با کلیک بر روی نام هر قطعه میتوانید وارد صفحه محصول آن شده. آن قطعه را به سبد خرید خود اضافه کنید.

 

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

 

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

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

علی زاهدی

برنامه نویس و طراح سیستم های مبتنی بر میکروکنترلر

دانسته هایتان را مانند یک ساعت مچی در دست کنید، نه صرفا به این خاطر که نشان دهید آن را دارید. بلکه به این خاطر که اگر کسی از شما ساعت را پرسید، برایش بگویید.
لرد چسترفیلد

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

۲ دیدگاه

  • سلام مهندس این پروژه جواب نداد با مگا هشت زدم فقط اینکه اون کد
    #ifdef __AVR_ATtiny10__
    بجای تاینی ۱۰ مگاهشت نوشتم

    • با سلام
      لطفا پایه ای که LED هارا به آن متصل کرده اید را اعلام کنید. بخشی که فرمودین تنها یک شرط است که برای میکرو ATtiny 10 تعریف شده است. نیازی به تغیر آن نیست. میتوانید آن بخش را کاملا پاک کنید.