תצוגת LCD – I2C
תוכן עניינים
מדריך מפורט לשימוש בתצוגת LCD הפועלת באמצעות הפרוטוקול I2C המחובר למיקרו-בקר ארדואינו אונו, במדריך שלפניכם ניתן למצוא פירוט בשפה פשוטה:
1. מהו?
2. עיקרון פעולה.
3. כיצד לחבר לארדואינו אונו.
4. קודי הפעלה לדוגמא.
הפוסט מומלץ לכל תלמיד, סטודנט, מורה או מרצה בתחום ה- Arduino ובתחום הנחיית הפרויקטים.
הקדמה:
תצוגות LCD הן רכיבים נפוצים מאוד בפרויקטים של ארדואינו ומיקרו-בקרים אחרים. הן מאפשרות להציג טקסט, מספרים וסמלים על גבי מסך דיגיטלי קטן ונוח. רוב תצוגות ה-LCD המסורתיות משתמשות בממשק מקבילי, כלומר דורשות מספר רב של חיבורי חוטים בין הלוח לתצוגה.
עם זאת, ישנן גם תצוגות LCD מודרניות יותר המשתמשות בפרוטוקול תקשורת I2C. תצוגות אלו דורשות רק שני חוטים לתקשורת, מה שמפשט מאוד את החיבור ומקל על השימוש בהן בפרויקטים שונים.
פרוטוקול I2C הינו פרוטוקול תקשורת טורית-מקבילית, המאפשר שימוש בשני חוטים בלבד כדי לתקשר עם מגוון התקנים. תצוגות LCD חדישות מסוימות כוללות ממשק I2C מובנה, מה שמפשט מאוד את החיבור שלהן לארדואינו או מיקרו-בקר אחר.
בפוסט זה נכיר את העקרונות של פרוטוקול I2C ונלמד כיצד לחבר תצוגת LCD עם ממשק I2C ללוח הארדואינו. נראה איך לשלוח פקודות בסיסיות לתצוגה כדי להציג טקסט וסמלים, ונבין כיצד לשלוט לחלוטין על תוכן המסך.
מפרט טכני
☸ רזולוציית תצוגה: 2 שורות x 16 תווים
☸ סה"כ תווים אפשריים: 32
☸ טכנולוגיית תצוגה: LCD
☸ מתח הפעלה: 5V
☸ צריכת זרם: נמוכה מאוד
☸ ממשק תקשורת: I2C
☸ כתובת בפרוטוקול I2C: או 0x27 או 0x3f
☸ טמפרטורת הפעלה: 20- עד 70 מעלות צלזיוס
רגלי התצוגה ללא פרוטוקול I2C
תפקיד הדקים (רגלים):
☸ VSS – רגל חיבור לאדמה (Ground) מספקת נקודת ייחוס למתח של 0 וולט עבור התצוגה.
☸ VDD – רגל אספקת מתח חיובי בדרך כלל מחוברת ל+5 וולט המספקים את המתח להפעלת התצוגה.
☸ VO – רגל לכוונון ניגודיות התצוגה בדרך כלל מחוברת דרך פוטנציומטר לVDD או לאדמה כדי לשנות את בהירות התצוגה.
☸ RS – רגל בחירת רישום נתונים/פקודות קובעת אם המידע הנשלח לתצוגה הוא נתונים להצגה או פקודת בקרה.
☸ R/W – רגל קריאה/כתיבה קובעת אם הפעולה היא קריאה מתצוגה או כתיבה אליה. בדרך כלל מחוברת לאדמה לצורך כתיבה.
☸ E – רגל Enable משמשת כאישור לתצוגה לקלוט את המידע או הפקודה שהתקבלה. יוצרת פולס קצר לצורך סנכרון.
☸ 7-14 – רגלי נתונים D0-D7 משמשות להעברת נתונים ופקודות בין המעבד לתצוגה, בכיוון אחד או דו-כיווני.
☸ 15-16 – A ו- K משמשות לכיוון כתובת הזיכרון בתצוגה אם יש מספר שורות/עמודות.
עקרון פעולה של תצוגת LCD
תצוגת LCD מורכבת ממטריצה של תאים המכילים נוזל גבישי (LCD). כאשר מעבירים מתח דרך הנוזל, הוא מסתדר בצורה מסוימת שמאפשרת מעבר או חסימת אור.
התצוגה מקבלת נתונים ופקודות ממעבד דרך רגלי הנתונים (Data Pins). המעבד שולח תחילה פקודת בקרה דרך רגל ה-RS כדי להגדיר אם המידע שיישלח הוא נתונים או פקודה.
לאחר מכן המעבד שולח את המידע או הפקודה בפועל דרך רגלי הנתונים, ויוצר פולס קצר ברגל ה-E כאישור לקלוט את המידע.
לדוגמה, כדי לשלוח את האות A לתצוגה, המעבד קודם כל שולח פקודת "נתונים" דרך רגל ה-RS, לאחר מכן שולח את ערך הקוד של האות A ברגלי הנתונים, ולבסוף יוצר פולס ברגל ה-E. התצוגה תקלוט את הערך 65 (קוד ASCII של A) ותציג אותו.
שליחת נתונים מהתצוגה למעבד אפשרית גם כן על ידי שימוש ברגל הקריאה/כתיבה (R/W). אך ברוב המקרים התקשורת היא חד-כיוונית מהמעבד לתצוגה בלבד.
פרוטוקול I2C והייתרון שלו
פרוטוקול I2C זה פרוטוקול תקשורת שעובד על גבי שני חוטים בלבד – SCL ו-SDA.
זאת בניגוד לתצוגת LCD רגילה שצריכה הרבה חוטים שמחוברים מהלוח ארדואינו ישירות לכל רגל בתצוגה.
היתרון בI2C הוא שאנחנו חוסכים המון חיווט ומשתמשים רק באותם שני חוטים בודדים בשביל לדבר עם התצוגה.
כך אנחנו "חוסכים" הרבה מאוד חוטים ורגלים בלוח הארדואינו שהיינו צריכים לחבר לתצוגה אם לא היינו משתמשים בפרוטוקול I2C.
בזכות הפרוטוקול אנחנו חוסכים המון חיווט, חוסכים ברגלים של הלוח ארדואינו, ויכולים להתממשק להרבה מאוד התקנים חיצוניים בעזרת אותם שני חוטים בודדים.
טבלת הסבר פונקציות:
שם הפונקציה | הסבר |
include# | על מנת שהתוכנה תזהה את הפקודות שאנו הולכים להשתמש בהם כאשר נכתוב ל- LCD. אנו צריכים להגדיר את הספרייה של ה-LCD. בנוסף מגדירים לארדואינו שאנו הולכים להשתמש בפרוטוקול I2C שהתקשורת שלו מתבצעת עם רגליים אנלוגיות מוגדר מעל ה-void setup על מנת שתוכר בכל התוכנית, גם בפונקציית void setup וגם בפונקציה void loop. |
LiquidCrystal_I2C lcd | מגדירים לארדואינו באיזו תצוגת LCD אנו הולכים להשתמש ובאיזו כתובת ממוקמת תצוגת ה- LCD. קיימות שתי כתובות בהן תצוגת ה-LCD יכולה להיות ממוקמת, או בכתובת 0x27, או בכתובת 0x3f. מוגדר מעל ה-void setup על מנת שתוכר בכל התוכנית, גם בפונקציית void setup וגם בפונקציה void loop. |
;() lcd.begin | מגדירים לארדואינו שאנו מתחילים לעבוד עם תצוגת ה-LCD. |
;()lcd.backlight | מדליקה את התאורה של המסך. |
;()lcd.noBacklight | מכבה את התאורה של המסך. |
;()lcd.clear | כל התווים שמופיעים על מסך ה-LCD ימחקו והסמן יחזור למיקום 0,0. |
lcd.print | הצגת מלל/נתונים בתצוגת ה-LCD. |
lcd.SetCursor | קביעת מיקום הסמן בתצוגת ה-LCD. מספר השורה – באיזה שורה המלל יוצג (0 מסמן שורה ראשונה, 1 מסמן שורה שנייה) מיקום בשורה – היכן בשורה יוצר המלל. (אפשר לבחור ערך בין 0 ל15). |
תיאור הדקים
שם ההדק בתצוגת הLCD | מספר ההדק בלוח הארדואינו |
VCC | VCC |
GND | GND |
SDA | A4 |
SCL | A5 |
קטע קוד להפעלת תצוגת LCD I2C
הצגת מלל על תצוגת הLCD
#include // הגדרת ספרייה של התצוגה
LiquidCrystal_I2C lcd(0x27, 16, 2); //0x27 / 0x3f רוב תצוגת עובדת
void setup()
{
lcd.begin(); // פקודה להתחלת עבודה עם התצוגה
lcd.backlight(); // הדלקת לד אחורי של התצוגה
lcd.setCursor(5,0); // קביעת הסמן לשורה 1 מיקום 5
lcd.print("Code By:"); // הצגת מלל פרויקט
lcd.setCursor(1,1); // קביעת הסמן לשורה 2 מיקום 1
lcd.print("ELEC4U.CO.IL"); // הדפסת שם הפרויקט
delay(5000); // השהייה של 5 שניות על מנת שיראו את מה שכתוב בתצוגה
}
void loop()
{
}