سلام در مجموعه آموزش سیستمهای گرافیکی، در اولین جلسه با راهاندازی LTDC و نمایش یک عکس کار را شروع میکنیم و با عنایت خداوند به مباحث پیشرفتهتر میپردازیم.
احتمالا شما هم با نمایشگرهای مختلف مانند مدلهای کاراکتری 2*16 با درایور معروف HD44780 و یا مدلهای گرافیکی 128*64 با درایور KS0108 و یا یک مدل گرافیکی دیگر با نام نوکیا 1202 با درایورSTE2007 که آموزشهای آن درحال تهیه است، آشنا هستید. اگر به این نمایشگرها دقت کنید آیسیهایی بر روی آن تعبیه شده که در نقش راهانداز یاهمان درایور عمل میکنند.
قطعا نمایشگرهای oled نیز طرفداران خاص خودش را دارد. اما اگر بخواهید یک hmi لمسی بسازید چه میکنید؟ برای پاسخ با ما باشید …
درایور یعنی چه؟ یک واسط سختافزاری که کنترل اطلاعات و پیکسلهای نمایشگر و همچنین ارتباط با میکروکنترلر توسط آن بااستفاده از پریفرالهایی جانبی مانند GPIO ،I2C ،SPI و … صورت میگیرد. پس برای اینکه شما بتوانید با این نوع نمایشگرهای دارای درایور کار کنید بایستی حتما یک کتابخانه جهت برقراری ارتباط با آن بنویسید. (به اصطلاح با درایور حرف بزنید)
اما آنچه که در این مقاله به آن میپردازیم ساخت یک hmi میباشد، از این رو حتما به نمایشگرهای با نام tft lcd تمام رنگی در فروشگاهها که معمولا به صورت 40 یا 50 پین عرضه شدهاند ودارای ابعاد مختلف مانند 4.3 اینچ، 7 اینچ و … هستند برخورد کردهاید اما ابعاد نمایشگر مهم نیست بلکه رزولوشن مهم است. برای مثال من در این آموزش از نمایشگر 4.3 اینچ با رزولوشن 480*272 استفاده خواهم کرد. برای اینکه شما این نوع السیدیها را راهاندازی کنید به واحدی به نام (LTDC (Lcd Tft Display Controller نیاز دارید.
با استفاده از این پریفرال بدون درایور و مستقیم با استفاده از میکروکنترلر به پیکسلها مقدار دهی میکنید و هر پیکسل از رنگ اصلی Red ،Green ،Blue تشکیل شده یعنی اگر به هر رنگ 6 بیت اختصاص بدهیم نحوه کنترل ما 18 بیتی خواهد بود.
آیا این واحد در سریهای دیگر میکروکنترلرهای شرکت ST مانند سری F1 نیز وجود دارد؟ خیر! اما این نوع نمایشگرها نیز با درایور به بازار عرضه شدهاند مانند tft lcd با درایور ssd1963 که میتوان از gpio و یا درصورت نیاز به سرعت بیشتر از fmc /fsmc که در این سری وجود دارد استفاده کرد.که در بخش های بعدی حتما به این موضوع خواهیم پرداخت.
در انتها صرفا به بیان این نکته که آیسیهای مخصوص جهت کارهای گرافیکی-نمایشی مانند (… FT8xx (ft810, ft800 وجود دارد بسنده میکنیم و توضیحات جامعتر را به قسمتهای آتی این مجموعه موکول میکنیم.
برگردیم سر اصل مطلب…
راهاندازی TFT LCD با استفاده از LTDC
من در این آموزش از میکروکنترلر STM32F429igt6 و محیط CubeIDE استفاده میکنم.
خب ابتدا یک پروژه در نرمافزار ایجاد و میکروی خودتان رو انتخاب کنید. (هر میکرویی که واحد LTDC را داراست)
سپس با رفتن به بخش RCC کلاک میکرو را بر روی کریستال خارجی قرار دهید همچنین از بخش SYS جهت پروگرام/دیباگ آن را بر روی (SW (serial wire تنظیم کنید.
واحد LTDC را پیدا کنید و با توجه به سختافزار خودتان یکی از سه حالت 16 بیتی، 18 بیتی و یا 24 بیتی را انتخاب کنید. برد من درحالت 16 بیتی طراحی شده است، بنابراین من از این حالت استفاده میکنم.
همانطور که مشاهده میکنید نرمافزار پایههای پیشفرضی برای این کار انتخاب کرده است که شما در صورت نیاز بایستی آنها را تغییر بدهید و زبانهای به صورت زیر باز میشود که با توجه به دیتاشیت السیدی آن را با هم تکمیل خواهیم کرد. (من در عکس زیر تکمیل کردم)
ما برای تکمیل کادرهای بالا نیاز داریم این اطلاعات رو از دیتاشیت استخراج کنیم که من جدول مربوط به lcd خودمان را قرار میدهم.
بر اساس مقادیر میانه جدول، اطلاعات خواسته شده در نرمافزار را کامل میکنیم.
دقت کنید که مقادیر Horizontal Synchronization Width و Vertical Synchronization Height را که نرمافزار خواسته (با کادر قرمز رنگ درتصویر cube مشخص کردیم) پس از اینکه مقادیر back porch و front porch و همچنین عرض و ارتفاع lcd را دادید به گونهای بایستی مقداردهی کنید که گزینه Total width نرمافزار با مقدار HSD period time جدول ( یعنی 525) و همچنین Total Height نرمافزار با VSD period time (یعنی 288) جدول برابر بشود.
سپس به مرحله دوم تنظیمات layer setting میرویم و مراحل زیر را به ترتیب انجام میدهیم:
میکروی من از دو لایه پشتیبانی میکند که من فعلا آن را روی یک لایه قرار میدهم.
نوع فرمت پیکسل را انتخاب میکنیم.
نقاط شروع و پایان عرض و ارتفاع را مشخص میکنیم.
مقدار alpha blending (این مورد فکر کنم همان شفافیت یا ترنسپرنسی باشد)
اینجا آدرس شروع بافر و همینطور ابعاد تصویر است.
خب اگر شما هم مثل من نیاز به تغییر پایهها دارید این کار را انجام بدید و پایهها رو در ماکزیمم سرعت خروجی تنظیم کنید.
و درنهایت فرکانس مورد نظر lcd را از همان جدول تنطیم میکنیم.
خب تنظیمات مربوط به میکروکنترلر تمام شد، اکنون بر روی code generation کلیک کنید تا پروژه ساخته بشود.
من از تصویر زیر برای نمایش استفاده میکنم، اما شما میتوانید از هرتصویری در سایز 480*272 استفاده کنید (اگر تصویرتان بزرگتر بود از نرم افزار paint ویندوز و از ابزار resize استفاده کنید)
و برای نمایش بایستی عکس خودمان را تبدیل به آرایه بکنیم، برای این منظور از نرم افزار lcd-image-converter کمک میگیریم. پس از اجرای نرمافزار عکس را مانند زیر باز کنید.
بر روی conversion کلیک کنید.
خب طبق عکس زیر فرمت عکس و آرایه را تنظیم کنید.
در نهایت مانند عکس زیر، بعد از convert کردن فایل را ذخیره کنید.
حالا فایل تولید شده را در نرمافزار CubeIDE اضافه کنید. کافیه فایل را کپی و در یکی از پوشههای هدرها paste کنید. فایل را باز کنید، در انتهای فایل یک متغیر وجود دارد که باید آن را حذف کنید.
سپس فایل رو فراخوانی کنید.
کافیه اسم آرایه عکس رو با type-cast کردن به بافر بدید (چون آرایه ما 16 بیتی و آدرس 32 بیتی هست این کار الزامی است)
حال اگر برنامه را کامپایل و پروگرام بکنید با خروجی زیر مواجه خواهید شد:
خب در قسمت اول توانستیم واحد LTDC را در ابتداییترین حالت راهاندازی کنیم، با ما همراه باشید تا در قسمتهای بعدی با ویژگیهای بیشتری از واحد LTDC آشنا بشویم.
برای دانلود نرمافزار و فایلهای پروژه از قسمت زیر اقدام کنید:
لینکهای دانلود
دانلود رایگان نرم افزار image converter – حجم 7.51 مگابایت
دانلود فایلهای پروژه – حجم 340.86 کیلوبایت
اسم فایلها
lcd-image-converter.7z
LCD1_BE.7z
منبع:سیسوگ