تحكم LCD F-51543NFU-LW-ADN / PWB51543C-2-V0 (من مكتبة الشريط)



مرحبا مرة أخرى ، هبر! بعد ترجمة المقالة المتعلقة بإدارة وحدة شاشة LCD باستخدام برنامج تشغيل ، ولكن بدون وجود ذاكرة الوصول العشوائي للفيديو الخاصة بي ، قررت ترجمة منشور آخر حول نفس الموضوع. هنا الوحدة النمطية أبسط بالفعل ، أحادية اللون ، ولكن "لإحياء" أنها ليست أقل إثارة للاهتمام.

تحكم LCD مع سائق ، ولكن بدون تحكم


يتم عرض الشاشة التي سيعمل الكاتب على استخدامها من مكتبة أشرطة قديمة. لم تنجو وحدة التحكم ، لكن البحث عن أي شيء يتعلق بـ "263645-001" أظهر وجود FPGA. يُعتقد أنه يتحكم مباشرة في وحدات LCD هذه من Arduino ، إلخ. مستحيل ، أنت بحاجة إلى رابط وسيط - وحدة تحكم سلسلة SEDxxxxx ، التي ليست "سهلة" مع اللوح ، ولها مدخلات أكثر من الوحدة النمطية نفسها. لكن هذا ليس كذلك. فيما يلي أربعة مشاريع مماثلة:

على ATmega8515
على ذلك
في الموافقة المسبقة عن علم
على ESP32

وبعضها يتحكم عمومًا في شاشات AVR VGA ذات 8 بت ...

بشكل عام ، نجح المؤلف ، البرنامج موجود بموجب ترخيص MIT هنا .

لا تزال الصورة


للتأكد من أن كل شيء يعمل ، يجب أن تحاول أولاً إخراج صورة نقطية أحادية بت من ذاكرة الفلاش في المتحكم الدقيق. للحصول على جهد سالب ، تم أخذ ثلاثة "كرون" ، تم تطبيق الجهد من المقسم على طرف V0 ، حيث تم استخدام مقاوم توليف. وهنا على الشاشة هي لينا:



لا يزال المؤلف لا يستطيع أن يفهم كيف تمكن من قلب الصورة (انظر إلى أي جانب الكابل). في أي حال ، هناك هذا المثال على صفحة المشروع على جيثب.

وضع النص


لكن ذاكرة الفيديو ROM ليست ذات فائدة تذكر ، ولا توجد 9600 بايت لذاكرة الوصول العشوائي للفيديو في Arduino. يأتي وضع النص في عملية الإنقاذ ، حيث يكون ROM لمولد الأحرف وذاكرة الوصول العشوائي المدمجة للفيديو أصغر من ذاكرة الفيديو في وضع الرسوم. يمكن أنصار جمهورية كازاخستان و "المتخصص" كسر الرماح إلى ما لا نهاية في هذا الموضوع.



مثال قصير في لغة التجميع AVR:

... lpm r24, Z ;---------- (CL2 rising edge) out %[data_port], r24 ld r30, X+ swap r24; (CL2 rising edge) out %[data_port], r24 lpm r24, Z ;---------- (CL2 rising edge) out %[data_port], r24 ... 

الأجهزة المطلوبة




بالنسبة لوحدة F-51543NFU-LW-ADN / PWB51543C-2-V0 ، طبق المؤلف:

اردوينو على AVR مع تردد على مدار الساعة من 16 ميغاهيرتز (تم اختباره على Uno ، ليوناردو واستنساخ مماثل ل ProMicro).

مصدر الجهد السلبي. بالنسبة للمؤلف ، هذا محول DC-DC غير مستقر A0524S-1W مع عزل المدخلات والمخرجات. تعد محولات MC34063 مناسبة أيضًا (من السهل جدًا العثور على هذه الشريحة - فقط قم بتفكيك أرخص شحن لشحن USB) أو MAX749. الاستقرار غير مطلوب ، ومجموعة الجهد المسموح به في هذا الإدخال للوحدة المستخدمة هنا واسع جدًا. القيمة الاسمية هي ناقص 24 فولت ، والحد الأقصى هو ناقص 30 نسبة إلى السلك المشترك و 35 بين Vdd و Vee. الاستهلاك الحالي هو 6 مللي أمبير.

اثنين من الترانزستورات M- قناة N مع التحكم في مستوى المنطق. استخدم المؤلف IRL530n ، المخزون ، بالطبع ، كبير ، لكنه بالتأكيد لن يحترق. يتحكم أحد الترانزستور في الإضاءة الخلفية ، والآخر مصدر جهد سالب.

250 kΩ تقليم المقاوم لتزويد الجهد لإدخال V0. اضبط بحيث -16.8 فولت عند درجة حرارة +25 درجة مئوية على جهة الاتصال المتحركة. هذا من ورقة البيانات ، وبالطبع ، هذه الدقة ليست مطلوبة.

العديد من المقاومات 10 كيلو لسحب أسفل.

تخطيط والصداري.

ماذا ستفعل الان؟ ساعة QR؟ اسأل kote:



تقدم Kote تنفيذ محاكاة لبعض شاشات الكريستال السائل الشائعة مع وحدة تحكم. بحيث يمكن توصيل "تفكير" آخر يعمل مع الشاشة على HD44780 ، كبير فقط ، بهذا Arduino.

الخط - أيضا في ذاكرة الوصول العشوائي


نأخذ مثالًا على EGA و VGA - هناك ، عند العمل في وضع النص ، تم ذلك تمامًا. هنا فقط كان هناك 64 حرفًا في المجموع ، ولكن على الأقل وصل كل شيء إلى ذاكرة الوصول العشوائي ، على عكس وضع الرسوم. صحيح أن الدورة الرئيسية للأحداث قد تباطأت ، ولكن يمكنك تجربة رسومات التجانب:



وضع الرسم والنغمة


في Arduino على AVR لا يوجد الكثير من ذاكرة الوصول العشوائي ، وهذه هي النقطة. حتى في ميجا. 320 × 240 حتى مع بت واحد لكل بكسل - إنه بالفعل 9600 بايت. أربعة فقط halftones سوف تتطلب ضعف. مع ذاكرة الوصول العشوائي الخارجية ، على سبيل المثال ، 23LC512 في وضع SQI ، يمكنك محاولة تنفيذ شيء مشابه ل DMA ، ولكن من الأسهل والأكثر ربحًا إعادة صنع كل شيء على ESP32 ، حيث يوجد ذاكرة RAM ثابتة و DMA أسهل.

إذا كنت ترغب فقط في توصيل مثل هذا العرض بجهاز كمبيوتر عبر USB ، فيمكنك محاولة استخدام ATmega32u4 لهذا - سيكون هناك موارد كافية حتى لو كانت درجات السطوع (باستخدام FRC ، ما هو موصوف في الترجمة السابقة). ولكن ليس مع "ميجا" المستخدمة كمحول واجهة ، ولكن مع جهاز كمبيوتر يقوم بنفسه بمسح شاشات الكريستال السائل على الطاير بسرعة 5.4 ميغابت في الثانية.

عندما كانت الوحدة لا تزال موجودة في مكتبة الشريط ، كان هناك واجهة المستخدم الرسومية وتدرجات السطوع - كل شيء كان هناك.

التحديثات ستكون. في هذه الأثناء ...



وهذه ليست مونتاج الصور ، ولكن نتيجة للسيطرة من جهاز الكمبيوتر. وسوف ننتقل من Hackaday.io إلى GitHub - لا يزال هناك الكثير من الأشياء المثيرة للاهتمام في README.md.

إشارات للسيطرة على هذه الوحدات


FLM - علامة الخط الأول - علامة الخط الأول ، يمكن أن تسمى أيضًا FRAME ، VSYNC ، إلخ.
CL1 - صف مزلاج النبض - كتابة سلسلة النبض ، ويمكن أيضا أن يسمى. LOAD ، HSYNC ، إلخ.
CL2 - Pixel shift clock - نبض تغيير البكسل ، يمكن أيضًا استدعاء. CP (تغيير البكسل) ، إلخ.
M - إشارة بالتناوب ، بسبب التحكم في البيكسلات بواسطة الجهد المتناوب ، يمكن أن تسمى BIAS (إزاحة) ، إلخ.

D0-D3 هو ناقل بيانات متوازي أربعة بت.

العملاء المتوقعون للأسلاك الشائعة ، طاقة الإضاءة الخلفية (مثل VLED ±) ، طاقة الوحدة (VEE و V0)

لا تهمل أوراق البيانات. قد تحتاج الوحدة إلى جهد سالب آخر ، أو قد يكون موجبًا ، أو قد يكون المحول مدمجًا. قد يختلف المنطق ، على سبيل المثال ، مع وجود وحدة في CL1 لن يكون هناك رد فعل على CL2. قد يكون هناك إضاءة خلفية مختلفة (CCFL (بعناية ، العاكس هو "لدغة") بدلاً من مصابيح LED) ، أو لا يوجد لوحة مثبتة على اللوحة ، فلن تعرفها بدون ورقة البيانات. لا يمكنك توصيل أي شيء بشكل عشوائي.

ما هو هناك للقيام به


أرسل السلسلة بأجزاء من أربعة بتات ، ويتم التسجيل عند الانخفاض على السطر CL2. بعد اجتياز الخط ، اكتبه في الركود على سطر CL1 (نعم ، بعد كل شيء ، هناك القليل من ذاكرة الوصول العشوائي في الوحدة النمطية في سطر واحد). سيتم اختيار السطر التالي تلقائيًا. بعد نقل الإطار بأكمله ، عد إلى البداية باستخدام إشارة FLM. في ورقة البيانات على LC79401 هناك مثال. سجل بسرعة كافية ، ضع نبضات على CL1 بالتساوي. ترددت وحدة التحكم قليلا - تراجعت الشاشة القبيحة.

بعد كل إطار ، قم بتغيير مستوى المنطق عند الإدخال M إلى الاتجاه المعاكس ، بحيث يتم التحكم في البيكسلات عن طريق تبديل التيار الكهربائي. خلاف ذلك ، تتدهور الشاشة:


لا يمكنك الوثوق بهذه العملية إلى متحكم ، ولكن ضع مشغلًا يحصى. مدخل FLM ، والخروج إلى M - بشكل عام ، أمر مفهوم.

مثال على إخراج الصور من ذاكرة الفلاش (انظر بداية المقال) يسمى clglcd_simple في هذا المستودع.

كما سبق ذكره ، من المستحيل أن تفعل الشيء نفسه مع ذاكرة الوصول العشوائي في اردوينو على AVR - لن يكون كافيا ، وبالتالي ...

ومرة أخرى - وضع النص


وفقًا لورقة البيانات ، يمكنك نقل البيانات على حافلة ذات أربعة بت و "سحب" CL2 بتردد يصل إلى 6 ميجاهرتز. لذلك ، يمكنك نقل الخط بسرعة وبسرعة ، ثم يحل متحكم المهام الأخرى قليلاً ، وكما يقول "المؤقت" ، فإنه "يسحب" CL1 ويكرر الدورة.

عند إنشاء أحرف لدقة أفقية تبلغ 320 بكسل ، كل هذا يمكن القيام به في 20 (s (320 بكسل / 4 بت = 80 نبضة ، يتم سحب CL2 بتردد 4 MHz). بالنسبة للمهام المتبقية ، لا يزال 39.5 .s. CL1 "رعشة" كل 59.5 ands والحصول على معدل الإطار من 70 هرتز. حسنًا ، سيكون هناك المزيد من الإجراءات لمعالجة الانقطاعات وما إلى ذلك ، بشكل عام ، سيكون متحكم التحكم مشغولًا في التحكم في العرض بنسبة 45٪ من الوقت. "الجامع" 45 أو "الإجمالي" 45؟ ربما الثانية: يمكن أن تكون الكتابة فوق البيانات في ذاكرة الوصول العشوائي الفيديو بالسرعة الكافية.

هل تريد أن يتحكم متحكم الوقت بوقت أقل في إدارة المؤشر والمزيد في المهام الأخرى؟ يمكنك تقليل معدل الإطار إلى 50 هرتز ، ويمكنك رفع تردد التشغيل إلى متحكم 20 ميغاهيرتز. مع أي من هذه الطرق ، ستحدث المزيد من دورات الساعة بين إجراءات المقاطعة.

يعمل موقت مقارنة الإخراج على تبديل خط CL2 كل نبضات على مدار الساعة بدورة تشغيل تبلغ 50٪. في الوقت نفسه ، تصل البيانات إلى مخرجات منفذ PORTB ، المتصل بنقل البيانات ذي الأربعة بتات في الوحدة النمطية بحيث يحدث تغييرها في الوقت الذي يرتفع فيه المستوى إلى CL2 ، وفي الوقت الذي تظل فيه هذه التغييرات دون تغيير. بالطبع ، لا يمكن القيام بذلك دون المجمّع:

 ... lpm r24, Z ;---------- (CL2 rising edge) out %[data_port], r24 ld r30, X+ swap r24; (CL2 rising edge) out %[data_port], r24 lpm r24, Z ;---------- (CL2 rising edge) out %[data_port], r24 ... 

يتم نقل 8 دورات - وأربعة يقضم. ويعتمد ما يجب نقله بالضبط على أي رمز موجود في خلية ذاكرة الوصول العشوائي المطابقة للفيديو ، والتي يجب نقل البيكسلات المقابلة لهذا الرمز من ROM لمولد الحرف وما يتم تخزينه في الخلايا المقابلة من ذاكرة الوصول العشوائي هذه.

الشيء الأكثر إزعاجًا هنا هو الحاجة إلى إيقاف المؤقت بعد 80 نبضًا بالضبط. بعض أجهزة ضبط الوقت ، مثل Timer4 في ​​32u4 ، لا يمكنها ذلك.

للحصول على الإشارة الموردة إلى خط CL1 ، طبق المؤلف إخراجًا مختلفًا من المتحكم الدقيق ، المخصص لكل من المؤقت ول PWM السريع. أي من هذا يتم تطبيقه هنا أمر مفهوم. فإنه التبديل كل التدابير 952. أو إذا عدت بعد فاصل الساعة بمقدار 8 - فقد ظهر كل 119 نبضة. عند هذه النقطة ، يبدأ روتين معالجة المقاطعة ويفرض على المتحكم الدقيق إرسال بيانات جديدة إلى خط التحكم الذي سيكون مطلوبًا أثناء النبضة التالية إلى CL1. حسنًا ، يتغير المستوى على الخط M بنصف التردد. و LCD لا تتدهور. كل الإشارات معا تبدو مثل هذا:



يتكون مولد الأحرف من 256 حرفًا - يكفي 866 أو KOI-8R أو 1251. يتم وضع 40xN حرفًا في ذاكرة الوصول العشوائي للفيديو ، حيث N هو عدد الأسطر اعتمادًا على ارتفاع الحرف. يكون عرض الرمز دائمًا 8 بيكسلات ، ويمكن أن يكون الارتفاع 6 ، 8 ، 10 ، 12 ، 15 ، 16. كلما كان حجمه أصغر ، كلما كان حجم ذاكرة القراءة فقط مطلوبًا لمولد الأحرف والمزيد من ذاكرة الوصول العشوائي للفيديو. مع خط 8 × 8 (40 حرفًا لكل 30 سطرًا) ، فإنك تحتاج إلى 1200 بايت من ذاكرة الوصول العشوائي و 2048 بايت من ذاكرة القراءة فقط. مع خط 8 × 16 (والذي يبدو أفضل في هذه الوحدة) ، تحتاج ذاكرة الوصول العشوائي إلى 600 بايت و ROM 4096. من المترجم: يمكنك تخزين الخط في شكل 8 × 8 ، وقياسه عموديًا مرتين حسب البرنامج ، ويكلف 600 بايت من ذاكرة الوصول العشوائي و 2048 ROM. لتخزين العديد من الخطوط في ذاكرة القراءة فقط ، تحتاج إلى الحفاظ على عنوان بداية الخط ليس ثابتًا ، ولكن في متغير ، لكنه لن يعمل لطباعة النص بعدة خطوط في وقت واحد ، ما لم ، بالطبع ، يمكنك تغيير هذا العنوان أثناء الطيران عن طريق إجراء معالجة المقاطعة مباشرة أثناء نقل وحدات البكسل إلى الشاشة.

يتم تخزين الخط على النحو التالي: أولاً الخطوط العليا لجميع الأحرف البالغ عددها 256 حرفًا ، ثم سطر واحد أدناه ، وهكذا. يوجد نص Python في مجلد متفرقات في المستودع الذي يحول تلقائيًا خط TTF إلى ملف الرأس clglcd_font.h مع صفيف PROGMEM بالتنسيق المطلوب. يمكن العثور هنا على خطوط بكسل الكلاسيكية لـ CC-BY-SA 4.0.

ومرة أخرى - خذ مثالاً مع EGA و VGA


لكن هذه المرة مع التفاصيل. يحتوي مُنشئ الأحرف في ذاكرة الوصول العشوائي ، كما هو مبين أعلاه ، على ما مجموعه 64 حرفًا ، ويمكن تحديدها بالأرقام من 0 إلى n أو من 255 إلى 255. يتم تخزينها بالطريقة نفسها: الأسطر العليا لجميع الأحرف ، ثم التالية ، وما إلى ذلك. يتم محاذاة كل هذا فقط مع الأخذ في الاعتبار حقيقة أن الأحرف ليست 256 ، ولكن 64. للأحجام 8 × 16 بكسل في الحجم ، 16 * 64 = 1024 بايت مطلوبة. يحتوي المخزون على مثال للعمل مع منشئ الأحرف في RAM.

إذا تم استخدام كلا مولدات الأحرف في نفس الوقت - 256 حرفًا في ذاكرة الوصول العشوائي و 64 حرفًا في ذاكرة الوصول العشوائي ، فسيتعين عليك قبول أنه لن يكون هناك أقل من ذاكرة الوصول العشوائي فحسب ، بل ستنخفض أيضًا سرعة نقل البيانات في الأسطر في الوحدة النمطية - بدلاً من 8 دورات على مدار الساعة ، ستحتاج اثنتان إلى 12 أي ، ليس 20 ميكروثانية ، ولكن 30 ، وبدلاً من 45٪ من الوقت للتحكم في شاشة LCD ، سيستغرق الأمر 60.

وضع الجرافيك


كما هو مبين أعلاه ، في هذه الحالة ، يعمل متحكم ببساطة كمحول واجهة. ستحتاج إلى ATmega32u4 ، وما يجب فعله هو موضح هنا . يرجى ملاحظة أن الوحدة قد تتلف بسبب تجميد البرنامج على جهاز الكمبيوتر.

فما هي هذه الحلقة المكونة من أربعة أسلاك - من المستشعر المقاوم ، اتضح.


أين الاتصال


كما هو مذكور أعلاه ، يلزم وجود جهد سلبي ، والذي يمكن إزالته في التجارب الأولى من ثلاثة "كرون" ، ثم تجميع المحول ، على سبيل المثال ، على MAX749. إشارات التحكم في الطاقة ، وكذلك إشارة DISPOFF (هذه إشارة عكسية ، يتم تشغيل الوحدة في واحدة) ، اسحب المقاومات. أثناء الوميض وإعادة ضبط متحكم ، فإن ظهور وحدات منطقية هناك أمر غير مقبول.

استخدم الجهد السالب بعد الجهد + 5 فولت ، ووحدة منطقية على خط DISPOFF - عندما تكون البيانات موجودة بالفعل على خطوط التحكم: وحدة واحدة على الأقل في ناقل البيانات ، وحدة على CL1. خلاف ذلك ، قد تفشل الوحدة النمطية.

يمكن توصيل المدخلات D0-D3 بمخرجات نفس المنفذ من متحكم ، على سبيل المثال ، Px4-Px7 ، في حين لا يمكن استخدام المخرجات Px0-Px3 ك GPIO. يمكنك تعيين وظائف أخرى لهم ، على سبيل المثال ، استخدامها كمخرجات من أجهزة ضبط الوقت ، واجهات تسلسلية ، إلخ. إذا كنت تستخدمها كمدخلات ، فاحرص على ذلك: يمكن للمقاومات المدمجة في السحب التبديل بشكل تعسفي إذا لم يتم تعطيلها (PUD - تعطيل السحب لأعلى).

إدخال M - لإخراج توقيت المقارنة أو PWM.

إدخال CL1 - إلى إخراج آخر من جهاز ضبط الوقت نفسه.

CL2 الإدخال - إلى إخراج جهاز توقيت المقارنة آخر.

FLM - إلى أي الإخراج الرقمي.

DISPOFF - إلى أي الإخراج الرقمي الآخر.

يعتمد الباقي على كيفية تشغيل الوحدة. يفضل المؤلف التحكم في الإضاءة الخلفية بشكل منفصل.

كيفية استخدام البرامج الثابتة


ضع ملفات clglcd.h و clglcd.cpp في المخطط

قم بعمل نسخة احتياطية من ملف clglcd_config.h وقم بتحريره مع مراعاة ما هو متصل ، وكذلك الوظائف التي تحتاجها: مولد حرف في ذاكرة الوصول العشوائي ، إلخ. انتبه ، لا يشير الكود إلى أسماء دبابيس Arduino ، بل يشير إلى أسماء دبابيس المتحكم الدقيق طبقًا لورقة البيانات. يتم فك رموز أسماء مخرجات tamers على النحو التالي: على سبيل المثال ، 2 ، B هي OC2B ، والتي في Arduino Uno تقابل PD3. توضح الأمثلة خيارات الاتصال التي حصل عليها المؤلف.

قم بإنشاء ملف الخط clglcd_font.h باستخدام برنامج Python النصي في مجلد متفرقات (انظر أعلاه).

انظر في أمثلة كيفية تهيئة الشاشة وتشغيلها وإيقافها. ضع في الشاشة صف النص الذي تريد عرضه للتحقق.

تجميع وملء الرسم. تحقق من محلل منطقي أن الإشارات الصحيحة ستذهب إلى الشاشة ، وبقياس الفولتميتر أن جميع فولتات الإمداد طبيعية. عندها فقط قم بتوصيل الشاشة.

أضف رمزًا إلى المخطط الذي سيفعل شيئًا ، على سبيل المثال ، تلقي نص على منفذ تسلسلي وعرضه.

عرض الانقطاعات


يجب تحديث الشاشة باستمرار ، وهو ما تفعله إجراءات التعامل مع المقاطعة. إذا توقفت الانقطاعات لأكثر من 30 ميكروثانية ، فسوف تومض الشاشة ، وإذا حدث أكثر من 60 ميكروثانية لوحدة على خط FLM ، فقد تفشل. إذا كنت بحاجة إلى إيقاف المقاطعات لفترة طويلة ، فقم أولاً بإيقاف تشغيل الشاشة بإشارة DISPOFF (أكرر ، هذه إشارة عكسية ، يتم تشغيل الوحدة في وقت واحد). بالطبع ، إذا تم إيقاف تشغيله لمدة ثانيتين في كل مرة تحتاج فيها إلى معالجة البيانات من مستشعر الرطوبة ودرجة الحرارة ، فبعضها سيحبه ، لكنه أفضل من تدمير الوحدة. الأفضل من ذلك ، شحن الباقي إلى متحكم منفصل. تبادل المعلومات من قبل متحكم واحد مع الأجهزة التي تعمل على بروتوكول سلك واحد وعناوين المصابيح غير مقبول بشكل خاص. استنساخ اردوينو برو مايكرو غير مكلفة بما يكفي لشراء اثنين.

صلة


لكن الواجهات التي يتم تنفيذها بواسطة الأجهزة ستعمل بشكل مثالي: المنافذ التسلسلية ، ناقل I 2 C ، SPI في الوضع الرئيسي. في العبد - فقط إذا كان السيد يسمح "لفة" الدورية للعبد بنسبة 25-35 μs. بالطبع ، لا يزال يعتمد على عدد "الأرجل" التي تركت غير مشغولة بعد توصيل الشاشة.

يعمل USB على 32u4 جيدًا إذا لم تستجوب نقطة نهاية الإدارة كثيرًا (رمز المقاطعة الروتيني البطيء). كان برنامج تشغيل CDC وواجهة برمجة التطبيقات الخاصة به سريعًا بدرجة كافية.

ثم في ملف README.md على جيثب ، يتم تكرار قائمة المشاريع المماثلة ، كما في صفحة المشروع على Hackaday.io

شكرا لاهتمامكم!

Source: https://habr.com/ru/post/ar444912/


All Articles