اتصال i2c اتصال صفحه LCD LCM1602 با I2C به آردوینو

  • ماژول FC-113 مبتنی بر تراشه PCF8574T است که یک شیفت رجیستر 8 بیتی است - یک "بسط" ورودی-خروجی برای اتوبوس سریال I2C. در شکل، ریز مدار DD1 تعیین شده است.
  • R1 یک مقاومت تریم برای تنظیم کنتراست نمایشگر LCD است.
  • Jumper J1 برای روشن کردن نور پس زمینه نمایشگر استفاده می شود.
  • پین های 1…16 برای اتصال ماژول به پین ​​های نمایشگر LCD استفاده می شود.
  • پدهای تماس A1...A3 برای تغییر آدرس I2C دستگاه مورد نیاز است. با لحیم کردن جامپرهای مناسب می توانید آدرس دستگاه را تغییر دهید. جدول مطابقت آدرس ها و جامپرها را نشان می دهد: "0" مربوط به یک مدار باز، "1" به یک بلوز نصب شده است. به طور پیش فرض، هر 3 جامپر و آدرس دستگاه باز هستند 0x27.

2 نمودار اتصال صفحه نمایش LCD به آردوینواز طریق پروتکل I2C

ماژول به روش استاندارد برای گذرگاه I2C به آردوینو متصل می شود: پایه SDA ماژول به پورت آنالوگ A4 وصل شده است، پایه SCL به پورت آنالوگ A5 آردوینو متصل می شود. این ماژول با +5 ولت از آردوینو تغذیه می شود. خود ماژول توسط پین های 1…16 به پین ​​های مربوطه 1…16 در صفحه نمایش LCD متصل می شود.


3 کتابخانه برای کاراز طریق پروتکل I2C

اکنون برای کار با LCD از طریق رابط I2C به یک کتابخانه نیاز داریم. برای مثال می توانید از این (لینک در خط "دانلود نمونه کد و کتابخانه") استفاده کنید.

بایگانی دانلود شد LiquidCrystal_I2Cv1-1.rarاز حالت فشرده در یک پوشه خارج کنید \ کتابخانه ها، که در فهرست Arduino IDE قرار دارد.

این کتابخانه مجموعه ای از عملکردهای استاندارد را برای صفحه نمایش LCD پشتیبانی می کند:

تابعهدف
کریستال مایع() ایجاد می کند متغیر نوع LiquidCrystal و پارامترهای اتصال صفحه نمایش (اعداد پین) را می پذیرد.
شروع() مقداردهی اولیه نمایشگر LCD، تنظیم پارامترها (تعداد خطوط و کاراکترها)؛
واضح () پاک کردن صفحه و برگرداندن مکان نما به موقعیت شروع؛
خانه () مکان نما را به موقعیت شروع برگردانید؛
setCursor() تنظیم مکان نما در یک موقعیت مشخص؛
نوشتن() نماد را روی صفحه LCD نمایش می دهد.
چاپ() متن را روی صفحه LCD نمایش می دهد.
مکان نما () مکان نما را نشان می دهد، یعنی. خط کشی زیر جای کاراکتر بعدی؛
noCursor() مکان نما را پنهان می کند.
چشمک زدن () چشمک زدن مکان نما؛
noBlink() لغو چشمک زدن؛
noDisplay() خاموش کردن صفحه نمایش در حین ذخیره تمام اطلاعات نمایش داده شده؛
نمایش دادن() روشن کردن صفحه نمایش در حین ذخیره تمام اطلاعات نمایش داده شده؛
scrollDisplayLeft() محتویات نمایشگر را 1 موقعیت به سمت چپ حرکت دهید.
scrollDisplayRight() محتویات نمایشگر را در موقعیت 1 به سمت راست حرکت دهید.
اسکرول خودکار() فعال کردن خودکار اسکرول؛
noAutoscroll() غیرفعال کردن خودکار اسکرول؛
چپ به راست() جهت متن را از چپ به راست تنظیم می کند.
راست به چپ() جهت متن از راست به چپ؛
createChar() یک کاراکتر سفارشی برای صفحه LCD ایجاد می کند.

4 طرحی برای خروجی متنبه صفحه LCD از طریق گذرگاه I2C

بیایید نمونه را باز کنیم: نمونه فایل LiquidCrystal_I2C CustomCharsو ما آن را کمی تغییر می دهیم. پیامی را نمایش خواهیم داد که در انتهای آن علامت چشمک زن وجود دارد. نظرات کد در مورد تمام نکات ظریف طرح نظر می دهند.

#عبارتند از // شامل کتابخانه Wire #include باشد // اتصال کتابخانه LCD #define printByte(args) write(args); // uint8_t قلب = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // ماسک بیت نماد "قلب" LiquidCrystal_I2C lcd(0x27, 16, 2); // آدرس 0x27 را برای نمایشگر LCD 16x2 تنظیم کنید void setup() ( lcd.init(); // مقداردهی اولیه نمایشگر LCD lcd.backlight(); // نور پس زمینه نمایشگر را روشن کنید lcd.createChar(3, heart); // ایجاد یک نماد "قلب" در سلول حافظه 3 lcd.home(); // مکان نما را در سمت چپ قرار دهید گوشه بالا, به موقعیت (0,0) lcd.!")؛ // چاپ یک خط متن lcd.setCursor(0, 1)؛ // مکان نما را به خط 2 حرکت دهید، کاراکتر 1 lcd.print(" i "); // چاپ پیام در خط 2 lcd.printByte(3)؛ // چاپ نماد "قلب" واقع در سلول سوم lcd.print("Arduino"); } حلقه خالی() (// چشمک زدن آخرین کاراکتر lcd.setCursor(13, 1); // مکان نما را به خط 2، کاراکتر 1 حرکت دهید lcd.print("\t"); تاخیر (500); lcd.setCursor(13, 1); // مکان نما را به خط 2، کاراکتر 1 حرکت دهید lcd.print(" "); تاخیر (500); }

به هر حال، شخصیت های نوشته شده توسط دستور lcd.createChar();، حتی پس از قطع برق در حافظه نمایشگر باقی می ماند، زیرا برای نمایش رام 1602 نوشته شده است.

5 نمادهای خود را ایجاد کنیدبرای نمایشگر LCD

بیایید نگاهی دقیق‌تر به موضوع ایجاد نمادهای خود برای صفحه‌های LCD داشته باشیم. هر کاراکتر روی صفحه از 35 نقطه تشکیل شده است: 5 نقطه عریض و 7 نقطه بالا (+1 خط رزرو برای خط کشی). در خط 6 طرح بالا، آرایه ای از 7 عدد تعریف می کنیم: (0x0، 0xa، 0x1f، 0x1f، 0xe، 0x4، 0x0). تبدیل اعداد هگزادسیمال به باینری: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . این اعداد چیزی جز ماسک های بیتی برای هر یک از 7 خط نماد نیستند، جایی که "0" نشان دهنده یک نقطه روشن و "1" یک نقطه تاریک است. به عنوان مثال، نماد قلب که به عنوان بیت ماسک مشخص شده است، همانطور که در شکل نشان داده شده است، روی صفحه ظاهر می شود.

6 کنترل صفحه نمایش LCDاز طریق اتوبوس I2C

بیایید طرح را در آردوینو آپلود کنیم. کتیبه ای که با یک مکان نما چشمک زن در انتها مشخص کردیم روی صفحه ظاهر می شود.


7 پشت سر چیهاتوبوس I2C

به عنوان یک امتیاز، بیایید به نمودار زمان برای نمایش کاراکترهای لاتین "A" "B" و "C" در صفحه نمایش LCD نگاه کنیم. این کاراکترها در رام نمایشگر ذخیره می شوند و به سادگی با انتقال آدرس خود به نمایشگر روی صفحه نمایش داده می شوند. نمودار از پین های RS، RW، E، D4، D5، D6 و D7 نمایشگر گرفته شده است. در حال حاضر پس از مبدل "گذرگاه موازی I2C" FC-113. می توان گفت که کمی عمیق تر در سخت افزار فرو می رویم.


نمودار زمان بندی خروجی حروف لاتین "A" "B" و "C" در صفحه نمایش LCD 1602

نمودار نشان می دهد که کاراکترهایی که در ROM نمایشگر هستند (نگاه کنید به صفحه 11 دیتاشیت، لینک زیر) در دو نوک پستی منتقل می شوند، که اولی شماره ستون جدول را تعیین می کند و دومی - شماره ردیف. در این حالت، داده ها در لبه سیگنال روی خط "چفت" می شوند E(فعال) و خط R.S.(انتخاب ثبت نام) در یک حالت منطقی است، به این معنی که داده ها در حال انتقال هستند. حالت پایین در خط RS به این معنی است که دستورالعمل ها ارسال می شوند، چیزی که قبل از انتقال هر کاراکتر می بینیم. که در در این موردکد دستورالعمل بازگشت کالسکه به موقعیت (0، 0) نمایشگر LCD منتقل می شود که با مطالعه نیز می توان به آن پی برد. اطلاعات تکنیکینمایش دادن.

و یک مثال دیگر. این نمودار زمان‌بندی خروجی نماد قلب را بر روی صفحه نمایش LCD نشان می‌دهد.


باز هم دو تکانه اول فعال کردندستورالعمل ها را رعایت کنید صفحه اصلی ()(0000 0010 2) - کالسکه را به موقعیت (0؛ 0) برگردانید و دو دوم - خروجی را به صفحه نمایش LCD ذخیره شده در سلول حافظه 3 10 (0000 0011 2) نماد "قلب" (دستورالعمل) lcd.createChar(3, heart);طرح).

شاید یکی از محبوب ترین صفحه نمایش های موجود در بازار باشد. ساخته شده بر روی کنترلر محبوب HD44780U. از نام مدل بر می آید که صفحه نمایش از دو خط 16 کاراکتری تشکیل شده است. پشتیبانی از زبان روسی در این مدل خاصخیر

گذرگاه داده sh2s به شما امکان می دهد تا 127 دستگاه را از طریق دو سیم به طور همزمان وصل کنید. این I2C بر روی تراشه PCF8574T پیاده سازی شده است.

نمودار اتصال:

چیز آبی یک مقاومت متغیر است که به شما امکان می دهد کنتراست صفحه را تنظیم کنید.

جامپر سمت چپ مسئول نور پس زمینه صفحه نمایش است.

یک بلوک از 4 مخاطب به صورت زیر به آردوینو متصل می شود:

GND - GND
VCC - 5 ولت
SDA - A4 (اگر Arduino MEGA، سپس به D20)
SCL - A5 (اگر Arduino MEGA، سپس به D21)

کتابخانه

طرح

نمایشگر ممکن است یک آدرس IIC متفاوت داشته باشد، به جای 0x27 ممکن است 0x3F باشد. برای تعیین دقیق آدرس، می توانید از اسکنر دستگاه i2c استفاده کنید.

#عبارتند از #عبارتند از //آدرس صفحه LCD را 0x27، 16 کاراکتر، 2 خط تنظیم کنیدال سی دی LiquidCrystal_I2C (0x27, 16, 2); void setup() ( lcd.init(); // صفحه را مقدار دهی اولیه کنید // نور پس زمینه را روشن کنید lcd.backlight(); //موقعیتی را که متن از آنجا نمایش داده می شود را تنظیم کنید. lcd.setCursor(2, 0); //خط خروجی 1 lcd.print ("سلام، جهان!"); // خط دوم را به همین ترتیب چاپ کنید lcd.setCursor(1, 1); lcd.print ("www.site"); ) حلقه خالی () ( )

ماژول LCD I2C به شما امکان می دهد فقط با استفاده از دو سیم سیگنال، یک نمایشگر کاراکتر را به برد آردوینو متصل کنید.

اجزای مورد استفاده (خرید در چین):

. برد کنترل

. سیم های اتصال

مشخصات فنی اصلی:

نمایشگر: کاراکتر 16x02 یا 20x04
. نور پس زمینه: آبی با کاراکترهای سفید
. کنتراست: با پتانسیومتر قابل تنظیم است
. ولتاژ تغذیه: 5 ولت
. رابط: I2C
. آدرس I2C: 0x27
. ابعاد: 82mm x 35mm x 18mm

اتصال به آردوینو

این ماژول به یک کانکتور 2.54 میلی متری چهار پین مجهز شده است

SCL: خط ساعت سریال (ساعت سریال)

S.D.A.: خط داده سریال (داده سریال)

VCC: قدرت "+".

GND: "-" قدرت

پین های مسئول رابط I2C در بردهای آردوینو بر اساس کنترلرهای مختلف متفاوت است

برای کار با این ماژول باید کتابخانه LiquidCrystal_I2C1602V1 را نصب کنید.

دانلود کنید، آن را باز کنید و در پوشه libraries در پوشه آردوینو قرار دهید. اگر آردوینو IDE در زمان افزودن کتابخانه باز بود، محیط را راه اندازی مجدد کنید.

بیایید مستقیماً به اسکیس برویم. در این مثال، خروجی استاندارد "Hello, world!" و برای آدرس جامعه ما

نمونه کد برنامه:

#عبارتند از #عبارتند از ال سی دی LiquidCrystal_I2C (0x27,16,2); /* آدرس و اندازه نمایش را تنظیم کنید. هنگام استفاده از ماژول LCD I2C با نمایشگر 20x04، نیازی به تغییر چیزی در کد ندارید، فقط باید ابعاد صحیح را تنظیم کنید */خالی برپایی() ( lcd.init(); // ال سی دی را راه اندازی کنید lcd.backlight(); // نور پس زمینه را روشن کنید // مکان نما در ابتدای 1 خط قرار دارد lcd.print ("سلام، دنیا!"); // نمایش متن lcd.setCursor (0، 1); // مکان نما را در ابتدای خط 2 قرار دهید lcd.print("سایت"); // متن خروجی ) void حلقه () { }

نمادهای خود را ایجاد کنید

ما خروجی متن را مرتب کرده ایم، حروف الفبای انگلیسی به صورت سخت در حافظه کنترلر داخل نمایشگر قرار می گیرند و هیچ مشکلی با آنها وجود ندارد. اما اگر نماد مورد نیاز در حافظه کنترلر نباشد چه باید کرد؟

مشکلی نیست، نماد مورد نیاز را می توان به صورت دستی ایجاد کرد. این روشتا حدی، محدودیت 7 کاراکتر به حل مشکل خروجی کمک می کند.

سلول در نمایشگرهای مورد نظر ما دارای وضوح 5x8 پیکسل است. تنها چیزی که وظیفه ایجاد یک نماد به آن مربوط می شود نوشتن یک ماسک بیت و قرار دادن یک ها در آن در مکان هایی است که نقطه ها باید روشن باشند و صفرها در جایی که نباید باشند.

در مثال زیر یک صورتک می کشیم.

نمونه کد برنامه:

//بر روی Arduino IDE 1.0.5 تست شده است // کتابخانه های لازم را اضافه کنید#عبارتند از #عبارتند از // بیت ماسک نماد لبخندبایت لبخند = ( B00010، B00001، B11001، B00001، B11001، B00001، B00010، ); ال سی دی LiquidCrystal_I2C (0x27,20,4); // آدرس و اندازه نمایش را تنظیم کنید.خالی برپایی() ( lcd.init(); // ال سی دی را راه اندازی کنید lcd.backlight(); // نور پس زمینه را روشن کنید // نماد شماره 0 را ایجاد کنید lcd.createChar(1، لبخند); lcd.setCursor(0, 0); // مکان نما را روی ابتدای 1 خط قرار دهید lcd.print("\1"); // نمایش یک صورتک (شخصیت شماره 1) - "\1") خالی حلقه () { }

برنامه ای برای ایجاد آسان نمادها

در نظرات، یکی از اعضای انجمن پیوندی به مولد نماد ارسال کرد

از اینجا گرفتم فروشگاه خوب Chip Resistor دستگاه دیگری برای مطالعه و کاربرد در آن است دستگاه های مفید. معلوم شد که این دستگاه برای کنترل یک صفحه نمایش LCD که توسط کنترلر HD44780 در حالت 4 بیتی کنترل می شود طراحی شده است. برای این منظور یک میکرو مدار بر روی برد نصب شده است که مبدل باس I2C به پورت 8 بیتی موازی است.

روت برد به گونه ای است که می توان آن را بلافاصله به نمایشگر LCD متصل کرد. ورودی برق و خطوط I2C را تامین می کند. این برد فوراً به مقاومت های کششی روی خطوط SCL و SDA، یک پتانسیومتر برای تنظیم کنتراست و منبع تغذیه برای خود نمایشگر مجهز شده است.

بلوز سمت راست نور پس زمینه را روشن/خاموش می کند. سپس با مسلح شدن به تستر جدول زیر تهیه شد. پس از مطالعه ماژول، مشخص شد که P3نور پس زمینه را کنترل می کند. اگر جامپر نصب شده باشد، 1 نور پس زمینه را روشن می کند و 0 آن را خاموش می کند. هنگامی که جامپر حذف می شود، نور پس زمینه همیشه خاموش است. در مرحله بعد، تصمیم گرفته شد که کتابخانه axlib را با عملکردهایی برای کار با گذرگاه I2C (اجرای نرم افزار) و عملکردهایی برای کنترل تراشه PCF8574 تکمیل کند. به طور خلاصه نحوه کار ماژول. برای خروجی موازی یک بایت، باید آدرس ریزمدار را به گذرگاه I2C بفرستید (به طور پیش فرض 0x4E است. همچنین می توانید با لحیم کردن جامپرهای روی برد و تغییر مقدار سه کم اهمیت، آدرس را تغییر دهید. بیت های آدرس)، سپس پس از دریافت ACK، یک بایت داده ارسال می شود. پس از پاسخ تراشه با ACK، بایت در پورت موازی تراشه ظاهر می شود. برای کنترل نمایشگر LCD، توابعی را از کتابخانه axlib گرفتم و کمی آنها را برای کار با گذرگاه I2C تغییر دادم. #عبارتند از #عبارتند از #عبارتند از #عبارتند از #define ADD 0x4E // آدرس تراشه /* تراشه LCD RS P0 RW P1 EN P2 D4 P4 D5 P5 D6 P6 D7 P7 یک نور پس زمینه در پایه اتصال P3 وجود دارد. 1 روشن، 0 خاموش */ // داده های خروجی com |= 0x04; // E در واحد pcf8574_byte_out(com, ADD); // داده های خروجی com &= 0xFB; // E به صفر pcf8574_byte_out(com, ADD); // داده های خروجی) void init(void) ( _delay_ms(30); com (0x30); _delay_us(40); com (0x30); // به حالت 4 بیتی بروید _delay_us(40); // تاخیر برای اجرای دستور com (0x30); // به حالت 4 بیتی بروید _delay_us(40); // تاخیر برای اجرای دستور com (0x20); // به حالت 4 بیتی بروید _delay_us(40); // تاخیر برای اجرای دستور com (0x20); // تنظیم پارامترها com (0x80); // تنظیم پارامترها com (0x00); // صفحه نمایش را خاموش کن com (0x80); // صفحه نمایش را خاموش کن com (0x00); // صفحه نمایش را پاک کنید com (0x10); // صفحه نمایش را پاک کنید com (0x00); com (0x60); // حالت ورودی داده را تنظیم کنید com (0x00); com (0xC0)؛ // صفحه نمایش را با مکان نما انتخاب شده روشن کنید) void char_out(BYTE data) (BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // انتقال مهم ترین 4 بیت data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // مهم ترین 4 بیت را انتقال دهید // مهم ترین 4 بیت را انتقال دهید // انتقال 4 بیت کم // انتقال 4 بیت کم // انتقال 4 بیت کم) void str_out(BYTE *str) ( while((*str) != "\0") (char_out(*str); str++; ) ) int main(void) (init(); str_out("ЁPҐBET MҐP!" )؛ while (1) ( ) )دقیقاً اینجا چه خبر است. ابتدا کتابخانه ها را برای I2C و برای PCF8574 وصل می کنیم. من قبلاً در مورد I2C نوشته‌ام، بنابراین دوباره در مورد آن ادامه می‌دهم، اما به شما می‌گویم در PCF8574.h چه چیزی وجود دارد. این کتابخانه فقط شامل سه عملکرد است.
BYTE pcf8574_test(BYTE add) (BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add)؛ i2c_stop(؛ Return ask; )اولین تابع برای بررسی قرار گرفتن دستگاه در اتوبوس نوشته شده است. در اصل، می توان از آن برای جستجوی هر دستگاهی که در اتوبوس قرار دارد استفاده کرد. تابع آدرس دستگاه مورد نظر را می گیرد و در صورت پاسخ، صفر را برمی گرداند. اگر دستگاهی با چنین آدرسی در اتوبوس نباشد، یکی را برمی گرداند.
BYTE pcf8574_byte_out(BYTE داده، BYTE add) (BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); if(!ask) ask = i2c_send_byte(data); i2c_stop(); )این عملکرد قبلاً صرفاً برای این تراشه طراحی شده است. به عنوان آرگومان، یک بایت به آن داده می شود تا به گذرگاه و آدرس تراشه منتقل شود. تابع ابتدا تراشه را بر اساس آدرس جستجو می کند و سپس بایت را ارسال می کند. اگر تراشه یک بایت دریافت کرد و با ACK پاسخ داد، عملکرد با تراشه کار خود را به پایان می‌رساند و صفر را به عنوان ارسال موفقیت‌آمیز بایت برمی‌گرداند. و در این زمان ریز مدار این بایت را به پورت موازی خود ارسال می کند. در غیر این صورت، ما NACK را دریافت می کنیم و یکی را برمی گردانیم، انتقال انجام نشد.
BYTE pcf8574_str_out(BYTE *data, BYTE col, BYTE add) (BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); for(BYTE i=0; i این تابع برای آزمایش ایجاد شده است. اشاره گر به آرایه ای از داده های یک بایتی، تعداد این بایت ها و آدرس تراشه را می پذیرد. در واقع، تلاشی برای انتقال تمام داده ها در یک جلسه، و نه در یک بایت در هر جلسه. عملکرد کار می کند، اما برای صفحه نمایش LCD مناسب نیست. حالا برگردیم به برنامه اصلی. پس از اتصال کتابخانه ها، آدرس ریز مدار را می نویسیم. بعد، سه تابع مشابه lcd.h ایجاد می کنیم. تنها تفاوت در اصل انتقال داده است.
void com(BYTE com) ( com |= 0x08; // P3 به یک تا نور پس زمینه روشن باشد pcf8574_byte_out(com, ADD); // داده های خروجی com |= 0x04; // E در واحد pcf8574_byte_out(com, ADD); // داده های خروجی com &= 0xFB; // E به صفر pcf8574_byte_out(com, ADD); // داده های خروجی } این تابع فقط دستورات را به نمایشگر ارسال می کند. این جایی است که اولین خط با اضافه کردن منطقی دستور از 0x08 ظاهر شد. این اشکال به این دلیل است که ما بایت را مستقیماً به پورت نمایشگر LCD منتقل نمی کنیم، بلکه از طریق تکرار کننده خود ارسال می کنیم. یعنی اگر یک بایت تهیه کرده‌ایم و فقط یک بیت باید خروجی بگیریم، لطفاً بیت مورد نیاز را به بایت قبلی اختصاص دهید و دوباره به پورت ارسال کنید. این چنین دردسری است. جمع با 0x08 برای نگه داشتن مدام یکی در رقم سوم ضروری است. نور پس زمینه را به خاطر دارید؟ این افزودنی است که نور پس زمینه را روشن می کند. سپس تابع انتقال یک بایت به گذرگاه را فراخوانی می کنیم. در مورد بالا نوشته شده است. سپس بایت را از طریق گذرگاه به تراشه منتقل می کنیم. بعد، باید E را روی یک تنظیم کنید، این همان کاری است که اضافه کردن منطقی بایت با 0x04 در واقع انجام می دهد. پس از تنظیم مجدد E. بنابراین، شما می توانید هر دستوری را تنها با ارسال خود فرمان به عنوان آرگومان به نمایشگر ارسال کنید. void init(void) ( _delay_ms(30); // پس از روشن شدن، مکث کنید com (0x30); // به حالت 4 بیتی بروید _delay_us(40); // تاخیر برای اجرای دستور com (0x30); // به حالت 4 بیتی بروید _delay_us(40); // تاخیر برای اجرای دستور com (0x30); // به حالت 4 بیتی بروید _delay_us(40); // تاخیر برای اجرای دستور com (0x20); // به حالت 4 بیتی بروید _delay_us(40); // تاخیر برای اجرای دستور com (0x20); // تنظیم پارامترها com (0x80); // تنظیم پارامترها com (0x00); // صفحه نمایش را خاموش کن com (0x80); // صفحه نمایش را خاموش کن com (0x00); // صفحه نمایش را پاک کنید com (0x10); // صفحه نمایش را پاک کنید com (0x00); // حالت ورودی داده را تنظیم کنید com (0x60); // حالت ورودی داده را تنظیم کنید com (0x00); // صفحه نمایش را با مکان نما انتخاب شده روشن کنید com (0xC0)؛ // صفحه نمایش را با مکان نما انتخاب شده روشن کنید } این تابع فقط نمایشگر را مقداردهی اولیه می کند. ترتیب دستورات از صفحه داده روی صفحه نمایش LCD گرفته شده است. void char_out(BYTE data) (BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // انتقال مهم ترین 4 بیت data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // مهم ترین 4 بیت را انتقال دهید data_h &= 0xF9; pcf8574_byte_out(data_h، ADD)؛ // مهم ترین 4 بیت را انتقال دهید pcf8574_byte_out(data_l، ADD)؛ // انتقال 4 بیت کم data_l |= 0x04; pcf8574_byte_out(data_l، ADD)؛ // انتقال 4 بیت کم data_l &= 0xF9; pcf8574_byte_out(data_l، ADD)؛ // انتقال 4 بیت کم } این عملکرد داده ها را به نمایشگر LCD منتقل می کند. به روشی مشابه دستورات اجرا می شود، با این تفاوت که بایت ابتدا با مهم ترین نیبل و سپس با بایت کم ارسال می شود. و بقیه هم همینطور. void str_out(BYTE *str) ( while((*str) != "\0") (char_out(*str); str++; ))خوب، این تابع صرفاً برای ارسال یک رشته به نمایشگر است. در واقع ربطی به موضوع ما ندارد.

پروژه برای AtmelStudio 6.2

صالح 01.08.15 17:11

کاما گم شده است. درست است: "سلام جهان!" و این دستگاه نه تنها برای HD44780 طراحی شده است. مقاومت های کششی در سمت اصلی نصب شده اند. با توجه به مشخصات، داده ها در کنترل کننده LCD در جهت سقوط E نوشته می شوند. بنابراین اولین تابع ساده شده است: void com(BYTE com) (com |= 0x08; // نور پس زمینه pcf8574_byte_out(com | 0x04, ADD); / / خروجی داده pcf8574_byte_out(com , ADD)؛ // E به صفر) و بقیه نیز می توانند به میزان قابل توجهی کمتر باشند. به عنوان مثال، void char_out (داده BYTE) تنها دو تماس و حتی بیشتر از آن بدون متغیرهای اضافی را می گیرد. مقداردهی اولیه LCD با نقض مشخصات زمان انجام شد.

الکسی 02.08.15 19:11

به دلیل وجود کاما، صفحه نمایش تحت تأثیر قرار نمی گیرد. این دستگاه به طور خاص برای نمایشگرهایی با این کنترلر یا مشابه طراحی شده است. اما این ریزمدار یک گسترش دهنده پورت واقعا ساده است. در مورد E موافقم. متغیرهای اضافی مورد نیاز است. اگر یک آرگومان را به یک تابع ارسال کنید و اقدامات خاصی را با منطق انجام دهید، ممکن است اشکالاتی رخ دهد. من قبلا با این مواجه شده ام. اولیه سازی بدون نقض زمان بندی انجام می شود. مستندات می گوید که 40 میکرو ثانیه مکث بین دستورات وجود دارد. با توجه به اینکه انتقال از طریق گذرگاه i2c که به نوبه خود نرم افزاری و کند است انجام می شود، دوره ها با علاقه کامل می شوند. اگر هنوز خیلی تنبل نیستید، پس نسخه خود را بنویسید و برای من ارسال کنید. منتشرش میکنم در پایان این سایت برای مخاطبان آماتور در نظر گرفته شده است و هرکسی که بخواهد می تواند نظر و دیدگاه خود را در مورد زندگی MK بیان کند.

الکسی 06.08.15 09:14

زمان‌بندی اضافه شده هنگام تنظیم اولیه نمایشگر همانطور که توسط "سواد" محترم ذکر شده است

دیمیتری 14/06/16 21:57

سلام الکسی شما می توانید برای کار با PCF8574 یک کتابخانه به تولید کننده کد اضافه کنید.

الکسی 06/14/16 22:32

فکر خواهم کرد.))

روسلان 21.12.16 19:54
الکسی 12/21/16 21:53

اوه بله. به خصوص کد موجود در ASMA. کارشناسان آردوینو از آن نهایت قدردانی خواهند کرد)))

Py.sy.
حتی اگر به ASM نگاه نکنید، برنامه در آنجا برای یک کنترلر PIC نوشته شده است. آیا این اطلاعات "بسیار" مفید برای متخصصان AVR است؟ مخصوصاً برای مبتدیان))) من مخالف PIC نیستم، اما حتی ASM PIC و AVR هم متفاوت است. در مورد جزئیات عملکرد صفحه نمایش LCD، می توانید نگاهی بیندازید))) درست است، من آن را تحت CVAVR نیز نوشتم، اما تمام دستورات جدا شده و در قفسه ها مرتب می شوند. اما در هر صورت، خودتان تصمیم بگیرید که کجا واضح تر نوشته شده است))) نویسنده می نویسد، خواننده انتخاب می کند.

GeK 01/04/17 12:52

"آدرس I2C تراشه (به طور پیش فرض 0x4E است"

مهم ترین 4 بیت آدرس ثابت شده است،
پیشوند PCF8574 0100 و برای PCF8574A 0111 است.
3 بیت پایین به وضعیت ورودی های تراشه A2-A0 بستگی دارد. به طور پیش فرض، هر 3 جامپر به ترتیب باز هستند، آدرس تراشه مقدار 0111111 را می گیرد.
// A2 A1 A0 PCF8574 PCF8574A
// 1 1 1 0x20 0x38
// 1 1 0 0x21 0x39
// 1 0 1 0x22 0x3A
// 1 0 0 0x23 0x3B
// 0 1 1 0x24 0x3C
// 0 1 0 0x25 0x3D
// 0 0 1 0x26 0x3E
// 0 0 0 0x27 0x3F

الکسی 01/04/17 14:27

یه چیزی قاطی کردی
استخراج از مستندات برای میکرو مدار

0b01001110 0x4E است
پس اینجا همه چیز درست است. و اگر نیاز به تغییر آدرس دارید، فقط باید آن را در Define تغییر دهید.

یوری 17/12/14 21:26

روز خوب! و همچنین می توانید از کد عملکرد lcdgotoxy و lcdclear برای کار با آداپتور PCF8574 استفاده کنید.

الکساندر 05.20.18 18:14

روز خوب! چگونه متن روسی را خروجی می گیرید؟

الکسی 05.20.18 23:04

این یک نمایشگر داخلی از MELT است. الفبای سیریلیک در حافظه او نقش بسته است.

اسکندر 05/21/18 04:55

روز خوب! من مانند شما در پروژه AtmelStudio 6.2 می نویسم "ЁPҐBET MҐP!" به طور معمول خروجی می دهد
و اگر بنویسید "سلام جهان!" انواع مزخرفات را به نمایش می گذارد. من دوتا دارم
یکی از گزینه های نمایش دارای الفبای سیریلیک است. دومی چینی است.

الکسی 05/21/18 09:22

من ابتدا یک برنامه آزمایشی می نویسم. در کل حافظه تکرار می شود و نمادها و آدرس آنها را نمایش می دهد. و بعد بفهمید که مشکل چیست. به احتمال زیاد جدول کاراکتر با جدول ascii مطابقت ندارد.

آندری 09/03/18 08:32

عصر بخیر!

آیا می توانید یک نمودار مدار برای پروتئوس ارائه دهید؟

آندری 09/03/18 10:22

یا کسی در Proteuse چک نکرده است؟

آندری 09/03/18 10:56

main_init را مشخص کرد

پاول 05/30/19 23:35

نکته جالب این است که آدرس نمایشگر 0x4E است و اگر همان صفحه نمایش به آردوینو متصل باشد، آدرس آن 0x27 است.

پاول 05/31/19 11:04

خیلی ممنون از کارتون! کل اینترنت رو گشتم و هیچ کدوم از مثال های ذکر شده به جز نمونه شما جواب نداد. تنها نکته این است که در بایگانی پروژه تاخیرهای _delay_ در تابع مقداردهی اولیه نمایش مشخص نشده است و بر این اساس کار نمی کند.

الکسی 06/01/19 09:52

خب، این بیشتر یک پروژه نمایشی است. به دلایل خوب، کتابخانه axlib نیاز به بازنویسی دارد، اما با توجه به این واقعیت که STM32 و STM8 به صورت جهشی در حال حرکت هستند، در AVR اصلاً نکته ای وجود ندارد.

پاول 06/05/19 12:57

STM بسته های DIP ندارد، ساخت بردهای مدار چاپی دشوارتر است. برای پروژه‌های من، قابلیت‌های AVR بسیار زیاد است، می‌توانید تعداد زیادی را روی یک Atmega 8 قرار دهید.

الکسی 06/05/19 15:20

بله، اما هزینه Atmega8 و stm8s003 چقدر است)))

دیمیتری 06/07/19 00:41

سلام الکسی
لطفا به من بگویید چگونه وضعیت پورت را از pcf8574 بخوانم؟
من می خواهم یک واحد خارجی، 8 GPIO در اتوبوس i2c بسازم - همین.

دیمیتری 06/07/19 17:56

خودم جواب میدم
تابع یک بایت - وضعیت پورت های ریز مدار را برمی گرداند
uint8_t pcf8574_byte_rcv(uint8_t addr)
{
uint8_t ask = ACK;
addr |= 0b01; //خواندن
uint8_t data=0;
i2c_start();
ask = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

برگرداندن داده ها؛
}

پاول 06/07/19 20:37

هزینه آن چقدر است، 150 روبل، برای قیمت یک رله به طور کلی)، و چگونه تخته های STM را سیم کشی می کنید؟ LUT غیر قابل اعتماد است، روتر CNC مطمئن نیست که چه چیزی طول می کشد (آن را امتحان نکرده ام)

صفحه نمایش ال سی دی- مهمان مکرر در پروژه های آردوینو. اما در مدارهای پیچیده ممکن است به دلیل نیاز به اتصال شیلدی که پین ​​های بسیار بسیار زیادی دارد، مشکل کمبود پورت های آردوینو داشته باشیم. راه حل در این شرایط می تواند باشد I2C/IICآداپتوری که یک شیلد تقریبا استاندارد Arduino 1602 را تنها با استفاده از 4 پین به بردهای Uno، Nano یا Mega متصل می کند. در این مقاله به نحوه اتصال صفحه نمایش LCD با رابط I2C می پردازیم، از چه کتابخانه هایی می توانید استفاده کنید، یک نمونه طرح کوتاه بنویسید و به خطاهای رایج نگاه می کنیم.

صفحه نمایش کریستال مایع LCD 1602انتخاب خوبی برای خروجی رشته کاراکترها در پروژه های مختلف است. این ارزان است، تغییرات مختلفی با رنگ های مختلف نور پس زمینه وجود دارد، می توانید به راحتی کتابخانه های آماده برای طرح های آردوینو را دانلود کنید. اما عیب اصلی این صفحه نمایش 16 پین دیجیتال است که حداقل 6 پین آن مورد نیاز است.بنابراین استفاده از این صفحه نمایش LCD بدون i2c محدودیت های جدی برای بردهای آردوینو Uno یا نانو به همراه دارد. اگر مخاطبین کافی وجود ندارد، باید یک برد آردوینو مگا بخرید یا مخاطبین را ذخیره کنید، از جمله با اتصال صفحه نمایش از طریق i2c.

شرح مختصری از پین های LCD 1602

بیایید نگاهی دقیق تر به پین ​​های LCD1602 بیندازیم:

هر یک از پین ها هدف خاص خود را دارد:

  1. GND زمینی؛
  2. منبع تغذیه 5 ولت;
  3. تنظیم کنتراست مانیتور؛
  4. فرمان، داده؛
  5. نوشتن و خواندن داده ها؛
  6. فعال کردن؛

7-14. خطوط داده؛

  1. به علاوه نور پس زمینه؛
  2. منهای نور پس زمینه

مشخصات نمایشگر:

  • نوع نمایش کاراکتر، بارگذاری نمادها امکان پذیر است.
  • لامپ های ال ای دی؛
  • کنترلر HD44780;
  • ولتاژ تغذیه 5 ولت؛
  • قالب بندی کاراکترهای 16x2؛
  • محدوده دمای عملیاتی از -20C تا +70C، محدوده دمای ذخیره سازی از -30C تا +80C؛
  • زاویه دید 180 درجه

نمودار اتصال LCD به برد آردوینو بدون i2C

نمودار استاندارد برای اتصال مستقیم مانیتور به میکروکنترلر آردوینو بدون I2C به شرح زیر است.

به دلیل تعداد زیاد کنتاکت های متصل، ممکن است فضای کافی برای اتصال عناصر لازم وجود نداشته باشد. استفاده از I2C تعداد سیم ها را به 4 و پین های اشغال شده را به 2 کاهش می دهد.

صفحه نمایش LCD و شیلد برای آردوینو از کجا بخریم

صفحه نمایش LCD 1602 (و نسخه 2004) بسیار محبوب است، بنابراین می توانید آن را هم در فروشگاه های آنلاین داخلی و هم در سایت های خارجی به راحتی پیدا کنید. در اینجا چند پیوند به در دسترس ترین گزینه ها وجود دارد:

ماژول صفحه آبی LCD1602+I2C، سازگار با آردوینو یک صفحه نمایش LCD1602 ساده (نور پس زمینه سبز) ارزانتر از 80 روبل صفحه نمایش LCD2004 بزرگ با I2C HD44780 برای آردوینو (نور پس زمینه آبی و سبز)
صفحه نمایش 1602 با آداپتور IIC و نور پس زمینه آبی نسخه دیگری از LCD1602 با ماژول I2C لحیم شده ماژول آداپتور پورت IIC/I2C/TWI/SPI برای شیلد 1602، سازگار با آردوینو
صفحه نمایش با نور پس زمینه RGB! LCD 16×2 + صفحه کلید + Buzzer Shield برای آردوینو شیلد برای آردوینو با دکمه ها و صفحه نمایش LCD1602 LCD 1602 صفحه نمایش LCD برای چاپگر سه بعدی (کنترل کننده هوشمند برای RAMPS 1.4، Text LCD 20×4)، ماژول کارت خوان SD و MicroSD

شرح پروتکل I2C

قبل از بحث در مورد اتصال نمایشگر به آردوینو از طریق آداپتور i2c، اجازه دهید به طور خلاصه در مورد خود پروتکل i2C صحبت کنیم.

I2C/IIC(Inter-Integrated Circuit) پروتکلی است که در اصل برای برقراری ارتباط مدارهای مجتمع در یک دستگاه الکترونیکی ایجاد شده است. توسعه متعلق به فیلیپس است. پروتکل i2c مبتنی بر استفاده از یک گذرگاه 8 بیتی است که برای برقراری ارتباط بلوک ها در الکترونیک کنترل مورد نیاز است و یک سیستم آدرس دهی که به لطف آن می توانید از طریق سیم های مشابه با چندین دستگاه ارتباط برقرار کنید. ما به سادگی داده ها را به یک یا دستگاه دیگر منتقل می کنیم و شناسه عنصر مورد نظر را به بسته های داده اضافه می کنیم.

ساده ترین مدار I2C ممکن است شامل یک دستگاه اصلی (اغلب یک میکروکنترلر آردوینو) و چندین slave (به عنوان مثال، یک صفحه نمایش LCD) باشد. هر دستگاه دارای یک آدرس در محدوده 7 تا 127 است. نباید دو دستگاه با آدرس یکسان در یک مدار وجود داشته باشد.

برد آردوینو از i2c در سخت افزار پشتیبانی می کند. برای اتصال دستگاه ها با استفاده از این پروتکل می توانید از پین های A4 و A5 استفاده کنید.

چندین مزیت برای عملکرد I2C وجود دارد:

  • عملیات فقط به 2 خط نیاز دارد - SDA (خط داده) و SCL (خط همگام).
  • اتصال تعداد زیادی از دستگاه های پیشرو.
  • کاهش زمان توسعه
  • فقط یک میکروکنترلر برای کنترل کل مجموعه دستگاه ها مورد نیاز است.
  • تعداد ممکن ریز مدارهای متصل به یک اتوبوس فقط با حداکثر ظرفیت محدود می شود.
  • درجه بالایی از امنیت داده ها به دلیل فیلتر ویژه مهار نوسانات تعبیه شده در مدارها.
  • یک روش ساده برای تشخیص خرابی های در حال ظهور و رفع سریع عیب ها.
  • این گذرگاه قبلاً در خود آردوینو ادغام شده است، بنابراین نیازی به توسعه رابط اتوبوس اضافی نیست.

ایرادات:

  • محدودیت خازنی در خط وجود دارد - 400 pF.
  • اگر چندین دستگاه مختلف در اتوبوس وجود داشته باشد، برنامه ریزی یک کنترلر I2C دشوار است.
  • با تعداد زیادی دستگاه، اگر یکی از آنها به اشتباه پایین بیاید، جداسازی یک عیب دشوار می شود.

ماژول i2c برای LCD 1602 آردوینو

سریع ترین و راحت ترین راه برای استفاده از نمایشگر i2c در آردوینو، خرید یک صفحه نمایش آماده با پشتیبانی از پروتکل داخلی است. اما تعداد این صفحه نمایش ها زیاد نیست و ارزان نیستند. اما تعداد زیادی صفحه نمایش استاندارد مختلف قبلاً تولید شده است. بنابراین، امروزه مقرون به صرفه ترین و محبوب ترین گزینه خرید و استفاده از یک ماژول I2C جداگانه - یک آداپتور است که به نظر می رسد:

در یک طرف ماژول پین i2c را می بینیم - زمین، پاور و 2 برای انتقال داده. در آداپتور دیگر کانکتورهای برق خارجی را می بینیم. و البته برد دارای پین های زیادی است که با آن ماژول به پین ​​های صفحه نمایش استاندارد لحیم می شود.


برای اتصال به برد آردوینو از خروجی های i2c استفاده می شود. در صورت لزوم، برق خارجی را برای نور پس زمینه وصل می کنیم. با صاف کننده داخلی می توانیم مقادیر کنتراست سفارشی J را تنظیم کنیم

در بازار می توانید ماژول های LCD 1602 را با آداپتورهای لحیم کاری شده پیدا کنید؛ استفاده از آنها تا حد امکان ساده شده است. اگر یک آداپتور جداگانه خریداری کرده اید، ابتدا باید آن را به ماژول لحیم کنید.

اتصال صفحه LCD به آردوینو از طریق I2C

برای اتصال به خود برد آردوینو، صفحه نمایش، برد برد، سیم های اتصال و پتانسیومتر نیاز دارید.

اگر از یک آداپتور i2c جداگانه استفاده می کنید، ابتدا باید آن را به ماژول صفحه لحیم کنید. اشتباه کردن در آنجا سخت است، می توانید این طرح را دنبال کنید.


یک مانیتور LCD با پشتیبانی از i2c با استفاده از چهار سیم - دو سیم برای داده، دو سیم برای برق - به برد متصل می شود.

  • پایه GND به GND روی برد متصل می شود.
  • پایه VCC 5 ولت است.
  • SCL به پایه A5 متصل می شود.
  • SDA به پین ​​A متصل است.

و این همه است! بدون شبکه سیم، که به راحتی در هم پیچیده می شود. در عین حال، ما می توانیم به سادگی تمام پیچیدگی اجرای پروتکل i2C را به کتابخانه ها بسپاریم.

کتابخانه هایی برای کار با صفحه نمایش LCD i2c

برای تعامل با آردوینو و LCD 1602 از طریق گذرگاه I2C، حداقل به دو کتابخانه نیاز دارید:

  • کتابخانه Wire.h برای کار با I2C قبلاً در برنامه استاندارد Arduino IDE گنجانده شده است.
  • کتابخانه LiquidCrystal_I2C.h که شامل طیف گسترده ای از دستورات برای کنترل مانیتور از طریق گذرگاه I2C است و به شما امکان می دهد طرح را ساده تر و کوتاه تر کنید. باید کتابخانه را نیز نصب کنید پس از اتصال صفحه نمایش، باید کتابخانه LiquidCrystal_I2C.h را نیز نصب کنید.

پس از اتصال تمام کتابخانه های لازم به طرح، یک شی ایجاد می کنیم و می توانیم از تمام توابع آن استفاده کنیم. برای آزمایش، بیایید طرح مثال استاندارد زیر را بارگذاری کنیم.

#عبارتند از #عبارتند از // شامل کتابخانه //#include // اتصال یک کتابخانه جایگزین LiquidCrystal_I2C lcd(0x27,16,2); // آدرس I2C (متداول ترین مقدار) و همچنین پارامترهای صفحه نمایش (در مورد LCD 1602 - 2 خط 16 کاراکتری هر کدام //LiquidCrystal_PCF8574 lcd(0x27) را مشخص کنید؛ // گزینه ای برای تنظیم خالی کتابخانه PCF8574( ) ( lcd.init (); // راه اندازی صفحه نمایش lcd.backlight(); // اتصال نور پس زمینه lcd.setCursor(0,0)؛ // تنظیم مکان نما در ابتدای خط اول lcd.print(" سلام")؛ // تایپ متن در خط اول ) void loop() ( )

شرح توابع و روش های کتابخانه LiquidCrystal_I2C:

  • home() و clear() - اولین تابع به شما امکان می دهد مکان نما را به ابتدای صفحه بازگردانید، دومی همین کار را انجام می دهد، اما در عین حال همه چیزهایی را که قبلاً روی مانیتور بود حذف می کند.
  • Write(ch) – به شما امکان می دهد یک کاراکتر ch را روی صفحه چاپ کنید.
  • cursor() و noCursor() - مکان نما را روی صفحه نمایش/پنهان می کند.
  • blink() و noBlink() – مکان نما چشمک می زند/چشمک نمی زند (اگر نمایش آن قبلاً فعال شده باشد).
  • display() و noDisplay() – به شما امکان می دهد نمایشگر را متصل/غیرفعال کنید.
  • scrollDisplayLeft() و scrollDisplayRight() - صفحه را یک کاراکتر به چپ/راست پیمایش می کند.
  • autoscroll() و noAutoscroll() – به شما امکان می دهد حالت autoscroll را فعال/غیرفعال کنید. در این حالت، هر کاراکتر جدید در همان مکان نوشته می شود و جای آن چیزی که قبلا روی صفحه نوشته شده بود را می گیرد.
  • leftToRight() و rightToLeft() – تنظیم جهت متن نمایش داده شده – از چپ به راست یا راست به چپ.
  • createChar(ch، bitmap) – یک کاراکتر با کد ch (0 – 7) ایجاد می کند، با استفاده از آرایه ای از بیت مپ های بیت مپ برای ایجاد نقاط سیاه و سفید.

کتابخانه جایگزین برای کار با صفحه نمایش i2c

در برخی موارد، هنگام استفاده از کتابخانه مشخص شده با دستگاه های مجهز به کنترلرهای PCF8574 ممکن است خطاهایی رخ دهد. در این مورد، کتابخانه LiquidCrystal_PCF8574.h را می توان به عنوان جایگزین پیشنهاد کرد. LiquidCrystal_I2C را گسترش می دهد، بنابراین هیچ مشکلی در استفاده از آن وجود ندارد.

مشکل در اتصال صفحه نمایش ال سی دی i2c

اگر پس از آپلود طرح هیچ پیامی روی صفحه نمایش مشاهده نکردید، مراحل زیر را امتحان کنید.

ابتدا می توانید کنتراست مانیتور را کم یا زیاد کنید. اغلب کاراکترها به دلیل کنتراست و حالت نور پس زمینه به سادگی قابل مشاهده نیستند.

اگر این کار کمکی نکرد، بررسی کنید که آیا مخاطبین به درستی وصل شده اند و آیا برق نور پس زمینه وصل شده است یا خیر. اگر از آداپتور i2c جداگانه استفاده کردید، دوباره کیفیت لحیم کاری کنتاکت ها را بررسی کنید.

یکی دیگر از دلایل رایج برای از دست دادن متن روی صفحه ممکن است آدرس i2c نادرست باشد. ابتدا آدرس دستگاه را در طرح از 0x27 0x20 یا به 0x3F تغییر دهید. تولیدکنندگان مختلف ممکن است آدرس های پیش فرض متفاوتی را برنامه ریزی کرده باشند. اگر این کمکی نکرد، می‌توانید طرح اسکنر i2c را اجرا کنید، که تمام دستگاه‌های متصل را اسکن می‌کند و آدرس آنها را با استفاده از نیروی بی‌رحمانه تعیین می‌کند. نمونه ای از طرح اسکنر i2c.

اگر صفحه باز هم کار نمی کند، سعی کنید آداپتور را از لحیم خارج کرده و ال سی دی را مانند همیشه وصل کنید.

نتیجه

در این مقاله به مسائل اصلی استفاده از صفحه نمایش LCD در پروژه های پیچیده آردوینو، زمانی که نیاز به ذخیره پین ​​های رایگان روی برد داریم، پرداختیم. یک آداپتور ساده و ارزان i2c به شما امکان می دهد یک صفحه نمایش LCD 1602 را وصل کنید و تنها 2 پین آنالوگ را اشغال کنید. در بسیاری از موقعیت ها این می تواند بسیار مهم باشد. قیمت برای راحتی نیاز به استفاده از یک ماژول اضافی - مبدل و کتابخانه است. به نظر ما، این هزینه زیادی برای راحتی نیست و استفاده از این ویژگی را در پروژه ها به شدت توصیه می کنیم.