تعتبر شاشة LCD من أبسط وأرخص الطّرق لعرض نصٍ ما، وبفضل المتحكّم HD44780 أصبح التحكّم بهذه الوحدات بسيطاً جداً، ولكن نحتاج لحجز العديد من الأقطاب العامة (GPIO) للتحكّم بها، ويمكن استبدال هذه الطريقة باستخدام بروتوكول I2C وبالتّالي نستخدم قطبين عامّين فقط.
في هذا المقال سنتحكّم بشاشة 20×04 HD44780 باستخدام محوّل I2C، كما سنستخدم محوّلاً منطقيّاً لتعديل مستوى الجّهد بالنسبة للوحدة دون إلحاق الضّرر بأقطاب لوح الراسبيري باي العامّة.
المستلزمات
سنستخدم الملحقات التّالية للتحكّم بشاشة HD44780 باستخدام البروتوكول I2C:
- شاشة 20×04 أو 16×02 HD44780
- محوّل I2C للشاشة
- محوّل لمستوى الجهد المنطقي (I2C logic level converter)
- لوحة اختبار
- أسلاك توصيل
نلاحظ أن أقطاب محوّل I2C لشاشة LCD تنطبق تماماً مع أقطاب الشّاشة ويمكن لحامها، و يأتي مع بعض الشاشات محوّل I2C ملحوم مسبقاً.
التّوصيل
لا تتحمّل أقطاب الراسبيري باي العامّة جهداً أعلى من 3.3V، ولكن هناك وحدات (كالشّاشة التي سنستخدمها هنا) ترسل وتستقبل إشارات 5V، ولذلك سنقوم باستخدام محوّل مستوى جهدٍ منطقيٍّ له جانبين، وتتّصل الوصلات التي تعمل بمستوى جهد 3.3V معه من جهة، وتتّصل معه من الجهة الأخرى الوصلات التي تعمل على مستوى جهد 5V.
يرمز للجهتين بـ(LV-HV) كما هو موضّح بالشّكل .
يتمّ وصل الأقطاب كما يلي:
Raspberry Pi | 3.3V Level Converter | 5V Level Converter | I2C LCD Adapter |
3.3V (Pin 1) | LV | — | — |
5V (Pin 2) | — | HV | VCC |
GND (Pin 6) | GND | GND | GND |
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 هو للنص والثاني لرقم السطر، ولست مضطّراً لتغيير كلّ السطور معاً ولكن لا يمكنك تبديل محرفٍ واحدٍ بسهولة، ولتقوم بذلك يجب إعادة إرسال كامل النصّ (مع المحرف المراد تبديل مكانه).
من الممكن أن يكون تباين الشّاشة ضعيفاً في البداية، ويمكن تعديل ذلك عن طريق تدوير القرص الموجود خلف الشّاشة.
مصدر الكود البرمجي: هنا
ترجمة: | عدي ناصر |
مراجعة: | لؤي أزدشير ديب |
تدقيق لغوي: | مي همدر |
تحرير: | قحطان غانم |