راه‌اندازی TFT LCD با استفاده از LTDC – بخش اول

0
610
راه‌اندازی TFT LCD با استفاده از LTDC – بخش اول

سلام در مجموعه آموزش سیستم‌های گرافیکی، در اولین جلسه با راه‌اندازی 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 بیتی طراحی شده است، بنابراین من از این حالت استفاده می‌کنم.

راه‌اندازی TFT LCD با استفاده از LTDC
میکروکنترلر STM32F429igt6 و محیط CubeIDE

همانطور که مشاهده می‌کنید نرم‌افزار پایه‌های پیش‌فرضی برای این کار انتخاب کرده است که شما در صورت نیاز بایستی آن‌ها را تغییر بدهید و زبانه‌ای به صورت زیر باز می‌شود که با توجه به دیتاشیت ال‌سی‌دی آن را با هم تکمیل خواهیم کرد. (من در عکس زیر تکمیل کردم)

paramer settings

 

 

ما برای تکمیل کادرهای بالا نیاز داریم این اطلاعات رو از دیتاشیت استخراج کنیم که من جدول مربوط به lcd خودمان را قرار می‌دهم.

Parallel RGB input timing table
Parallel RGB input timing table

بر اساس مقادیر میانه جدول، اطلاعات خواسته شده در نرم‌افزار را کامل می‌کنیم.

دقت کنید که مقادیر 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 می‌رویم و مراحل زیر را به ترتیب انجام می‌دهیم:

layer setting

میکروی من از دو لایه پشتیبانی می‌کند که من فعلا آن را روی یک لایه قرار می‌دهم.

نوع فرمت پیکسل را انتخاب می‌کنیم.

نقاط شروع و پایان عرض و ارتفاع را مشخص می‌کنیم.

مقدار alpha blending (این مورد فکر کنم همان شفافیت یا ترنسپرنسی باشد)

اینجا آدرس شروع بافر و همینطور ابعاد تصویر است.

خب اگر شما هم مثل من نیاز به تغییر پایه‌ها دارید این کار را انجام بدید و پایه‌ها رو در ماکزیمم سرعت خروجی تنظیم کنید.

GPIO Setting

و درنهایت فرکانس مورد نظر lcd را از همان جدول تنطیم می‌کنیم.

خب تنظیمات مربوط به میکروکنترلر تمام شد، اکنون بر روی code generation کلیک کنید تا پروژه ساخته بشود.

من از تصویر زیر برای نمایش استفاده می‌کنم، اما شما می‌توانید از هرتصویری در سایز 480*272 استفاده کنید (اگر تصویرتان بزرگ‌تر بود از نرم افزار paint ویندوز و از ابزار resize استفاده کنید)

image size 272*480

و برای نمایش بایستی عکس خودمان را تبدیل به آرایه بکنیم، برای این منظور از نرم افزار lcd-image-converter کمک می‌گیریم. پس از اجرای نرم‌افزار عکس را مانند زیر باز کنید.

lcd-image-converter
lcd-image-converter

بر روی conversion کلیک کنید.

conversion

خب طبق عکس زیر فرمت عکس و آرایه را تنظیم کنید.

در نهایت مانند عکس زیر، بعد از convert کردن فایل را ذخیره کنید.

حالا فایل تولید شده را در نرم‌افزار CubeIDE اضافه کنید. کافیه فایل را کپی و در یکی از پوشه‌های هدرها paste کنید. فایل را باز کنید، در انتهای فایل یک متغیر وجود دارد که باید آن را حذف کنید.

CubeIDE

سپس فایل رو فراخوانی کنید.

کافیه اسم آرایه عکس رو با type-cast کردن به بافر بدید (چون آرایه ما 16 بیتی و آدرس 32 بیتی هست این کار الزامی است)

حال اگر برنامه را کامپایل و پروگرام بکنید با خروجی زیر مواجه خواهید شد:

خب در قسمت اول توانستیم واحد LTDC را در ابتدایی‌ترین حالت راه‌اندازی کنیم، با ما همراه باشید تا در قسمت‌های بعدی با ویژگی‌های بیشتری از واحد LTDC آشنا بشویم.

 

برای دانلود نرم‌افزار و فایل‌های پروژه از قسمت زیر اقدام کنید:

منبع:سیسوگ

مطلب قبلیورود به دنیای امبدد لینوکس – قسمت دوم
مطلب بعدیاینترنت اشیاء و اتصال به ربات تلگرام بدون محدودیت و فیلتر

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید