Giới thiệu về Mô-đun Bộ điều hợp LCD I2C

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Trong bài đăng này, chúng ta sẽ xem xét mô-đun bộ điều hợp LCD dựa trên “I2C” hoặc “IIC” hoặc “I square C”, sẽ giảm kết nối dây giữa Arduino và màn hình LCD xuống chỉ còn 2 dây, cũng tiết kiệm rất nhiều chân GPIO cho các cảm biến / ổ đĩa khác, v.v.

Trước khi chúng ta thảo luận về mô-đun bộ điều hợp LCD I2C, điều quan trọng là phải hiểu bus I2C là gì và cách hoạt động của nó.



Nhưng dù sao thì bạn không cần phải là một chuyên gia với giao thức I2C để làm việc với bộ điều hợp LCD được đề cập này.

Hình minh họa kết nối I2C:

Hình minh họa kết nối I2C:

I2C hay IIC là viết tắt của “Inter-Integrated Circuit” là một bus máy tính nối tiếp được phát minh bởi chất bán dẫn của Philips, ngày nay được gọi là chất bán dẫn NXP. Hệ thống xe buýt này được phát minh vào năm 1982.



Xe buýt là gì?

Bus là một nhóm cáp / dây dẫn dữ liệu từ chip này sang chip khác / bảng mạch này sang bảng mạch khác.

Ưu điểm chính của giao thức bus I2C là vi điều khiển hoặc cảm biến hoặc chip được hỗ trợ có thể được liên kết với nhau chỉ bằng hai dây. Ưu điểm nổi bật của giao thức này là chúng ta có thể kết nối 127 con chip hoặc cảm biến / trình điều khiển khác nhau với một thiết bị chính thường là một bộ vi điều khiển chỉ với 2 dây.

Hai dây I2C là gì?

Hai dây là SDA và SCL lần lượt là Serial Data và Serial clock.

Đồng hồ nối tiếp hoặc SCL được sử dụng để đồng bộ hóa giao tiếp dữ liệu qua bus I2C. SDA hoặc Dữ liệu nối tiếp là dòng dữ liệu trong đó dữ liệu thực tế được truyền từ chủ sang phụ và ngược lại. Thiết bị chính điều khiển đồng hồ Nối tiếp và quyết định thiết bị phụ nào nó cần giao tiếp. Không thiết bị phụ nào có thể bắt đầu giao tiếp trước, chỉ thiết bị chủ mới có thể thực hiện.

Dòng dữ liệu Serial là hai chiều và mạnh mẽ, sau mỗi tập dữ liệu 8 bit được gửi, thiết bị nhận sẽ gửi lại một bit báo nhận.

Giao thức I2C nhanh như thế nào?

Phiên bản gốc của giao thức I2C được phát triển vào năm 1982 hỗ trợ 100 Kbps. Phiên bản tiếp theo được chuẩn hóa vào năm 1992, hỗ trợ 400Kbps (Chế độ nhanh) và hỗ trợ lên đến 1008 thiết bị. Phiên bản tiếp theo được phát triển vào năm 1998 với 3,4 Mbps (Chế độ tốc độ cao).

Một số phiên bản I2C khác đã được phát triển trong những năm 2000, 2007, 2012 (với chế độ Ultra-Fast 5Mbps) và phiên bản gần đây của I2C được phát triển vào năm 2014.

Tại sao kéo lên điện trở trong bus I2C?

SDA và SCL là “hở” có nghĩa là cả hai đường đều có thể ở mức THẤP nhưng nó không thể khiến đường ở mức CAO, do đó, một điện trở kéo lên được kết nối trên mỗi đường.

Nhưng với hầu hết các mô-đun I2C như LCD hoặc RTC đã tích hợp điện trở kéo lên, vì vậy chúng ta không cần kết nối một điện trở trừ khi nó được chỉ định.

Điện trở kéo lên / kéo xuống: Điện trở kéo lên là điện trở được nối với + Đường Ve của nguồn cung cấp để giữ mức logic của một đường là CAO nếu đường không cao cũng không thấp.

Một điện trở kéo xuống là một điện trở được kết nối với dòng –Ve của nguồn cung cấp để giữ mức logic của một dòng ở mức THẤP nếu dòng không cao cũng không thấp.

Điều này cũng ngăn chặn tiếng ồn xâm nhập vào đường dây.

Chúng tôi hy vọng chúng tôi đã khai thác bề mặt của giao thức I2C, nếu bạn cần thêm thông tin về giao thức I2C, vui lòng lướt trên

YouTube và Google.

Bây giờ chúng ta hãy xem xét mô-đun LCD I2C:

Sơ đồ chân mô-đun LCD I2C

Có 16 chân đầu ra cho màn hình LCD có thể được hàn trực tiếp vào mặt sau của mô-đun LCD 16 X 2.

Các chân đầu vào là + 5V, GND, SDA và SCL. Các chân SDA và SCL trên Arduino Uno lần lượt là các chân A4 và A5. Đối với Arduino mega SDA là chân # 20 và SCL là chân # 21.

Hãy để chúng tôi so sánh nó trông như thế nào khi chúng tôi kết nối màn hình LCD với Arduino mà không có bộ điều hợp I2C và với bộ điều hợp.

Không có Bộ điều hợp I2C:

Arduino không có bộ điều hợp I2C

Với bộ điều hợp I2C:

Arduino sử dụng Bộ điều hợp I2C

Bộ điều hợp được hàn ở mặt sau của màn hình LCD và như chúng ta có thể thấy rằng chúng tôi đã lưu rất nhiều chân GPIO cho các tác vụ khác và chúng tôi cũng có thể tiếp tục thêm 126 thiết bị I2C khác vào chân A4 và A5.

Xin lưu ý rằng thư viện Tinh thể lỏng tiêu chuẩn sẽ không hoạt động với bộ điều hợp I2C LCD này, có một thư viện đặc biệt cho điều này, sẽ sớm được đề cập và chúng tôi sẽ hướng dẫn bạn cách sử dụng mô-đun này với ví dụ mã hóa.

Cách kết nối Bộ điều hợp I2C với Màn hình 16 x 2

Trong các phần trên của bài viết, chúng ta đã tìm hiểu những kiến ​​thức cơ bản về giao thức I2C và có một cái nhìn tổng quan cơ bản về mô-đun bộ điều hợp LCD I2C. Trong bài đăng này, chúng ta sẽ tìm hiểu cách kết nối mô-đun bộ điều hợp LCD I2C với màn hình LCD 16 x 2 và chúng ta sẽ xem cách lập trình với một ví dụ.

Ưu điểm chính của giao thức I2C là chúng ta có thể nối dây các cảm biến / thiết bị đầu vào / đầu ra được hỗ trợ chỉ trong hai đường và nó rất hữu ích với Arduino vì nó có giới hạn chân GPIO.

Bây giờ, hãy xem cách kết nối mô-đun với màn hình LCD.

Mô-đun có 16 chân đầu ra và 4 chân đầu vào. Chúng tôi chỉ có thể hàn bộ chuyển đổi vào mặt sau của màn hình LCD 16 x 2. Trong số 4 chân đầu vào, hai chân là + 5V và GND, phần còn lại của hai chân là SDA và SCL.

Chúng ta có thể thấy rằng chúng ta đã lưu rất nhiều chân ở Arduino cho các tác vụ đầu vào / đầu ra khác.

Chúng ta có thể điều chỉnh độ tương phản của màn hình bằng cách điều chỉnh chiết áp với trình điều khiển vít nhỏ (được đánh dấu trong ô màu đỏ).

Giờ đây, đèn nền có thể được điều khiển trong chính mã chương trình:

LCD đèn nền()

Thao tác này sẽ BẬT đèn nền trên màn hình LCD.

lcd.noBacklight ()

Thao tác này sẽ TẮT đèn nền trên màn hình LCD.

Chúng ta có thể thấy có một jumper được kết nối, được đánh dấu trong hộp màu đỏ, nếu jumper bị loại bỏ, đèn nền vẫn TẮT bất kể lệnh của chương trình.

Bây giờ thiết lập phần cứng đã xong, bây giờ chúng ta hãy xem cách viết mã. Hãy nhớ rằng mô-đun LCD I2C cần đặc biệt

thư viện và thư viện “liquidcrystal” được cài đặt sẵn sẽ không hoạt động.

Bạn có thể tải xuống thư viện I2C LCD từ đây và thêm vào Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

Từ bài trước, chúng ta đã biết rằng thiết bị I2C có địa chỉ mà bộ điều khiển hoặc bộ vi điều khiển có thể xác định thiết bị và giao tiếp.

Trong hầu hết các trường hợp, đối với mô-đun LCD I2C, địa chỉ sẽ là “0x27”. Nhưng sản xuất khác nhau có thể có địa chỉ khác nhau. Chúng ta chỉ cần nhập đúng địa chỉ trong chương trình thì màn hình LCD của bạn mới hoạt động.

Để tìm địa chỉ chỉ cần kết nối 5V với Vcc và GND với GND của Arduino và chân SCL của mô-đun I2C với A5 và SDA với A4 và tải lên đoạn mã dưới đây.

Thao tác này sẽ quét các thiết bị I2C được kết nối và hiển thị địa chỉ của chúng.

// -------------------------------- //
#include
void setup()
{
Wire.begin()
Serial.begin(9600)
while (!Serial)
Serial.println('-----------------------')
Serial.println('I2C Device Scanner')
Serial.println('-----------------------')
}
void loop()
{
byte error
byte address
int Devices
Serial.println('Scanning...')
Devices = 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(' !')
Devices++
}
else if (error == 4)
{
Serial.print('Unknown error at address 0x')
if (address <16)
Serial.print('0')
Serial.println(address, HEX)
}
}
if (Devices == 0)
{
Serial.println('No I2C devices found ')
}
else
{
Serial.println('-------------- done -------------')
Serial.println('')
}
delay(5000)
}
// -------------------------------- //

Tải lên mã và mở màn hình nối tiếp.

Như chúng ta có thể thấy hai thiết bị đã được phát hiện và địa chỉ của chúng được hiển thị, nhưng nếu bạn chỉ muốn tìm địa chỉ của mô-đun LCD I2C, bạn không nên kết nối bất kỳ thiết bị I2C nào khác trong khi quét.
Vì vậy, kết luận là chúng tôi nhận được địa chỉ '0x27'.

Bây giờ chúng ta sẽ làm một chiếc đồng hồ kỹ thuật số chẳng hạn vì có hai thiết bị I2C, mô-đun LCD và RTC hoặc mô-đun đồng hồ thời gian thực. Cả hai mô-đun sẽ được kết nối bằng hai dây.

Tải xuống thư viện sau:
Thư viện RTC: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Cách đặt thời gian thành RTC

• Mở Arduino IDE và điều hướng đến Tệp> Ví dụ> DS1307RTC> đặt thời gian.
• Tải lên mã với phần cứng hoàn chỉnh và mở màn hình nối tiếp và bạn đã hoàn tất.

Sơ đồ mạch:

Chương trình:

//------------Program Developed by R.Girish-------//
#include
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
}
void loop()
{
tmElements_t tm
lcd.clear()
if (RTC.read(tm))
{
if (tm.Hour >= 12)
{
lcd.setCursor(14, 0)
lcd.print('PM')
}
if (tm.Hour <12)
{
lcd.setCursor(14, 0)
lcd.print('AM')
}
lcd.setCursor(0, 0)
lcd.print('TIME:')
if (tm.Hour > 12)
{
if (tm.Hour == 13) lcd.print('01')
if (tm.Hour == 14) lcd.print('02')
if (tm.Hour == 15) lcd.print('03')
if (tm.Hour == 16) lcd.print('04')
if (tm.Hour == 17) lcd.print('05')
if (tm.Hour == 18) lcd.print('06')
if (tm.Hour == 19) lcd.print('07')
if (tm.Hour == 20) lcd.print('08')
if (tm.Hour == 21) lcd.print('09')
if (tm.Hour == 22) lcd.print('10')
if (tm.Hour == 23) lcd.print('11')
}
else
{
lcd.print(tm.Hour)
}
lcd.print(':')
lcd.print(tm.Minute)
lcd.print(':')
lcd.print(tm.Second)
lcd.setCursor(0, 1)
lcd.print('DATE:')
lcd.print(tm.Day)
lcd.print('/')
lcd.print(tm.Month)
lcd.print('/')
lcd.print(tmYearToCalendar(tm.Year))
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0)
lcd.print('RTC stopped!!!')
lcd.setCursor(0, 1)
lcd.print('Run SetTime code')
} else {
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Read error!')
lcd.setCursor(0, 1)
lcd.print('Check circuitry!')
}
}
delay(1000)
}
//------------Program Developed by R.Girish-------//

Ghi chú:

Màn hình LCD LiquidCrystal_I2C (0x27, 16, 2)

“0x27” là địa chỉ mà chúng tôi tìm thấy bằng cách quét và 16 và 2 là số hàng và cột trên màn hình LCD.

Đối với RTC, chúng tôi không cần tìm địa chỉ nhưng chúng tôi đã tìm thấy trong khi quét “0x68”, nhưng dù sao thì thư viện RTC sẽ xử lý nó.

Bây giờ, hãy xem chúng tôi đã giảm tắc nghẽn dây và tiết kiệm các chân GPIO trên Arduino đến mức nào.

Chỉ có 4 dây được kết nối với màn hình LCD, được đánh dấu trong ô màu đỏ.

Ngoài ra, chỉ có 4 dây được kết nối từ Arduino và mô-đun RTC chia sẻ các đường giống nhau.

Đến đây bạn đã có kiến ​​thức cơ bản về I2C và cách sử dụng mô-đun bộ điều hợp LCD I2C.
Bạn thích bài này? Bạn có câu hỏi nào không? Hãy bày tỏ trong phần bình luận, bạn có thể sẽ nhận được phản hồi nhanh chóng.




Một cặp: Mạch kiểm tra diode bóng bán dẫn đơn giản Tiếp theo: Tạo mạch mở rộng phạm vi điều khiển từ xa IR này