עם תרמיל I2C ישנם שלושה זוגות נחיתות, A0, A1, A2, הקובעים את ה- 3 LSB של כתובת המכשיר, תוך שימוש בינארי הפוך.
נשאר לבד , הם מייצרים חלק מה- F או 7 מהכתובת. 0x3F נפוץ, וכך גם 0x27.
כדי להשתמש ביותר ממכשיר אחד יש צורך לקפוץ את כולם באופן ייחודי.
הסיביות העליונות המייצרות את 0x3 הם קווית. כך גם החלק הגבוה ביותר של הבית התחתון. ניתן לשנות רק את שלושת הסיביות בסדר הנמוך ביותר.
מכיוון שסיביות הכתובת הללו הפוכות, הקפצה על ה- A0 תגרע 1 מהכתובת. 0x3F יהפוך ל- 0x3E, 7 יהפוך ל- 6.
יש לך שליטה מספקת בכדי להכין עד 7 מודולי LCD באותו אוטובוס I2C.
היחיד אזהרה היא שאם יש לך יותר ממכשיר אחד שכותב למסכי ה- LCD השונים אתה עלול לקבל התנגשויות, מה שעלול לפשל את התצוגה די טוב.
יש שאלות על הימנעות ואיתור התנגשות I2C ב- http://RaspberryPi.StackExchange.com אם זה המצב שלך.
קפיצות אחד או יותר מהם קל למדי - פשוט הכניסו מראש חוט והלחמו אותו במהירות ואז חתכו את העודפים.
חוטו את חוטי SDA ו- SCL של צגי ה- LCD במקביל ול סיכות SDA ו- SCL בארדואינו, בדרך כלל A4 ו- A5. (אני תמיד מתחיל עם קרש לחם בשביל זה). ודא שיש נגדי משיכה בדידים (10K נפוץ) בכל אחד מהם, במקום אחד בלבד באוטובוס.
אם יש לך מודול DS3231 RTC במערכת, אינך צריך להוסיף משיכה. -קופצים כי יש להם אותם באופן פנימי.
אם LCD אחד כבר עובד אז אתה יודע שיש לך מתח משיכה מתאים באוטובוס. (האותות מועברים למצב הקרקע לשליחת נתונים באוטובוס I2C)
אז, לסיכום:
אם יש לך שני מסכי LCD במערכת שלך תוכל להשתמש במודולי LCD ש כבר מגיעים עם כתובות שונות, כמו
LiquidCrystal_I2C lcd1 (0x27, ....);
לראשונה, ואז
LiquidCrystal_I2C lcd2 (0x3F, .....);
עבור השני.
שים לב שהפרמטרים להגדרות אלה הם
LiquidCrystal_I2C lcdname (addr, en, rw, rs, d4, d5, d6, d7, bl, blpol);
0x27 ו- 0x3F הן כתובות המניות הנפוצות ביותר ו מודולים 0x27 מתקשים למצוא.
אם יש לך 0x27 אז זה סביר מאוד שאם אתה קונה חדש יותר זה יהיה 0x3f. הבעיה נפתרה.
d4 ו- d5 בהגדרה מציין את הסיכות לשימוש עבור I2C.
באפשרותך להפעיל את תוכנית i2cscanner כדי לראות מה היא מוצאת, לאחר שהם מחוברים יחד. אם אתה רואה שתי כתובות שונות, נניח 0x27 ו- 0x3F, אתה יכול ללכת.
אם רק 2F מופיע, אז אתה רוצה לשקול הלחמה של A0 יחד במודול אחד ואז להפעיל את הסורק שוב כדי לוודא שהוא עובד.
כך אני בדרך כלל עושה את זה כששניהם בוא להגדיר כ- 0x3f:
יש לי צהוב שהוא 0x3F מלאי וכחול שבו קפצתי A0 כדי להפוך אותו ל- 0x3E. שניהם 20 x 4 מציגים.
הנה ההגדרות שלי: (זכור, 4,5 מגדירים סיכות SDA, SCL)
LiquidCrystal lcdblue ( 0x3e, 2,1,0,4,5,6,7,3, POSITIVE); LiquidCrystal lcdyellow (0x3f, 2,1,0,4,5,6,7,3, POSITIVE);
ואז בהתקנה () אני משתמש בזה:
lcdblue.begin (20,4); lcdblue.backlight (); delay (250); lcdblue.nobacklight () ; עיכוב (250); lcdblue.backlight (); lcdyellow.begin (20,4); lcdyellow.backlight (); עיכוב (250); lcdyellow.nobacklight (); עיכוב (250); lcdyellow.backlight ();
וזה טוב ללכת, להשתמש בסיכה A4 כ- SDA ו- A5 כ- SCL.
אתה יודע שהם עובדים כשהם קורצים לך את התאורה האחורית.
אם אחד משלך הוא 20 x 2, השתמש ב- lcd2.begin (20,2);
כמובן.
אם אתה באמת רוצה להשתמש בסיכות אחרות עבור ה- I2C שלך ואז פשוט לשנות את 4,5 בהגדרת LiquidCrystal_I2C
לסיכות בהן ברצונך להשתמש. מעולם לא פגשתי מישהו שירצה לעשות זאת.
מקווה שזה יעזור.