Trong bài này chúng ta sẽ học cách sử lập trình STM32 với Module LCD I2C sử dụng chip PCF8574, đây là một module rất phù hợp khi điều khiển các loại Character LCD có trên thị trường hiện nay.
LCD có quá nhiều nhiều chân gây khó khăn trong quá trình đấu nối và chiếm dụng nhiều chân trên vi điều khiển. Chính vì vậy module PCF8574 ra đời. Thay vì phải mất 6 chân vi điều khiển để kết nối với LCD 16×2 (RS, EN, D7, D6, D5 và D4) thì module IC2 bạn chỉ cần tốn 2 chân (SCL, SDA) để kết nối.
Module I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 16×2, LCD 20×4, …), nói chung là hầu hết các loại LCD character hiện nay.
Module PCF8574 cũng đươc thiết kế để hàn một cách nhanh chóng vào các loại LCD16x2, 20×4… Khiến việc đấu nối trở nên dễ dàng hơn rất nhiều
Đị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 để bật/tắt đèn nền LCD
Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD.
Cách kết nối với LCD và vi điều khiển
Chúng ta hàn trực tiếp module PCF8574 vào sau LCD như hình sau:
Để kết nối với vi điều khiển, chúng ta chỉ sử dụng các chân SDA và SCL và 2 đường nguồn là được. Các bạn nên cấp điện 5V cho module sẽ khiến LCD sáng rõ ràng hơn, và có thể một số LCD chỉ chạy ở mức 5V, vậy nên các bạn lưu ý nhé.
Với module PCF8574 chúng ta sẽ điều khiển tương tự như LCD chế độ 4 bit, nhưng thay vì phải xuất tín hiệu ra 8 chân RS, RW, EN, CS và D4-D7. Chúng ta chỉ cần xuất tín hiệu ra 2 chân SDA và SCL là được.
Sơ đồ khối
Nhìn vào sơ đồ khối của PCF8574 chúng ta thấy, đầu ra của nó gồm 8 chân P0-P7 Tương ứng với 4 bit RS, RW, BL (Back Light), EN và 4 bit Data D4 – D7 trên LCD.
Đầu vào sẽ gồm 2 chân SDA và SCL giao tiếp với vi điều khiển, 3 chân A0, A1, A2 để thay đổi địa chỉ cho PCF8574. Nghĩa là bạn có thể mắc nối tiếp 8 thiết bị PCF8574 trên cùng 1 bus I2C.
Cách cấu hình địa chỉ cho Module LCD I2C PCF8574
Khi truyền nhận I2C, byte đầu tiên chúng ta luôn phải truyền vào địa chỉ của chip I2C cần giao tiếp, Byte đầu tiên trong PCF8574 được tổ chức như sau:
Các bit 4-7 được fix sẵn, chỉ có các bit 1 2 3 tương ứng với A2,A1,A0 có thể được sửa đổi, khi hàn các chân trên Board (Mặc định là 1 1 1). Để tính toán địa chỉ chúng ta dựa vào bảng sau:
Một lưu ý khi giao tiếp I2C với STM32 đó là địa chỉ luôn luôn phải được dịch trái 1 bit, trước khi AND với Bit R/W. Chi tiết mình đã nói rõ trong bài : STM32 I2C , các bạn nếu quên thì đọc lại nhé!
Khi bắt đầu truyền dữ liệu, MCU sẽ truyền địa chỉ vào mạn I2C, nếu Module nào có cùng địa chỉ, chúng sẽ gửi ACK, sau đó MCU sẽ gửi các data tương ứng với Command và Paragram truyền vào LCD theo chế độ 4 BIT.
Trong file .h chúng ta sẽ define các bit tương ứng với các chân RS,RW, BL, EN.
Trong hàm Write vào LCD chúng ta sẽ AND các BIT tương ứng vào DATA H (Các bit cao) của data. Vì các bit thấp chính là Data (D4-D7) mà chúng ta truyền vào.
Nhấp đúp chuột vào project và add file CLCD.c vào project.
Chỉnh lại đường dẫn thư viện trong C/C++.
Khởi tạo LCD I2C tên là LCD1.
Khởi tạo LCD I2C với I2C1 trên STM32. Sau đó sử dụng các hàm ghi lên màn hình
Kết quả
Thay đổi code tùy thích các bạn nhé, rút chốt bên tay phải để bật/tắt led backlight. Sử dụng tua vít để chỉnh độ tương phản bằng biến trở trên module.
Kết
LCD I2C được sử dụng rất rộng rãi khi chúng ta muốn điều khiển LCD Character, module này tương thích với các dòng LCD1602, 2004 …. Việc lập trình cũng khá là đơn giản, các bạn chỉ cần thay đổi giao thức đọc ghi từ 4bit sang I2C là xong.
Nếu thấy bài viết này hay, hãy chia sẻ tới những người bạn học hay đồng nghiệp của mình. Và nếu thắc mắc điều gì, hãy để lại bình luận nhé
Cho e hỏi là khi em làm đến bước khởi tạo “CLCD_I2C_Name LCD1;” nó báo lỗi unknown type name dù e đã add file CLCD.h và .c vào đủ rồi thì phải sửa lỗi như nào ạ?
lcd 20×4 sài đc ko a
Cho e hỏi là khi em làm đến bước khởi tạo “CLCD_I2C_Name LCD1;” nó báo lỗi unknown type name dù e đã add file CLCD.h và .c vào đủ rồi thì phải sửa lỗi như nào ạ?
Xem lại add thư viện đúng chưa nhé