STM32, پروژه, توصیه شده, مقاله های سیسوگ

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

راه‌اندازی 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

 

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

راه‌اندازی TFT LCD با استفاده از LTDC

 

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

راه‌اندازی TFT LCD با استفاده از LTDC

 

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

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

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

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

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

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

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

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

 

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

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

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

 

sisoog

 

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

 

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

 

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

 

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

 

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

 

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

 

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

 

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

 

راه‌اندازی TFT LCD با استفاده از LTDC

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

 

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

 

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

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

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

  1. Avatar for امیر امیر گفت:

    درود بر شما ، ممنون بابت آموزش خوبتون.
    چرا موقعی که متغیر خروجی تصویر رو از حالت const خارج میکنیم دیگه برنامه کار نمیکنه.
    در حالت const اگر map file رو چک کنید آدرس متغیر مثلا هست 0x800’02ac و موقعی که از حالت const خارج میشه آدرسش میشه 0x20000000
    یعنی موقعی که داخل flash هست کار میکنه و موقعی که داخل RAM میکرو هست کار نمیکنه.
    میکروی مورد استفاده من STM32H7B0 هست که داخل برد کویر الکترونیک هست و به اندازه 1.4 مگ رم داخلی داره.
    یک سوال دیگه هم دارم که چجوری میتونم متغیری با سایز 800 کیلو بایت تعریف کنم توی IAR ؟

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام دوست عزیز
      وقتی از حالت const خارج میکنید کامپایلر سعی میکنه محتوا رو توی رم میکروکنترلر قرار بده که احتمالا میکروکنترلر این مقدار رم نخواهد داشت برای همینه که خطا دریافت میکنید
      تا وقتی const هست یعنی اون متغییر روی فلش قرار میگیره

  2. Avatar for یاشار مشگی یاشار مشگی گفت:

    سلام وقتتون بخیر باشه ببخشید باکمک کتابخانه MCUFriend و adafruit میشه کدهای برنامه این ال سی دی رو نوشت ؟امکانش هست در باره کتابخانه مورد استفاده و کدنویسی این روش راه اندازی مختصری راهنمایی بفرمایید؟
    باتشکر از محبتتون مشگی

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

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

  3. Avatar for مسعود مسعود گفت:

    توضیحات عالی

  4. Avatar for سعید سعید گفت:

    سلام
    خدا قوت
    آقای عابدینی خیلی عالی بود
    من سرچ کردم قسمت بعدی رو پیدا نکردم آیا هنوز منتشر نشده ؟
    آیا تجربه ای برای درایو lcd با stm8l دارید؟
    ممنون میشم راهنمایی کنید

    1. Avatar photo محمدرضا عابدینی گفت:

      سلام ممنون از محبتتون
      مقالات بعدی به دلیل مشغله کاری به تاخیر افتاده ازهمه دوستان مجدد عذرخواهی میکنم
      مشخصات ال سی دی که مدنظرتونه رو بفرمایید؟!

      1. Avatar for سعید سعید گفت:

        stm8 سری L خودش 4×28 Lcd درایو میکنه بدون نیاز به درایور
        من برای پروژه ای نیاز دارم که استفاده کنم
        میخواستم ببینم اگه اطلاعاتی در این زمینه دارید ممنون میشم راهنمایی بفرمایید.
        آیا Lcd بدون درایور توی بازار هست که برای تست و راه اندازی بخوام روش کار کنم؟

      2. Avatar for وحید وحید گفت:

        سلام و عرض ادب بنده به مشکلی دارم یه ال سی دی دارم برای یه دستگاه هست که خراب شده و پیدا نمیشه بفرمایید من چی میتونم جایگزین کنم اصلا میشه یا باید همون باشه

        1. Avatar for Zeus ‌ Zeus ‌ گفت:

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

  5. Avatar for ملکی ملکی گفت:

    سلام بردم دقیقا همان بردی هست که شما در آموزش ازش استفاده کردید فقط ال سی دی من ۵۰ پین هست ولی شما ال سی دی ۴۰ پین استفاده مردید

  6. Avatar for ملکی ملکی گفت:

    سلام مهندس ال سی دی که از کویر تهیه کردم ۷اینچ هست که ۵۰ پین هست برای اتصال به ۵۰ پین باید تنظیمات خاصی انجام بدم ممنون از‌اموزش عالیتون

    1. Avatar photo محمدرضا عابدینی گفت:

      سلام و درود خدمت شما
      تغییرات سخت افزاری رو از فایلی توضیحاتی که همراه برد براتون ارسال کردن انجام بدید ..

      اما برای راه اندازی نرم افزاری کافیه پارامترهایی که دراموزش گفته شده رو باتوجه به دیتاشیت ال سی دی خودتون مقایسه کنید( مثلا رزولوشن ، تایمینگ و…) و انجام بدید به تغییر خاصی نیاز نیست .

  7. Avatar for ملکی ملکی گفت:

    با سلام و تشکر از زحمات شما یک سوال داشتم ال سی دی که استفاده کردید 5 اینچ هست با 7 اینچ چون هر جا رو گشتم 7 اینچ 40 پین نبود ممنون میشم راهنمایی کنید

    1. Avatar photo محمدرضا عابدینی گفت:

      مهندس بردی که من استفاده کردم از 40 و 50 پین ساپورت میکنه ، اما همونطور که تو متن گفته شد رزولوشن مهمه نه ابعاد ال سی دی ، من هم از ال سی دی 4.3اینچ 40 پین استفاده کردم ..
      اما داخل فیلم اموزشی اشتباه نکنم سایز و رزولوشن ال سی دی متفاوت از متن اموزش باشه.(اغلب ال سی دی های 7اینچ ، 50 پین میباشد)
      مشکلتون رو دقیق تر بفرمایید تا بهتر بتونم راهنمایی کنم .

  8. Avatar for جواد جواد گفت:

    سلام . راه اندازی تاچ برای LCD برد دیسکاوری STM32F7 رو می زارید؟ اصلاً حاضرم بخرم ازتون. از کجا میشه پیدا کرد گیر نیاوردم تو نت . با اکلیپس نه ها . با کیل .

    1. Avatar for جواد جواد گفت:

      یا خصوصی برام بفرستید هزینشو هم قبل ارسال میدم JKJAK111@GMAIL.COM

    2. Avatar for Sisoog Os Sisoog Os گفت:

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

  9. Avatar for جواد جواد گفت:

    active width رو از کجا اوردید چرا نشون ندادید ؟ منم پیدا نکردم تو دیتاشیتم .

    1. Avatar photo محمدرضا عابدینی گفت:

      درود
      هنگام خرید یک نمایشگر ، فروشنده با چند پارامتر فنی آن را معرفی میکند:
      1- سایز :مانند 5اینچ
      2- رزولوشن: مانند480*272 که دقیقا منظور از active width همان تعداد پیکسل در عرض نمایشگر است یعنی 480.
      3- نوع نمایشگر: مانند کاراکتری
      4- نوع راه اندازی و درایور
      ..

  10. Avatar for محمد محمد گفت:

    سلام ممنون از اموزش های خوبتون. لطفا موارد زیر رو براساس LTDC اموزش بدین.
    1- استفاده از DMA2D
    2- ارتباط با کتابخانه های گرافیکی مثل EMWIN
    3- کتابخانه ی Touch GFX

    1. Avatar photo محمدرضا عابدینی گفت:

      سلام ضمن عذرخواخی از همه دوستان بابت تاخیر در انتشار مطالب، به زودی قسمت های جدید اپلود خواهد شد ممنون از همراهمی شما
      بله این موارد در آموزش هم پوشش داده شده.

  11. Avatar for mohsen mohsen گفت:

    سلام جناب مهندس تشکر بابت اموزش خوبتون
    اگر ممکن است میکروهای مختلف و نرم افزارهای مختلفی که برای ساخت GUI هست مثل emwin ,touchgfx , qt ,ویا هر نرم افزار دیگه ای که میشناسید رو یه مقایسه ای بکنید
    من تجربه کار گرافیکی با میکرو رو ندارم و هم میکرومنترلر وهم نرم افزارهای زیادی پیدا کردم که قابلیت کار گرافیکی دارند ولی من نمیدونم کدومشون رو انتخاب کنم
    پروژه ای هم که مدنظرم هست ساخت رابط گرافیکی نسبتا سنگین برای یک دستگاه در زمینه تجهیزات مهندسی پزشکیه .

  12. Avatar for محمد امین محمد امین گفت:

    سلام
    اول ی تشکر بکنم از مدیریت سایت سیسوگ که می شه گفت سایت بی نظیر نباشه کم نظیره.
    آقای مهندس می شه یکم جلوتر بریم، تقریبا تو تمام آموزش راه اندازی lcd از نمایش یک عکس که محتوای عکس تبدیل شده به کد هگز و داخل میکرو ریخته شده و به نمایش در می آد، سخن گفته شده است.
    در خواست دارم از راه کار پخش فیلم( دنباله ای از تصاویر 24 فریم در ثانیه احتمالا میکرو به sdram نیاز خواهد دشت ) و امکان پخش با میکروی ذکر شده یا استفاده از دوربین دیجیتال و یا آنالوگ و نمایش آن توسط lcd یه سرنخ هایی بدین یا اگه لینک یا منبع خارجی تو این زمینه دارین معرفی کنین.

    1. Avatar photo محمدرضا عابدینی گفت:

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

  13. Avatar for سجاد گلچین پور سجاد گلچین پور گفت:

    اقا مطلبت عالی و تک بود!! لطفا اموزش کار با TouchGFX رو هم بزارید.

    1. Avatar photo محمدرضا عابدینی گفت:

      سلام مهندس گلچین پور عزیز ..
      ممنون از محبت شما ..انشالا در ادامه به touch gfx و stemwin هم خواهیم پرداخت

  14. Avatar for َAmir َAmir گفت:

    سلام
    روزتون بخیر و خسته نباشید
    چند سوال داشتم :
    دیتاشیت LCD TFT ها رو از چه سایتی تهیه کنیم که مشخصات VSD و HSD و … که گفتین داشته باشه ؟؟ در فروشگاه های ایران انواع مختلف TFT وجود دارد اما پارت نامبر ندارد … چطور دیتاشیت را تهیه کنیم که پارامترها رو داشته باشه ؟؟ دیتاشیت LCD ها با سایر قطعات فرق داره …
    —————————————————————————————————————————————————————–
    فایل هایی که قرار دادین قابل دانلود نیست. لطفا بررسی فرمایید.
    —————————————————————————————————————————————————————–
    راجب توابع کیوب اگه ممکنه مفصل توضیح بدین.
    —————————————————————————————————————————————————————–
    بی صبرانه منتظر قسمت دوم اموزش این بخش هستیم. لطفا ادامه بدین.
    —————————————————————————————————————————————————————–
    ازتون بابت مطالبی که قرار دادین تشکر میکنم.
    ممنونیم.

    1. Avatar for Phoenix Phoenix گفت:

      درود بر امیر نازنین. مشکل دانلود فایل‌ها برطرف شد، از هم‌اکنون می‌توانید فایل‌ها را دانلود کنید.

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

    2. Avatar photo محمدرضا عابدینی گفت:

      سلام ممنون از همراهی شما انشالا این مجموعه آموزشی رو در حد توان تامراحل قابل قبولی پیش خواهیم برد.

      اغلب از فروشگاه هایی که ال سی دی تهیه میشه ، امکان دانلود دیتاشیت مربوطه وجودداره و معمولا ال سی دی های با رزولوشن یکسان اطلاعات دیتاشیت تفاوت انچنانی با یکدیگر ندارند _اما اگر الان نیاز به دیتاشیت با رزولوشن متفاوت از انچه در اموزش گفته شده دارید کافیه که تو فروشگاه ها دیتاشیت رو گیر بیارید یا با مقداری جست و جو در گوگل یک دیتاشیت رو پیدا و باکمی حوصله بصورت عملی تست کنید( باتوجه به بازه گسترده مقادیر زمانی مشکل خاصی نخواهید داشت نگران نباشید)

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

      دررابطه با توابع HAL که نرم افزار کیوب برامون میسازه تااینجای کار جز قسمتی که ادرس شروع عکس رو دادیم استفاده ای نشده و فقط در حد راه اندازی و مقدار دهی به ریجسترا کمک گرفتیم ولی اگر بخشی مجهوله بفرمایید تاهمون قسمت رو توضیح بدیم.

      انشالا قسمت دوم در حال اتمامه و به زودی منتشر میشه ممنون ازاینکه مارو دنبال میکنید

      خواهش میکنم خوشحالیم که درکنارتون هستیم.

  15. Avatar for hosi hosi گفت:

    سلام
    عزیز از کجا میتونم lcd-image-converter دانلود کنم ؟؟

    1. Avatar photo محمدرضا عابدینی گفت:

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

  16. Avatar for arianBadvi arianBadvi گفت:

    چکیده منظم و کاربردی‌یی ست.تشکر بابت زمانی که صرف کردید.

    1. Avatar photo محمدرضا عابدینی گفت:

      خواهش میکنم ..ممنون از همراهی شما.

  17. Avatar for مسعود رضاپور مسعود رضاپور گفت:

    بسیار عالی و کامل??

    1. Avatar photo محمدرضا عابدینی گفت:

      ممنون از شما مهندس بابت ضبط این ویدیو..

  18. Avatar for mahdi zamani mahdi zamani گفت:

    چکیده خیلی خوبیه برای راه اندازی تقریبا همه قسمت ها هم توش گفته شد 🙂 عالی بود مهندس

    1. Avatar photo محمدرضا عابدینی گفت:

      قربونت ممنون از محبتت

      1. Avatar for مهدی مهدی گفت:

        سلام مهندس یک ال سی دی ۷ اینچ پخش ماشین مارشال دارم که فلتش ۲۶ پین هست و برد راه اندازش با چیپ vp77-lf هست میخواستم ببینم چطور میشه این ال سی دی رو با میکرو راه اندازی کرد البته تاچ هم داره روش مرسی اگه جواب بدین

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *