سلام به شما همراهان همیشگی. در این مطلب به معرفی ماژول OLED رنگی Waveshare و نحوه راهاندازی آنها با استفاده از میکروکنترلرهای STM32 خواهیم پرداخت. این مطلب دارای 2 بخش بوده که در بخش اول به معرفی ماژول OLED RGB Waveshare و تنظیمات اولیه جهت راهاندازی، در نرم افزار CubeMX پرداخته شده است. در بخش دوم، نحوه اضافه کردن کتابخانهها، تظیمات مربوط به Keil جهت پشتیبانی از زبان ++C و استفاده از توابع آماده جهت کار و راه اندزای ماژول OLED تشریح خواهد شد. پس با من تا انتهای مطلب همراه باشید. همچنین میتونید سایر مطالب من رو از این قسمت مطالعه کنید.
برای مطالعه قسمت بعدی اینجا کلیلک کنید.
معرفی نمایشگرهای OLED
OLED ها نوع پیشرفته تری از نمایشگرهای LED هستند که در آنها از یک لایه ترکیبات آلی استفاده شده است. این نمایشگرها دارای ضخامت کمی نیز میباشند. معمولا در نمایشگرهایی که دارای کیفیت تصویر بالایی هستند، از تکنولوژی OLED استفاده شده است.
OLED مخفف Organic Light Emitting Diodes و به معنای دیود ساطع کننده نور ارگانیک است. هر زمان که جریان الکتریکی از میان ترکیبات آلی موجود در پنلهای OLED، و فیلترهای مربوط به تولید رنگ عبور کند، تصاویر بر روی این پنلها شکل میگیرد.
هر پیکسل کوچک OLED با توجه به میزان الکتریسیتهای که دریافت میکند از خود نور میتاباند. در صورت ارسال جریان زیادی از الکتریسیته نور زیادی خواهید داشت و در صورت ارسال هیچ جریانی هیچ نوری ساطع نخواهد شد. یکی از دلایل کیفیت عالی تصویر در نمایشگرهای OLED همین امر است.
معرفی ماژول OLED رنگی Waveshare با رابط SPI
ماژول نمایشگر RGB OLED، یک ماژول 1.5 اینچی 128 در 128 پیکسل است. که تا 16 بیت رنگ (65 کیلو رنگ) را جهت نمایش پشتیبانی میکند. این ماژول دارای کنترلر SSD1351 به صورت آنبورد بوده و از ارتباط SPI پشتیبانی میکند.
مشخصات کلی
مشخصات | |
درایور | SSD1351 |
رابط | SPI چهار سیم و یا سه سیم |
رنگ قابل نمایش | RGB، 65k رنگ |
وضوح | 128 * 128 |
ولتاژ کاری | 3.3V و 5V |
معرفی پایه های اینترفیس SPI
نام پایه | توضیحات |
VCC | تغذیه (ورودی 3.3 تا 5 ولت) |
GND | زمین |
DIN | ورودی دیتا |
CLK | کلاکِ دیتای ورودی |
CS | چیپ سلکت (Active Low) |
DC | ارتباط 4 سیمِ SPI: انتخاب دیتا/دستور (1 برای دیتا و 0 برای دستور)
ارتباط 3 سیمِ SPI: اتصال به زمین، صفر نگه داشته شود. |
RST | ریست (Active low) |
نحوه ایجاد ارتباط با کنترلر SSD1351
SSD1351 یک کنترلر دات ماتریس OLED/PLED برای اسکرین هایی در ابعاد 128 در 128 پیکسل RGB بوده و همراه با یک SRAM به تعداد 128*128*128 بیتیِ نهفته به عنوان بافر نمایش میباشد. این کنترلر از 256k و 65k خاکستری پشتیبانی میکند. از اینترفیسهای پشتیبانی شده جهت برقراری ارتباط با این کنترلر میتوان به 8080، 6800 8 بیتی، SPI سه سیم و SPI چهار سیم اشاره کرد.
برای کاهش سایز و استفاده کمتر از منابع IO، ماژولِ OLED RGB طراحی شده توسط Waveshare، از ارتباط سه سیم SPI و یا چهار سیم استفاده میکند.
ارتباط SPI به صورت 4 سیم
برای برقراری ارتباط به صورت SPI چهار سیم، ابتدا باید پایه DC صفر یا یک شود و سپس دیتا ارسال گردد.
اگر DC = 1 باشد، دیتای ارسالی در حافظه SRAM کنترلرِ SSD1351 به عنوان دیتای قابل نمایش ذخیره میگردد. در این حالت، طول دیتا باید بیشتر از 1 بایت باشد.
اگر DC = 0 باشد، دیتای ارسالی به عنوان دستور کنترلی مورد استفاده قرار میگیرد، همچنین طول دستور معمولا 1 بایت است.
ارتباط SPI به صورت 3 سیم
تفاوت بین SPI سه سیم و SPI چهار سیم در این است که حالت 3 سیم یک بیت، قبل از بایت ارسالی قرار میدهد که نوع دیتا را به عنوان دستور یا دیتا مشخص میکند. این کار جایگزین 0 و 1 کردن پایه DC در حالت 4 سیم خواهد بود.
نکته: در صورتی که از حالت 3 استفاده گردد، دقت شود که پایه DC باید به زمین متصل شود و همچنین دیتای ارسالی به جای 8 بیت باید 9 بیت باشد.
وسایل مورد نیاز
- برد BluePill چیپ STM32F103C8
- ماژول OLED RGB مارک Waveshare
- پروگرامر ST-link
- برد برد
- سیم برد بردی
دریافت فایل کتابخانه
در اینجا قصد داریم با استفاده از میکروکنترلر STM32F103C8 ماژول OLED RGB با وضوح 128 در 128 پیکسلِ Waveshare را راهاندازی کنیم. برای این کار از یک کتابخانه آماده استفاده خواهیم کرد. که توسط Waveshare به اشتراک گذاشته شده است. تنظیمات اولیه و ایجاد فایل پروژه در نرم افزار STM32CUBEMX انجام شده و در محیط Keil برنامه توسعه داده خواهد شد.
از طریق این لینک میتوانید به سایت Waveshare جهت دانلود کتابخانه و مثال آماده مراجعه کنید. در صفحه باز شده، بر روی Demo Code کلیک کرده و فایلهای مورد نیاز را دانلود کنید. توجه شود که علاوه بر نمونه کد جهت راهاندازی این ماژول با میکروکنترلرهای STM32، فایل دانلود شده شامل نمونه کد برای راهاندازی ماژول OLED با آردوینو و رزبری پای نیز میباشد.
ایجاد پروژه و اعمال تنظیمات در نرم افزار STM32CUBEMX
بعد از ایجاد پروژه و انتخاب میکرو مورد نظر که در اینجا برای ما STM32F103C8 میباشد. ابتدا برای عملکرد بهتر OLED، به سراغ فرکانس رفته و آن را بالا خواهیم برد. در نرم افزار STM32CUBEMX ابتدا به بخش System Core رفته و RCC را انتخاب کنید. در قسمت RCC Mode and Configuration بخش HSE را باز کرده و گزینه Crystal/Ceramic Resonator را برای انتخاب کریستال خارجی به عنوان منبع کلاک انتخاب کنید.
در سربرگ Clock Configuration، فرکانس ورودی را با توجه به کریستال روی برد Bluepill، بر روی 8 مگاهرتز قرار داده و PLL Source Mux را بر روی HSE قرار دهید. System Clock Mux را بروی PLLCLK قرار داده و فرکانس مد نظر خود را در بخش HCLK تایپ کرده و Enter کنید تا تنظیم فرکانس بخشهای مختلف میکرو توسط Cube انجام گیرد. در این جا حداکثر فرکانس کاری برای میکروی روی برد ما 72 مگاهرتز میباشد.
انتخاب پروتکل SPI
حال نوبت به تنظیم واحد SPI میرسد. برای این کار به سر برگ Connectivity رفته و یکی از SPI ها را انتخاب کنید. ما در اینجا SPI1 را انتخاب میکنیم تا نیاز به تغییر شماره پورت SPI در کتابخانه نداشته باشیم.
از آنجایی که صرفا میخواهیم به OLED دیتا بدهیم و خواندن از طرف نمایشگر برای ما مدنظر نیست. Mode را بر روی Transmit Only Master قرار میدهیم. البته توجه شود که ماژول OLED صرفا پایه ورودی دیتا دارد و پایه خروجی بر روی برد این ماژول تعریف نگردیده است.
در اینجا میکروکنترلر Master و OLED به صورت Slave در نظر گرفته میشود. حال به سربرگ Parameters Settings رفته Prescaler را به گونهای تنظیم میکنیم که Baud Rate واحد SPI حدود 5MBits/s قرار گیرد. در اینجا ما Prescaler را با توجه به فرکانس تنظیم شده میکرو، بر روی 16 قرار دادیم تا Baud Rate مد نظر به صورت حدودی حاصل گردد.
پایه PA7 که در اینجا به عنوان SPI_MOSI تعریف شده است، باید به پایه DIN ماژول OLED و پایه PA5 که پایه SCK در SPI است به پایه CLK ماژول متصل گردد. همچنین سه پایه میکرو را به دلخواه به عنوان خروجی انتخاب کرده تا به پایههای دیگر نمایشگر OLED یعنی RST، CS، DC به آنها متصل گردند.
در اینجا ما PA0 ،PA1 و PA2 را به عنوان خروجی قرار دادهایم. توجه شود که در کتابخانه مورد استفاده، به صورت پیش فرض از ارتباط SPI چهار سیم برای راهاندازی ماژول استفاده شده است به همین دلیل پایه DC نیز باید به میکروکنترلر متصل گردد.
نحوه اتصال پایه ها بین میکرو و ماژول OLED
نام پایه OLED | پایه میکرو STM32 |
VCC | 3.3V+ |
GND | G |
DIN | PA7 |
CLK | PA4 |
CS | PA1 |
DC | PA2 |
RST | PA0 |
به سربرگ Project Manager رفته و یک نام برای پروژه خود انتخاب کنید. IDE مد نظر خود را برای توسعه کد (که در اینجا برای ما Keil IDE) میباشد را انتخاب و Generate Code را جهت تولید پروژه انتخاب کنید.
بعد از Generate کردن، برای نوشتن برنامه و اضافه کردن کتابخانهها وارد محیط Keil خواهیم شد.
در قسمت بعدی این آموزش، اضافه کردن کتابخانهها به Keil و نحوه استفاده از توابع آن بررسی خواهد شد. از آنجایی که کتابخانه پیش رو با زبان ++C نوشته شده است، نیاز است تا تغییراتی در Keil جهت پشتیبانی از این زبان در پروژه ایجاد گردد که در قسمت بعدی به آن خواهیم پرداخت.
نتیجهگیری
در این مطلب به نمایشگرهای OLED و ویژگیهای آنها پرداختیم. ماژول OLED RGB ساخت شرکت Waveshare مبتنی بر کنترلر SSD1351 را بررسی کرده و فرمت ارسال دیتا و دستور از طریق پروتکل SPI در این نمایشگر شرح داده شد. همچنین از طریق نرم افزار CubeMX پیکربندی اولیه و تنظیم پورتهای SPI و خروجیها در میکرو برای OLED انجام شد.
امیدوارم از این آموزش کمال بهره را برده باشید. در صورتی که هرگونه نظر یا سوال داشتید درباره این آموزش لطفا اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو حتما به اشتراک بگذارید. همینطور میتونید این آموزش را پس از اجرای عملی توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.