استفاده از LCD های گرافیکی در پروژه ها دارای محدودیت های مثل اشغال تعداد پین های زیادی از میکروکنترلر، محدود به نمایش کاراکتر های مشخص و همچنین فضای اشغالی زیاد در مدار است. در برخی از پروژه ها فقط نیاز داریم که تنها چند پارامتر بر روی نمایشگر نمایش داده شود و نیازی به LCD با حجم و تعداد پین بالا نیست. در این مواقع استفاده از نمایگر های OLED بسیار مناسب است. در این پست قصد داریم تا نحوه راه اندازی نمایشگر OLED با سایز ۰٫۹۱ اینچ با کمک میکروکنترلر STM32 آموزش دهیم. در ادامه با مرجع تخصصی بردهای امبدد به زبان فارسی، دیجی اسپارک همراه باشید.
معرفی ماژول نمایشگر OLED
محبوب ترین ماژول OLED که در حال حاضر در صنعت الکترونیک و بردهای توسعه میکروکنترلر استفاده میشود، نمایشگر OLED با درایور قدرتمند SSD1306 است که در ظاهرهای مختلف به بازار ارائه شده است. چیپ SSD1306 یک کنترل کننده درایور قدرتمند CMOS است. این درایور از پروتکل های ارتباطی I2C و SPI پشتیبانی میکند و با توجه به اینکه در پروتکل I2C تنها با دو پایه برای اتصال نیاز دارد، برای اتصال OLED به میکروکنترلرها از این پروتکل بیشتر استفاده خواهیم کرد. ولتاژ کاری نمایشگر ۳٫۳ و ۵ ولت است و از هر دو پایه های تعذیه میکروکنترلر میتوانید استفاده کنید. زاویه دید نمایشگر ۱۶۰ درجه است و ابعاد آن ۰٫۹۶ اینچ است. نمایشگر دارای ۸ سطر و ۱۲۸ ستون است. دو مدل محبوب از نظر ابعادی و طراحی در بین کاربران مطرح است مانند:
-
- ۱۲۸X64 با ظاهر مربع
- ۱۲۸×۳۲ با ظاهر مستطیل
اتصالات نمایشگر OLED به برد BluePill
همانطور که گفته شد این نوع نمایشگر ها از پروتکل I2C برای برقراری ارتباط با میکروکنترلر استفاده میکند. بنابراین پایه SCL نمایشگر OLED را به پایه PB6 میکروکنترلر و پایه SDA نمایشگر را به پایه PB7 میکروکنترلر متصل میکنیم. ولتاژ کاری نمایشگر OLED مورد استفاده در این آموزش دارای ولتاژ کاری ۳٫۳ ولت است. پس پایه VCC ماژول OLED را به پایه ۳٫۳ ولت موجود بر روی برد BluePill متصل میکنیم.
پیکربندی میکروکنترلر STM32
پس از ساخت پروژه جدید در نرمافزار STM32CubeMX و انتخاب میکروکنترلر STM32F103C8T6 بایستی بخش SYS و RCC را تنظیم کنید. در صورتی که با تنظیمات مربوط به این بخش ها آشنایی کافی ندارید. ابتدا بخش آول آموزش میکروکنترلر های STM32 را مطالعه کنید. سپس مطالعه این آموزش را ادامه دهید. پس از امجام تنظیمات اولیه بایستی وارد بخش مربوط به I2C1 شده و آن را گزینه I2C را بر روی I2C تنظیم کنید. در صورتی که با پروتکل I2C آشنایی کافی را ندارید. میتوانید آموزش بررسی و شناخت پروتکل I2C در میکروکنترلر STM32 را مطالعه کنید.
سپس در قسمت Parameter Setting بایستی ابتدا گزینه I2C Speed Mode را بر روی Fast Mode تنظیم کنید. پس از آن گزینه I2C Clock Speed (Hz) را بر روی ۴۰۰۰۰ تنظیم کنید.
پس از انجام تنظیمات مربوط به I2C وارد بخش Clock Configuration شده و کلاک میکروکنترلر را بر روی ۷۲ مگاهرتز تنظیم کنید. در آخر در قسمت Project Manager ابتدا نام پروژه و مسیر مورد نظر برای ذخیره پروژه را مشخص کنید. سپس گزینه Toolchain را بروی MDK-ARM و ورژن آن را بر روی ۵ تنظیم کرده و بر روی گزینه GENERATE CODE در قسمت نوار بالایی کلیک کنید تا پروژه ساخته شود.
نصب کتابخانه
برای دانلود کتابخانه OLED بایستی ابتدا آن را از این لینک دانلود کنید. برای اضافه کردن کتابخانه به پروژه در نرمافزار KEIL، بایستی پس از ساخت پروژه فایل مربوط به کتابخانه به پوشه پروژه اضافه کنید (بهتر است که فایل های مربوط به هر کتابخانه داخل پوشه ای جداگانهای قرار گیرند). سپس بایستی وارد نرم افزار KEIL شده و از منو Project گزینه Options for Target را انتخاب کنید.
سپس در پنجره باز شده صفحه ++C/C را باز کنید. سپس بر روی گزینه مشخص شده در تصویر زیر کلیک کنید. در پنجره باز شده بر روی گزینه New و سپس بر روی قسمت … کلیک کنید و آدرس پوشه مربوط به کتابخانه مورد نظر را وارد کنید. سپس با کلیک بر روی گزینه OK تمامی پنجره هارا ببندید.
حالا بایستی از نوار سمت چپ (Project) از چارت درختی که فایل های پروژه را نمایش میدهد، بر روی اولین پوشه راست کلیک کرده و گزینه New Group را انتخاب کنید. سپس در این چارت درختی یک New folder ایجاد میشود. نام این New folder را تغیر دهید و سپس بر روی آن دابل کلیک کنید. در صفحه باز شده وارد پوشه کتابخانه شوید و تمامی فایل های مربوط به کتابخانه را به این Group اضافه کنید. سپس با با اضافه کردن هدر فایل هدر کتابخانه به ابتدای کد میتوانید از توابع موجود در کتابخانه در کد خود استفاده کنید.
برنامه نویسی در نرم افزار KEIL
پس از ورود به نرم افزار KEIL بایستی در صورتی که از میکروکنترلر غیر از میکروکنترلر های سری STM32F1 استفاده کرده اید و یا از I2C غیر از I2C1 میکروکنترلر استفاده کرده اید بایستی وارد فایل کتابخانه شده و آن را مطابق میکروکنترلر و شماره I2C مورد استفاده تغییر دهید. در غیر این صورت وارد فایل main.c شده و کد زیر را به این فایل اضافه کنید. همانطور که در آموزش های قبل هم گفته شده است بایستی کد زیر را به صورت بخش به بخش به پروژه ساخته شده توسط نرم افزار STM32CubeMX ساخته شده است، در قسمت های مشخص شده برای نوشتن کد توسط کاربر اضافه کنید.
#include "ssd1306.h" int main(void) { ssd1306_Init(); while (1) { ssd1306_Fill(Black); ssd1306_SetCursor(1,10); ssd1306_WriteString("Digi",Font_16x26 ,White); ssd1306_SetCursor(45,35); ssd1306_WriteString("Spark",Font_16x26 ,White); ssd1306_UpdateScreen(); HAL_Delay(1000); } }
در کد بالا ابتدا فایل هدر کتابخانه به برنامه اضافه شده است و سپس داخل تابع main تابع مربوط به فعال سازی LCD فراخوانی شده است. در ادامه داخل while ابتدا پس زمینه LCD به رنگ مشکی انتخاب شده است. پس زمینه LCD مورد استفاده در این آموزش میتواند به رنگ های سفید به مشکی باشد. در ادامه محل مورد نظر برای چاپ عبارت مورد نظر با دستور ssd1306_SetCursor تعیین شده است. و با استفاده از دستور ssd1306_WriteString ابتدا عبارت مورد نظر، اندازه ی فونت و رنگ نوشته را تعیین میکنیم. غیر از فونت نوشته شده در کد فونت های دیگری نیز در این کتابخانه وجود دارد که برای مشاهده آنها میتوانید به فایل ssd1306_fonts.h مراجعه کنید.
جمع بندی
در آموزش راه اندازی نمایشگر OLED به کمک میکروکنترلر STM32 ابتدا نمیاشگر های OLED و انواع OLED های موجود در بازار آشنا شدیم. در ادامه اتصالات پروژه و نحوه پیکربندی آن در نرم افزار STM32CubeMX گفته شد. سپس کتابخانه ای برای راه اندازی ماژول نمایشگر OLED معرفی شد و همچنین نحوه نصب کتابخانه نیز توضیح داده شد. در آخر نیز کد پروژه به همراه تحلیل خط به خط آن گفته شد.
لوازم مورد نیاز
برای اجرای این پروژه نیاز به قطعاتی دارید که لیست آن را در زیر مشاهده میکند. برای تهیه این قطعات میتوانید بر روی نام هر یک از آنها کلیک کرده، وارد صفحه محصول شده و خرید کنید.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی از وبسایت دیجی اسپارک حمایت کنید.
سلام و روز بخیر
بنده بورد BluePill دارم و Oled 128*64 SSD1306
تمام مراحل رو طبق توضیحات طی کردم اما Oled روشن نشد.
برای اینکه بدونم همه خطوط اجرا میشن ، LED روی پورت PC13 رو ابتدای خط روشن و در انتهای While خاموش میکنم.
در حال حاضر LED درست کار میکنه ولی Oled روشن نمیشه.
چطور باید برنامه رو چک کنم
با سلام
لطفا مشخص فرمایید که ولتاژ متصل به OLED چقدر است و همچنین اتصالت به درستی متصل شده. پارامتر های I2C در نرم افزار Cube را نیز بررسی کنید.
سلام وقت بخیر
گفتید که فرکانس کلاک میکرو روی ۷۲ مگاهرتز تنظیم بشه
میت/نم کلاک رو تغییر بدم ؟ مثلا ۱۶۸ مگاهرتز بزارم؟
با سلام
در صورتی که از برد Bluepill استفاده میکنید. که میکروکنترلر های سری F1 خانواده STM32 هستند. ماکزیمم کلاک ۷۲ مگاهرتز است. برای افزایش کلاک بایستی از خانواده هایی مانند F407 استفاده کنید.
سلام جنب مهندس وقتتون بخیر
از آموزش خوبتون تشکر می کنم
من از این کتابخانه استفاده کرذم ولی در پروژه من oled در مواقع لزوم به دستگاه وصل می کنم .وثتی oledقطع باشه برنامه اجرا نمیشه و در لحظه اجرای دستورات مربوط oled هنگ می کند. بنظرتون کجای کتابخانه رو تغییر بدم تا بعد عدم ارتباط با oled برنامه روال عادی خود را ادامه بدهد
با سلام
بایستی کد نویسی را طوری انجام دهید که دستورات مربوط به کتابخانه پس از مقدار دهی یک متغیر فعال شوند.
سلام استاد
امکان داره بیشتر توضیح بدید؟
با سلام
لطفا درخواستتان را کامل مطرح کنید. هرجایی نیاز به راهنمایی بود، در مورد همان بخش سوال بپرسید.
من از این که از منابع فارسی هم میشه کمک گرفت خیلی خوشحال شدم و تونستم مشکلم رو حل کنم ممنونم ازتون
با سلام
از توجه شما سپاسگزارم.
سلام
لطفا همین پروژه رو با stm32cubeide هم آموزش بدید
ممنون
با سلام
کد نویسی بین نرم افزار KEIL و CubeIDE تفاوتی ندارد و فقط بایستی کتابخانه را داخل نرم افزار CubeIDE به پوشه scr و inc انتقال دهید. تا برنامه داخل آن نرم افزار نیز به درستی کار کند.
باسلام
من دقیقا همین مدار و کد را با ssd1306 0.96inch بستم اما oled روشن نمی شود.
با سلام
لطفا اتصالات و ولتاژی که روی پایه های LCD قرار میگیرد را با ولت متر بررسی بفرمایید.
سلام
مطالب بسیار عالی هست.
فقط من نتونستم فایل کتابخانه رادانلود کنم.
میشه برام ایمیل کنید؟
با سلام
از همین لینک اعلام شده اقدام به دانلود کنید.
سلام
لینک دانلود کتابخانه چرا کار نمیکنه؟
با سلام
از همین لینک اعلام شده اقدام به دانلود کنید.