본문 바로가기
코딩/아두이노

아두이노 LCD 1602 4핀(I2C제어) 디스플레이 사용하는 방법

by DIYver 2021. 3. 14.

 

 

<목표>

 

 

- 컴퓨터가 없을 때, 센서값을 알고 싶은경우 1602 캐릭터 lcd를 사용한다.

1602 lcd의 사용방법을 알아보고 출력하고 싶은 값을 출력해보자.


<준비물>

 

 

- 아두이노, 1602캐릭터 lcd (I2C 제어모듈)


<회로도>

 

아두이노  -  LCD 모듈

5V - VCC

GND - GND

A4 - SDA

A5 - SCL

 

 

연결방법은 위와 같으며,

I2C 통신을 위해서 아두이노의 SDA핀과 SCL 핀을 사용해야만 한다.

 

SDA와 SCL핀은 아두이노 설계상으로 고정된 핀이기 때문에 다른 핀으로 변경할 수 없다.

아두이노 말고 다른 MCU에서 사용할 경우에도 SDA와 SCL 핀을 확인해야 한다.

 


<코드>

 

 

#include <LiquidCrystal_I2C.h>
#include <Wire.h>


LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Hello, world!");
  lcd.setCursor(0,1);
  lcd.print("1602 lcd test");

}
void loop()
{
  

}

 

코드는 위의 코드를 사용하면 되고

LCD1602 를 사용하기 위해서는 라이브러리를 설치해주어야 한다.

 

github.com/johnrickman/LiquidCrystal_I2C

 

위의 주소에서 라이브러리를 받으면 된다.

 

 

LiquidCrystal_I2C-master.zip
0.01MB

위의 주소에서 받기 귀찮다면 필자가 올린 위의 파일을 다운받으면 된다.

 


<실행 결과>

 

 

정상적으로 되면 위와같이 문구가 뜨게 된다.

 

가끔 제대로 안 되는 경우가 있는데

3가지 이유가 있다.

 

첫째로

코드상에서 I2C 통신 주소가 잘 못된 경우

-

코드를 보면 0x27 이라고 입력한 자리가

I2C 통신 주소이다.

 

보통 0x27이지만 위의 코드로 안 되는 경우 0x3F 로 대체해봐야 한다.

 

 

 

 

 

둘째로

캐릭터 LCD1602 에서 밝기 조정이 잘 못 되었을 경우 - 어두운 경우

 

위와같이 아무런 문구가 뜨지 않는 경우가 있고

해결방법은 세번째 원인의 해결 방법과 같기에 밑에서 서술하겠다.

 

 

셋째로 

캐릭터 LCD1602 에서 밝기 조정이 잘 못 되었을 경우 - 밝은경우

 

위와같이 네모난 칸들만 뜨는 경우 너무 밝아서 생기는 문제라고 볼 수 있다.

 

 

 

 

<해결 방법>

 

LCD 모듈의 뒤를 보면 십자(+) 드라이버로 가변저항을 조절하여

LCD의 밝기를 조절할 수 있다.

 

 

 

 

첫번째의 경우가 확인이 제일 어려운데

일단 주소를 두개다 바꿔보고 각각 주소에 대해서 가변저항을 돌려봐야 한다.

 

그래도 안 되는 경우라면 캐릭터 LCD의 고장을 의심해봐야 한다.

나름 잔 고장이 많은 모듈이기 때문에

다른 아두이노를 통해서 테스트해보고 안 된다면 새 모듈로 사용하는 것이 정답이다.

 

 

 

 

 

 

 

I2C 모듈이 아닌경우 LCD1602 를 사용하기가 정말 어렵고 복잡하기 때문에

정말 남아있는 모듈이 non-I2C 밖에 없는 경우를 제외하면 새로 구매해서 사용하는 것이 좋다.

 

아두이노 우노에 캐릭터 LCD를 핀으로 연결해서 사용하는 경우 위와같이 사용해야 한다.

밝기 조절 가변저항도 사용자가 직접 연결해 주어야 하기 때문에 여간 귀찮은 일이 아니다.

 

 

 

캐릭터 LCD의 각 핀에 대해서 의미를 알아보자.

크게 CONTROL 부와 DATA 부로 나눌 수 있다.

 

[CONTROL]

VSS - PIND.9, GND

VDD - PIND.8, +5V

V0 - 가변저항

RS - PIND.0, 레지스터선택{0,1}

RW - PIND.1, 읽기쓰기선택{0,1}

E - PIND.2, 활성화 신호

 

[DATA]

D0 - PINA.0

D1 - PINA.1

D2 - PINA.2

D3 - PINA.3

D4 - PINA.4

D5 - PINA.5

D6 - PINA.6

D7 - PINA.7

A - PINA.8, +5V

K - PINA.9, GND

 

 

임베디드 시스템을 정확하게 들어가지 않았다면

뭔 내용인가 싶을 것이다.

 

우선 CONTROL 와 DATA가 어떻게 내부적으로 연결되어 있는지 위의 그림을 대략적으로 보면 된다.

 

 

조금 더 자세히 보자면 위의 그림과 같다.

 

 

 

각 핀에 대해서 기능을 조금 더 정리하면 위와 같다.

 

 

 

아두이노의 경우 DATA를 0~7 까지 다 연결할 필요없이

4~7 까지만 연결해주면 된다.

 

그리고 RS와 E만 아두이노에 연결하고, RW는 연결할 필요 없고, +5V 또는 GND를 통해서 연결해주면 된다.

 

 

일단 HD44780 호환 칩들은 데이터라인을 8비트로 연결해도 되지만, 4비트 데이터만으로도 동작할 수 있다.

AVR과 같이 외부로 나오는 핀의 개수가 적은 MCU들의 부담을 덜어주기 위함이라고 한다.

 

아두이노 우노의 예를 들어봐도 11개의 신호선이 필요한데 아두이노는 데이터 통신핀이 11개이기에 (RX TX 제외) 센서를 사용할 수 없으므로 납득이 되는 이유다.

 

 

단, 4비트 모드로 동작시키게 하여 사용하면 8비트로 사용하는 것보다 아주 조금 더 많은 시간이 필요하다.

물론 사용자는 육안으로 느낄 수 없다.

 

 

그리고 캐릭터LCD1602에 기본적으로 내장된 문자들이 있는데

영어와 일본어, 일부 특수 문자가 있다.

 

아무래도 개발국가가 일본이기에 영어와 일본어만 탑재되어 있는 것이다.

특수문자도 위에 나온것이 아니면 사용자가 직접 만들어서 사용해줘야 한다.

 

다음에는 사용자 문자를 추가해보도록 하고, 심화된 사용법을 다뤄보겠다.

 


※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!

 

 

 

 

댓글