I2C LCD 어댑터 모듈 소개

문제를 제거하기 위해 도구를 사용해보십시오





이 게시물에서는 Arduino와 LCD 디스플레이 간의 배선 연결을 단 2 선으로 줄이면서도 많은 GPIO 핀을 절약 할 수있는 'I2C'또는 'IIC'또는 'I square C'기반 LCD 어댑터 모듈을 살펴 보겠습니다. 기타 센서 / 드라이브 등

I2C LCD 어댑터 모듈에 대해 논의하기 전에 I2C 버스가 무엇이며 어떻게 작동하는지 이해하는 것이 중요합니다.



그러나 어쨌든이 언급 된 LCD 어댑터를 사용하기 위해 I2C 프로토콜에 대한 전문가 일 필요는 없습니다.

I2C 연결 그림 :

I2C 연결 그림 :

I2C 또는 IIC는 'Inter-Integrated Circuit'을 의미하며 오늘날 NXP 반도체로 알려진 Philips 반도체가 개발 한 직렬 컴퓨터 버스입니다. 이 버스 시스템은 1982 년에 발명되었습니다.



버스 란?

버스는 한 칩에서 다른 칩으로 / 한 회로 기판에서 다른 회로 기판으로 데이터를 전달하는 케이블 / 와이어 그룹입니다.

I2C 버스 프로토콜의 가장 큰 장점은 지원되는 마이크로 컨트롤러 나 센서 또는 칩이 단 두 개의 와이어로 상호 연결될 수 있다는 것입니다. 이 프로토콜의 장점은 127 개의 서로 다른 칩 또는 센서 / 드라이버를 하나의 마스터 장치에 연결할 수 있다는 것입니다. 보통 2 개의 와이어 만있는 마이크로 컨트롤러입니다.

두 개의 I2C 와이어는 무엇입니까?

두 개의 와이어는 각각 직렬 데이터 및 직렬 클럭 인 SDA 및 SCL입니다.

직렬 클럭 또는 SCL은 I2C 버스를 통해 데이터 통신을 동기화하는 데 사용됩니다. SDA 또는 직렬 데이터는 실제 데이터가 마스터에서 슬레이브로 또는 그 반대로 전달되는 데이터 라인입니다. 마스터 장치는 직렬 클럭을 제어하고 통신해야하는 슬레이브 장치를 결정합니다. 슬레이브 장치는 먼저 통신을 시작할 수 없으며 마스터 장치 만 할 수 있습니다.

직렬 데이터 라인은 양방향이고 견고합니다. 8 비트 데이터 세트가 전송 될 때마다 수신 장치가 승인 비트를 다시 전송합니다.

I2C 프로토콜은 얼마나 빠릅니까?

1982 년에 개발 된 I2C 프로토콜의 원래 버전은 100Kbps를 지원했습니다. 다음 버전은 400Kbps (고속 모드)를 지원하고 최대 1008 개의 장치를 지원하는 1992 년에 표준화되었습니다. 다음 버전은 1998 년 3.4Mbps (고속 모드)로 개발되었습니다.

몇 가지 다른 I2C 버전은 2000 년, 2007 년, 2012 년 (5Mbps 초고속 모드 사용)에 개발되었으며 최신 버전의 I2C는 2014 년에 개발되었습니다.

I2C 버스에 풀업 저항이있는 이유는 무엇입니까?

SDA와 SCL은 '오픈 드레인'입니다. 즉, 두 라인 모두 LOW가 될 수 있지만 라인을 HIGH로 구동 할 수 없으므로 각 라인에 풀업 저항이 연결됩니다.

그러나 LCD 또는 RTC와 같은 대부분의 I2C 모듈에는 풀업 저항이 내장되어 있으므로 지정하지 않는 한 연결할 필요가 없습니다.

풀업 / 풀다운 저항 : 풀업 저항은 라인이 높거나 낮지 않은 경우 라인의 로직 레벨을 HIGH로 유지하기 위해 전원의 + Ve 라인에 연결된 저항입니다.

풀다운 저항은 라인이 높거나 낮지 않은 경우 라인의 로직 레벨을 LOW로 유지하기 위해 전원의 –Ve 라인에 연결된 저항입니다.

이것은 또한 라인에 들어오는 소음을 방지합니다.

우리는 I2C 프로토콜의 표면을 긁었기를 바랍니다. I2C 프로토콜에 대한 자세한 정보가 필요하면

YouTube와 Google.

이제 I2C LCD 모듈을 살펴 보겠습니다.

I2C LCD 모듈 핀아웃

16 X 2 LCD 모듈 뒷면에 직접 납땜 할 수있는 LCD 디스플레이 용 16 개의 출력 핀이 있습니다.

입력 핀은 + 5V, GND, SDA 및 SCL입니다. Arduino Uno의 SDA 및 SCL 핀은 각각 A4 및 A5 핀입니다. Arduino의 경우 mega SDA는 핀 # 20이고 SCL은 핀 # 21입니다.

I2C 어댑터없이 어댑터를 사용하여 LCD를 Arduino에 연결할 때 어떻게 보이는지 비교해 보겠습니다.

I2C 어댑터 미포함 :

I2C 어댑터가없는 Arduino

I2C 어댑터 사용 :

I2C 어댑터를 사용하는 Arduino

어댑터는 LCD 디스플레이 뒷면에 납땜되어 있으며 다른 작업을 위해 GPIO 핀 부하를 절약 한 것을 볼 수 있으며 핀 A4 및 A5에 126 개의 I2C 장치를 계속 추가 할 수 있습니다.

표준 Liquid Crystal 라이브러리는이 I2C LCD 어댑터와 함께 작동하지 않습니다. 이에 대한 특수 라이브러리가 있습니다. 곧 다룰 예정이며 코딩 예제와 함께이 모듈을 사용하는 방법을 보여 드리겠습니다.

I2C 어댑터를 16 x 2 디스플레이에 연결하는 방법

이 기사의 위 섹션에서 I2C 프로토콜의 기본 사항을 배웠고 I2C LCD 어댑터 모듈에 대한 기본 개요를 살펴 보았습니다. 이 게시물에서는 I2C LCD 어댑터 모듈을 16 x 2 LCD 디스플레이에 연결하는 방법을 배우고 예제를 통해 프로그램 방법을 살펴 봅니다.

I2C 프로토콜의 가장 큰 장점은 지원되는 센서 / 입력 / 출력 장치를 단 두 줄로 연결할 수 있으며 GPIO 핀이 제한되어있어 Arduino에 도움이된다는 것입니다.

이제 모듈을 LCD에 연결하는 방법을 살펴 보겠습니다.

모듈에는 16 개의 출력 핀과 4 개의 입력 핀이 있습니다. 어댑터를 16 x 2 LCD 디스플레이 뒷면에 납땜하면됩니다. 4 개의 입력 핀 중 2 개는 + 5V 및 GND이고 나머지 2 개는 SDA 및 SCL입니다.

다른 입력 / 출력 작업을 위해 Arduino에 많은 핀을 저장했음을 알 수 있습니다.

작은 드라이버 (빨간색 상자로 강조 표시됨)로 전위차계를 조정하여 디스플레이의 대비를 조정할 수 있습니다.

이제 프로그램 코드 자체에서 백라이트를 제어 할 수 있습니다.

lcd.backlight ()

그러면 LCD 디스플레이의 백라이트가 켜집니다.

lcd.noBacklight ()

LCD 디스플레이의 백라이트가 꺼집니다.

점퍼가 연결되어있는 것을 볼 수 있습니다. 빨간색 상자로 강조 표시되어 있습니다. 점퍼가 제거되면 프로그램 명령에 관계없이 백라이트가 꺼진 상태로 유지됩니다.

이제 하드웨어 설정이 완료되었습니다. 이제 코딩 방법을 살펴 보겠습니다. I2C LCD 모듈에는 특별한

라이브러리 및 사전 설치된 'liquidcrystal'라이브러리는 작동하지 않습니다.

여기에서 I2C LCD 라이브러리를 다운로드하고 Arduino IDE에 추가 ​​할 수 있습니다.

github.com/marcoschwartz/LiquidCrystal_I2C

이전 게시물에서 I2C 장치에는 마스터 또는 마이크로 컨트롤러가 장치를 식별하고 통신 할 수있는 주소가 있음을 배웠습니다.

대부분의 경우 I2C LCD 모듈의 경우 주소는 '0x27'입니다. 그러나 제조업체마다 주소가 다를 수 있습니다. 프로그램에 정확한 주소를 입력해야 LCD 디스플레이가 작동합니다.

주소를 찾으려면 5V를 Vcc에 연결하고 GND를 Arduino의 GND에 연결하고 I2C 모듈의 SCL 핀을 A5에 연결하고 SDA를 A4에 연결하고 아래 코드를 업로드하십시오.

연결된 I2C 장치를 스캔하고 주소를 표시합니다.

// -------------------------------- //
#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)
}
// -------------------------------- //

코드를 업로드하고 직렬 모니터를 엽니 다.

두 개의 장치가 감지되고 해당 주소가 표시되는 것을 볼 수 있지만 I2C LCD 모듈의 주소 만 찾으려면 스캔하는 동안 다른 I2C 장치를 연결해서는 안됩니다.
결론적으로 우리는“0x27”주소를 얻었습니다.

이제 두 개의 I2C 장치, LCD 모듈과 RTC 또는 실시간 클럭 모듈이 있으므로 디지털 시계를 예로 들어 보겠습니다. 두 모듈은 두 개의 와이어로 연결됩니다.

다음 라이브러리를 다운로드하십시오.
RTC 라이브러리 : github.com/PaulStoffregen/DS1307RTC
TimeLib.h : github.com/PaulStoffregen/Time

RTC에 시간을 설정하는 방법

• Arduino IDE를 열고 File> Example> DS1307RTC> set time으로 이동합니다.
• 완성 된 하드웨어로 코드를 업로드하고 직렬 모니터를 열면 완료됩니다.

회로도 :

프로그램:

//------------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-------//

노트 :

LiquidCrystal_I2C LCD (0x27, 16, 2)

“0x27”은 스캔을 통해 찾은 주소이고 16과 2는 LCD 디스플레이의 행과 열 수입니다.

RTC의 경우 주소를 찾을 필요가 없지만 '0x68'을 스캔하면서 찾았지만 어쨌든 RTC 라이브러리가이를 처리합니다.

이제 Arduino에서 와이어 혼잡을 얼마나 줄이고 GPIO 핀을 절약했는지 살펴 보겠습니다.

빨간색 상자로 강조 표시된 4 개의 전선 만 LCD 디스플레이에 연결됩니다.

또한 Arduino에서 단 4 개의 와이어 만 연결되고 RTC 모듈은 동일한 라인을 공유합니다.

지금까지 I2C 및 I2C LCD 어댑터 모듈 사용 방법에 대한 기본 지식을 얻었습니다.
이 게시물이 마음에 드십니까? 질문있으세요? 댓글란에 적어 주시면 빠른 답변을 받으실 수 있습니다.




이전 : 간단한 트랜지스터 다이오드 테스터 회로 다음 :이 IR 원격 제어 범위 확장기 회로 만들기