מבוא למודול מתאם LCD I2C

נסה את הכלי שלנו לביטול בעיות





בפוסט זה אנו נסתכל על מודול מתאם LCD מבוסס 'I2C' או 'IIC' או 'I square C', אשר יפחית את חיבורי החוטים בין ארדואינו לתצוגת LCD לשני חוטים בלבד, וגם יחסוך טונות של סיכות GPIO עבור חיישנים / כוננים אחרים וכו '.

לפני שנדון על מודול מתאם LCD I2C, חשוב להבין מהו אוטובוס I2C וכיצד הוא עובד.



אבל בכל מקרה אתה לא צריך להיות מומחה עם פרוטוקול I2C כדי לעבוד עם מתאם LCD זה.

איור של חיבור I2C:

איור של חיבור I2C:

ה- I2C או ה- IIC מייצג 'Inter-Integrated Circuit' הוא אוטובוס מחשב סדרתי שהומצא על ידי מוליכים למחצה של פיליפס, המכונה כיום מוליכים למחצה NXP. מערכת אוטובוסים זו הומצאה בשנת 1982.



מהו אוטובוס?

אוטובוס הוא קבוצת כבלים / חוטים המעבירים נתונים משבב אחד לשבב אחר / מעגל אחד ללוח מעגל אחר.

היתרון העיקרי של פרוטוקול האוטובוסים I2C הוא שמיקרו-בקר או חיישנים או שבבים נתמכים יכולים להיות מקושרים רק עם שני חוטים. היתרון המפוצץ של פרוטוקול זה הוא שאנו יכולים לחבר 127 שבבים או חיישנים / דרייברים שונים למכשיר מאסטר אחד אשר בדרך כלל מיקרו-בקר עם שני חוטים בלבד.

מהם שני חוטי I2C?

שני החוטים הם SDA ו- SCL שהם נתונים סידוריים ושעון סידורי בהתאמה.

השעון הסידורי או SCL משמשים לסנכרון תקשורת הנתונים באמצעות אוטובוס I2C. ה- SDA או הנתונים הסידוריים הם קו הנתונים בו מועברים הנתונים בפועל ממאסטר לעבד ולהיפך. מכשיר המאסטר שולט בשעון הסידורי ומחליט לאיזה מכשיר עבדים הוא צריך לתקשר. אף מכשיר עבדים לא יכול ליזום תחילה תקשורת, רק מכשיר מאסטר יכול לעשות זאת.

קו הנתונים הסידורי הוא דו כיווני וחזק, לאחר כל קבוצה של נתונים של 8 סיביות, המכשיר המקבל שולח חזרה ביט אישור.

כמה מהיר פרוטוקול I2C?

הגרסה המקורית של פרוטוקול I2C שפותחה בשנת 1982 תמכה ב 100 Kbps. הגרסה הבאה הייתה סטנדרטית בשנת 1992 שתמכה ב- 400Kbps (מצב מהיר) ותמכה בעד 1008 מכשירים. הגרסה הבאה פותחה בשנת 1998 עם 3.4 מגה לשנייה (מצב במהירות גבוהה).

כמה גרסאות I2C אחרות פותחו בשנים 2000, 2007, 2012 (עם מצב 5Mbps אולטרה-מהיר) והגרסה האחרונה של I2C פותחה בשנת 2014.

מדוע נגדי משיכה באוטובוס I2C?

ה- SDA וה- SCL הם 'open-drain', כלומר שני הקווים יכולים לרדת נמוך אך הם אינם יכולים להניע את הקווים HIGH, ולכן נגד כל אחד מהקווים מחובר נגד משיכה.

אך ברוב המודולים I2C כגון LCD או RTC הובנה נגדים למשוך, כך שאיננו צריכים לחבר אחד אלא אם כן צוין.

נגד משיכה / משיכה כלפי מטה: נגד משיכה הוא נגד המחובר לקו + Ve של האספקה ​​כדי לשמור על רמת ההיגיון של קו ל- HIGH אם הקו אינו גבוה ולא נמוך.

נגד נפתח הוא נגד המחובר לקו -Ve של האספקה ​​כדי לשמור על רמת ההיגיון של קו ל- LOW אם הקו אינו גבוה ולא נמוך.

זה גם מונע כניסת רעשים לקווים.

אנו מקווים ששרטנו את פני השטח של פרוטוקול I2C, אם אתה זקוק למידע נוסף על פרוטוקול I2C, אנא גלוש הלאה

יוטיוב וגוגל.

עכשיו בואו נסתכל על מודול ה- I2C LCD:

מודולי LCD מסוג I2C

ישנם 16 סיכות פלט לתצוגת LCD הניתנות להלחמה ישירות לחלק האחורי של מודול ה- LCD 16 X 2.

פינים הקלט הם + 5V, GND, SDA ו- SCL. סיכות SDA ו- SCL ב- Arduino Uno הן סיכות A4 ו- A5 בהתאמה. עבור Arduino מגה SDA הוא סיכה מספר 20 ו- SCL הוא סיכה מספר 21.

בואו נשווה איך זה נראה כשאנחנו מחברים את ה- LCD לארדואינו ללא מתאם I2C ועם המתאם.

ללא מתאם I2C:

ארדואינו ללא מתאם I2C

עם מתאם I2C:

Arduino באמצעות מתאם I2C

המתאם מולחם על גב צג ה- LCD וכפי שאנו רואים שחסכנו המון סיכות GPIO למשימות אחרות וגם נוכל להמשיך להוסיף 126 מכשירי I2C נוספים לסיכות A4 ו- A5.

שים לב שספריית Liquid Crystal הסטנדרטית לא תפעל עם מתאם LCD I2C זה, יש ספרייה מיוחדת לכך, שתכוסה בקרוב ונראה לך כיצד להשתמש במודול זה לדוגמא קידוד.

כיצד לחבר מתאם I2C לתצוגה 16x2

בסעיפים לעיל במאמר למדנו את היסודות של פרוטוקול I2C ולקחנו סקירה בסיסית על מודול מתאם ה- LCD I2C. בפוסט זה אנו הולכים ללמוד כיצד לחבר את מודול מתאם ה- LCD I2C לתצוגת LCD בגודל 16x2 ונראה כיצד תוכנית עם דוגמה.

היתרון העיקרי של פרוטוקול I2C הוא שאנחנו יכולים לחבר את החיישנים / התקני הקלט / הפלט הנתמכים בשתי שורות בלבד וזה מועיל עם Arduino מכיוון שיש לו סיכות GPIO מוגבלות.

עכשיו בואו נראה איך לחבר את המודול ל- LCD.

למודול 16 פינות פלט ו -4 פינות קלט. אנחנו יכולים פשוט להלחין את המתאם בחלק האחורי של צג LCD בגודל 16x2. מתוך 4 סיכות הכניסה, השניים הם + 5V ו- GND, שאר השניים הם SDA ו- SCL.

אנו יכולים לראות שחסכנו הרבה סיכות בארדואינו למשימות קלט / פלט אחרות.

אנו יכולים להתאים את הניגודיות של התצוגה על ידי התאמת הפוטנציומטר עם מברג קטן (מודגש בתיבה אדומה).

ניתן לשלוט בתאורה האחורית בקוד התוכנית עצמו:

lcd.backlight ()

פעולה זו תפעיל את התאורה האחורית בתצוגת LCD.

lcd.no תאורה אחורית ()

זה יכבה את התאורה האחורית בתצוגת LCD.

אנו יכולים לראות שיש מגשר מחובר, אשר מודגש בתיבה אדומה, אם המגשר מוסר התאורה האחורית נשארת כבויה ללא קשר לפקודת התוכנית.

עכשיו הגדרת החומרה הסתיימה, עכשיו בואו נראה איך מקודדים. אנא זכור כי מודול ה- I2C LCD זקוק למיוחד

הספרייה וספריית 'הנוזלי קריסטל' המותקנת מראש לא יעבדו.

אתה יכול להוריד את ספריית ה- I2C LCD מכאן ולהוסיף ל- Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

מהפוסט הקודם למדנו שלמכשירי I2C יש כתובת לפיה המאסטר או המיקרו-בקר יכולים לזהות את המכשיר ולתקשר.

ברוב המקרים, עבור מודול ה- I2C LCD הכתובת תהיה '0x27'. אך לייצור שונה עשויה להיות כתובת שונה. עלינו להזין את הכתובת הנכונה בתוכנית רק אז תצוגת ה- LCD שלך תפעל.

כדי למצוא את הכתובת פשוט חבר 5V ל- Vcc ו- GND ל- GND של Arduino וסיכה SCL של מודול 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 חוטים מחוברים מארדואינו ומודול ה- RTC חולק את אותם קווים.

עד כה צברת ידע בסיסי ב- I2C וכיצד להשתמש במודול המתאם I2C LCD.
האם אתה אוהב את הפוסט הזה? יש לך שאלות? אנא התבטא בסעיף ההערות, ייתכן שתקבל תשובה מהירה.




קודם: מעגל בודק דיודות טרנזיסטור פשוט הבא: הפוך את המעגל הארוך לטווח הרחבה IR