مقدمه:
یکی از مهمترین بخشهای یک سیستم کامپیوتری، واحد خروجی یا نمایشگر است. در بردهای آردوینو برای نمایش اطلاعات براحتی میتوانیم از LCD های 2 در 16 استفاده نماییم. اما این LCD ها در بهترین حالت 6 پایه از IO های آردوینو را مصرف میکنند.
ماژول I2C LCD:
یکی از ماژولهای کاربردی که بر پایه چیپ PCF8574 طراحی شده تنها با دوپایه SCL و SDA میتواند LCD های کاراکتری 2 در 16 یا 4 در 20 و انواع مشابه را راه اندازی نماید. این چیپ از پروتکل I2C استفاده کرده و با نصب یک کتابخانه مخصوص میتوانید براحتی LCD معمولی خود را به I2C یا دوسیمه تبدیل نمایید.
سخت افزار:
مطابق شکل زیر VCC و Gnd ماژول را به تغذیه 5+ و زمین آردوینو متصل کرده و SCL و SDA را نیز به پایههای همنام بر روی آردوینو اتصال دهید.
نصب کتابخانه:
کتابخانه LiquidCrystal_I2C از این لینک قابل دانلود است. همچنین آدرس گیتهاب این پروژه نیز در لینک زیر قرار داده شده است:
https://github.com/johnrickman/LiquidCrystal_I2C
برای نصب این کتابخانه مسیر زیر را در آردوینو طی کنید:
Sketch > Include Library > Add .ZIP Library
سپس فایل دانلود شده را انتخاب و نصب نمایید.
برنامه آردوینو:
پس از نصب کتابخانه کد زیر را در آردوینو وارد و داخل برد آپلود کنید تا نتیجه را مشاهده نمایید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// Arduino with PCF8574T I2C LCD example #include <Wire.h> // Include Wire library (required for I2C devices) #include <LiquidCrystal_I2C.h> // Include LiquidCrystal_I2C library LiquidCrystal_I2C lcd(0x27, 16, 2); // Configure LiquidCrystal_I2C library with 0x27 address, 16 columns and 2 rows void setup() { lcd.init(); // Initialize I2C LCD module lcd.backlight(); // Turn backlight ON lcd.setCursor(0, 0); // Go to column 0, row 0 lcd.print("I2C LCD @ 0x27"); lcd.setCursor(0, 1); // Go to column 0, row 1 lcd.print("AVR64.com"); } void loop() { } |
اگر کار نکرد:
آدرس I2C چیپ PCF8574 در اکثر ماژول ها 0x27 میباشد که میتوان سه بیت کم ارزش تر آن را با اتصال جامپرهای A2 A1 A0 روی ماژول تغییر داد. با این حال در صورتی که برنامه بالا بر روی LCD شما جواب نداد در درجه اول پتانسیومتر روی ماژول را بپرخانید تا کنتراست LCD را تنظیم کنید و خروجی مشاهده شود، اگر باز هم جواب نگرفتید ممکن است آدرس ماژول شما متفاوت باشد. پیشنهاد میشود کد زیر را که یک برنامه I2C Scanner میباشد روی برد آردوینو پروگرم کرده و آدرس I2C ماژول را روی ترمینال آردوینو مشاهده کنید و در کد اصلی قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
// -------------------------------------- // i2c_scanner // // Version 1 // This program (or code that looks like it) // can be found in many places. // For example on the Arduino.cc forum. // The original author is not know. // Version 2, Juni 2012, Using Arduino 1.0.1 // Adapted to be as simple as possible by Arduino.cc user Krodal // Version 3, Feb 26 2013 // V3 by louarnold // Version 4, March 3, 2013, Using Arduino 1.0.3 // by Arduino.cc user Krodal. // Changes by louarnold removed. // Scanning addresses changed from 0...127 to 1...119, // according to the i2c scanner by Nick Gammon // https://www.gammon.com.au/forum/?id=10896 // Version 5, March 28, 2013 // As version 4, but address scans now to 127. // A sensor seems to use address 120. // Version 6, November 27, 2015. // Added waiting for the Leonardo serial communication. // // // This sketch tests the standard 7-bit addresses // Devices with higher bit address might not be seen properly. // #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); while (!Serial); // Leonardo: wait for serial monitor Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the 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(" !"); nDevices++; } else if (error==4) { Serial.print("Unknown error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan } |
جمع بندی:
با استفاده از ماژولهای I2C LCD براحتی میتوانید LCD های معمولی 2 در 16 و حتی بزرگتر مثل 4 در 20 را تنها با دوسیم راه اندازی کرده و خروجی دستگاه خود را بر روی آن نمایش دهید. همچنین توجه داشته باشید که آیسی PCF8574 تنها برای LCD ساخته نشده بلکه یک مبدل I2C به 8 ورودی/خروجی بوده و در حالت کلی برای افزایش تعداد I/O ها نیز قابل استفاده است و میتوان از کتابخانههای خاص این چیپ استفاده نمود.
منبع:
بازدیدها: 488