الغرض من عرض الخط (أو النص) هو تسليم المعلومات النصية في شكل خطوط. وهي من عدة أنواع (في المقام الأول LCD أو OLED المضيئة ذاتيًا) ، وعادة ما تكون في علاماتها أرقام 1202 أو 1602 أو 1204 أو ما شابهها ، مما يشير إلى عدد الخطوط (في الأمثلة 2 أو 4) والأحرف في كل سطر (12 و 16) . هناك شاشات عرض أحادية الخط من هذا النوع ، ولكننا نركز في العرض التقديمي التالي على الشاشات ذات السطرين الأكثر استخدامًا.غالبية هذه الشاشات متوافقة مع وحدة تحكم HD44780 (هيتاشي). يتم إنتاج العروض الأكثر شعبية (على الأقل في بلادنا) من هذا التنوع بواسطة Winstar. علاوة على ذلك ، فإن أصناف شاشات الكريستال السائل (يبدأ الاسم بالحروف WH ، على سبيل المثال ، WH1602) متوافقة مع نظام أوامر HD44780 ، وأنواع OLED (يبدأ الاسم بـ WEH ، على سبيل المثال ، WEH001602) تحتوي على وحدة تحكم WS0010 محسنة. لسوء الحظ ، أو لحسن الحظ ، سنتعامل الآن.على عكس الشاشات الرسومية التي قمنا بفحصها سابقًا استنادًا إلى وحدة تحكم ks0108 ، فإن مولد الأحرف في الشاشات الصغيرة مدمج. علاوة على ذلك ، بالنسبة لنا ، فإن الفرق الرئيسي بين WS0010 و HD44780 القياسي هو وجود العديد من جداول الرموز (أربعة) لعرض النص متعدد اللغات. يحتوي HD44780 على جدول واحد فقط ، ولهذا السبب يتعين على الشركات بيع نوع منفصل من الشاشات في كل منطقة. لا تتطلب شاشات OLED المستندة إلى WS0010 أعطالًا إقليمية ، وهو أكثر ملاءمة. ولكن ليس للمستخدم: بشكل افتراضي ، يتم تشغيل جدول ENGLISH_JAPANESE في شاشات WEH ، ولتمكين الأحرف الروسية ، تحتاج إلى تبديله إلى ENGLISH_RUSSIAN.تعرف على المزيد حول الجدول ENGLISH_RUSSIAN.: (. ) , . , , — - -8, (.
19768-93). -, , , EBCDIC, , ( 127 ) ASCII. , , , ASCII .
مكتبة LiquidCrystal القياسية (المزودة مع Arduino IDE) ، بالطبع ، لا تعرف شيئًا عن الجداول الأربعة ، وبالتالي تتطلب استقامة ، على الأقل في هذا الصدد. ولكن ليس فقط: في النهاية ، سيكون من الممكن القيام باللغة الإنجليزية. ومع ذلك ، يختلف إجراء التهيئة بشكل ملحوظ بالنسبة لـ WS0010 ، وإذا لم يتم تصحيحه ، فستظهر الشاشة أنه في كل مرة يبدأ فيها.ميزات أخرى, OLED- Winstar , ( , ). , , . , , WEH SPI (, « SPI»),
, , ( 3) —
. : , . , I2C (. ,
).
لسبب ما ، تعرض شاشات Winstar عجزًا كبيرًا من حيث التوثيق الواضح (كما لاحظت ، هذه عمومًا ميزة مميزة للمنتجات الصينية). تجدر الإشارة إلى أنه يمكنك تنزيل وثائق كاملة أكثر أو أقل دون أي أخطاء: هنا على شاشة LCD (WH1602) مع وحدة تحكم HD44780 ، هنا على شاشات OLED (WEH1602) ، هنا على وحدة تحكم WS0010 بشكل منفصل ( سنشير إليها لاحقًا) . وهنا ، إذا كنت مهتمًا ، فهناك وصف تفصيلي لوحدة تحكم HD44780 باللغة الروسية.تسوية مكتبة LiquidCrystal
للتحكم في الشاشات الصغيرة على HD44780 ونظائرها ، فإن مكتبة LiquidCrystal القياسية ، والتي يتم تضمينها تقليديًا في Arduino IDE لجميع الإصدارات ، مناسبة تمامًا. لعرض النص الروسي ، هناك نسخته من LiquidCrystalRus ، والتي تعمل بشكل جيد بشكل مدهش في جميع الإصدارات الحديثة من Arduino IDE (تقول أن المؤلف اقترب بشكل صحيح من تحويل أحرف UTF-8). ولكن للتكيف مع شاشات OLED على وحدة تحكم WS0010 ، ما زلت بحاجة إلى إجراء تصحيحات. في المستقبل ، سوف نسخر من هذه المكتبة ، وبالتالي سنعيد تسميتها LiquidCrystalRus_OLED ، حتى لا يتم الخلط بينها وبين المكتبة المعتادة. لتبسيط المهمة ، لن نقوم بإعادة تسمية الوظائف ، لأن التهيئة ستكون هي نفسها كما هو الحال مع LiquidCrystalRus الأصلي.التغييرات هي كما يلي:1. منذ ذلك الحينالجدول الروسي-الإنجليزي في WS0010 (انظر الصفحة 9 لورقة البيانات على WS0010 باستخدام الرابط أعلاه) هو رقم 2 ، ثم للتبديل إليه ، تحتاج إلى تعيين البتتين الأقل أهمية FT1 و FT0 في أمر FUNCTION SET لتعيينه على الحالة 10 (0x02). (في شاشات الكريستال السائل مع جدول رمز واحد ، بالمناسبة ، لا يتم استخدام هذه البتات على الإطلاق). للقيام بذلك ، في ملف LiquidCrystalRus_OLED.cpp ، ابحث عن المكان (السطر 96 من الملف) حيث يتم تعيين قيمة متغير _displayfunction . في كلا سطري التهيئة (السطر 97 و 99) ، قم بإضافة ملحق " | = 0x02 ".2. بعد ذلك ، تحتاج إلى إصلاح تأخير التهيئة بعد تشغيل الطاقة. بالنسبة إلى HD44780 ، يجب ألا يزيد طوله عن 40 مللي ثانية (راجع الوثائق على الروابط أعلاه). تستخدم المكتبة الوظيفة لهذا.delayMicroseconds (50000) (السطر 120 من ملف LiquidCrystalRus_OLED.cpp ). بالنسبة لوحدة التحكم WS0010 ، يجب أن يكون لديك تأخير عشر مرات أطول - 500 مللي ثانية على الأقل (انظر الصفحة الأخيرة من ورقة البيانات على الرابط أعلاه). تم إخفاء هذا المطلب بعناية شديدة (تعرض الملفات التي تحتوي على وثائق باللغة الإنجليزية على Winstar "فقد الخط" في هذا الجزء بالتحديد) ، بحيث يبدو أن قلة قليلة من الناس قد فكرت في ذلك حتى الآن. لذلك ، نستبدل هذا السطر بـ 32 تكرار تأخير كل منها 16 مللي ثانية:for (int i = 0; i <=31; i++) delayMicroseconds(16000);
3. بالإضافة إلى ذلك (انظر أيضًا هذه الصفحة الأخيرة من ورقة البيانات) ، بعد هذا التأخير ، عند تشغيل أربعة أسلاك ، تحتاج إلى إرسال أمر فارغ خمس مرات متتالية (0x00). نظرًا لأن Arduino أسرع بشكل كبير من وحدة تحكم العرض ، يجب إعطاء الأوامر بتأخير متوسط. يجب إدراجها أكثر قليلاً في نص دالة البدء ، حيث تكون على وجه التحديد حول تضمين 4 بت (السطر 147 من ملف LiquidCrystalRus_OLED.cpp ).4. لكن هذه ليست النهاية. يحتوي الجدول ENGLISH_RUSSIAN الأصلي على رمز درجة(الرمز 0xEF). يتم تنفيذ الخيار بشكل رسومي غير ناجح للغاية (كبير جدًا) ، لذلك أفضل بدلاً من ذلك استخدام نقطة علوية جريئة (الرمز 0xDF) - إنها أشبه بدرجة في النمط المعتاد. يمكن إدخاله في شكل رمز (أفضل من الثماني "\ 337") ، لكن المشكلة هي - محاولة تبسيط وظيفة استبدال رموز الحروف الروسية برموز في جدول مولد الأحرف ، مؤلف المكتبة ، بناءً على ترميز UTF-8 (انظر المقالة السابقة ) ، قدم شرطًا بديلًا لأي رمز أكبر من 0x80 ( دالة LiquidCrystalRus :: write ). نظرًا لأن 0xDF لدينا أكبر من 0x80 ، عند تحديد الحرف "\ 337" في سطر التعليمات البرمجية ، سيتم عرض مسافة فارغة بدلاً من ذلك ، لأنها لا تتوافق مع أي حرف روسي.لسوء الحظ ، وظيفة createChar () القياسيةعندما حاولت استخدامه لإنشاء أيقونة الدرجة الخاصة بي ، دخلت الشاشة في ذهول كامل ، والذي لا يمكن إزالته إلا من خلال إعادة تحميل البرنامج. ما أحتاج للتعامل معه أيضًا وسأكون ممتنًا إذا أخبرني أحدهم ما هو الأمر. لذلك لا يمكن تحرير منشئ الأحرف في قدراتنا ، ولكن يمكننا استبعاد حرف 0xDF الذي نحتاجه من الشرط. للقيام بذلك ، استبدل الشرط الموجود (انظر نص وظيفة الكتابة ) بما يلي:if ((value>=0x80)&&(value!=0xdf))
5. وأخيرًا ، فإن الصفر المشطوب على هذه الشاشة ليس مذهلاً كما هو الحال في شاشات LCD الرسومية. ومع ذلك ، في نفس وظيفة الكتابة ، قدمت استبدال الرمز صفر (0x30) برمز الحرف "O" (0x4f). يمكن لأولئك الذين يرغبون في إعادة الصفر المشطوب إلى الوراء بمجرد حذف أو استبدال خط الاستبدال (السطر 308 من ملف LiquidCrystalRus_OLED.cpp المعدل ).يمكن تنزيل المكتبة المحدثة من الرابط الموجود في نهاية المقالة.اتصال
الآن يبدو أن كل شيء قد تم تعديله ، يمكنك الاتصال. يظهر اتصال شاشة WEH001602BG (16 حرفًا ، طول الشاشة 100 مم) بشريحة Arduino في الشكل التالي:
يجب الإشارة إلى دبابيس Arduino التي تتصل بها دبابيس العرض RS ، E ، DB4-DB7 عند تهيئة الشاشة:
LiquidCrystalRus OLED1(3, 5, 7, 8, 9, 10);
إذا رغبت في ذلك ، يمكنك توصيل شاشتين أو أكثر في أي خيار واجهة (ثمانية أو أربعة أسلاك). في هذه الحالة ، يمكن مشاركة خطوط البيانات و RS. يتم الاختيار بين الشاشات في هذه الحالة من خلال المحطة الطرفية E ، والتي يتم توصيلها لشاشات مختلفة بأطراف اردوينو مختلفة (خطوط الاتصال للشاشة الثانية معروضة باللون الرمادي على الرسم التخطيطي ، المحطة الطرفية E للشاشة الثانية هنا متصلة بالطرف 6 من Arduino). بالطبع ، في هذه الحالة ، تحتاج إلى إنشاء نسختين من المكتبة (على سبيل المثال ، OLED1 و OLED2) ، حيث تكون جميع المخرجات متشابهة ، باستثناء E. علاوة على ذلك ، يمكن أن تكون الشاشات ذات تكوينات وأحجام مختلفة (8x2 ، 16x2 ، 12x2 ، 12x4 ، إلخ. .). ينطبق هذا أيضًا على شاشات LCD التقليدية على HD44780.ولماذا هناك تتابع للسلطة؟ العيب الرئيسي في WS0010 هو عدم وجود "rezet" الأجهزة. في HD44780 ، يمكن تبرير rezet المدمج - المؤلف ليس لديه خبرة كافية مع شاشات LCD ليقول على وجه اليقين. لكن Winstar ، الذي يحاول اتباع المعيار في تطويره ، من الواضح أنه لا يستطيع التعامل مع هذه المهمة. تؤدي إعادة تشغيل وحدة التحكم دون إيقاف تشغيل الطاقة إلى ظهور أي عكارة على الشاشة ، ولا يمكنك التخلص منها إلا عن طريق التلاعب بقوة الدائرة بأكملها وتهيئة الشاشة من الصفر.بالإضافة إلى ذلك ، يمكن للشاشة عند إيقاف / تشغيل الطاقة أن تربك الخطوط في الأماكن. يدعي الناس أن إدراج 8 بت بالكامل (بدلاً من 4 بت) يساعد ، لكنه كان أسوأ بالنسبة لي. إنهم يصرون بإصرار على أنه في "مجموعات جديدة" افتراضية تم إصلاح كل هذا بالفعل ، ولكن من الصعب تصديق (أي نوع من مجموعات "الجديدة" التي نتحدث عنها عندما أصدرت Winstar شاشات OLED منذ عام 2008 ، وكان لدي عرض لمدة 13 و 14 عامًا الافراج؟).تتابع وضبط لإعادة تعيين العرض بشكل مصطنع عند إعادة تشغيل Arduino دون إيقاف الطاقة. هذا يقضي بشكل موثوق على القمامة على الشاشة. يتم تشغيل قوة الشاشة (أو الشاشات) بشكل منفصل من خلال هذا المرحل ، والذي يتم تشغيله من دبوس Arduino المجاني (في هذه الحالة ، دبوس 4) في بداية إجراء الإعداد ، عندما تكون وحدة التحكم تعمل بالفعل بثبات. وقبل تشغيل التتابع ، من الجيد إعطاء تأخير إضافي قدره 1000 مللي ثانية (انظر الرسم أدناه). التتابع المشار إليه EDR202A05 هو تتابع من القصب ، تيار اللف هو 10 مللي أمبير ، وبالتالي يتم التحكم فيه بهدوء من إخراج Arduino.أما بالنسبة للخلط بين الخطوط عند تشغيلها ، بالإضافة إلى التغييرات المذكورة أعلاه في إجراء التهيئة ، فإن هذا التأثير يخفف تمامًا قوة الدائرة بأكملها من مصدر خارجي قوي بما فيه الكفاية (على الأقل 1-2 أ) بجهد ثابت تحت الحمل 7.5 على الأقل فولت. من الواضح أن هذا الاعتماد على التغذية هو مصدر تناقضات في العديد من المنشورات ، حيث يدعي العديد من المؤلفين أن كل شيء يعمل بشكل جيد بالنسبة لهم. في هذه الحالة ، يمكن توصيل الشاشة (أو الشاشات) من خلال مثبت Arduino الداخلي (دبوس 5V من اللوحة) ، أو عن طريق مثبت منفصل ، ولكن الشيء الرئيسي هو أن جهد الدخل للمثبت يجب أن يكون مستقرًا بما يكفي بغض النظر عن زيادة التيار في لحظة التشغيل.تحقق
للتحقق ، أرسلت رسمًا توضيحيًا ، Proba_Rus_L Liquid_Crystal_OLED ، لمحاكاة عرض ساعة التقويم مع مستشعر درجة حرارة خارجي:عرض المثال WEH1602#include <LiquidCrystalRus_OLED.h>
LiquidCrystalRus OLED1(3, 5, 7, 8, 9, 10);
#define RelayPin 4
void setup() {
delay (1000);
pinMode(RelayPin, OUTPUT);
digitalWrite(RelayPin, HIGH);
delay (500);
OLED1.begin(16,2);
OLED1.clear();
OLED1.setCursor(0,0);
OLED1.print("-22,3\337C");
OLED1.setCursor(11,0);
OLED1.print("10:22");
OLED1.setCursor(0,1);
OLED1.print("16.01.17 ");
OLED1.setCursor(13,0);
OLED1.blink();
delay(1000);
}
void loop() {
}
يتم تطبيق جميع التغييرات المميزة في المكتبة المذكورة أعلاه هنا. يوضح البرنامج أيضًا كيفية جعل القولون يومض في الساعات: الدقائق باستخدام وظيفة وميض () . لاحظ أن المخرج الجديد في نفس الموضع يقضي على وميض الألفة ، وعند تحديثه ، يجب عليك استئنافه مرة أخرى ، بعد ضبط المؤشر غير المرئي مسبقًا على نفس الموضع 13 في خط الصفر. مع تحديث الساعة الحقيقي ، قد يكون من الأسهل تحديث الأرقام فقط في المواضع 11-12 و 14-15 ، مع ترك القولون الوامض كما هو.تظهر نتائج إخراج المثال في الصورة:وتجدر الإشارة إلى أن الصورة لا تعبر عن توهج شاشة OLED الخضراء (في هذه الحالة). في الواقع ، إنه لون أخضر عميق ، مع طول موجي أقصر من المعتاد 568 نانومتر في شاشات LED (سبعة أجزاء أو مصفوفة). لماذا يبدو هذا الأخير على خلفية OLED "باهتًا" ، ويصعب تطبيقهما المشترك.يحتوي WS0010 على وضع رسومي ، وتحتوي شاشات Winstar الرسومية OLED (مثل WEG010016) أيضًا على وحدة التحكم هذه. لاحظ شخص ما أن لديهم نفس المصفوفة. في رأيي ، فإن محاولة تطبيق وضع رسومي على عرض سطر نص أمر لا معنى له إلى حد ما: يحتوي عرض الخط على مسافات مظلمة تم تعيينها بالأجهزة بين الأحرف والخطوط التي تجعل الصورة غير جمالية للغاية (انظر أمثلة عديدة لمثل هذه المحاولات).ملاحظة أخيرة: حول متانة Winstar OLEDs. في أوراق البيانات ، يشار إلى الوقت 100000 ساعة ، أي 11 سنة. ومع ذلك ، فقد فقدت واحدة من عروض العام الثالث عشر من الإصدار (توهج أصفر) حتى اللحظة الحالية (شتاء السادس عشر) سطوعًا حادًا في داخلي. من المضحك أن البقية من نفس الحزب (الأخضر) ولاحقًا (الأصفر والأخضر البالغ من العمر 14 عامًا) لا تظهر أي علامات على الموت. لذلك ، على وجه اليقين ، لا أفترض أن أقول أي شيء ، ولكن فقط في حالة ، أنصحك بعدم لحام الشاشات في اللوحة ، ولكن تثبيتها على الموصلات ، بحيث يمكن استبدالها في حالة عدم وجود مشاكل.يمكنك تنزيل الأرشيف بمكتبة مجانية ومثال من هنا .UPD: كان هناك حل لمشكلة بداية مستقرة دون التلاعب بالسلطة:https://geektimes.ru/post/287234/