العمل مع 1602 عرض رسومي في اردوينو شاشة LCD WH1602B من وينستار. التحكم بشاشة LCD عن طريق ناقل I2C

وصل اردوينو نانو، وصلت مجموعة تحتوي على لوحة تجارب وشاشة LCD. الشاشة الموجودة على اللوحة تقول - 1602A، أدناه - QAPASS. لقد بدأت في نحت الجهاز الأول، وبالطبع أردت عرض المعلومات على الشاشة، وليس مصابيح LED الوامضة.

لقد ساعدني Google وأخبرني أن هذا عرض للشخصيات؛ إذا لم تقم بتشويهه، فمن المرجح أن تتوفر أحرف ASCII - الأرقام واللاتينية وبعض الأحرف الأساسية.

ساعدت المواد التالية في تشغيل الشاشة: تشغيل شاشة LCD من النوع الحرفي من منفذ طابعة الكمبيوتر الشخصي؛ كيفية توصيل الاردوينو بشاشة LCD خاصة بالشخصيات التحكم بمحرك سيرفو Pwm PDF.

شاشة العرض شائعة جدًا، وقد تم بالفعل اختراع دروع لها - هناك خيارات مع SPI، مثل، و/أو مع I2C، والإنترنت مليء بالوصفات لهذه الحالات. لكن لم يكن لدي سوى شاشة العرض الأصلية مقاس 16 × 2 واردوينو الذي أردت إرفاقه به.

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

وصف جيد للشاشات من هذا النوعلقد وجدته هنا - http://greathard.ucoz.com/44780_rus.pdf. وهنا (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) مثال على تحديد منشئ الأحرف.

اتصال

جاءت شاشتي مزودة بجهات اتصال غير ملحومة. منذ البداية كنت أرغب في لحام الكابل وقطع 16 سلكًا باستخدام الدوبونت وتنظيفها. وبعد ذلك بحثت في الحوت ووجدت مشط DuPont للحام باللوحة. من هناك قمت بقطع 16 جهة اتصال ولحامها.
تبدو شاشتي مثل هذا (قبل لحام جهات الاتصال):

أولاً قمت بتوصيل الطرف 15 (A) بـ +5V، و16 (K) بالأرضي، وتأكدت من عمل الإضاءة الخلفية. بشكل عام، من الصحيح توصيل الكاثود بالأرض من خلال مقاومة 220 أوم، وهو ما فعلته بعد ذلك.

ثم قمت بتوصيل الأرض (1) والطاقة (2). يمكن تشغيل الاردوينو من خلال USB، من جهد ثابت 5 فولت ومن جهد 6-12 فولت غير مستقر، ويتم اختيار أعلى جهد تلقائيًا. الآن يتم تشغيل Arduino من خلال USB، وكنت أتساءل من أين يمكنني الحصول على 5 فولت. اتضح أن 5V موجود على طرف Arduino، حيث يتم توصيل 5V خارجي مستقر. أو بالأحرى، اتضح أنه 4.7 فولت، لكن هذا كان كافيًا بالنسبة لي.

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

ثم نقوم بتوصيل مقياس جهد التباين (دبوس 3 V0). نرمي أحد الأطراف القصوى لمقياس الجهد على الأرض، والثاني إلى +5V، والوسطى لدبوس 3 من الشاشة. يوصى باستخدام مقياس الجهد 10K. كان لدي 50 ألفًا من الحوت، استخدمته أولاً. كان التعديل على حافة واحدة فقط، وكان من الضروري التقاط التباين المطلوب بمهارة شديدة. ثم وجدت واحدًا مشابهًا عند 5K في حوت آخر وقمت بتثبيته. امتد الإعداد من حافة واحدة إلى نصف دورة. على ما يبدو، يمكنك أن تأخذ مقياس جهد أصغر. ربما يوصى بـ 10 كيلو حتى تستهلك الدائرة أقل. نعم، كان علي أن أقوم بالقليل من اللحام، فقد قمت بلحام الأسلاك باستخدام الدوبونات إلى أطراف مقاييس فرق الجهد.

رسم الاختبار

نحن نأخذ رسم الاختبار من الأمثلة من Arduino Studio - "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino"، فقط بحاجة إلى تغيير جهات الاتصال إلى جهات الاتصال الخاصة بنا - LiquidCrystal LCD( 7، 6، 5، 4، 3، 2)؛

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

// تضمين رمز المكتبة: #include // تهيئة المكتبة بأرقام دبابيس الواجهة LiquidCrystal LCD(7, 6, 5, 4, 3, 2); إعداد الفراغ () ( // قم بإعداد عدد الأعمدة والصفوف في شاشة LCD: LCD.begin(16, 2); // اطبع رسالة إلى شاشة LCD.lcd.print("hello, World!"); ) حلقة باطلة () (/ اضبط المؤشر على العمود 0، السطر 1 // (ملاحظة: السطر 1 هو الصف الثاني، نظرًا لأن العد يبدأ بـ 0): LCD.setCursor(0, 1); // اطبع رقم الثواني منذ إعادة التعيين: LCD.print(millis() / 1000); )

اتضح شيء من هذا القبيل:

بالمناسبة، الشاشة التي وصلت إلى يدي لا تعمل بدون إضاءة خلفية. أعني أنه يعمل، لكن بالكاد يمكنك رؤية أي شيء.

1602A عرض جهات الاتصال

# اتصال اسم كيفية الاتصال
1 VSS أرض
2 VDD +5 فولت
3 V0 التباين - إلى الطرف الأوسط لمقياس الجهد
4 RS (تسجيل اختر) D7 اردوينو
5 R/W (القراءة أو الكتابة) أرض
6 E (تمكين الإشارة) D6 اردوينو
7-14 D0-D7 D0-D3 - غير متصل؛ D4-D7 - متصل بالدبابيس D5-D2 من Arduino
15 أ أنود الإضاءة الخلفية، متصل بـ +5 فولت
16 ك كاثود الإضاءة الخلفية، متصل بالأرض عبر مقاومة 220 أوم

تتحدث المقالة عن كيفية توصيل شاشة LCD بـ Arduino بشكل صحيح، وقد تمت تغطية كل ما تحتاج لمعرفته حول توصيل LCD 1602 وLCD i2c.

لا تزال شاشات LCD بأحجام 1602، والتي تم إنشاؤها على أساس وحدة التحكم HD44780، اليوم واحدة من أكثر الشاشات بأسعار معقولة وبسيطة والمطلوبة لتطوير أي نوع من الأجهزة الإلكترونية.

ليس من المستغرب أنه يمكن رؤيتها في وحدات بسيطة تم تجميعها حرفيًا على الركبة وفي الوحدات الصناعية الأكثر خطورة، على سبيل المثال، آلات القهوة. من خلال هذه الشاشة يتم تجميع الوحدات والدروع الأكثر شيوعًا المتعلقة بـ Arduino، على سبيل المثال وحدة LCD I2C وLCD Keypad Shield.

في الخطوات التالية سنخبرك بالتفصيل بالصور كيفية توصيل شاشة LCD بالاردوينو وعرض المعلومات الضرورية على الشاشة.

الخطوة 2. شاشة LCD 1602 لاردوينو

تأتي شاشات 1602 بتصميمين مختلفين:

  • الإضاءة الخلفية الصفراء بأحرف سوداء
  • أو (يحدث هذا في كثير من الأحيان) إضاءة خلفية زرقاء مع إضاءة بيضاء.

يختلف حجم شاشات العرض الموجودة على وحدة التحكم HD44780 بشكل كبير، ولكن يتم التحكم فيها بنفس الطريقة. الأبعاد الأكثر شيوعًا هي 16 × 02 (أي 16 حرفًا في سطرين) أو 20 × 04. تتمتع الأحرف نفسها بدقة 5 × 8 بكسل.

لا تدعم معظم شاشات العرض السيريلية (باستثناء شاشات العرض التي تحمل علامة CTK). لكن هذه المشكلة قابلة للحل جزئيًا، وتوضح المقالة كيفية القيام بذلك بالتفصيل.

تحتوي الشاشة على موصل ذو 16 دبوسًا للاتصال. يتم وضع علامة على الدبابيس الموجودة على الجزء الخلفي من اللوحة، وهي كما يلي:

  • 1 (VSS) - مصدر طاقة سلبي لوحدة التحكم.
  • 2 (VDD) - مصدر طاقة إيجابي لوحدة التحكم.
  • 3 (VO) - إعدادات التحكم في التباين.
  • 4 (RS) - اختيار التسجيل.
  • 5 (R/W) - القراءة والكتابة، وخاصة الكتابة عند الاتصال بالأرض.
  • 6 (هـ) - التنشيط (تمكين).
  • 7–10 (DB0-DB3) – بتات ذات ترتيب منخفض من واجهة ذات ثمانية بتات.
  • 11–14 (DB4-DB7) - البتات الأكثر أهمية من الواجهة
  • 15 (أ) – الأنود الإيجابي لإمدادات الطاقة الخلفية.
  • 16 (K) - الكاثود السلبي لإمدادات الطاقة الخلفية.

الخطوة 3. قم بتوصيل شاشة LCD

قبل توصيل الشاشة ونقل المعلومات إليها، يجدر التحقق من وظائفها. أولاً، قم بتطبيق الجهد الكهربي على وحدة التحكم VSS وVDD، وقم بتشغيل الإضاءة الخلفية (A، K)، ثم اضبط التباين.

لمثل هذه الإعدادات، يكون مقياس الجهد 10 كيلو أوم مناسبًا، وشكله ليس مهمًا. يتم توفير +5V وGND للأرجل الخارجية، ويتم توصيل الساق الموجودة في المنتصف بدبوس VO.

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

ولتشغيل العرض، يتم استخدام مكتبة خاصة مدمجة في بيئة Arduino IDE، LiquidCrystal.h، والتي سأكتب عنها أدناه. يمكن أن تعمل في وضع 8 بت و 4 بت. في الخيار الأول، يتم استخدام البتات الأقل أهمية والأكثر أهمية فقط ( BB0-DB7) ، في الثانية – الصغار فقط ( BB4-DB7).

لكن استخدام وضع 8 بت في هذه الشاشة هو قرار خاطئ؛ فلا يوجد تقريبًا أي ميزة في السرعة، نظرًا لأن معدل التحديث الخاص بها يكون دائمًا أقل من 10 مرات في الثانية. لعرض النص، تحتاج إلى توصيل الأطراف DB7 وDB6 وDB5 وDB4 وE وRS بمنافذ وحدة التحكم. يمكن توصيلها بأي منافذ Arduino، والشيء الرئيسي هو ضبط التسلسل الصحيح في الكود.

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

الخطوة 4. تجاوز المخطط

دعنا نستكشف خيارًا للتغلب على هذا الأمر والاكتفاء باثنين فقط. نحن بحاجة إلى وحدة تحويل إضافية لشاشات LCD إلى IIC/I2C. يمكن رؤية كيفية لحامه بالشاشة وتوصيله بـ Arduino في الصور أدناه.

لكن خيار الاتصال هذا يعمل فقط مع مكتبة خاصة LiquidCrystal_I2C1602V1، والتي، مع ذلك، من السهل العثور عليها على الإنترنت وتثبيتها، وبعد ذلك يمكنك استخدامها دون أي مشاكل.

الخطوة 4: مكتبة LiquidCrystal.h

يمكن تنزيل مكتبة LiquidCrystal.h من قسم المكتبات على موقعنا على هذه الصفحة أو من المصدر الرسمي arduino.cc. ولكن يمكنك أيضًا التنزيل من الروابط أدناه:

الخطوة 5. رسم (رمز البرنامج)

بمجرد تنزيل الأرشيف، استبدل مجلد LiquidCrystal في مجلد المكتبات في دليل تثبيت Arduino الخاص بك.

يمكنك رؤية رسم عينة على:

ملف -> أمثلة -> LiquidCrystal -> HelloWorld_SPI

أو إذا كانت لديك قائمة باللغة الإنجليزية:

ملف -> أمثلة -> LiquidCrystal -> HelloWorld_SPI

وبهذا نختتم درسنا التالي. نتمنى لكم مشاريع عالية الجودة!

عرض شاشات الكريستال السائل– ضيف متكرر في مشاريع اردوينو. لكن في الدوائر المعقدة قد نواجه مشكلة نقص منافذ Arduino بسبب الحاجة إلى توصيل درع يحتوي على العديد والعديد من المسامير. الحل في هذه الحالة يمكن أن يكون I2C/IICمحول يربط درع Arduino 1602 القياسي تقريبًا بلوحات Uno أو Nano أو Mega باستخدام 4 دبابيس فقط. سننظر في هذه المقالة في كيفية توصيل شاشة LCD بواجهة I2C، وما هي المكتبات التي يمكنك استخدامها، وكتابة مثال قصير للرسم وإلقاء نظرة على الأخطاء الشائعة.

شاشات الكريستال السائل شاشات الكريستال السائل 1602يكون اختيار جيدلإخراج سلاسل الأحرف في مشاريع مختلفة. إنها غير مكلفة، وهناك تعديلات مختلفة بألوان إضاءة خلفية مختلفة، يمكنك بسهولة تنزيل المكتبات الجاهزة لرسومات Arduino. لكن العيب الرئيسي لهذه الشاشة هو أن الشاشة تحتوي على 16 منفذًا رقميًا، منها 6 على الأقل مطلوبة، لذلك فإن استخدام شاشة LCD هذه بدون i2c يضيف قيودًا خطيرة على لوحات Arduino Uno أو Nano. إذا لم تكن هناك جهات اتصال كافية، فسيتعين عليك شراء لوحة Arduino Mega أو حفظ جهات الاتصال، بما في ذلك عن طريق توصيل الشاشة عبر i2c.

وصف موجز لدبابيس LCD 1602

دعونا نلقي نظرة فاحصة على دبابيس LCD1602:

كل من الدبابيس لها غرضها الخاص:

  1. الأرض الأرضية؛
  2. مصدر الطاقة 5 فولت ؛
  3. ضبط تباين الشاشة؛
  4. الأوامر والبيانات؛
  5. كتابة وقراءة البيانات؛
  6. يُمكَِن؛

7-14. خطوط البيانات؛

  1. بالإضافة إلى الإضاءة الخلفية.
  2. ناقص الإضاءة الخلفية.

مواصفات العرض:

  • نوع عرض الأحرف، من الممكن تحميل الرموز؛
  • أضواء LED
  • وحدة تحكم HD44780؛
  • جهد الإمداد 5 فولت؛
  • تنسيق 16 × 2 حرفًا؛
  • تتراوح درجة حرارة التشغيل من -20 درجة مئوية إلى +70 درجة مئوية، وتتراوح درجة حرارة التخزين من -30 درجة مئوية إلى +80 درجة مئوية؛
  • زاوية رؤية 180 درجة.

مخطط اتصال شاشة LCD بلوحة Arduino بدون i2C

الرسم التخطيطي القياسي لتوصيل الشاشة مباشرة بمتحكم Arduino بدون I2C هو كما يلي.

نظرًا للعدد الكبير من جهات الاتصال المتصلة، قد لا تكون هناك مساحة كافية لتوصيل العناصر الضرورية. يؤدي استخدام I2C إلى تقليل عدد الأسلاك إلى 4 وعدد الأطراف المشغولة إلى 2.

أماكن شراء شاشات LCD والدروع الخاصة بالاردوينو

تحظى شاشة LCD 1602 (والإصدار 2004) بشعبية كبيرة، لذا يمكنك العثور عليها بسهولة في المتاجر المحلية عبر الإنترنت وفي المواقع الأجنبية. فيما يلي بعض الروابط لأكثر الخيارات المتاحة:

وحدة الشاشة الزرقاء LCD1602+I2C، متوافقة مع Arduino شاشة LCD1602 بسيطة (إضاءة خلفية خضراء) أرخص من 80 روبل شاشة LCD2004 كبيرة مع I2C HD44780 لاردوينو (إضاءة خلفية زرقاء وخضراء)
شاشة 1602 مع محول IIC وإضاءة خلفية زرقاء نسخة أخرى من LCD1602 مع وحدة I2C ملحومة وحدة محول المنفذ IIC/I2C/TWI/SPI لدرع 1602، متوافقة مع Arduino
عرض بإضاءة خلفية RGB! شاشة LCD مقاس 16×2 + لوحة مفاتيح + درع الجرس للاردوينو درع للاردوينو مع الازرار وشاشة LCD1602 LCD 1602 شاشة LCD للطابعة ثلاثية الأبعاد (وحدة تحكم ذكية لـ RAMPS 1.4، نص LCD 20×4)، وحدة قارئ بطاقات SD وMicroSD

وصف بروتوكول I2C

قبل مناقشة توصيل الشاشة بـ Arduino عبر محول i2c، دعنا نتحدث بإيجاز عن بروتوكول i2C نفسه.

I2C/IIC(الدوائر المتكاملة) هو بروتوكول تم إنشاؤه في الأصل للاتصال دوائر متكاملةداخل جهاز الكتروني. التطوير ينتمي إلى شركة Philips. يعتمد بروتوكول i2c على استخدام ناقل 8 بت، وهو ضروري لتوصيل الكتل في إلكترونيات التحكم، ونظام العنونة، الذي بفضله يمكنك التواصل عبر نفس الأسلاك مع العديد من الأجهزة. نحن ببساطة ننقل البيانات إلى جهاز أو آخر، ونضيف معرف العنصر المطلوب إلى حزم البيانات.

أكثر دائرة بسيطةيمكن أن يحتوي I2C على جهاز رئيسي واحد (غالبًا ما يكون متحكم Arduino) والعديد من الأجهزة التابعة (على سبيل المثال، شاشة LCD). كل جهاز له عنوان في النطاق من 7 إلى 127. ولا ينبغي أن يكون هناك جهازين لهما نفس العنوان في نفس الدائرة.

تدعم لوحة Arduino i2c في الأجهزة. يمكنك استخدام الدبابيس A4 وA5 لتوصيل الأجهزة باستخدام هذا البروتوكول.

هناك العديد من المزايا لتشغيل I2C:

  • تتطلب العملية خطين فقط - SDA (خط البيانات) وSCL (خط المزامنة).
  • ربط عدد كبير من الأجهزة الرائدة.
  • تقليل وقت التطوير.
  • مطلوب متحكم واحد فقط للتحكم في مجموعة الأجهزة بأكملها.
  • يقتصر العدد المحتمل من الدوائر الدقيقة المتصلة بحافلة واحدة فقط على السعة القصوى.
  • درجة عالية من أمان البيانات بفضل مرشح خاص لمنع زيادة التيار المدمج في الدوائر.
  • إجراء بسيط لتشخيص حالات الفشل الناشئة وتصحيح الأخطاء بسرعة.
  • تم دمج الناقل بالفعل في Arduino نفسه، لذلك ليست هناك حاجة لتطوير واجهة ناقل إضافية.

عيوب:

  • يوجد حد للسعة على الخط - 400 pF.
  • من الصعب برمجة وحدة تحكم I2C إذا كان هناك عدة أجهزة مختلفة في الناقل.
  • مع وجود عدد كبير من الأجهزة، يصبح من الصعب عزل الخلل إذا انخفض مستوى أداء أحدها عن طريق الخطأ.

وحدة i2c لشاشات LCD 1602 لاردوينو

الطريقة الأسرع والأكثر ملاءمة لاستخدام شاشة i2c في Arduino هي شراء شاشة جاهزة مع دعم البروتوكول المدمج. ولكن لا يوجد الكثير من هذه الشاشات وهي ليست رخيصة. ولكن تم بالفعل إنتاج عدد كبير من الشاشات القياسية المختلفة. لذلك، فإن الخيار الأكثر بأسعار معقولة وشعبية اليوم هو شراء واستخدام وحدة I2C منفصلة - محول يبدو كما يلي:

على جانب واحد من الوحدة نرى دبابيس i2c - الأرض والطاقة و2 لنقل البيانات. على المحول الآخر نرى موصلات طاقة خارجية. وبطبيعة الحال، تحتوي اللوحة على العديد من المسامير التي يتم من خلالها لحام الوحدة بدبابيس الشاشة القياسية.


يتم استخدام مخرجات i2c للاتصال بلوحة Arduino. إذا لزم الأمر، نقوم بتوصيل الطاقة الخارجية للإضاءة الخلفية. باستخدام أداة التشذيب المدمجة يمكننا ضبط قيم التباين المخصصة J

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

توصيل شاشة LCD بالاردوينو عبر I2C

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

إذا كنت تستخدم محول i2c منفصلًا خاصًا، فيجب عليك أولاً لحامه بوحدة الشاشة. من الصعب ارتكاب خطأ هناك، يمكنك اتباع هذا المخطط.


يتم توصيل شاشة LCD التي تدعم i2c باللوحة باستخدام أربعة أسلاك - سلكان للبيانات وسلكان للطاقة.

  • يتصل طرف GND بـ GND الموجود على اللوحة.
  • دبوس VCC عند 5V.
  • يتصل SCL بالدبوس A5.
  • SDA متصل بالدبوس A.

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

مكتبات للعمل مع شاشة LCD i2c

للتفاعل مع Arduino وLCD 1602 عبر ناقل I2C، ستحتاج إلى مكتبتين على الأقل:

  • مكتبة Wire.h للعمل مع I2C مدرجة بالفعل في المعيار برنامج اردوينوبيئة تطوير متكاملة.
  • مكتبة LiquidCrystal_I2C.h، والتي تتضمن مجموعة واسعة من الأوامر للتحكم في الشاشة عبر ناقل I2C وتتيح لك جعل الرسم أبسط وأقصر. تحتاج إلى تثبيت المكتبة بشكل إضافي. بعد توصيل الشاشة، تحتاج إلى تثبيت مكتبة LiquidCrystal_I2C.h بشكل إضافي

بعد ربط جميع المكتبات الضرورية بالرسم، نقوم بإنشاء كائن ويمكننا استخدام جميع وظائفه. للاختبار، لنقم بتحميل المثال القياسي التالي للرسم.

#يشمل #يشمل // بما في ذلك المكتبة //#include // توصيل مكتبة بديلة LiquidCrystal_I2C LCD(0x27,16,2); // حدد عنوان I2C (القيمة الأكثر شيوعًا)، بالإضافة إلى معلمات الشاشة (في حالة LCD 1602 - سطرين يتكون كل منهما من 16 حرفًا //LiquidCrystal_PCF8574 LCD(0x27); // خيار الإعداد الفارغ لمكتبة PCF8574( ) (lcd.init (); // تهيئة شاشة العرض lcd.backlight(); // توصيل الإضاءة الخلفية lcd.setCursor(0,0); // ضبط المؤشر على بداية السطر الأول LCD.print(" مرحبًا"); // كتابة النص على السطر الأول LCD.setCursor(0,1); // اضبط المؤشر على بداية السطر الثاني LCD.print("ArduinoMaster"); // اكتب النص في السطر الثاني ) حلقة فارغة() ( )

وصف وظائف وطرق مكتبة LiquidCrystal_I2C:

  • home () وclear () - تتيح لك الوظيفة الأولى إرجاع المؤشر إلى بداية الشاشة، والثاني يفعل الشيء نفسه، ولكن في نفس الوقت يحذف كل ما كان على الشاشة من قبل.
  • write(ch) – يسمح لك بطباعة حرف واحد ch على الشاشة.
  • cursor() و noCursor() – يظهر/يخفي المؤشر على الشاشة.
  • blink() وnoBlink() - يومض/لا يومض المؤشر (إذا تم تمكين عرضه من قبل).
  • Display() وnoDisplay() - يسمحان لك بتوصيل/تعطيل الشاشة.
  • ScrollDisplayLeft() وscrollDisplayRight() - لتمرير الشاشة بحرف واحد إلى اليسار/اليمين.
  • autoscroll() وnoAutoscroll() - يسمح لك بتمكين/تعطيل وضع التمرير التلقائي. في هذا الوضع، يتم كتابة كل حرف جديد في نفس المكان، مما يؤدي إلى إزاحة ما تم كتابته مسبقًا على الشاشة.
  • leftToRight() و rightToLeft() - تحديد اتجاه النص المعروض - من اليسار إلى اليمين أو من اليمين إلى اليسار.
  • createChar(ch, bitmap) – ينشئ حرفًا بالكود ch (0 - 7)، باستخدام مجموعة من الصور النقطية لإنشاء نقاط بالأبيض والأسود.

مكتبة بديلة للعمل مع شاشة i2c

في بعض الحالات، قد تحدث أخطاء عند استخدام المكتبة المحددة مع الأجهزة المزودة بوحدات تحكم PCF8574. في هذه الحالة، يمكن اقتراح مكتبة LiquidCrystal_PCF8574.h كبديل. فهو يمتد LiquidCrystal_I2C، لذلك لن تكون هناك مشاكل في استخدامه.

مشاكل في توصيل شاشة LCD i2c

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

أولاً، يمكنك زيادة أو تقليل تباين الشاشة. غالبًا ما تكون الأحرف غير مرئية بسبب التباين ووضع الإضاءة الخلفية.

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

قد يكون السبب الشائع الآخر لفقد النص على الشاشة هو عنوان i2c غير الصحيح. حاول أولاً تغيير عنوان الجهاز في الرسم من 0x27 0x20 أو إلى 0x3F. قد يكون لدى الشركات المصنعة المختلفة عناوين افتراضية مختلفة مبرمجة. إذا لم يساعد ذلك، فيمكنك تشغيل رسم الماسح الضوئي i2c، الذي يقوم بمسح جميع الأجهزة المتصلة وتحديد عنوانها باستخدام القوة الغاشمة. مثال على رسم الماسح الضوئي i2c.

إذا كانت الشاشة لا تزال لا تعمل، فحاول فك المحول وتوصيل شاشة LCD كالمعتاد.

خاتمة

في هذه المقالة، نظرنا إلى المشكلات الرئيسية المتعلقة باستخدام شاشة LCD في مشاريع Arduino المعقدة، عندما نحتاج إلى حفظ الدبابيس المجانية على اللوحة. سيسمح لك محول i2c البسيط وغير المكلف بتوصيل شاشة LCD 1602، مع استخدام منفذين تناظريين فقط. في كثير من الحالات، يمكن أن يكون هذا مهمًا جدًا. ثمن الراحة هو الحاجة إلى استخدام وحدة إضافية - محول ومكتبة. في رأينا، هذا ليس ثمنًا باهظًا يجب دفعه مقابل الراحة ونحن نوصي بشدة باستخدام هذه الميزة في المشاريع.

ما هو جزء لا يتجزأ من عدد كبير من الأجهزة الإلكترونية؟ وبطبيعة الحال، وسائل الإشارة والإخراج الرسومي للبيانات. يكون الأمر دائمًا أكثر ملاءمة وإمتاعًا للمستخدم عندما يمكن رؤية نتيجة "الصندوق الذكي" بصريًا. لذلك، سنقوم اليوم بتوصيل شاشة العرض بـ STM32 لعرض النصوص والأرقام. سيكون بطل تجاربنا هو العرض الشهير من Winstar. وبالمناسبة، ظهر توضيح مهم في التعليقات وهو أن المنهجية هي في الأساس واحدة لجميع العروض المبنية على أساسها HD44780.شكرًا لـ JekaKey على الإضافة المهمة)

أولاً، يجب أن تكون الشاشة متصلة بوحدة التحكم. قم بتنزيل ورقة البيانات وابحث عن دبوس WH1602. انظر هنا:

كما تعلم، عرض WH1602لديه 16 دبابيس. دعونا ننظر إلى كل واحد على حدة..

يجب أن تكون الدبابيس Vss وVdd وK متصلة بالأرض والطاقة، أي تمامًا كما هو موضح في الجدول، لا توجد مفاجآت ولا شيء حتى للمناقشة)

يُستخدم الدبوس رقم 3 لضبط التباين - إذا طبقنا +5V هناك، فلن نرى شيئًا على الإطلاق، وإذا قمنا بتقصير الدبوس على الأرض، فسنعجب بصفين من المربعات السوداء 😉 بطبيعة الحال، هذا لا يناسبنا ، لذلك نحن بحاجة إلى تعليق مقياس الجهد (المقاوم) هناك بمقاومة متغيرة) لضبط التباين. يتم توفير أفضل رؤية للأحرف من خلال جهد 0.5-0.7 فولت عند دبوس العرض هذا.

إن دبوس RS هو بالفعل دبوس سنتحكم فيه بأنفسنا باستخدام وحدة التحكم الدقيقة. مستوى الجهد المنخفض (0) على هذا الطرف يعني أن الأمر سيتبع الآن، والمستوى العالي (1) يعني أنه سيكون هناك الآن بيانات ليتم كتابتها على ذاكرة العرض.

Pin R/W - من الواضح هنا، إما أن نقرأ البيانات (عرض علامة مشغول، على سبيل المثال)، في هذه الحالة يوجد 1 على هذا الدبوس، أو نكتب الأمر/البيانات على الشاشة، ثم لدينا 0 هنا.

DB7 - DB0 - ناقل البيانات، وهذا يوضح كل شيء)

Pin E هو ما يسمى بإشارة التمكين. وهذا هو ما هو مطلوب ل. للعمل مع الشاشة - تسجيل البيانات أو إصدار أمر - نحتاج إلى إصدار نبضة إيجابية لهذا الدبوس. أي أن الإجراء سيبدو كما يلي:

  1. على الأطراف RS، R/W، DB7 - DB0 - الإشارات الضرورية المقابلة لأمرنا.
  2. نحن نوفر واحدة لدبوس E.
  3. Zhdems (وفقًا لورقة البيانات – على الأقل 150 نانو ثانية)
  4. نحن نطبق مستوى منخفض (0) على الدبوس E.

تحتاج إلى وضع 4.2 فولت على الساق A/Vee لتشغيل الإضاءة الخلفية للشاشة.

هذه هي الطريقة التي يتم بها الاتصال بشاشة WH1602.

لقد اكتشفنا توصيل WH1602، ولكن قبل الانتقال إلى المثال، دعونا نلقي نظرة على الأوامر التي تفهمها شاشتنا بشكل عام. للقيام بذلك، نذهب إلى ورقة البيانات ونجد جدولًا مثيرًا للاهتمام:

جميع الأوامر والإشارات التي يجب أن تكون على المسامير المقابلة لـ WH1602 لكل أمر محدد موصوفة هنا. على سبيل المثال، نريد مسح الشاشة، وننظر إلى الجدول، وهنا الأمر الذي نحتاجه! عرض واضح!

نحن نطبق الأصفار على الأطراف RS وR/W وDB7 وDB6 وDB5 وDB4 وDB3 وDB2 وDB1 وواحد لتثبيت DB0. ماذا بعد؟ هذا صحيح، واحد على الدبوس E، ثم انتظر بعض الوقت وقم بخفض E إلى الصفر مرة أخرى. هذا كل شيء، تم مسح الشاشة 😉 قبل تنفيذ الأمر التالي مباشرة، يجب عليك التوقف مؤقتًا، كما هو موضح في ورقة البيانات لكل أمر. سيكون من الأفضل استطلاع علامة الانشغال، وبمجرد إعادة تعيينها إلى 0، يمكنك مواصلة العمل. هناك أيضًا أمر خاص لقراءة هذا العلم، لذلك كل شيء واضح مع هذا) دعنا ننتقل...

وفي الواقع، كل شيء مع النظرية، يمكنك بالفعل محاولة كتابة شيء ما. لتسهيل العمل مع الشاشة، قمت بإنشاء مكتبة صغيرة، والآن دعونا نرى كيف يمكن استخدامها. أولا، تحميل

حصلنا على ملفين تحت تصرفنا، MT_WH1602.c وMT_WH1602.h. نقوم بتمزيق الجزء الثاني، وهنا نحتاج إلى تحديد المسامير ووحدة التحكم المستخدمة.

بالمناسبة، شاشتي متصلة بهذه الطريقة:

RS-PC2
يمين/W – PB10
ه-PB14
DB7-PD2
DB6-PC12
DB5-PA8
DB4-PA10
DB3-PA15
DB2-PD11
DB1-PA3
DB0-PA5

افتح الملف MT_WH1602.h:

#تعريف المنصة (STM32F10x)

بعد ذلك، حدد منافذ المتحكم الدقيق التي تتصل بها الشاشة. فقط دعونا أولاً نحدد المنافذ التي نستخدمها. عندما أقوم بالاتصال، أستخدم GPIOA وGPIOB وGPIOC وGPIOD، ونكتب:

وبالمثل بالنسبة لأرجل المتحكم الدقيق الأخرى.

لقد انتهينا من الإعداد، لنكمل) لاستدعاء الأوامر الواردة في بداية المقال، يحتوي ملف MT_WH1602.c على الوظائف التالية (تم تسميتها بأسماء الأوامر، لذلك أعتقد أن كل شيء واضح) :

باطلة MT_WH1602_ClearDisplay(void)؛ باطلة MT_WH1602_ReturnHome(void)؛ باطلة MT_WH1602_EntryModeSet (عنوان معرف منطقي، تحول منطقي)؛ باطلة MT_WH1602_DisplayOnOff (bool Dbit، bool Cbit، bool Bbit)؛ باطلة MT_WH1602_CursorOrDisplayShift (منطقي SCbit، منطقي RLbit) ؛ باطلة MT_WH1602_FunctionSet (منطقي DLbit، منطقي Nbit، منطقي Fbit)؛ باطلة MT_WH1602_SetCGRAMAddress (عنوان uint8_t) ؛ باطلة MT_WH1602_SetDDRAMAddress (عنوان uint8_t) ؛ منطقي MT_WH1602_ReadBusy(void)؛ باطلة MT_WH1602_WriteData(uint8_t البيانات)؛

بالنسبة لبعض الأوامر، نحتاج إلى تمرير معلمات إلى الوظيفة، على سبيل المثال:

باطلة MT_WH1602_DisplayOnOff (bool Dbit، bool Cbit، bool Bbit)؛

دعونا نلقي نظرة على جدول الأوامر:

نرى أن أمر تشغيل/إيقاف العرض لا يعمل على تشغيل/إيقاف تشغيل الشاشة فحسب، بل يقوم أيضًا بتنشيط/إلغاء تنشيط المؤشر ووميض المؤشر. في ورقة البيانات، يتم تعيين بتات الأوامر هذه على أنها D وC وB، ونمررها كمعلمات إلى الوظيفة. إذا كنا بحاجة إلى تشغيل الشاشة والمؤشر، ولكن مع تعطيل وميض المؤشر، فإننا نستدعي الأمر كما يلي:

MT_WH1602_DisplayOnOff(1, 1, 0);

بشكل عام، كل شيء بسيط 😉

باختصار، نحن نخلق مشروع جديد، أضف مكتبة للعمل مع شاشة WH1602، وقم بإنشاء ملف .c فارغ وابدأ في تعبئته بالكود:

// تضمين ملف المكتبة#تتضمن "MT_WH1602.h" /*******************************************************************/ كثافة العمليات الرئيسية (باطلة) ( // استدعاء وظيفة التهيئة، لا يمكننا الاستغناء عنها =)() ; // الآن نحن بحاجة إلى إجراء تكوين العرض الأولي // التوثيق والإنترنت يوصيان بفعل ذلك ;) MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000) ; MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000) ; MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000) ; MT_WH1602_FunctionSet(1, 1, 1); MT_WH1602_Delay(1000) ; MT_WH1602_DisplayOnOff(1, 0, 0); MT_WH1602_Delay(1000) ; MT_WH1602_ClearDisplay(); MT_WH1602_Delay(2000); // على سبيل المثال، أخذت قيم التأخير الأولى التي تتبادر إلى ذهني) // بشكل عام، تحتاج إلى التحقق من علامة مشغول العرض // لنعرض الآن شيئًا ما، مثل اسم موقعنا MT_WH1602_WriteData(0x6D) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6F) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x74) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x65) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x68) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6E) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x73) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x2E) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x75) ; MT_WH1602_Delay(100) ; بينما (1) ( __NOP() ; ) ) /*******************************************************************/

انتهينا، دعونا نتحقق)


كما ترون، كل شيء يعمل بشكل صحيح)

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

لذلك، من أجل تحديد القيمة التي تريد كتابتها في ذاكرة العرض، عليك أن تأخذ الأرقام المكتوبة في الأعلى واليسار في هذا الجدول لرمز معين. على سبيل المثال، الرمز "أ". دعونا نرى - هذا الرمز يتوافق مع العمود 0100 (0x4) والسطر 0001 (0x1). اتضح أنه لعرض الرمز "A" تحتاج إلى كتابة القيمة 0x41 في الشاشة.

هذا كل شيء الآن =) لقد قمنا بتسوية اتصال وتشغيل شاشة WH1602، لذا نراكم قريبًا!

ملاحظة. عند العمل مع المكتبة، لم أختبر وظيفة قراءة العلامة المشغولة، لذلك إذا لم يعمل شيء فجأة كما ينبغي، فاكتب، وسنكتشف ذلك)

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

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

في المثال، سنلقي نظرة على شاشة Winstar wh1602l1، وهي إحدى شاشات العرض الأكثر شيوعًا على وحدة التحكم hd44780. بالإضافة إلى ذلك، يمكنك توصيل شاشات LCD 2004 وغيرها من الأجهزة المشابهة.
يشير الرقمان الأولان إلى عدد الأحرف في كل سطر، والرقم الثاني إلى عدد الأسطر، وبالتالي فإن العرض المحدد يحتوي على سطرين من 16 حرفًا.
تتضمن طريقة الاتصال هذه شغل 6 منافذ على الأقل من متحكم Arduino. إذا لزم الأمر، يمكنك توصيل شاشة عرض النص 1602 عبر واجهة I2C (منفذين).

من العناصر الإضافية التي نحتاجها مقاومة متغيرة، للتحكم في التباين. بخلاف ذلك، يتم توصيل كل شيء وفقًا للمخطط ووفقًا لورقة البيانات ومخرجات Arduino المحددة في البرنامج.

يعتبر المنفذان 15 و 16 الموجودان على الشاشة مسؤولان عن الإضاءة الخلفية، ويمكن إيقاف تشغيلها أو ضبط السطوع تلقائيًا عند توصيل المقاوم الضوئي بالاردوينو كمستشعر للسطوع.

في مثالنا، سوف نقرأ البيانات من المنفذ التسلسلي ونعرضها على الشاشة:

#يشمل // قم بتوصيل المكتبة للعمل مع شاشات عرض الأحرف LiquidCrystal LCD(13, 11, 5, 4, 3, 2); // (RS، E، D4، D5، D6، D7) قم بتوصيل مخرجات الشاشة وفقًا للتسلسل، R/W – GND، لأننا سنكتب البيانات على الشاشة ولن نقرأ الإعداد الفارغ () (lcd.begin( 16، 2)؛ // تهيئة LCD 1602 // LCD.begin (20، 4)؛ // تهيئة LCD 2004 Serial.begin (9600)؛ // بدء المنفذ التسلسلي) حلقة باطلة () (إذا (Serial.available) ()) // إذا جاءت البيانات من المنفذ، فعندئذ... ( تأخير (100)؛ LCD.clear ()؛ // امسح الشاشة بالكامل while (Serial.available() > 0) // إذا جاءت البيانات من المنفذ أكبر من 0، ثم ... (lcd.write(Serial.read()); // اقرأ القيم من المنفذ التسلسلي واعرضها على الشاشة)) )

يمكنك تعقيد الكود وإخراج ساعة الوقت الحقيقي DS1307 على Arduino إلى LCD1602.

الآن دعونا نلقي نظرة فاحصة على جميع الوظائف الموجودة في المكتبة كريستال سائل:

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

طباعة شاشات الكريستال السائل ()؛- الأبسط والأكثر استخدامًا، ويستخدم لعرض المعلومات.

شاشات الكريستال السائل. واضح(); - يستخدم لتنظيف الشاشة.

شاشات الكريستال السائل.setCursor (س, ذ); - وضع المؤشر في مكان محدد.

X - تغيير الموقع في الخط

Y - تغيير الخط

على سبيل المثال، شاشات الكريستال السائل.setCursor(0, 0); هذه هي الخلية اليسرى العليا.

شاشات الكريستال السائل. المنزل ()؛ -يضع المؤشر في الموضع 0، 0

شاشات الكريستال السائل. المنزل ()؛ = شاشات الكريستال السائل.setCursor(0, 0);

شاشات الكريستال السائل. التمرير العرض الأيسر(); - تحول اليسار

شاشات الكريستال السائل. التمريرDisplayRight(); - التحول إلى اليمين

Lcd.createChar(اسم, مجموعة مصفوفة); - إنشاء العلامة الخاصة بك.

على سبيل المثال، تبدو علامة الدرجة كما يلي:

Celc = (B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000 );




قمة