LCD گرافیکی یکیاز مهمترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است، نمایش وضعیت و یا حاصل عملیات، در مداراتی که عملکرد سادهای دارند با چند LED یا نهایتا استفادهاز 7Segment مرتفع میشود. اما فکرکنید دستگاه شما باید تعداد پارامترهای زیادی را بهنمایش بگذارد؛ در چنین دستگاههایی، دیگر نمیشود از LED یا LCDهای کاراکتری استفادهکرد و نیاز است از یک LCD گرافیکی استفادهکنید.
وقتیکه به گزینه LCDهای گرافیکی میرسیم، تعداد انتخابها بهشدت محدود میشود، چراکه نمایشگرهای موجود در بازار بهشدت محدود هستند، البته نه بازارجهانی بلکه بازار ایران! علاوهبر محدودیت تنوع قیمتهای نجومی آنها، خیلیاز مسائل را تحتشعاع قرار میدهد! و حتی ممکناست باعث کنسلشدن پروژه شود، اما راهحل چیست؟ برای یافتن پاسخ با ما همراهشوید.
راه حل ارزان
یکیاز انتخابها برای کاهش هزینه نمایشگر استفادهز نمایشگرهایی است که در تعداد و تیراژ بالا تولید میشوند و کاربرد عمومی دارند نه تخصصی، قطعا چنین نمایشگرهایی علاوهبر فراوانی دارای قیمت مناسبی نیز هستند. بهعنوان نمونه میتوان به نمایشگرهای موبایل اشارهکرد. که بهسادگی در بازار قطعات موبایل قابلتهیه است و از قیمتمناسبی نیز برخوردار است. بهعنواننمونه نمایشگرهای موبایل N95 چینی که امروزه حتی در قطعه فروشهای الکترونیکی هم میتوان آنها را پیداکرد. در این مقاله قصد داریم یک مدل دیگر از این LCDها معرفیکنیم که دارای قیمت مناسبی است و بهراحتی قابل تامین از بازار قطعات موبایل است.
معرفی LCD گرافیکی
غالب LCD گرافیکیهای موجود در بازار الکترونیک از نوع تکرنگ پیکسلی هستند، یعنی تنها قادرند که وضعیت صفر یا یک را برای یک پیکسل بهنمایش بگذارند؛ غالبا راهاندازی LCD گرافیکی رنگی هزینه زیادی دربر خواهدداشت چراکه علاوهبر تهیه خود LCD نیاز است که کنترلر LCD را نیز تهیهکنید! اما استفادهاز LCDهای موبایل کمک میکند که علاوهبر کاهش هزینهها دیگر نیازیبه آیسی درایور نباشد چراکه درایور درون خود LCD تعبیهشدهاست و تنها نیازبه راهانداری دارد.
در این مقاله قصدداریم که LCD موبایل Nokia 1661 را راهاندازی کنیم، این نمایشگر یک نمایشگر ازنوع TFT میباشد که قادربه پشتیبانی ۶۵هزاررنگ است و در اندازه ۱.۸اینچ دردسترس است.
Type TFT, 65K colors Size 1.8 inches, 10.2 cm2 (~21.0% screen-to-body ratio) Resolution 128 x 160 pixels (~114 ppi density)
LCD گرافیکی را از کجا تهیه کنیم؟
نمایشگر Nokia 1661 را بهراحتی میتوانید از تمام فروشگاههای قطعات موبایل تهیهکنید، حدود یکماهپیش (قبلاز نگارش این مقاله) قیمت این نمایشگر حدود ۳۵هزارتومان بود و هماکنون (در زمان نگارش مقاله) حدود ۲۳هزارتومان است. حتی بهصورت آنلاین با یک سرچ ساده میتوانید آنرا سفارشدهید و درب منزل دریافتکنید. اگر به هردلیلی موفق نشدید نمایشگر Nokia 1661 را تهیهکنید، میتوانید از لیستزیر نمایشگر هرکدام از موبایلهای معرفیشده را تهیهکنید چراکه LCD آنها بهصورت کامل باهم همخوانی دارد.
- Nokia 1661
- Nokia 1616
- Nokia 1662
- Nokia 1800
- Nokia 5030
- Nokia 100
- Nokia 101
- Nokia 112
- Nokia 113
- Nokia C1-00
- Nokia C1-01
- Nokia C1-02
- Nokia C1-03
- Nokia C2-00
- Nokia X1-01
و بهراحتی نمایشگر موردنظر را جایگزینکرد. توجهداشتهباشید که تمام مدلهای بالا از یکنوع LCD استفاده میکنند که از سوکت ۱۲پین استفاده میکند و مدلهای زیر از سوکت ۲۲ پایه (DF23-22) استفاده میکنند، جز تغییر چینش پایهها تمام جزییات راهاندازی مثلهم خواهدبود.
- Nokia 5070
- Nokia 5200
- Nokia 6060
- Nokia 6061
- Nokia 6070
- Nokia 6080
- Nokia 6085
- Nokia 6086
- Nokia 6101
- Nokia 6102
- Nokia 6103
- Nokia 6125
- Nokia 6136
- Nokia 6151
- Nokia 7360
استفادهی زیاد این نوع LCD گرافیکی، یاعث ایجاد دلگرمی میشود که بهراحتی قابل تامین از بازار باشد.
توضیح خوب یکیاز کاربرها(سینا) درخصوص تهیه این مدل نمایشگرها در بازار ایران:
تمام مدلهای زیر با نام ۱۶۶۱ هستن تو بازار و اگه مدل دیگهای بگید نمیشناسن و تااونجاییکه رفتم تو بازار و دیدم مدل تقلبینداره و حدود ۱۸ تا ۲۲ تومنه که بستگیبه مارک تولیدکننده داره و قیافش با c1 فرقداره ولی همه مدلهای زیر شکلشون یکسانه
Nokia 1661 , Nokia 1662 , Nokia 1616 , Nokia 5030 , Nokia 1800
و اما تمام مدلهای زیرهم با نام c1-01 در بازار موجود هستند و طول کاورشون کمتره و مدل اصل و تقلبیدارن مدل اصل ۱۷ تا ۱۸ تومنه و تقلبی ۱۲ تومن
Nokia C1-01, Nokia C1-00, Nokia C1-03, Nokia X1-01, Nokia 101, Nokia C2-00, Nokia C1-02, Nokia 100, Nokia 113, Nokia 112, Nokia 108 Nokia 130 Single SIM
فقط دقتکنید مدل تقلبی مارک پشتش بیکیفیته و سرقرمز لیبلش کوچکتر و باریکتره حتما ازجایی تهیهکنید که طرفخودش اینکاره باشه. اما مدل ۲۲پین که اطلاعات زیادی ازشندارم ولی همه مدلهای زیر به اسم مدل ۵۲۰۰معروفن و باید حدود ۷ تا ۸ تومن تقلبیش و ۱۴ تا ۱ هم اصلش باشه
LCD گرافیکی و رابط سخت افزاری
تمام مدلهای ذکرشده، از کنترلر SPFD54124B استفاده میکنند، خوشبختانه رابط مورداستفاده در این کنترلر و البته این نوع سختافزار رابط سریال است که برای راهاندازی نیازبه تعداد پایهزیادی نخواهدداشت، اما متاسفانه از انتقال سریال ۹بیت فقط استفاده میکنند که باعث میشود نتوانیم از سختافزار SPI موجود در AVR استفادهکنیم البته میکروکنترلرهای ARM غالبا از ارتباط ۹بیت سریال بهصورت سختافزاری پشتیبانی میکنند.
نکتهمهم دیگری که باید به آن توجهکرد، ولتاژ تغذیه این LCD گرافیکی است که فقط از ۳.۳ولت پشتیبانی میکند البته دقتداشتهباشید که حتما IOهای آن نیز باید با ولتاژ ۳.۳ تحریک شوند درغیر اینصورت کنترلر LCD صدمهخواهددید.
اگر قصددارید از برد آردوینو (arduino) یا AVR برای راهاندازی این LCD استفادهکنید، بهراحتی با سریکردن مقاومت ۱۰کیلواهم سطح ولتاژ را کاهشدهید و نیازیبه تقسیم مقاومتی نیست.
اگر از مدلی استفاده می کنید که ۱۲عدد پایه دارد، در تصویرزیر میتوانید ترتیب پایهها را مشاهدهکنید.
و چنانچه از مدلی استفاده میکنید که دارای ۲۲عدد پایه است، ترتیب پایهها را میتوانید در تصویرزیر مشاهدهکنید.
همانطورکه در دو تصویرفوق مشخص میشود بهجز پایههای تغذیه و بکلایت، در این مدل کنترلر نیاز به ۴پایه سیگنال داریم، که مطابق معمول یکی برای ریست کنترلر و یکی بهعنوان سیگنال انتخابکنندهاست (CS) و یکیهم کلاک و دیگریهم ورودی دیتاست.
نامگذاریهای SDA و SCL ربطیبه واسط I2C ندارند و صرفا مخفف نامهای Serial Data و Serial Clock میباشند.
نمونه ساختهشده
نمونه تهیهشده برای استفاده در این راهاندازی درواقع LCD موبایل Nokia 1661 است که در عکس پشت روی آنرا در تصویر مشاهده میکنید:
دقتداشتهباشید که در این نوع LCD تعداد پایهها ۱۲عدد است.
برای دسترسی سادهتر به پایههای LCD، یک عدد برد راهانداز طراحیشدهاست که در قسمتدانلود میتواند فایل PCB آنرا دانلود کنید
دانلود و راهاندازی کتابخانه lcd گرافیکی
برای دانلود کتابخانه میتوانید به گیت هاب سیسوگ مراجعه کنید و ریپوزیتوری Nokia-1616-1661-TFT-Library را دانلود کنید یا برروی لینک قرارگرفته در قسمت دانلودها کلیک کنید، بعداز دریافت آخریننسخه از کتابخانه، اولین قدم تنظیم پایههای مورداستفاده جهت راهاندازی LCD است. برای اینکار ابتدا خطوط زیر در فایل nokia1661_Hw.h را ویرایش کنید و هر پایه دلخواهی را که آزاد است میتوانید انتخابکنید.
#define LCD_PORT PORTB #define LCD_DDR DDRB #define LCD_RST PINB1 #define LCD_CS PINB2 #define LCD_SDA PINB3 #define LCD_CLK PINB5
بهیاد داشتهباشید که این کتابخانه هم از میکروکنترلر AVR و هم از میکروکنترلر STM32 پشتیبانی میکند.
برای تعیین نوع میکروکنترلر میتوانید با ویرایش فایل nokia1661_Hw.h و تغغیر وضعیت ماکروهای LCD_AVR_HW یا LCD_STM_HW نوع میکروکنترلر مورداستفاده خودتون رو انتخابکنید. مثلا برای انتخاب AVR وضعیت را بهشکلزیر تغییر میدهیم.
#define LCD_AVR_HW 1 //#define LCD_STM_HW 1
این کتابخانه در کامپایلرهای GCC , Keil , IAR قابلاستفادهاست و بهسادگی با کتابخانههایHAL/LL/SPL میتوان از آن استفادهکرد.
وجود مقاومتهای ۱۰کیلو اهمی سر راه سیگنال LCD، بهدلیل تغذیه ۵ولت میکروکنترلر میباشد.
بعداز تنظیم پایههای سختافزار و اتصال سختافزاری ماژول LCD به میکروکنترلر تنها کافیاست با صدازدن روال nlcdInit کنترلر LCD را پیکربندی کنید و از آن استفادهکنید.
برنامه پیشفرض راهاندازی و تست کتابخانه:
#include <avr/io.h> #include <util/delay.h> #include <nokia1661_lcd_driver.h> #include <lcd_font5x7.h> int main(void) { nlcdInit(); nlcdSetBackgroundColor(LCD_VGA_RED); nlcdClear(); nlcdSetBackgroundColor(LCD_VGA_BLUE); nlcdClear(); nlcdSetBackgroundColor(LCD_VGA_GREEN); nlcdClear(); nlcdSetBackgroundColor(LCD_VGA_WHITE); nlcdSetFont(font5x7latcyr); nlcdClear(); nlcdGotoCharXY(1,1); nlcdStringP(LCD_VGA_RED, PSTR()); _delay_ms(250); nlcdSetOrientation(LCD_ORIENTATION_90); nlcdGotoCharXY(1,1); nlcdStringP(LCD_VGA_GREEN, PSTR()); _delay_ms(250); nlcdSetOrientation(LCD_ORIENTATION_180); nlcdGotoCharXY(1,1); nlcdStringP(LCD_VGA_BLUE, PSTR()); _delay_ms(250); nlcdSetOrientation(LCD_ORIENTATION_270); nlcdGotoCharXY(1,1); nlcdStringP(LCD_VGA_PURPLE, PSTR()); _delay_ms(250); nlcdSetOrientation(LCD_ORIENTATION_NORMAL); for(int i=0;i<32;i++) nlcdPixel(64+i,64,LCD_VGA_RED); for(int i=0;i<32;i++) nlcdPixel(64,64+i,LCD_VGA_PURPLE); for(int i=0;i<32;i++) nlcdPixel(64+i,64+31,LCD_VGA_BLUE); for(int i=0;i<32;i++) nlcdPixel(64+31,64+i,LCD_VGA_GREEN); while(1) { } return 0; }
خروجی برنامه فوق را در تصویر زیر میتوانید مشاهدهکنید.
ورژن دوم کتابخانه
در ورژن جدید این کتابخانه؛ تابعی برای خواندن رجیسترهای کنترلر LCD به آن اضافهشده که بهسادگی قادرخواهیدبود ID و رجیستر وضعیت LCD را قرائتکنید.
void _nlcdRead(uint8_t Reg,uint8_t *Readbuffer,uint8_t NRead);
پارامتر اول آدرس رجیستر موردنظر است؛ پارامتر اشارهگر به حافظهای است که دادهها باید درون آن ذخیرهشوند و پارامتر آخر هم تعداد بایتهایی است که باید خواندهشود. برای خواندن رجیستر ID به شکلزیر از تابع استفاده خواهیمکرد.
uint8_t ReadID[3] = {0}; _nlcdRead(0x04,ReadID,3); /* Read Display ID */
فایلهای دانلودی موردنیاز
دانلود کتابخانه به همراه مثال برای Arduino
دانلود آخرین ورژن کتابخانه Nokia 1661 بر روی گیت هاب
منبع: سیسوگ