Mạch điều khiển màn hình lcd sử dụng giao tiếp i2c

Chi tiết sản phẩm

Gửi từ

Thành Phố Thủ Đức, TP. Hồ Chí Minh

LCD có quá nhiều chân gây khó khăn trong quá trình kết nối và chiếm dụng nhiều chân của vi điều khiển? Module chuyển đổi I2C cho LCD sẽ giải quyết vấn đề này cho bạn, thay vì sử dụng tối thiểu 6 chân của vi điều khiển để kết nối với LCD (RS, EN, D7, D6, D5 và D4) thì với module chuyển đổi bạn chỉ cần sử dụng 2 chân (SCL, SDA) để kết nối. Module chuyển đổi I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 1602, LCD 2004, … ), kết nối với vi điều khiển thông qua giao tiếp I2C, tương thích với hầu hết các vi điều khiển hiện nay. Ưu điểm • Tiết kiệm chân cho vi điều khiển • Dễ dàng kết nối với LCD Thông số kĩ thuật • Điện áp hoạt động: 2.5-6V DC • Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780) • Giao tiếp: I2C • Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2) • Kích thước: 41.5mm(L)x19mm(W)x15.3mm(H) • Trọng lượng: 5g • Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt • Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD Hướng dẫn sử dụng cơ bản Chuẩn bị: Module chuyển đổi I2C cho LCD. LCD 16x02. Board UnoX Arduino IDE. Tải và cài đặt thư viện Arduino-LiquidCrystal-I2C-library Đấu nối thiết bị: • Mở Arduino IDE, chọn File -> Examples -> Arduino-LiquidCrystal-I2C-library -> HelloWorld • Vào Tools chọn board:“Arduino/Genuino UNO”, port USB tương ứng và tiến hành nạp code. • Trường hợp nạp code nhưng màn hình không hiển thị, bạn có thể xử lý theo cách sau: • Điều chỉnh biến trở để thay đổi độ tương phản • Thay đổi địa chỉ I2C của module. Kiểm tra địa chỉ I2C của module bạn làm theo hướng dẫn (tại đây), và thay đổi địa chỉ I2C tại lệnh LiquidCrystal_I2C lcd(0x27, 16, 2); (0x27 là địa chỉ I2C mặc định). Inbox cho shop để lấy tài liệu tham khảo nhé. Ftech Việt Nam chuyên các linh kiện, thiết bị điện tử, module phát triển IoT mới như arduino, esp8266,…; các mảng về Wifi, Wireless, máy tính nhúng, các sản phẩm STEM KIT,… Ftech có chế độ bảo hành, đổi trả khi sản phẩm lỗi do nhà sản xuất, hỗ trợ kỹ thuật dài hạn và xuất hóa đơn VAT 10% cho khách hàng. Hotline/ sỉ liên hệ: 02866 824 204

  • Mạch chuyển đổi I2C cho LCD
  • Sử dụng 2 chân (SCL, SDA) để kết nối với vi điều khiển
  • Module chuyển đổi I2C hỗ trợ các loại LCD sử dụng driver HD44780 (LCD 1602, LCD 1604, LCD 2004,…), kết nối với vi điều khiển thông qua giao tiếp I2C, tương thích với hầu hết các vi điều khiển hiện nay.
  • Kích thước: 41.5 x 19 x 15.3mm
  • Trọng lượng: 5g
  • Màu PCB: Đen
  • Điện áp cung cấp: 2,5-6V
  • Hỗ trợ giao tiếp I2C
  • Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2)
  • Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt
  • Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD

Mạch điều khiển màn hình lcd sử dụng giao tiếp i2c

Mạch điều khiển màn hình lcd sử dụng giao tiếp i2c

Mạch điều khiển màn hình lcd sử dụng giao tiếp i2c

Thông số kĩ thuật

  • Điện áp hoạt động: 2.5-6V DC.
  • Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780).
  • Giao tiếp: I2C, IC giao tiếp PCF8574 làm trung gian giữa Arduino với LCD1602 8 bit .
  • Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2).
  • Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt.
  • Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD.

Để sử dụng màn hình LCD giao tiếp I2C sử dụng Arduino thì ta cần cài đặt thư viện Liquidcrystal_I2C. Tại đây

Các lỗi thường gặp khi sử dụng I2C LCD

  • Hiển thị một dãy ô vuông.
  • Màn hình chỉ in ra một ký tự đầu.
  • Màn hình nhấp nháy.

Các lỗi này chủ yếu là do sai địa chỉ bus, để fix lỗi các bạn thay địa chỉ mặc định là “0x27” thành “0x3F.

Trong trường hợp vẫn không được các bạn fix lỗi bằng cách nạp code tìm địa chỉ bus của I2C.

Sau khi tìm xong các bạn thay địa chỉ vừa tìm được vào vị trí “0x27” là xong.

Giao tiếp I2C LCD Arduino

Module I2C LCD 16×2  Arduino UNO
GND GND
VCC 5V
SDA A4/SDA
SCL A5/SCL

Sơ đồ đấu nối mootjmanf hình LCD1602 I2C

Mạch điều khiển màn hình lcd sử dụng giao tiếp i2c
Sơ đồ đấu nối giao tiếp IC2 với LCD 16×2.

Code quét các device trong một bus I2C

Mạch điều khiển màn hình lcd sử dụng giao tiếp i2c

Module I2C PCF8574 hỗ trợ giao tiếp I2C với 7bit địa chỉ, trong đó có 4 bit cố định và 3 bit có thể được người dùng tùy chỉnh có dạng 0 1 0 0 A2 A1 A0. Mặc định, trên module nhà sản xuất để các chân A0, A1, A2 ở mức logic cao nên PCF8574 có địa chỉ là 0x27. Để thay đổi địa chỉ của IC này khi cần, bạn có thể tùy chọn thay đổi các mức logic của 3 chân này bằng cách nối xuống GND (mức thấp) cho các chân  A0, A1, A2.

Mạch điều khiển màn hình lcd sử dụng giao tiếp i2c

Các bạn có thể tải code tìm địa chỉ bus ở đây. Tải ngay.

void setup() { Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println(" I2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 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(" !"); 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 "); else Serial.println("done "); delay(5000); }
Mạch điều khiển màn hình lcd sử dụng giao tiếp i2c

Code chương trình cho 2 màn hình LCD 16×02, kết nối với Arduino

Mạch điều khiển màn hình lcd sử dụng giao tiếp i2c

LiquidCrystal_I2C lcd1(0x3F, 16, 2); LiquidCrystal_I2C lcd2(0x26, 16, 2); const int decimals = 2; const int positions = 5; void setup() { lcd1.begin(); lcd2.begin(); lcd1.backlight(); lcd2.backlight(); Serial.begin(9600); lcd1.print("Robojax Display"); lcd1.setCursor(0,1); lcd1.print("Display 1"); lcd2.print("Robojax Display"); lcd2.setCursor(0,1); lcd2.print("Display 2"); Serial.println("Robojax Displays"); Serial.println("2 or More"); delay(3000); lcd1.clear(); lcd2.clear(); } void loop() { int age = 31; int days= age * 365; float weight = 4.84; float voltage = 22.1; lcdDisplay(1, 0, "Age: ", intToStr(age), " years"); lcdDisplay(1, 1, "Days: ", intToStr(days), " days"); lcdDisplay(2, 0, "Weight: ", floatToStr(weight), " kg"); lcdDisplay(2, 1, "Voltage: ", floatToStr(voltage), "V"); Serial.println("Age: ");Serial.print(age); Serial.print(" years"); Serial.println("Days: ");Serial.print(days); Serial.print(" days"); Serial.println("===="); delay(50); } void lcdDisplay(int dis, int rowNum, String titleText, String valueText, String value2Text) { clearRow(dis,rowNum); String myStr; myStr = String(valueText); int titleTextLength = titleText.length(); if(dis ==1) { lcd1.setCursor (0,rowNum); lcd1.print(titleText); lcd1.setCursor (titleTextLength,rowNum); lcd1.print(myStr); lcd1.setCursor (myStr.length()+titleTextLength,rowNum); lcd1.print(value2Text); } if(dis ==2) { lcd2.setCursor (0,rowNum); lcd2.print(titleText); lcd2.setCursor (titleTextLength,rowNum); lcd2.print(myStr); lcd2.setCursor (myStr.length()+titleTextLength,rowNum); lcd2.print(value2Text); } } void clearRow(int d,int r) { for(int i=0; i<16; i++) { if(d ==1) { lcd1.setCursor (i,r); lcd1.print(" "); } if(d ==2) { lcd2.setCursor (i,r); lcd2.print(" "); } } } String intToStr(int a) { return String(a); } String floatToStr(float a) { char buff[6]; dtostrf(a, positions, decimals, buff ); return buff; }

Tham khảo: