
SSD1963:
Ssd1963 یک کنترلر یا درایور صفحه نمایش هست که شما می تونید با بهره گیری از این درایور السیدی هایی تا رزولیشن ۸۶۴ تا ۴۸۰ پیکسل رو راه اندازی کنید
شما با هر میکرو کنترلری یا پروسسوری می توانید این گونه السیدی ها را درایو کنید البته شما راه هایی که برای برنامه نویسی در پیش دارید این است که در هر کامپایلری که کار می کنید یا باید کتابخانه این درایور را پیدا کنید یا خودتان با اشنایی به رجیستر های این درایور دست به کار بشید و برنامه بنویسید که این راه گرچه سخت هست ولی توانایی کنترل شما بر روی این درایور را افزایش می دهد.
Ssd1963 از دو نوع رابط موازی پشتیبانی می کند یکی رابط موازی ۶۸۰۰ و یکی هم رابط موازی ۸۰۸۰ البته هر دوی این رابط ها از یک پایه ها دستورات و دیتا را ارسال می کنند و تفاوت آنها در عملکرد پایه های #WR و #RD می باشد ، به عنوان مثال در صورت استفاده از رابط ۶۸۰۰ از طریق پایه (#R/W#(WR هم می توان دیتا را نوشت و هم می توان دیتا را خواند و از پایه (#E#(RD به عنوان ENABLE استفاده می شود ولی در رابط ۸۰۸۰ از پایه (#R/W#(WR عمل نوشتن دیتا انجام میگرد و از پایه (#E#(RD می توانیم دیتا را بخوانیم.
گفتیم که هر دو اینترفیس موازی ۶۸۰۰ یا ۸۰۸۰ در انتقال دیتا و دستورات از پایه های مشترک استفاده می کنند اما تفاوتی که دارند برای درک بهتر در زیر آورده شده است
برای ۶۸۰۰ از پایه CS به عنوان انتخابگر چیپ ، از پایه ) (#R/W#(WR به عنوان نوشتن یا خواندن داده (#R/W) که اگر این پایه یک شود عملیات خواندن و اگر صفر شود عملیات نوشتن صورت می گیرد و از پایه (#E#(RD به عنوان فعال ساز (E#) سیگنال استفاده میشود و از پایه #D/C هم به عنوان انتخاب دیتا یا دستورالعمل انجام می گیرد اگر پایه #D/C را صفر کنیم یعنی اینکه من یه کد هگز ۸ بیتی رو در پایه های D0 تا D7 قرار داده ام ( که قرار هست یه رجیستری رو انتخاب کنه ) و حال برای اینکه به ssd1963 بفهمانیم که این یک command هست نه دیتا بنابراین پایه #D/C را صفر می کنیم اما هنوز command ارسال نشده است و برای ارسال باید یک بار پایه (#R/W#(WR را صفر کنیم ( LOW ) و بلافاصله دوباره یک کنیم ( HIGH ) تا این دستور به ssd ارسال شود.
در اینترفیس موازی ۸۰۸۰ از پایه cs به عنوان انتخابگر چیپ ، از پایه (#R/W#(WR به عنوان نوشتن (WR#) که اگر این پایه صفر شود عملیات نوشتن انجام می گیرد و از پایه (#E#(RD به عنوان خواندن دیتا (#RD) استفاده میشود یعنی اگر پایه (#R/W) یک شود و پایه (#RD) صفر شود عملیات خواندن دیتا انجام می گیرد اما اون چیزی که در اینجا ما نیاز داریم نوشتن دیتا و نمایش در السیدی هست بنابراین اگر نیازی به خواندن دیتا از السیدی ندارید پایه (#RD) را با یک مقاومت ۳٫۳ کیلو به VDD/IO پول آپ کنید.
دیتا و command چین؟
هر ای سی دیجیتالی که توسط میکرو یا پروسسور کنترل می شود در داخل خود رجیستر هایی دارد که این رجیستر ها امکان کنترل ای سی توسط میکرو یا هر وسیله دیگری را فراهم می کند به عنوان مثال شما اگر بخواهید ssd1963 را در مد ۸ بیتی راه اندازی کنید باید رجیستر set_pixel_data_interface را دستکاری کنید برای مثال اگر خط باس دیتای شما هشت بیتی است و می خواهید به دلیل صرفه جویی در پایه های میکرو از مد هشت بیتی استفاده کنید بنابراین باید مقدار h00& را در این رجیستر ذخیره کنید البته راه اندازی به صورت ۸ بیتی سرعت پایینی دارد و برای میکرو کنترلر هایی کمتر از ۳۲ مگا هرتز اصلا توصیه نمی شود چه برسد به میکروی هشت مگا هرتز avr
بنابراین به کد هایی که یک رجیستر را انتخاب می کنند command گفته می شود و به کد هایی که در رجیستر ها و بافر السیدی نوشته می شوند دیتا گفته میشود
اگر شما در حال ارسال اطلاعات یک تصویر برای نمایش در السیدی هستید این اطلاعات ارسالی دیتا هستند دیتا هم که کد رنگ هر پیکسل یا فونت هست که در بافر ذخیره میشود
توجه داشته باشید که command هایی که یک رجیستر را انتخاب می کنند همه ۸ بیتی هستند و تنها دیتا هست که می تواند در ۶ تا ۲۴ خط ارسال شود
پایه های ssd1963 :
در این قسمت پایه های السیدی را که برای راه اندازی نیاز است مورد بررسی قرار می دهیم
در مرحله اول شما نیاز به ماژول السیدی دارید ، این ماژول چیه ؟ماژول یه بردیه که شامل ssd1963 با کلیه قطعات جانبی هست که درواقع این ماژول ها کار ما رو راحت می کنند و ما دیگر نیازی نیست که با سخت افزار ssd1963 درگیر بشیم و اخرش هم کار نکنه و ندونیم که مشکل از کجا بوده!
برای همین در این پروژه از یک السیدی با درایور آماده استفاده شده که بهش میگن ماژول السیدی
بنابراین اینجا ما نحوه ارتباط با این درایور رو توضیح خواهیم داد روی این ماژول ، درایور ssd1963 وصل هست و ما با این چیپ می تونیم با السیدی ارتباط برقرار کنیم
عکس ماژول:
این ماژول را می توانید از فروشگاههای کویر الکترونیک یا eca و یا… تهیه کنید توجه داشته باشید که چیپ ماژول حتما ssd1963 باشد.
نکته مهم: ولتاژ کاری السیدی و SSD1963 برابر با ۳٫۳ ولت می باشد بنابراین شما نمی توانید SSD1963 را به میکرو کنترلری که با ۵ ولت کار می کند وصل کنید در صورتی که از میکرو کنترلر های ضعیفی مثل AVR (ضعیف از لحاظ سرعت) قصد راه اندازی این نوع السیدی را داشته باشید به بیشترین فرکانسی که در ولتاژ ۳٫۳ دست میابید ۸ مگا هرتز خواهد بود ، برای اینکه سرعت میکرو AVR به ۱۶ مگا هرتز برسد باید تغذیه میکرو به ۵ ولت برسد که در این صورت به SSD1963 و السیدی آسیب خواهد رسید روشی که به ذهن می رسد استفاده از میکرو کنترلر های XMEGA هست که تا سرعتی ۳۲ مگا هرتز دارند اما اگر اصرار در راه اندازی این السیدی با MEGA AVR داشته باشید برای رسیدن به حداکثر سرعت در ولتاژ ۵ ولت می توانید از LOGIC LEVEL که مبدل سطح منطقی می باشند استفاده کنید توجه داشته باشید که تمام پایه های SSD1963 که به میکرو وصل می شود باید از میکرو جدا شده و به مبدل منطقی وصل شوند
این تنها یک نکته بود که گفته شد در صورتی که اشتباهی در نحوه ی وصل مبدل سطح منطقی انجام دهید و SSD1963 یا السیدی بسوزد مسئولیتش با خود شما خواهد بود.
اینترفیس ۶۸۰۰ یا ۸۰۸۰ :
بیشتر درایور های السیدی از رابط های موازی Lcd پشتیبانی می کنند که رایجترین آن رابط موازی ۸۰۸۰ می باشد ، در ssd1963 شما با زمین کردن پایه Conf می توانید از رابط ۶۸۰۰ استفاده کنید و با وصل کردن پایه conf به VDD/IO می توانید از رابط ۸۰۸۰ استفاده کنید در مورد این رابط های موازی توضیحاتی قبلا داده شده است البته نیازی نیست که ما به دنبال پایه conf در ماژولهای آماده بگردیم چرا که در بیشتر ماژول ها این پایه به VDD/IO وصل هست و این یعنی اینکه شما موظف هستید که از رابط ۸۰۸۰ استفاده کنید البته ناگفته نماند که این روش ارتباط یکی از رایجترین روش ارتباطی در السیدی هاست.
بعد از اینکه مطلع شدیم که ارتباط ما با درایور ، اینترفیس موازی ۸۰۸۰ هست حال با توجه به توضیحات در مورد پایه ها ی هر یک از اینترفیس ها می توانیم شروع به پیکره بندی و آماده سازی ssd1963 کنیم
اما شما قبل از ارتباط با ssd1963 باید تعیین کنید که شما از چند خط یا پین برای ارسال دیتا استفاده خواهید کرد طبیق دیتاشیت ssd1963 شما می توناید خط دیتای ۸ بیتی ، ۹ بیتی ، ۱۲ بیتی ، ۱۶ بیتی ، ۱۸ بیتی و در نهایت ۲۴ بیتی داشته باشید البته رابط سریالی هم هست که در اینجا توضیح داده نمی شود و همینطور ماژول ما از خط دیتای ۱۸ بیتی و ۲۴ بیتی هم پشتیبانی نمی کند بتابراین ما ماژول را می توانیم به صورت ۸ بیتی تا ۱۶ بیتی راه اندازی کنیم
پایه های مورد استفاده برای هر خط دیتا را در زیر مشاهده می کنید:
با توجه به جدول بالا در صورتی که ssd1963 را به صورت ۸ بیتی راه اندازی کنید از پایه های D0 تا D7 استفاده می شود و بقیه پایه ها یعنی D8 تا D23 باید به VSS (زمین) وصل شوند
در صورتی که قصد راه اندازی ssd1963 به صورت ۱۶ بیتی دارید از پایه های D0 تا D15 استفاده می شوند و باز بقیه پایه های دیتا که استفاده نمی شوند به VSS وصل می شوند
در کل از هر خط دیتایی که استفاده می کنیید پایه های دیتاهایی که استفاده نمیشوند را باید به زمین وصل کنید البته اگر به صورت ۲۴ بیتی راه اندازی شوند از کل خطوط دیتا استفاده می شود ولی در اینجا ما به دو صورت ۸ بیتی و ۱۶ بیتی برسی خواهیم کرد و شما قادر خواهید بود با هر میکرو کنترلری این السیدی را راه اندازی کنید
دقت کنید که راه اندازی ssd1963 چه به صورت ۸ بیتی و چه به صورت ۱۶ بیتی و … باشد هیچ تغییری در کنترل پایه های (#E#(RD و (#R/W#(WR و #CS و C\D ایجاد نخواهد شد و شما از اول تا اخر با این پایه ها کنترل دیتا و COMMAND را بر عهده دارید
یعنی اگر السیدی را به صورت ۱۶ بیتی راه اندازی کنید جمعا ۲۰ پایه از میکرو استفاده خواهد شد و اگر از پایه RD# بگذریم ۱۹ پایه از میکرو اشغال خواهد شد و اگر ۸ بیتی راه اندازی کنیم ۱۲ پایه و در نهایت با صرف نظر از RD# 11 پایه اشغال می شود.
بررسی رجیستر های مهم ssd1963:
رجیستر soft_reset (آدرس ۰x01)
ریست نرم افزاری ssd1963 ، که همه تنظیمات به جز رجیستر های ۰xE0 تا ۰xE5 که متعلق به PLL هست ریست می شوند
بعد از ریست نرم افزاری باید قبل از ارسال دستور جدید حداقل به مدت ۵ میلی ثانیه صبر کرد سپس دستور جدید ارسال کرد
ریست سخت افزاری:
Ssd1963 یک پایه ریست دارد که اگر این پایه را زمین کنید ssd1963 به صورت سخت افزاری ریست می شود.
رجیستر set_pll_mn (آدرس ۰XE2)
فرکانس مینیمم PLL درایور را بعد از ریست نرم افزاری یا سخت افزاری از همان ابتدا باید تنظیم کنید PLL فرکانس کاری را افزایش می دهد و همینطور قابلیت نمایش ۶۰ فریم یا حتی بیشتر در السیدی را فراهم می کند و همینطور می تواند سرعت رفرش افقی و عمودی السیدی را تعمین کند
در این رجیستر بیت های M0 تا M7 ضریب PLL میباشد اگر مقدار کریستال یا اسیلاتوری که ssd1963 با ان کار می کند ۱۰ مگا هرتز باشد
و شما بایت M را با عدد ۲۹ مقدار دهی کنید مقدار PLL برابر است با:
VCO = Reference input clock x (M + 1)
PLL frequency = VCO / (N + 1)
توجه کنید که مقدار VCO باید مقداری بین ۲۵۰ تا ۸۰۰ داشته باشد و مقدار ما بین این بازه مورد قبول است
مقدار PLL با تقسیم بر N بدست خواهد امد
اگر مقدار ۲۹ در M ذخیره شود و همینطور مقدار ۲ در N ذخیره شود و اگر مقدار C2 برابر با یک باشد در این صورت:
VCO =10MHZ * (29+1)
PLL frequency = 300 / (2 + 1)
PLL frequency = 100MHZ
نکته: ۱۰MHZ همان کریستال یا اوسیلاتوری هست که به پایه SSD1963 وصل هست
مقدار C2 را هم همیشه بر روی یک قرار دهید (عدد ۴ هگز یا ۵۴ هگز را در parameter3 ذخیره کنید)
نکته:طبق دیتاشیت فرکانس PLL را بر روی ۱۰۰ یا ۱۱۰ مگاهرتز تنظیم کنید.
نکته برای اطلاعات بیشتر: اگر در هر صورت از ماژول استفاده نکنید باید در هنگام وصل کریستال پایه کلاک یا XTAL که آزاد می ماند به زمین متصل شود ، برای مثال اگر از کریستال ۱۰ مگا هرتز استفاده کنید ، پایه های XTAL IN,OUT اشغال می شوند و پایه CLK آزاد می ماند که باید پایه آزاد را زمین کنید ، در واقع CLK و XTAL با یکدیگر OR شده اند لذا برای فعال شدن خروجی لازم هست تا پایه آزاد حتما زمین شود. اما اگر از اسیلاتور استفاده کنید پایه CLK استفاده میشود و پای های XTAL IN و XTAL OUT آزاد می مانند که تنها زمین کردن XTAL IN کفایت می کند.
رجیستر set_pll (آدرس ۰XE0)
با مقدار دهی این رجیستر می توانید PLL frequency را فعال یا غیر فعال کنید
قبل از فعال کردن PLL ابتدا باید فرکانس PLL را از طریق رجیستر set_pll_mn وارد کنید سپس PLL را فعال کنید
بعد از فعال کردن PLL باید بار دیگر این رجیستر را فراخوانی کرده و PLL را در حالت Use PLL output as system clock
قرار دهید تا PLL شروع به کار کند.
رجیستر COMMAND CODE = ۰XF0) set_pixel_data_interface)
با این رجیستر می توانید السیدی را در مدهای ۸ بیتی و ۹ بیتی و ۱۲ بیت و ۱۶ بیتی و ۱۸ بیتی و یا ۲۴ بیتی راه اندازی کنید
البته کدهای COMMAND ها همیشه در مد ۸ بیتی ارسال می شوند و تغییری در کامند ها ایجاد نمی شود
نکته: پایه های دیتایی که استفاده نمی شوند باید به زمین ssd1963 وصل شوند بنابراین پایه های استفاده نشده را به میکرو کنترلر وصل نکنید.
به عنوان مثال اگر دیتای b00000011& را در این رجیستر ذخیره کنیم در این صورت السیدی با مد ۱۶ بیتی راه اندازی شده است. و شما دیتا را با استفاده از ۱۶ پایه باید به ssd منتقل کنید
اگر شما این السیدی را با میکرو کنترلر های سرعت بالا مثل STM32F4XX بخواهید در مد هشت بیتی راه اندازی کنید تا پایه های کمتری اشغال شود در این صورت باید هر رنگی که دارید تبدیل به ۶ بیت کنید و در سه مرحله آن را ارسال کنید
برای مثال اگر فرمت رنگ شما ۱۶bit 565 باشد بهتر است بدانید که منظور از ۵۶۵ ، RGB هست یعنی با این فرمت ۵ بیت قرمز داریم ، ۶ بیت سبز و ۵ بیت ابی
خوب اگر به صورت ۸ بیتی بخواهیم اطلاعات را انتقال بدیم باید قرمز و ابی که ۵ بیتی هستند تبدیل به ۶ بیتی شوند ولی رنگ سبز خودش ۶ بیتی هست و نیازی نیست که تبدیل شود
یعنی ما باید فرمت ۱۶bit 565 را تبدیل به ۸bit 666 کنیم و در سه مرحله ارسال کنیم
همانطور که در جدول بالا می بینید در هنگام ارسال دیتای ۶ بیتی باید دیتا را از پین ۲ به بعد قرار دهید یعنی در میکرو های avr , Xmega دیتای ارسالی باید بر روی پین ۷ تا پین ۲ قرار بگیرند و چون رنگ های ما ۶ بیتی هستن ۲ بیت کم ارزش استفاده نمی شود پس به این موضوع دقت کنید تا رنگهای ارسالی شما درست نشان داده شوند.
اما شما برای تبدیل رنگهای ۱۶ بیتی یا ۲۴ بیتی به ۸ بیت دو راه دارید
راه اول که سرعت به مراتب بالاتری را دارد این است که شما رنگها را ابتدا تبدیل به رنگ های ۸bit 666 بکنید و در برنامه به صورت ثابت تعریف کنید و چون در هنگام ارسال رنگ به ssd نیازی به تبدیل رنگ نیست سرعت ارسال دیتا افزایش میابد اما این روش بزرگترین عیبی که دارد این است که شما نمی توانید یک عکس با فرمت ۱۶-bit را مستقیما در السیدی به نمایش بگذارید و بایستی ابتدا عکس را توسط نرم افزاری به فرمت ۸-bit 666 تبدیل کرده و سپس این عکس را در mmc یا flash خود میکرو ذخیره کنید و در نهایت بر روی السیدی نمایش دهید
راه دوم هم که راحتر هست ولی سرعت کم ، این است که شما تمامی رنگها را با فرمت ۱۶-bit 565 به صورت ثابت تعریف می کنید و قبل از اینکه رنگ را به ssd بفرستید باید یک تابع تعریف کنید تا این تابع رنگ ۱۶ بیتی را تبدیل به ۸ بیتی کند اگر سرعت میکروی شما به حد نیاز بالا باشد مشکل سرعت رو نخواهید داشت و تصاویری که ارسال می شوند بلافاصله در السیدی نمایش داده می شوند ولی اگر سرعت میکرو کم باشد توصیه می شود که یا دنبال میکروی با سرعت بالا بگردید و یا از مد ۱۶ بیتی برای ارسال دیتا استفاده کنید
بهترین حالت برای میکرو های avr , XMEGA استفاده از مد ۱۶ بیتی با فرمت ۵۶۵ می باشد که برای این خانواده از میکرو کنترلر ها بیشترین سرعت را دارد
در عکس زیر میکرو کنترلر avr در مد ۸ بیتی با فرمت ۶۶۶ و با کریستال ۸ مگا هرتز پیکره بندی شده است در اینجا ما از تابع تبدیل رنگ ۱۶ بیتی به فرمت ۸ بیتی ۶۶۶ استفاده کردیم و سعی شده است تا از کمترین دستورات تبدیل فرمت انجام بگیرید سرعت ارسال دیتا را مشاهده می کنید…!
اما برای تبدیل رنگ به فرمتهای گوناگون به صورت زیر عمل کنید
به عنوان مثال اگر رنگ ۱۶-bit 565 به صورت باینری نشان داده شود ۵ بیت سمت چپ RED ، ۶ بیت وسط GREEN و ۵ بیت سمت راست BLUE می باشد یعنی به صورت روبه رو bRRRRRGGGGGGBBBBB&
حال برای تبدیل ۵ بیت قرمز به ۶ بیت به صورت زیر عمل می کنیم
مقدار عدد قرمز * ۶۳
و حاصل هر چه شد تقسیم بر ۳۱
عدد ۶۳ دو به توان ۶ هست که می خواهیم عمق رنگ ما ۶ بیتی باشد
و عدد ۳۱ هم ۲ به توان ۵ هست که عمق رنگی که می خواهیم تبدیل کنیم ۵ بیت است
با مجموع سه عدد ۶ بیتی شما به عمق رنگ ۱۸ بیتی دست میابید
به این روش می توانید بقیه رنگها را هم به یکدیگر تبدیل کنید
برای رنگ ابی هم همین روش را تکرار کنید.
SC[15:8] : Start column number high byte (POR = 00000000)
SC[7:0] : Start column number low byte (POR = 00000000)
EC[15:8] : End column number high byte (POR = 00000000)
EC[7:0] : End column number low byte (POR = 00000000)
در اینجا ابتدا و انتهای Row یا پیکسلهای افقی را مشخص می کنیم برای مثال اگر السیدی مورد استفاده ما ۴۸۰ در ۲۷۲ باشد مقدار۰ را برای شروع و مقدار ۴۷۹ را برای نقطه پایان در این رجیستر ذخیره می کنیم
Parametr1 و parametr2 به ترتیب دیتای ارزشمند و کم ارش دیتای نقطه شروع ( X ) و parameter3 , parameter4 هم به ترتیب دیتای ارزشمند و کم ارزش نقطه انتهایی ( X ) هست
نکته:نقطه شروع نمی تواند بزرگتر از نقطه انتهایی باشد لذا نقطه شروع می تواند یا مساوی و یا کوچکتر از نقطه انتهایی باشد
Cloumn , Row :
رجیستر set_page_address ( آدرس: ۰X2B )
در اینجا ابتدا و انتهای Cloumn یا پیکسلهای عمودی را مشخص می کنیم برای مثال اگر السیدی مورد استفاده ما ۴۸۰ در ۲۷۲ باشد مقدار۰ را برای شروع و مقدار ۲۷۱ را برای نقطه پایان در این رجیستر ذخیره می کنیم
Parametr1 و parametr2 به ترتیب دیتای ارزشمند و کم ارش دیتای نقطه شروع ( Y ) و parameter3 , parameter4 هم به ترتیب دیتای ارزشمند و کم ارزش نقطه انتهایی ( Y ) هست
نکته:نقطه شروع نمی تواند بزرگتر از نقطه انتهایی باشد لذا نقطه شروع می تواند یا مساوی و یا کوچکتر از نقطه انتهایی باشد
در لحظه راه ندازی یا کانفیگ کردن السیدی ، رجیستر های ۰X2A و ۰X2B را به این صورت مقدار دهی کنید.
رجیستر set_lcd_mode ( آدرس: ۰XB0 )
در این رجیستر باید پارامتر های زیر به ترتیب تنظیم شوند:
۱-تنظیم نحوه ی نمایش رنگ در السیدی به دو صورت ۱۸ بیت یا ۲۴ بیت و همینطور اگر از نمایش رنگ ۱۸ بیت استفاده کنید باید تعین کنید که نوع نمایش ۱۸ بیت dithering باشد یا FRC که بهتره از ۱۸ بیت FRC استفاده کنید. برای مثال اگر عدد هگز ۸ را در این رجیستر ذخیره کنید نوع نمایش رنگ را بر روی ۱۸bit+FRC تنظیم کرده اید
توجه کنید که در این پارامتر به غیر از انتخاب نوع نمایش رنگ ، باید پلاریته کلاک های ذکر شده را هم تعیین کنید که بهتر است برای Pixel clock یا LSHIFT لبه ی Rising در نظر گرفته شود و بقیه موارد در پلاریته Fall قرار بگیرند.
در صورتی که نمایش رنگ ۲۴ بیتی فعال شود FRC و dithering بی معنی خواهند شد و اگر فعال باشند غیر فعال میشوند.
اما تکنولوژی ۱۸ بیت FRC چیست؟
ابتدا بهتر است اطلاعاتی در مورد السیدی های TFT داشته باشیم :
برای تولید پنل های TFT-LCD فناوری های متعدد مورد استفاده قرار میگیرند این فناوری ها شامل انواع ارزان قیمت تر TN تا پنل های گران قیمت و با کیفیت بالای S-IPS و S-PVA هستند بیشتر کاربران از این که LCD مورد استفاده آنها دقیقاً از چه فناوری استفاده می کند، هیچ اطلاعی ندارند. درحقیقت حتی بسیاری از کاربران حرفه ای نیز در این زمنیه اطلاعات چندانی ندارند. این مسئله بیشتر به این دلیل است که درجداول مشخصاتی که از طرف سازندگان منتشر میشوند، از نوع فناوری های به کار رفته سخنی به میان نمی آید بیشتر کاربران نیز صرفاً مانیتور خود را با توجه به اندازه و قیمت آن انتخاب می کنند.
البته قیمت همیشه یکی از مهمترین فاکتورها در زمینه خرید بوده، اما بهتراست کاربران با مزایا و معایب هریک از انواع فناوری های به کار رفته که چه محصولی بیشتر با نیازهایشان تناسب دارد، تصمیم بهتری بگیرند.
و طبق دیتاشیت السیدی “TFT4.3 ، این نوع السیدی ها از فناوری TN , TN6 استفاده می کند که می تواند تا ۱۶٫۷ میلیون رنگ را به نمایش بگذارد
توضیح مختصری در مورد پنل های ارزان قیمت TN ( فناوری TN):
پنلهای TN ارزان ترین نوع پنل برای تولید است. اما تصاویر خوب و با کیفیت بالایی تولید نمیکند. مانیتورهایی که از این نوع پنل استفاده میکنند بسیار در بازار کاربران عادی طرفدار دارد و فروش خوبی دارند. کاربران عادی از تصاویر تولید شده توسط این دسته از مانیتورها راضی هستند، همچنین قیمت بسیار خوبی دارند. به خاطر ارزان بودن اکثر مانیتورهای با سایز بزرگ (۲۰و ۲۲ اینچ به بالا) فعلا از این نوع پنلها ساخته میشوند. اما مزیت پنلهای TN زمان پاسخ گویی بسیار پایین آنهاست.
پنلهای TN 6بیتی (در هر کانال رنگی) هستند و توانایی تولید ۱۶.۷ ملیون رنگ تصاویر ۲۴ بیتی را به صورت واقعی ندارند. دلیل اینکه پانل های TN 6 بیتی هستند به خاطر این است که سازندگان برای این دسته از مانیتورها عموما از مبدلهای آنالوگ به دیجیتال ۶ بیتی
(A/D Converter) استفاده میکنند. با این روش هزینه تولید و همچنین زمان پاسخگویی این دسته از پنلها کاهش پیدا میکند. در این دسته از پنلها از روش هایی به نام Dithering و (Frame Rate Control (FRC برای شبیه سازی تصاویر ۸ بیتی استفاده میشود این تکنولوژیها Dithering و (FRC) دارای معایبی نیز هستند که اکثرا در سایههای تاریک و Black Levels خودنمایی میکند.
اخیرا Samsung و BenQ مدلهایی از پنلهای LCD با تکنولوژی TN معرفی کردهاند که از مبدلهای آنالوگ به دیجیتال ۸ بیتی استفاده میکنند.
TN Native Color: 18-bit = 6 bit (Per channel) = 262,144 colors
TN Optimized Color: 18-bit + FRC OR Dithering = 6 bit (Per channel) + FRC OR Dithering = 16.2 Million Colors
۲۴bit=8bit (Per Channel) = 16.7 Million Colors
۲-در پارامتر ۲ باید مد TFT را انتخاب کنید (عدد هگز ۰x00 را ارسال کنید)
۳ و ۴- در پارامتر های ۳ و ۴ باید رزولیشن افقی (Horizontal panel ) السیدی را وارد کنید که در اینجا چون ما از السیدی ۴۸۰ در ۲۷۲ استفاده ی کنیم از ۴۸۰ یکی کم کرده و عدد ۴۷۹ را در این دو بایت ذخیره می کنیم
۵ و ۶ – در پارامتر های ۵ و ۶ باید رزولیشن عمودی (Vertical panell) السیدی را وارد کنید از ۲۷۲ یکی کم کرده و عدد ۲۷۱ را در این دو بایت ذخیره می کنیم
۷-پارامتر هفتم مربوط به اینترفیس سریال هست که نوع نمایش رنگ را مشخص می کند ما السیدی را با اینترفیس ۸۰۸۰ موازی راه اندازی کردیم و ربطی به ما ندراد عدد هگز ۰۰ را در این بایت ذخیره کنید.
رجیستر set_lshift_freq(آدرس: ۰XE6)
Set the LSHIFT (pixel clock) frequency
مقدار فرکانس LSHIFT که تعیین کننده pixel clock می باشد را باید از فرمول زیر بدست اورده و در این رجیستر ثبت کنید
Pixcel Clock=PLL Frequency*(LCDC_FPR+1)/2020
Pixel clock frequency همان فرکانس رفرش یا اپدیت السیدی در یک ثانیه هست و باید ابتدا Pixel clock frequency را بدست آورده و در فورمول بالا قرار داده و سپس LCDC_FPR را محاسبه کنید و در رجیستر ذخیره کنید
انتخاب مقدار pixel clock frequency رابطه مستقیمی با فریم تصویر در ثانیه دارد
سرعت رفرش پیکسلها برای فریمها متفاوت است اگر میزان استاندارد فریمهای تصویر را در یک ثانیه برابر با ۳۰ فریم در نظر بگیریم به این معنی هست که ما در یک ثانیه باید کل صفحه السیدی را رفرش کنیم یا به نوعی تازه سازی کنیم این قسمت در نشان دادن عکس زیاد به چشم نمی اید ولی اگر میکرو شما سرعت کافی برای دیکد یک فایل ویدویی را داشته باشد باید ۳۰ بار در ثانیه تصاویر را به السیدی ارسال کند
اگر pixel clock frequency به طور دقیق تنظیم نشود رفرش السیدی در یک ثانیه کمتر از ۳۰ بار خواهد بود و شما با چشمک زدن تصاویر مواجه خواهید شد اگر سرعت رفرش السیدی بیشتر از سرعت ارسال عکس توسط میکرو باشد در این صورت مشکلی ایجاد نخواهد شد…
طبق دیتاشیت “LCD 4.3 مقدار مینیمم فریمی که پیشنهاد داده شده عدد ۵۹٫۹۴ فریم در ثانیه هست که ما همون ۶۰ فریم در نظر می گیریم ، توجه کنید که این فریمها مینیمم و ماکزیممی دارند که برای هر السیدی متفاوت است و نباید این مقادیر را نادیده بگیرید چرا که در عمل مشکلاتی به وجود خواهد آمد
برای بدست آوردن pixel clock frequency طبق دیتاشیت می توانید از فرمول زیر استفاده کنید
P CLK= FV * VSYNC Period (tv) * HSYNC Period (th)
مقادیر VSYNC و HSYNC به رزولیشن السیدی بر می گردد ، pixel clock frecuency در هر کلاک تنها یک پیکسل می تواند بخواند یا بنویسد پس اگر رزولیشن السیدی ما ۴۸۰ در ۲۷۲ پیکسل باشد تعداد کل پیکسل ها برابر است با پیکسل های افقی ضربدر پیکسل های عمودی
مطمئنن برای تازه سازی پیکسل های افقی (۴۸۰ piexl ) نیاز به ۴۸۰ کلاک داریم و همینطور برای پیکسل های عمودی هم نیاز به ۲۷۲ کلاک داریم
اما بهترین مقادیر VSYNC Periodو HSYNC Period ، برای السیدی ۴٫۳ اینچ به ترتیب ۵۲۵ و ۲۸۶ ذکر شده است که ما طبق گفته دیتاشیت از این اعداد استفاده می کنیم و Pixel clock frequency را محاسبه می کنیم
اما توجه کنید که در صورت استفاده از اعداد پیشنهادی دیتاشیت باید تمام مقادیر timing را طبق دیتاشیت تنظیم کنید
Time Horizontal = th = thb + thd + thfp
thfp = thf + thp :نکته
محاسبه th –> th = 2+480+43=525
Time Vertical = tv = tvb + tvd + tvfp
محاسبه tv –> th= 2+272+2+10=286
P CLK= FV * TV * TH
DOTCLK frequency=pixel clock frequency = 60(FPS) * 286 * 525
DOTCLK Frequency = pixel clock Frequncy = 9009000HZ ~ 9 MHZ
بعد از بدست اوردن P CLK حال می توانیم LCDC_FPR را محاسبه کنیم :
نکته:نحوه تنظیم فرکانس PLL قبلا توضیح داده شده است
عدد ۹۴۳۷۲ به هگز می شود ۱۷۰A4 ، حال می توانید این عدد را در این رجیستر ذخیره کنید.
نکته: فورمول LCD_FPR برای رابط سریال متفاوت هست در اینجا رابط سریال توضیح داده نمیشود و تنها رابط موازی ۸ بیتی تا ۲۴ بیتی توضیح داده میشود برای اطلاعات بیشتر به دیتاشیت SSD1963 مراجعه کنید.
رجیستر set_address_mode (آدرس: ۰X36)
با این رجیستر نحوه ارسال دیتا از بافر به السیدی تعیین میشود اگر مقدار باینری b00000000& را در این رجیستر ذخیره کنید با توجه به بیت های ۵ و ۶ و ۷ که صفر هستند شما نحوه ی خواندن دیتا را طبق جدول زیر از ادرس صفر بافر شروع می کنید و در ادرس ۰,۰ ال سیدی یعنی از بالا سمت چپ دیتا را بر روی السیدی می نویسید
میکرو کنترلر یا پروسسور دیتا را به ssd1963 ارسال می کند و قبل از ارسال به السیدی در بافر SSD1963 ذخیره میشود
و بعد به السیدی منتقل میشود اما هنگام انتقال به السیدی این رجیستر نحوه ارسال دیتا را تعیین می کند
ابتدا لازم است که جاروب Horizontal و Vertical را بدانید
جاروب Horizontal :
در جاروب Horizontal دیتا از X0 , Y0 نوشته می شود و وقتی به اخرین پیکسل X یعنی X799 رسید به X0 بر می گردد و یکی به Y0 اضافه می کند و از Y1 X0 , دوباره مراحل اولیه تکرار میشود تا به اخرین پیکسل یعنی X799 و Y479 برسد.
جاروب Vertical :
در جاروب Vertical دیتا از X0 , Y0 نوشته می شود و وقتی به اخرین پیکسل Y یعنی Y479 رسید به Y0 بر می گردد و یکی به X0 اضافه می کند و از X1 Y0 , دوباره مراحل اولیه تکرار میشود تا به اخرین پیکسل یعنی X799 و Y479 برسد.
حال با فهمیدن Horizontal و Vertical می توانید توسط بیت ۵ تعیین کنید که نمایش به صورت افقی باشد یا عمودی ، اگر بیت پنج ، صفر باشد یعنی از حالت معمولی استفاده می کنید و نمایش اطلاعات به صورت افقی خواهد بود و اگر بیت پنجم یکی باشد یعنی نمایش به صورت عمودی خواهد بود
به عنوان مثال عکس ۱۶ در ۱۶ پیکسل را در نظر داشته باشید (هر مربع را یک پیکسل در نظر بگیرید):
این عکس را در زاویه های مختلف السیدی بررسی می کنیم ، عکس بالا یک عکس رنگی ۱۶ در ۱۶ هست یعنی ۱۶ پیکسل در ۱۶ پیکسل که هر پیکسل یک دیتای ۱۶ بیتی دارد در عکس زیر ما عکس را به بافر انتقال داده ایم ( کد ۱۶ بیتی هر پیکسل را به بافر ارسال می کنیم )
همانطور که می بینید ما دیتای عکس را در بافر ذخیره کردیم توجه داشته باشید برای درک بهتر علاوه بر کد هر رنگ ما رنگ ان را در اینجا اوردیم که شما نحوه ی ذخیره یک عکس در حالت عادی در بافر را مشاهده کنید
خوب طبق جدول بالا می خواهیم این عکس را به همان صورتی که در بافر ذخیره شده است در السیدی به نمایش بگذاریم
بنابراین رجیستر ۰x36 رو با عدد باینری b00000000& مقدار دهی می کنیم و عکس به صورت نرمال نشان داده می شود
می بینید که ما رجیستر ۰x36 را با H00& مقدار دهی کردیم بنابراین بیت پنجم هم صفر هست و جاروب از نوع Horizontal ( افقی ) هست ، و دیتا از خانه X0 , Y0 بر روی السیدی نوشته میشود ، اما اگر بخواهیم که دیتا از خانه X0,Y479 نوشته شود باید بیت هفتم یک شود پس اگر ما این رجیستر را با b10000000& مقدار دهی کنیم
دیتا از X0 , Y479 بر روی السیدی نوشته میشود به صورت زیر:
برای نمایش دیتا از موقعیت X799 , Y0 باید بیت ششم را برابر یک کنید یعنی جاروب از X799 به سمت X0 خواهد بود و بعد از ان یک عدد به Y اضافه می شود و سپس دوباره دیتا از X799 به سمت X0 نوشته می شود برای جاروب دیتا از موقعیت مورد نظر رجیستر را با عدد b01000000& مقدار دهی می کنیم ( توجه کنید جاروب هنوزاز نوع Horizontal می باشد)
و برای شروع جاروب دیتا از ادرس X799,Y479 باید هر دو بیت شش و هفت برابر یک شوند در این صورت جاروب از X799 به سمت X0 خواهد بود و بعد از ان یکی از Y479 کاهش یافته و دوباره از X0 جاروب صورت می گیرد (توجه کنید جاروب هنوزاز نوع Horizontal می باشد)
خوب اگر این عکس رنگی را با حالات بالا مقایسه کنید می بینید که تصویر در زاویه مختلف دوران یافته است
توجه کنید که حالات بالا جاروب از نوع Horizontal بود یعنی یا از مختصات اخر X شروع میشد و به اولش می رسید و یا از اول مختصات X شروع میشد و به اخرش میرسید همه اینها در دیتاشیت هست و برای اطلاعات بیشتر به دیتاشیت ssd1963 مراجعه کنید
حال دو عکس در دو حالت با جاروب Horizontal را مشاهده می کنید
۰X36 = (&b00000000)
۰X36 = (&b10000000)
اما اگر بیت پنجم یک باشد به این معنی هست که شما نوع جاروب Vertical را انتخاب کرده اید حالات مختلف نمایش تصویر را در حالت Vertical بررسی می کنیم
اگر بیت پنجم یک باشد و هر دو بیت ۵و۶ صفر باشند در این صورت جاروب از Y0 به سمت Y479 خواهد بود و بعد از آن یک واحد به X اضافه می گردد و دوباره از Y0 جاروب صورت می گیرد
در حالت Vertical اگر بیت هفتم یک باشد جاروب از Y0,X799 صورت خواهد گرفت به صورت زیر:
و اگر بیت ششم یک باشد و بیت هفتم صفر باشد تصویر به صورت زیر نمایش داده می شود ( جاروب از Y479 به سمت Y0 )
و در نهایت اگر هر دو بیت شش و هفت یک باشند جاروب از Y479 , X799 صورت خواهد گرفت
(۰X36=&b01100000) نمایش عکس به صورت Vertical
بیت سوم این رجیستر تعیین نوع رنگ بندی است اگر رنگ ها در السیدی درست نمایش داده نشوند باید این بیت را یک کنید
بیت های A0 و A1 هم به ترتیب Flip Vertical و Flip Horizontal می باشند ( اگر یک تصویر را مقابل اینه بگیرید و مشاهده کنید آن تصویر در واقع Flip شده تصویر اصلی هست)
رجیستر set_hori_period (آدرس :۰XB4)
در این رجیستر HT10 to HT0) Parameter 1,2) مربوط به (Horizontal total period (th هستند یعنی شما باید از مقدار یک واحد کم کرده و در این دو پارامتر ذخیره کنید ، ما قبلا در بخش محاسبه pixel clock frequency در رابطه با (Horizontal total period (th بحث کردیم
گفتیم که به دیتاشیت السیدی مراجعه کنید و هر عددی که خود دیتاشیت پیشنهاد داده را باید یک واحد کم کنید و در دو پارامتر یک و دو ذخیره کنید
برای السیدی ۴٫۳ اینچ ( ۲۷۲ در ۴۸۰ ) این عدد برابر با ۵۲۵ هست که یک واحد کم می کنیم و عدد ۵۲۴ را به هگز تبدیل کرده و در پارامتر ۱و۲ ذخیره می کنیم
عدد ۵۲۴ به هگز برابر است با ۰X020C یا H020C& ، بنابراین از سمت راست دو عدد را جدا می کنیم و در پارامتر دو می نویسم و دو عدد باقیمانده را در پارامتر یک ذخیره می کنیم.
در Parameter 3,4 باید مقدار HPS که مخفف عبارت Horizontal Sync Pulse Start Position می باشد را در این دو بایت ذخیره کنیم
فرمول Horizontal Sync Pulse Start Position برابر است با:
HPS = Horizontal Sync Pulse Start Position = Horizontal Pulse Width (thp) + Horizontal Back Porch (thb)
در فورمول بالا شما باید مقدار (Horizontal Pulse Width(thp و (Horizontal Back Porch(thb را بدانید تا بتوانید مقدار HPS را محاسبه کنید.
معمولا مقادیر Horizontal Pulse Width و Horizontal Back Porch در دیتاشیت السیدی ها نوشته می شود برای السیدی ۴٫۳ اینچ ( ۲۷۲ در ۴۸۰ ) مقادیر به صورت زیر است :
Horizontal Pulse Width(thp) = 41 , Horizontal Back Porch(thb) = 2 → HPS = 41 + 2 = 43
عدد ۴۳ به هگز می شود ۲B حال می توانید این عدد را در پارامتر ۴و۳ ذخیره کنید.
نکته: توجه کنید که دیتاشیت السیدی مورد نظر خود را پیدا کنید چرا که السیدی های زیادی در سایز ۴٫۳ اینچ و ۷ اینچ هستند که یکی با دیگری متفاوت بوده و دیتاشیت مخصوص خود را دارد لذا اگر بخواهید که تنظیمات دقیق انجام گیرد ، هنگام خرید السیدی اگر مدل آن درج نشده باشد ، حتما از فروشنده دیتاشیت قطعه را نیز دریافت کنید.
Parameter 5 مربوط به مقدار Horizontal Pulse Width هست که شما باید از مقدار Horizontal Pulse Width یک واحد کم کرده و در این رجیستر ذخیره کنید
Horizontal Sync Pulse Width = 41 – ۱ = ۴۰
عدد ۴۰ به هگز می شود ۰X28 بنابراین این مقدار در این رجیستر ذخیره میشود
در Parameter 6,7 هم باید LPS: Horizontal Display Period Start Position را مقدار دهی کنید در واقع شما در این پارامتر تعیین می کنید که پالس Horizontal از چندمین پالس pixel clock شروع به نوسان کند
بهتر است این دو پارامتر همیشه با عدد هگز ۰X0000 ذخیره شوند.
Parameter 8 هم مثل پارامتر هفت و هشت هست با این تفاوت که این پارامتر برای رابط TFT SERIAL هست و در رابط TFT Parallel کاربردی ندارد توجه داشته باشید که ما در اینجا رابط TFT Parallel را بررسی می کنم
مقدار هگز ۰۰ را هم در این پارامتر ذخیره کنید.
رجیستر set_Vert_period (آدرس :۰XB6)
در این رجیستر HT10…HT0) Parameter 1,2) مربوط به (Vertical total period (tv هستند یعنی شما باید از مقدار
(Vertical total period (tv یک واحد کم کرده و در این دو پارامتر ذخیره کنید ، ما قبلا در بخش محاسبه pixel clock frequency در رابطه با (Vertical total period (tv بحث کردیم
گفتیم که به دیتاشیت السیدی مراجعه کنید و هر عددی که خود دیتاشیت پیشنهاد داده را باید یک واحد کم کنید و در دو پارامتر یک و دو ذخیره کنید
برای السیدی ۴٫۳ اینچ ( ۲۷۲ در ۴۸۰ ) این عدد برابر با ۲۸۶ هست که یک واحد کم می کنیم وعدد ۲۸۵ را به هگز تبدیل کرده و در پارامتر ۱و۲ ذخیره می کنیم
عدد ۲۸۵ به هگز برابر است با ۰X011D یا H011D& ، بنابراین از سمت راست دو عدد را جدا می کنیم و در پارامتر دو می نویسم و دو عدد باقیمانده را در پارامتر یک ذخیره می کنیم.
در Parameter 3,4 باید مقدار VPS که مخفف عبارت Vertical Sync Pulse Start Position می باشد را در این دو بایت ذخیره کنیم
فرمول Vertical Sync Pulse Start Position برابر است با:
VPS = Vertical Sync Pulse Start Position = Vertical Pulse Width (tvp) + Vertical Back Porch (tvb)
در فورمول بالا شما باید مقدار (Vertical Pulse Width(tvp و (Vertical Back Porch(tvb را بدانید تا بتوانید مقدار VPS را محاسبه کنید
معمولا مقادیر Vertical Pulse Width و Vertical Back Porch در دیتاشیت السیدی ها نوشته می شود برای السیدی ۴٫۳ اینچ ( ۲۷۲ در ۴۸۰ ) مقادیر به صورت زیر است :
Vertical Pulse Width(tvp) = 10 , Vertical Back Porch(tvb) = 2 → VPS = 10 + 2 = 12
عدد ۱۲ به هگز می شود ۰X0C حال می توانید این عدد را در پارامتر۴ و۳ ذخیره کنید.
نکته: توجه کنید که دیتاشیت السیدی مورد نظر خود را پیدا کنید چرا که السیدی های زیادی در سایز ۴٫۳ اینچ و ۷ اینچ هستند که یکی با دیگری متفاوت بوده و دیتاشیت مخصوص خود را دارد لذا اگر بخواهید که تنظیمات دقیق انجام گیرد ، هنگام خرید السیدی اگر مدل آن درج نشده باشد ، حتما از فروشنده دیتاشیت قطعه را نیز دریافت کنید.
Parameter 5 مربوط به مقدار (Vertical Pulse Width(tvp هست که شما باید از مقدار Horizontal Pulse Width یک واحد کم کرده و در این رجیستر ذخیره کنید
Vertical Sync Pulse Width(tvp) = 10 – ۱ = ۹
عدد ۹ به هگز می شود ۰X09 بنابراین این مقدار در این رجیستر ذخیره میشود
در Parameter 6,7 هم باید FPS: Vertical Display Period Start Position را مقدار دهی کنید در واقع شما در این پارامتر تعیین می کنید که پالس Horizontal از چندمین پالس pixel clock شروع به نوسان کند
بهتر است این دو پارامتر همیشه با عدد هگز ۰x00 ذخیره شوند.
Parameter 8 هم مثل پارامتر هفت و هشت هست با این تفاوت که این پارامتر برای رابط TFT SERIAL هست و در رابط TFT Parallel کاربردی ندارد توجه داشته باشید که ما در اینجا رابط TFT Parallel را بررسی می کنم
مقدار هگز ۰X00 را هم در این پارامتر ذخیره کنید.
رجیستر set_pwm_conf ( آدرس :۰XBE )
پایه های gpio :
Ssd1963 چهار پایه gpio دارد (GPIO3 تا GPIO0 ) که با استفاده از این پایه ها می توان السیدی را در مد سرسال spi و یا i2c راه اندازی کرد ولی بسته به ماژول اماده های السیدی شاید پایه های gpio در دسترس نباشند و ماژولی که تهیه کرده اید تنها از رابط موازی پشتیبانی کند
ماژول مورد استفاده ما تنها از رابط موازی پشتیبانی می کند
و همینطور در حالت ارتباط موازی از پایه GPIO0 برای حالت SLEEP یا به خواب بردن السیدی استفاده میشود
چون از GPIO0 برای حالت SLEEP و EXIT SLEEP استفاده میشود لذا باید رجیستر های مربوط به GPIO را تنظیم کنید
رجیستر set_gpio_value ( آدرس : ۰XBA )
مقدار GPIO0 تا GPIO3 را در حالت OUTPUT 1 قرار بدهید یعنی مقدار هگز ۰X0F را در این رجیستر ذخیره کنید
رجیستر set_gpio_conf ( آدرس : ۰XB8 )
در این رجیستر مقدار parameter1 را برابر با کد هگز ۰X0F قرار دهید ، در این حالت gpio0 ,1,2,3 همه به عنوان خروجی پیکره بندی شده اند و همینطور در حالت controlled by host تنظیم شده اند البته اگر بقیه را درست تنظیم نکنید مشکلی نیست ولی حتما GPIO0 را در حالت خروجی قرار دهید
در Parameter2 مقدار B0 را در حالت یک قرار دهید یعنی GPIO0 را بر روی حالت نرمال قرار دهید
نکته در صورتی که بخواهید از مد سریال برای راه اندازی السیدی استفاده کنید باید رجستر های set_lcd_gen0 و get_gpio3_rop را تنظیم کنید.
رجیستر set_display_on ( آدرس : ۰X29 )
در هنگام پیکره بندی با این رجیستر می توانید صفحه نمایش را فعال کنید توجه کنید که فعال کردن صفحه نمایش با بک لایت السیدی متفاوت است
اگر صفحه نمایش توسط gpio0 یا این رجیستر یا رجیستر های حالت خواب غیر فعال شود سیگنالهای السیدی و پالس های درونی غیر فعال شده و هیچ تصویری یا نوشته ای در السیدی نمایش داده نمی شود و این کار باعث کم شدن مصرف السیدی خواهد شد
به خواب بردن السیدی کاربرد های زیادی دارد ، به عنوان مثال اگر شما دستگاه دیجیتالی با این نوع السیدی ها طراحی کنید کاربر تنها در بعضی مواقع نیاز به مشاهده اطلاعات نیاز خواهد داشت و ما برای صرفه جویی در توان و همینطور میکرو می توانیم السیدی را به حالت خواب ببریم و بک لایت را خاموش کنیم
رجیستر write_memory_start ( آدرس : ۰X2C )
برای اینکه دیتای ارسالی در بافر ذخیره شود باید قبل از ارسال دیتا رجیستر write_memory_start را انتخاب کنید و سپس دیتا را پشت سرهم و تا اخرین بایت بفرستید در صورتی که قبل از ارسال دیتا این رجیستر انتخاب نشود دیتا در بافر ذخیره نشده و در نتیجه در السیدی نمایش داده نخواهد شد.
رجیستر enter_sleep_mode ( آدرس : ۰X10 )
اگر این رجیستر را انتخاب کنید السیدی به حالت Sleep میرود و تمام سیگنال های السیدی از جمله سیگنال Horizontal , Vertical غیر فعال میشوند اما PLL همچنان به کار خود ادامه میدهد این رجیستر السیدی را به صورت نرمال به حالت خواب میرود اما برای به خواب بردن عمیق باید PLL را نیز غیر فعال کنید برای همین بعد از حالت خواب باید رجیستر set_deep_sleep را انتخاب کنید با انتخاب این رجیستر PLL غیر فعال می شود
حال نوبت به خاموش کردن بک لایت السیدی می رسد
در صورت استفاده از ماژول یه پایه PWM هست که توسط این پایه در دو حالت میشه بک لایت السیدی رو کنترل کرد یکی از PWM خود ssd1963 که خودش پالس لازم را برای کنترل بک لایت السیدی فراهم می کند و راه دوم هم وصل کردن پایه PWM به یکی از پین های میکرو و کنترل توسط میکرو ، در این صورت اگر به پایه PWM ولتاژ ۳٫۳ ولت دهید بک لایت روشن می شود و اگر ولتاژ صفر ولت دهید بک لایت خاموش می شود.
بهتر است از حالت اول استفاده کنید چون در این صورت خود SSD1963 پالس لازم را برای PWM تولید کرده و شما نور بک لایت را بین ۰ تا ۲۵۵ تعیین می کنید البته بهتر است برای کاهش توان نور بک لایت را بین ۰ تا ۲۰۰ قرار دهید.
نکته:در این ماژول برای کنترل بک لایت السیدی از درایور MP3202 استفاده شده است ، لذا شما اگر پایه ۴ این ای سی را به ولتاژ ۳٫۳ ولت وصل کنید بک لایت السیدی روشن می شود و اگر به زمین وصل کنید بلایت خاموش میشود ماژول السیدی که می خرید شاید در ابتدا پایه PWM ای سی SSD1963 به پایه چهار MP3202 وصل نشده باشد و پایه چهار MP3202 مستقیما با یه مقاومت به VDD وصل شود که در این صورت امکان خاموش کردن بک لایت توسط میکرو وجود ندارد ، برای رفع این مشکل کافی است مقاومت R3 را از مدار خارج کنید و دو عدد مقاومت یک کیلو ، در محل های R5 , R1 لحیم کنید در این صورت امکان کنترل بک لایت توسط میکرو و SSD فراهم می شود (البته توجه داشته باشید که در اینجا از ماژول ۴٫۳ اینچ فروشگاه کویر الکترونیک استفاده شده است و این توضیحات بک لایت ، تنها روی این ماژول اعتبار دارد پس شما برای فهمیدن جزئیات ماژول های دیگر باید دیتاشیت ماژول را از فروشنده دریافت کنید.)
خوب با فرض اینکه پایه PWM ای سی SSD1963 به میکرو وصل شده حال می توانیم به رجیستر های set_pwm_conf و set_dbc_conf رفته و این رجیستر ها را تنظیم کنیم
در رجیستر set_pwm_conf مقدار فرکانس pwm از فرمول زیر بدست خواهد آمد بهتر است فرکانس pwm بین ۷۰۰ تا ۳۰۰۰ تنظیم شود لذا شما باید مقدار PWMF را در پارامتر ۱ ذخیره کنید برای مثال اگر مقدار PWMF را صفر در نظر بگیرید اگر فرکانس PLL 100 مگا هرتز باشد مقدار PWM signal frequency برابر با ۱۵۲۵ میشود.
PWM signal frequency = PLL clock / (256 * PWMF[7:0]+1) / 256
در پارامتر دوم اگر مقدار صفر ذخیره شود نور بک لایت خاموش می شود و اگر مقدار ۱۲۸ ذخیره شود نور بک لایت به مقدار نصف روشن می شود و اگر مقدار ۲۵۵ ذخیره شود بک لایت به طور کامل روشن می شود
در پارامتر سوم مقدار C0 را برابر با یک کنید با یک کردن C0 شما PWM را فعال کرده اید و برای اینکه از PWM خود SSD برای کنترل بک لایت استفاده کنید باید مقدار C0 را بر روی صفر قرار دهید یعنی PWM controlled by host را انختاب کنید تا PWM توسط SSD1963 کنترل شود
مقدار بقیه پارامتر ها را هم بر روی صفر قرار دهید و همچنین به رجیستر set_dbc_conf رفته و مقدار پارامتر یک را صفر کنید
سخن پایانی: تا بدینجا رجیستر های مهم برای پیکره بندی السیدی با درایور ssd1963 مطرح گردید که با رعایت نکات بالا با هر میکرو کنترلری می توانید السیدی های ۴٫۳ اینچ و ۷ اینچ نهایتا تا رزولوشن ۸۰۰X400 را راه اندازی کنید
مطالب بالا ممکن است نواقصی داشته باشند لذا در صورت مشاهده حتما از طریق نظرات اعلام بفرمایید تا اصلاح گردند.
تهیه و تنظیم : تیم MCULIBRARY
توضیح ندادید برای ارسال دیتا یا کامند پایه های کنترلی باید تو چه وضعیتی قرار بگیرن
دوست عزیز
اگر فرض کنیم که شما از رابط ۸۰۸۰ موازی به صورت ۱۶ بیتی استفاده می کنید
در این صورت برای ارسال کامند و دسترسی به رجیستر ها به صورت زیر عمل کنید
ابتدا مقدار کامند یا دستور را در بیت صفر تا هفت قرار دهید (بیت های هشت تا پانزده را برابر با صفر قرار دهید)
پایه rs را برابر با صفر قرار دهید (با صفر کردن rs می توانید مد ارسال را بروی کامند تعیین کنید و با یک کردن آن می توانید مد ارسال را بر روی دیتا تعییت کنید)
سپس برای ارسال کامند یک بار wr را صفر یک کنید (کامند فرستاده میشود)
در صورتی که می خواهید دیتا ارسال کنید دیتا را در بیت صفر تا پانزده قرار دهید سپس پایه rs را بر روی یک قرار دهید
با یکبار صفر و یک کردن پایه wr ، دیتا نیز فرستاده می شود.
سلام بزرگوار ممنون از مطلب مفیدتون.
لطفاً بحث نحوه ارتباط سریال در مورد این درایور توضیح بدید.
تو دیتا شیت گفته پایه های GPIO را میتوان بصورت spi و ... شبیه سازی کرد ،ولی جزئیات اشاره نکرده.
سلام
دوست عزیز می توانید از لینک زیر کدهای راه اندازی spi را استخراج کنید در این لینک تابع های راه اندازی spi هم موجود هست
مشاهده لینک
سلام
تعدادیی درایور با همین ssd1963ql9 برای نمایشگر ۷ اینچ مونتاژ کردیم و بخوبی جواب گرفتیم اما در بردی هم به اشکالی خوردیم که تصویر از پایین به بالا وهمزمان معکوس (در مقابل اینه بگذاریم درست دیده می شود) نمایش داده می شود این تصویر Reverse شده با تغییر وضعیت کدام پین ssd حل می شود؟
سلام
دوست عزیز در این مورد متاسفانه اطلاعی ندرام
اگر از دیتاشیت درایور چیزی دستگیرتون نشد مشکل را یه بار به انگلیسی جستجو کنید شاید به جواب برسید...