تعتبر شاشة LCD من أبسط وأرخص الطّرق لعرض نصٍ ما، وبفضل المتحكّم HD44780 أصبح التحكّم بهذه الوحدات بسيطاً جداً، ولكن نحتاج لحجز العديد من الأقطاب العامة (GPIO) للتحكّم بها، ويمكن استبدال هذه الطريقة باستخدام بروتوكول I2C وبالتّالي نستخدم قطبين عامّين فقط.

في هذا المقال سنتحكّم بشاشة 20×04 HD44780 باستخدام محوّل I2C، كما سنستخدم محوّلاً منطقيّاً لتعديل مستوى الجّهد بالنسبة للوحدة دون إلحاق الضّرر بأقطاب لوح الراسبيري باي العامّة.

شاشة LCD من الطراز HD44780
شاشة LCD من الطراز HD44780

المستلزمات

سنستخدم الملحقات التّالية للتحكّم بشاشة HD44780 باستخدام البروتوكول I2C:

  • شاشة 20×04 أو 16×02 HD44780
  • محوّل I2C للشاشة
  • محوّل لمستوى الجهد المنطقي (I2C logic level converter)
  • لوحة اختبار
  • أسلاك توصيل
شاشة LCD من الطراز HD44780
شاشة LCD من الطراز HD44780

نلاحظ أن أقطاب محوّل I2C لشاشة LCD تنطبق تماماً مع أقطاب الشّاشة ويمكن لحامها، و يأتي مع بعض الشاشات محوّل I2C ملحوم مسبقاً.

التّوصيل

لا تتحمّل أقطاب الراسبيري باي العامّة جهداً أعلى من 3.3V، ولكن هناك وحدات (كالشّاشة التي سنستخدمها هنا) ترسل وتستقبل إشارات 5V، ولذلك سنقوم باستخدام محوّل مستوى جهدٍ منطقيٍّ له جانبين، وتتّصل الوصلات التي تعمل بمستوى جهد 3.3V معه من جهة، وتتّصل معه من الجهة الأخرى الوصلات التي تعمل على مستوى جهد 5V.

يرمز للجهتين بـ(LV-HV) كما هو موضّح بالشّكل .

محوّل مستوى جهد منطقي
محوّل مستوى جهد منطقي

يتمّ وصل الأقطاب كما يلي:

Raspberry Pi3.3V Level Converter5V Level ConverterI2C LCD Adapter
3.3V (Pin 1)LV
5V (Pin 2)HVVCC
GND (Pin 6)GNDGNDGND
GPIO2 / SDA (Pin 3)TX1 (below)
GPIO3 / SCL (Pin 5)TX1 (above)
 —TX0 (below)SDA
 —TX0 (above)SCL

ويوضّح الشّكل كيفيّة التّوصيل

مخطّط توصيل الدّارة
مخطّط توصيل الدّارة

يمكن استخدام أيّ قطبٍ أرضيٍّ وقد استخدمنا القطب 20 بدلاً من 6 لوضوح الشّكل لا أكثر، ويمكن استخدام هذا التّوصيل مع العديد من الوحدات التي تتطلّب جهداً أعلى من 3.3V.

الكود البرمجي

يجب تنصيب أداتي I2C قبل البدء بكتابة الأمر التّالي:

sudo apt-get install python-smbus i2c-tools

ومن ثم نقوم بتفعيل بروتوكول واجهة I2C (إذا قمت بذلك مسبقاً قم بتجاوز هذه الخطوة)

sudo raspi-config

نقوم بالتّفعيل الخيار “interfacing Options” > “I2C”. ونقوم بإضافة القيم الموافقة إلى ملفّ الوحدات، وندخل الملفّ بكتابة الأمر:

sudo nano /etc/modules

يضاف السطرين التّاليين إلى نهاية الملف:

i2c-bcm2708

i2c-dev

ومن ثم نقوم بإعادة التّشغيل لكي يتمّ العمل بالإعدادات الجديدة:

sudo reboot

عندما تقوم بتوصيل الشّاشة يمكنك التحقّق فيما إذا اكتُشفت (إذا كان الراسبيري باي الذي لديك قديماَ قم بإدخال 0 بدلاً من 1):

sudo i2cdetect -y 1

يجب أن يكون الخرج كالآتي:

pi@raspberrypi ~ $ sudo i2cdetect -y 1

0    1   2  3   4   5  6   7  8   9   a   b  c   d   e   f

00:              — — — — — — — — — — — — —

10: — — — — — — — — — — — — — — — —

20: — — — — — — — 27 — — — — — — — —

30: — — — — — — — — — — — — — — — —

40: — — — — — — — — — — — — — — — —

50: — — — — — — — — — — — — — — — —

60: — — — — — — — — — — — — — — — —

70: — — — — — — — —

إذا ظهر رقمٌ مختلفٌ عن 27 فعليك تغيير ذلك من ملف lcddriver.py لتصبح بالشّكل التّالي:(ADDRESS = 0x27)

ومن ثم ندخل الكود البرمجي:

mkdir hd44780 && cd hd44780

wget http://tutorials-raspberrypi.de/wp-content/uploads/scripts/hd44780_i2c.zip

unzip hd44780_i2c.zip

بمساعدة الملفّين الذين قام الكود السابق بتحميلهما يمكننا نقل المعلومات إلى الشّاشة، وللقيام بذلك نفتح موجّه أوامر البايثون بكتابة الكود التّالي:

sudo python

ثم ندخل الكود البرمجي التّالي

الكود البرمجي: التحميل من هنا

البارامتر الأوّل من تابع lcd_display_string هو للنص والثاني لرقم السطر، ولست مضطّراً لتغيير كلّ السطور معاً ولكن لا يمكنك تبديل محرفٍ واحدٍ بسهولة، ولتقوم بذلك يجب إعادة إرسال كامل النصّ (مع المحرف المراد تبديل مكانه).

من الممكن أن يكون تباين الشّاشة ضعيفاً في البداية، ويمكن تعديل ذلك عن طريق تدوير القرص الموجود خلف الشّاشة.

ضبط تباين الشّاشة
ضبط تباين الشّاشة

مصدر الكود البرمجي: هنا

 

ترجمة:عدي ناصر
مراجعة:لؤي أزدشير ديب
تدقيق لغوي:مي همدر
تحرير:قحطان غانم