سلام در مجموعه آموزش سیستمهای گرافیکی، در اولین جلسه با راهاندازی 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 آشنا بشویم.
برای دانلود نرمافزار و فایلهای پروژه از قسمت زیر اقدام کنید:
لینکهای دانلود
اسم فایلها
- lcd-image-converter.7z
- LCD1_sisoog.7z
درود بر شما ، ممنون بابت آموزش خوبتون.
چرا موقعی که متغیر خروجی تصویر رو از حالت const خارج میکنیم دیگه برنامه کار نمیکنه.
در حالت const اگر map file رو چک کنید آدرس متغیر مثلا هست 0x800’02ac و موقعی که از حالت const خارج میشه آدرسش میشه 0x20000000
یعنی موقعی که داخل flash هست کار میکنه و موقعی که داخل RAM میکرو هست کار نمیکنه.
میکروی مورد استفاده من STM32H7B0 هست که داخل برد کویر الکترونیک هست و به اندازه 1.4 مگ رم داخلی داره.
یک سوال دیگه هم دارم که چجوری میتونم متغیری با سایز 800 کیلو بایت تعریف کنم توی IAR ؟
سلام دوست عزیز
وقتی از حالت const خارج میکنید کامپایلر سعی میکنه محتوا رو توی رم میکروکنترلر قرار بده که احتمالا میکروکنترلر این مقدار رم نخواهد داشت برای همینه که خطا دریافت میکنید
تا وقتی const هست یعنی اون متغییر روی فلش قرار میگیره
سلام وقتتون بخیر باشه ببخشید باکمک کتابخانه MCUFriend و adafruit میشه کدهای برنامه این ال سی دی رو نوشت ؟امکانش هست در باره کتابخانه مورد استفاده و کدنویسی این روش راه اندازی مختصری راهنمایی بفرمایید؟
باتشکر از محبتتون مشگی
سلام و درود دوست عزیز
بله میشه، در واقع وقتی شما LTDC استفاده میکنید عملا یک فریم بافر دارید و به راحتی تمام کتابخانه های گرافیکی قابلیت کار کردن با این متد را دارند.
توضیحات عالی
سلام
خدا قوت
آقای عابدینی خیلی عالی بود
من سرچ کردم قسمت بعدی رو پیدا نکردم آیا هنوز منتشر نشده ؟
آیا تجربه ای برای درایو lcd با stm8l دارید؟
ممنون میشم راهنمایی کنید
سلام ممنون از محبتتون
مقالات بعدی به دلیل مشغله کاری به تاخیر افتاده ازهمه دوستان مجدد عذرخواهی میکنم
مشخصات ال سی دی که مدنظرتونه رو بفرمایید؟!
stm8 سری L خودش 4×28 Lcd درایو میکنه بدون نیاز به درایور
من برای پروژه ای نیاز دارم که استفاده کنم
میخواستم ببینم اگه اطلاعاتی در این زمینه دارید ممنون میشم راهنمایی بفرمایید.
آیا Lcd بدون درایور توی بازار هست که برای تست و راه اندازی بخوام روش کار کنم؟
سلام و عرض ادب بنده به مشکلی دارم یه ال سی دی دارم برای یه دستگاه هست که خراب شده و پیدا نمیشه بفرمایید من چی میتونم جایگزین کنم اصلا میشه یا باید همون باشه
سلام خیلی بستگی به نوع ال سی دی و کنترلر و پروتکل ارتباطی داره
ولی نهایتا کار سختی است که همه این جزییات رو بخوایم در بیاریم مگر این که منوال یا شماتیکی در دسترس باشد.
سلام بردم دقیقا همان بردی هست که شما در آموزش ازش استفاده کردید فقط ال سی دی من ۵۰ پین هست ولی شما ال سی دی ۴۰ پین استفاده مردید
سلام مهندس ال سی دی که از کویر تهیه کردم ۷اینچ هست که ۵۰ پین هست برای اتصال به ۵۰ پین باید تنظیمات خاصی انجام بدم ممنون ازاموزش عالیتون
سلام و درود خدمت شما
تغییرات سخت افزاری رو از فایلی توضیحاتی که همراه برد براتون ارسال کردن انجام بدید ..
اما برای راه اندازی نرم افزاری کافیه پارامترهایی که دراموزش گفته شده رو باتوجه به دیتاشیت ال سی دی خودتون مقایسه کنید( مثلا رزولوشن ، تایمینگ و…) و انجام بدید به تغییر خاصی نیاز نیست .
با سلام و تشکر از زحمات شما یک سوال داشتم ال سی دی که استفاده کردید 5 اینچ هست با 7 اینچ چون هر جا رو گشتم 7 اینچ 40 پین نبود ممنون میشم راهنمایی کنید
مهندس بردی که من استفاده کردم از 40 و 50 پین ساپورت میکنه ، اما همونطور که تو متن گفته شد رزولوشن مهمه نه ابعاد ال سی دی ، من هم از ال سی دی 4.3اینچ 40 پین استفاده کردم ..
اما داخل فیلم اموزشی اشتباه نکنم سایز و رزولوشن ال سی دی متفاوت از متن اموزش باشه.(اغلب ال سی دی های 7اینچ ، 50 پین میباشد)
مشکلتون رو دقیق تر بفرمایید تا بهتر بتونم راهنمایی کنم .
سلام . راه اندازی تاچ برای LCD برد دیسکاوری STM32F7 رو می زارید؟ اصلاً حاضرم بخرم ازتون. از کجا میشه پیدا کرد گیر نیاوردم تو نت . با اکلیپس نه ها . با کیل .
یا خصوصی برام بفرستید هزینشو هم قبل ارسال میدم JKJAK111@GMAIL.COM
سلام دوست عزیز فعلا قصدی نداریم دوستانی هم که اینجا میبنن و دارند میتونن از ما بخان تا ایمیل شما را بهشون بدیم
active width رو از کجا اوردید چرا نشون ندادید ؟ منم پیدا نکردم تو دیتاشیتم .
درود
هنگام خرید یک نمایشگر ، فروشنده با چند پارامتر فنی آن را معرفی میکند:
1- سایز :مانند 5اینچ
2- رزولوشن: مانند480*272 که دقیقا منظور از active width همان تعداد پیکسل در عرض نمایشگر است یعنی 480.
3- نوع نمایشگر: مانند کاراکتری
4- نوع راه اندازی و درایور
..
سلام ممنون از اموزش های خوبتون. لطفا موارد زیر رو براساس LTDC اموزش بدین.
1- استفاده از DMA2D
2- ارتباط با کتابخانه های گرافیکی مثل EMWIN
3- کتابخانه ی Touch GFX
سلام ضمن عذرخواخی از همه دوستان بابت تاخیر در انتشار مطالب، به زودی قسمت های جدید اپلود خواهد شد ممنون از همراهمی شما
بله این موارد در آموزش هم پوشش داده شده.
سلام جناب مهندس تشکر بابت اموزش خوبتون
اگر ممکن است میکروهای مختلف و نرم افزارهای مختلفی که برای ساخت GUI هست مثل emwin ,touchgfx , qt ,ویا هر نرم افزار دیگه ای که میشناسید رو یه مقایسه ای بکنید
من تجربه کار گرافیکی با میکرو رو ندارم و هم میکرومنترلر وهم نرم افزارهای زیادی پیدا کردم که قابلیت کار گرافیکی دارند ولی من نمیدونم کدومشون رو انتخاب کنم
پروژه ای هم که مدنظرم هست ساخت رابط گرافیکی نسبتا سنگین برای یک دستگاه در زمینه تجهیزات مهندسی پزشکیه .
سلام
اول ی تشکر بکنم از مدیریت سایت سیسوگ که می شه گفت سایت بی نظیر نباشه کم نظیره.
آقای مهندس می شه یکم جلوتر بریم، تقریبا تو تمام آموزش راه اندازی lcd از نمایش یک عکس که محتوای عکس تبدیل شده به کد هگز و داخل میکرو ریخته شده و به نمایش در می آد، سخن گفته شده است.
در خواست دارم از راه کار پخش فیلم( دنباله ای از تصاویر 24 فریم در ثانیه احتمالا میکرو به sdram نیاز خواهد دشت ) و امکان پخش با میکروی ذکر شده یا استفاده از دوربین دیجیتال و یا آنالوگ و نمایش آن توسط lcd یه سرنخ هایی بدین یا اگه لینک یا منبع خارجی تو این زمینه دارین معرفی کنین.
سلام ممنون از این انرژی مثبتتون
بله چشم حتما تمام تلاشمون رو خواهیم کرد تا به مباحث پیشرفته تری هم بپردازیم برای پخش و نمایش فیلم بنده هم کاری انجام ندادم ولی به زودی تست هایی رو شروع میکنم و حتما اطلاع میدم ..
اقا مطلبت عالی و تک بود!! لطفا اموزش کار با TouchGFX رو هم بزارید.
سلام مهندس گلچین پور عزیز ..
ممنون از محبت شما ..انشالا در ادامه به touch gfx و stemwin هم خواهیم پرداخت
سلام
روزتون بخیر و خسته نباشید
چند سوال داشتم :
دیتاشیت LCD TFT ها رو از چه سایتی تهیه کنیم که مشخصات VSD و HSD و … که گفتین داشته باشه ؟؟ در فروشگاه های ایران انواع مختلف TFT وجود دارد اما پارت نامبر ندارد … چطور دیتاشیت را تهیه کنیم که پارامترها رو داشته باشه ؟؟ دیتاشیت LCD ها با سایر قطعات فرق داره …
—————————————————————————————————————————————————————–
فایل هایی که قرار دادین قابل دانلود نیست. لطفا بررسی فرمایید.
—————————————————————————————————————————————————————–
راجب توابع کیوب اگه ممکنه مفصل توضیح بدین.
—————————————————————————————————————————————————————–
بی صبرانه منتظر قسمت دوم اموزش این بخش هستیم. لطفا ادامه بدین.
—————————————————————————————————————————————————————–
ازتون بابت مطالبی که قرار دادین تشکر میکنم.
ممنونیم.
درود بر امیر نازنین. مشکل دانلود فایلها برطرف شد، از هماکنون میتوانید فایلها را دانلود کنید.
در رابطه با سوالهایتان هم نویسنده در اسرع وقت جواب خواهند داد.
سلام ممنون از همراهی شما انشالا این مجموعه آموزشی رو در حد توان تامراحل قابل قبولی پیش خواهیم برد.
اغلب از فروشگاه هایی که ال سی دی تهیه میشه ، امکان دانلود دیتاشیت مربوطه وجودداره و معمولا ال سی دی های با رزولوشن یکسان اطلاعات دیتاشیت تفاوت انچنانی با یکدیگر ندارند _اما اگر الان نیاز به دیتاشیت با رزولوشن متفاوت از انچه در اموزش گفته شده دارید کافیه که تو فروشگاه ها دیتاشیت رو گیر بیارید یا با مقداری جست و جو در گوگل یک دیتاشیت رو پیدا و باکمی حوصله بصورت عملی تست کنید( باتوجه به بازه گسترده مقادیر زمانی مشکل خاصی نخواهید داشت نگران نباشید)
با تشکر از ققنوس عزیز مشکل فایل ها حل شده.
دررابطه با توابع HAL که نرم افزار کیوب برامون میسازه تااینجای کار جز قسمتی که ادرس شروع عکس رو دادیم استفاده ای نشده و فقط در حد راه اندازی و مقدار دهی به ریجسترا کمک گرفتیم ولی اگر بخشی مجهوله بفرمایید تاهمون قسمت رو توضیح بدیم.
انشالا قسمت دوم در حال اتمامه و به زودی منتشر میشه ممنون ازاینکه مارو دنبال میکنید
خواهش میکنم خوشحالیم که درکنارتون هستیم.
سلام
عزیز از کجا میتونم lcd-image-converter دانلود کنم ؟؟
سلام باسپاس از شما.
متاسفانه اپلود فایل های پروژه و نرم افزارهای مورد نیاز فراموش شده که امروز حتما اپلود میکنم.
چکیده منظم و کاربردییی ست.تشکر بابت زمانی که صرف کردید.
خواهش میکنم ..ممنون از همراهی شما.
بسیار عالی و کامل??
ممنون از شما مهندس بابت ضبط این ویدیو..
چکیده خیلی خوبیه برای راه اندازی تقریبا همه قسمت ها هم توش گفته شد 🙂 عالی بود مهندس
قربونت ممنون از محبتت
سلام مهندس یک ال سی دی ۷ اینچ پخش ماشین مارشال دارم که فلتش ۲۶ پین هست و برد راه اندازش با چیپ vp77-lf هست میخواستم ببینم چطور میشه این ال سی دی رو با میکرو راه اندازی کرد البته تاچ هم داره روش مرسی اگه جواب بدین