مقدمة إلى وحدة مهايئ LCD I2C

جرب أداة القضاء على المشاكل





في هذا المنشور ، سنلقي نظرة على وحدة محول LCD المستندة إلى 'I2C' أو 'IIC' أو 'I square C' ، والتي ستقلل التوصيلات السلكية بين Arduino وشاشة LCD إلى سلكين فقط ، مما يوفر أيضًا أطنانًا من دبابيس GPIO لـ أجهزة استشعار / محركات أخرى إلخ.

قبل أن نناقش وحدة محول I2C LCD ، من المهم أن نفهم ما هو ناقل I2C وكيف يعمل.



ولكن على أي حال ، لا تحتاج إلى أن تكون خبيرًا في بروتوكول I2C للعمل مع محول LCD المذكور.

رسم توضيحي لاتصال I2C:

رسم توضيحي لاتصال I2C:

يرمز I2C أو IIC إلى 'Inter-Integrated Circuit' وهي عبارة عن ناقل كمبيوتر تسلسلي اخترعته شركة Philips لأشباه الموصلات ، المعروفة اليوم باسم أشباه الموصلات NXP. تم اختراع نظام الحافلات هذا في عام 1982.



ما هي الحافلة؟

الناقل عبارة عن مجموعة من الكابلات / الأسلاك التي تنقل البيانات من شريحة إلى شريحة أخرى / لوحة دائرة كهربائية إلى لوحة دائرة أخرى.

الميزة الرئيسية لبروتوكول ناقل I2C هي أنه يمكن ربط المتحكم الدقيق أو المستشعرات أو الرقائق المدعومة بسلكين فقط. الميزة المذهلة لهذا البروتوكول هي أنه يمكننا ربط 127 شريحة أو مستشعر / مشغل مختلف بجهاز رئيسي واحد والذي عادة ما يكون متحكمًا بسلكين فقط.

ما هما سلكا I2C؟

السلكان هما SDA و SCL وهما البيانات التسلسلية والساعة التسلسلية على التوالي.

يتم استخدام الساعة التسلسلية أو SCL لمزامنة اتصال البيانات عبر ناقل I2C. SDA أو Serial Data هو خط البيانات الذي يتم فيه نقل البيانات الفعلية من الرئيسي إلى التابع والعكس صحيح. يتحكم الجهاز الرئيسي في الساعة التسلسلية ويقرر الجهاز التابع الذي يحتاج إلى الاتصال به. لا يمكن لأي جهاز تابع بدء الاتصال أولاً ، فقط الجهاز الرئيسي يمكنه القيام بذلك.

يعتبر خط البيانات التسلسلي ثنائي الاتجاه وقوي ، بعد إرسال كل مجموعة من بيانات 8 بت ، يرسل جهاز الاستقبال بت إقرار.

ما مدى سرعة بروتوكول I2C؟

النسخة الأصلية من بروتوكول I2C التي تم تطويرها عام 1982 تدعم 100 كيلوبت في الثانية. تم توحيد الإصدار التالي في عام 1992 والذي دعم 400 كيلو بت في الثانية (الوضع السريع) ودعم ما يصل إلى 1008 جهاز. تم تطوير الإصدار التالي في عام 1998 بسرعة 3.4 ميجابت في الثانية (وضع السرعة العالية).

تم تطوير العديد من إصدارات I2C الأخرى في الأعوام 2000 و 2007 و 2012 (مع وضع فائق السرعة بسرعة 5 ميجابت في الثانية) وتم تطوير الإصدار الأخير من I2C في عام 2014.

لماذا مقاومات السحب في حافلة I2C؟

SDA و SCL هما 'تصريف مفتوح' مما يعني أن كلا الخطين يمكن أن يكونا منخفضين ولكن لا يمكنهما دفع الخطوط عالية ، لذلك يتم توصيل مقاومة سحب في كل من الخطوط.

ولكن مع معظم وحدات I2C مثل LCD أو RTC ، تم تضمين مقاومات سحب لأعلى ، لذلك لا نحتاج إلى توصيل أي منها ما لم يتم تحديدها.

مقاومة السحب / المنسدلة: المقاوم المنسدل هو المقاوم المتصل بخط + V من الإمداد للحفاظ على المستوى المنطقي للخط مرتفعًا إذا لم يكن الخط مرتفعًا أو منخفضًا.

المقاوم المنسدل هو المقاوم المتصل بخط –Ve للإمداد للحفاظ على المستوى المنطقي للخط عند LOW إذا لم يكن الخط مرتفعًا أو منخفضًا.

هذا أيضا يمنع الضوضاء التي تدخل الخطوط.

نأمل أن نكون قد خدشنا سطح بروتوكول I2C ، إذا كنت بحاجة إلى مزيد من المعلومات حول بروتوكول I2C ، فيرجى تصفح الإنترنت

يوتيوب وجوجل.

الآن دعنا نلقي نظرة على وحدة I2C LCD:

دبوس وحدة I2C LCD

يوجد 16 دبوس إخراج لشاشة LCD يمكن لحامها مباشرة في الجزء الخلفي من وحدة 16 X 2 LCD.

دبابيس الإدخال هي + 5V و GND و SDA و SCL. دبابيس SDA و SCL على Arduino Uno عبارة عن دبابيس A4 و A5 على التوالي. بالنسبة إلى Arduino mega SDA ، يكون رقم التعريف الشخصي رقم 20 و SCL هو رقم التعريف الشخصي رقم 21.

دعونا نقارن كيف يبدو عندما نقوم بتوصيل شاشة LCD بـ Arduino بدون محول I2C ومع المحول.

بدون محول I2C:

اردوينو بدون محول I2C

مع محول I2C:

اردوينو باستخدام محول I2C

المحول ملحوم على الجزء الخلفي من شاشة LCD وكما نرى أننا حفظنا الكثير من دبابيس GPIO لمهام أخرى ويمكننا أيضًا الاستمرار في إضافة 126 جهاز I2C إلى المسامير A4 و A5.

يرجى ملاحظة أن مكتبة Liquid Crystal القياسية لن تعمل مع محول LCD I2C هذا ، وهناك مكتبة خاصة لهذا ، والتي سيتم تغطيتها قريبًا وسوف نوضح لك كيفية استخدام هذه الوحدة مع مثال الترميز.

كيفية توصيل محول I2C بشاشة مقاس 16 × 2

في الأقسام أعلاه من المقالة ، تعلمنا أساسيات بروتوكول I2C وأخذنا نظرة عامة أساسية على وحدة محول I2C LCD. في هذا المنشور ، سوف نتعلم كيفية توصيل وحدة مهايئ I2C LCD بشاشة LCD مقاس 16 × 2 وسنرى كيف يمكن البرنامج مع مثال.

الميزة الرئيسية لبروتوكول I2C هي أنه يمكننا توصيل المستشعرات / أجهزة الإدخال / الإخراج المدعومة في سطرين فقط وهو مفيد مع Arduino لأنه يحتوي على دبابيس GPIO محدودة.

الآن دعونا نرى كيفية توصيل الوحدة بشاشة LCD.

تحتوي الوحدة على 16 دبابيس إخراج و 4 دبابيس إدخال. يمكننا فقط لحام المحول في الجزء الخلفي من شاشة LCD مقاس 16 × 2. من بين 4 دبابيس الإدخال ، الاثنان + 5V و GND ، والباقي هما SDA و SCL.

يمكننا أن نرى أننا وفرنا الكثير من المسامير في Arduino لمهام الإدخال / الإخراج الأخرى.

يمكننا ضبط تباين الشاشة عن طريق ضبط مقياس الجهد باستخدام مفك صغير (مظلل في المربع الأحمر).

يمكن الآن التحكم في الإضاءة الخلفية في كود البرنامج نفسه:

اضاءه خلفيه ال سى دى()

سيؤدي هذا إلى تشغيل الإضاءة الخلفية على شاشة LCD.

lcd.noBacklight ()

سيؤدي هذا إلى إيقاف تشغيل الإضاءة الخلفية على شاشة LCD.

يمكننا أن نرى أن هناك وصلة مرور متصلة ، والتي يتم تمييزها في المربع الأحمر ، إذا تمت إزالة العبور ، تظل الإضاءة الخلفية مطفأة بغض النظر عن أمر البرنامج.

الآن تم الانتهاء من إعداد الأجهزة ، والآن دعونا نرى كيفية البرمجة. يرجى تذكر أن وحدة I2C LCD تحتاج إلى خاص

المكتبة ومكتبة 'Liquidcrystal' المثبتة مسبقًا لن تعمل.

يمكنك تنزيل مكتبة I2C LCD من هنا والإضافة إلى Arduino IDE:

github.com/marcoschwartz/L LiquidCrystal_I2C

من المنشور السابق علمنا أن أجهزة I2C لها عنوان يمكن من خلاله للسيد أو المتحكم الدقيق تحديد الجهاز والتواصل.

في معظم الحالات ، بالنسبة لوحدة I2C LCD ، سيكون العنوان '0x27'. لكن التصنيع المختلف قد يكون له عنوان مختلف. يتعين علينا إدخال العنوان الصحيح في البرنامج فقط عندها ستعمل شاشة LCD الخاصة بك.

للعثور على العنوان ، ما عليك سوى توصيل 5V بـ Vcc و GND بـ GND من Arduino و SCL pin من وحدة I2C إلى A5 و SDA إلى A4 وتحميل الكود أدناه.

سيؤدي هذا إلى فحص أجهزة I2C المتصلة وإظهار عنوانها.

// -------------------------------- //
#include
void setup()
{
Wire.begin()
Serial.begin(9600)
while (!Serial)
Serial.println('-----------------------')
Serial.println('I2C Device Scanner')
Serial.println('-----------------------')
}
void loop()
{
byte error
byte address
int Devices
Serial.println('Scanning...')
Devices = 0
for (address = 1 address <127 address++ )
{
Wire.beginTransmission(address)
error = Wire.endTransmission()
if (error == 0)
{
Serial.print('I2C device found at address 0x')
if (address <16)
{
Serial.print('0')
}
Serial.print(address, HEX)
Serial.println(' !')
Devices++
}
else if (error == 4)
{
Serial.print('Unknown error at address 0x')
if (address <16)
Serial.print('0')
Serial.println(address, HEX)
}
}
if (Devices == 0)
{
Serial.println('No I2C devices found ')
}
else
{
Serial.println('-------------- done -------------')
Serial.println('')
}
delay(5000)
}
// -------------------------------- //

قم بتحميل الكود وافتح الشاشة التسلسلية.

كما يمكننا أن نرى تم اكتشاف جهازين ويتم عرض عناوينهما ، ولكن إذا كنت ترغب في العثور فقط على عنوان وحدة I2C LCD ، فلا يجب عليك توصيل أي أجهزة I2C أخرى أثناء المسح.
في النهاية حصلنا على العنوان '0x27'.

سنقوم الآن بصنع ساعة رقمية كمثال لأن هناك جهازي I2C ، وحدة LCD و RTC أو وحدة ساعة الوقت الحقيقي. سيتم توصيل كلتا الوحدتين بسلكين.

قم بتنزيل المكتبة التالية:
مكتبة RTC: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

كيفية ضبط الوقت على RTC

• افتح Arduino IDE وانتقل إلى ملف> مثال> DS1307RTC> ضبط الوقت.
• قم بتحميل الكود مع الأجهزة المكتملة وافتح الشاشة التسلسلية وانتهى الأمر.

مخطط الرسم البياني:

برنامج:

//------------Program Developed by R.Girish-------//
#include
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
}
void loop()
{
tmElements_t tm
lcd.clear()
if (RTC.read(tm))
{
if (tm.Hour >= 12)
{
lcd.setCursor(14, 0)
lcd.print('PM')
}
if (tm.Hour <12)
{
lcd.setCursor(14, 0)
lcd.print('AM')
}
lcd.setCursor(0, 0)
lcd.print('TIME:')
if (tm.Hour > 12)
{
if (tm.Hour == 13) lcd.print('01')
if (tm.Hour == 14) lcd.print('02')
if (tm.Hour == 15) lcd.print('03')
if (tm.Hour == 16) lcd.print('04')
if (tm.Hour == 17) lcd.print('05')
if (tm.Hour == 18) lcd.print('06')
if (tm.Hour == 19) lcd.print('07')
if (tm.Hour == 20) lcd.print('08')
if (tm.Hour == 21) lcd.print('09')
if (tm.Hour == 22) lcd.print('10')
if (tm.Hour == 23) lcd.print('11')
}
else
{
lcd.print(tm.Hour)
}
lcd.print(':')
lcd.print(tm.Minute)
lcd.print(':')
lcd.print(tm.Second)
lcd.setCursor(0, 1)
lcd.print('DATE:')
lcd.print(tm.Day)
lcd.print('/')
lcd.print(tm.Month)
lcd.print('/')
lcd.print(tmYearToCalendar(tm.Year))
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0)
lcd.print('RTC stopped!!!')
lcd.setCursor(0, 1)
lcd.print('Run SetTime code')
} else {
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Read error!')
lcd.setCursor(0, 1)
lcd.print('Check circuitry!')
}
}
delay(1000)
}
//------------Program Developed by R.Girish-------//

ملحوظة:

LiquidCrystal_I2C LCD (0x27، 16، 2)

'0x27' هو العنوان الذي وجدناه عن طريق المسح و 16 و 2 هما عدد الصفوف والأعمدة على شاشة LCD.

بالنسبة إلى RTC ، لسنا بحاجة إلى العثور على العنوان ولكننا وجدنا أثناء مسح '0x68' ، ولكن على أي حال ، فإن مكتبة RTC ستتعامل معه.

الآن دعنا نرى مقدار تقليل ازدحام الأسلاك وحفظنا دبابيس GPIO على Arduino.

تم توصيل 4 أسلاك فقط بشاشة LCD ، مظللة بالمربع الأحمر.

يتم أيضًا توصيل 4 أسلاك فقط من Arduino وتشترك وحدة RTC في نفس الخطوط.

لقد اكتسبت الآن معرفة أساسية عن I2C وكيفية استخدام وحدة محول I2C LCD.
هل أعجبك هذا المنصب؟ هل لديك اسئلة؟ يرجى التعبير في قسم التعليقات ، قد تحصل على رد سريع.




زوج من: دائرة اختبار الصمام الثنائي الترانزستور البسيطة التالي: اجعل دائرة موسع نطاق التحكم عن بعد بالأشعة تحت الحمراء