아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

본 게시글에서는 character LCD 디스플레이를 결선하고 사용하는 방법에 대하여 설명하도록 하겠습니다.

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

사용되는 디스플레이는 LED 백라이트가 있으며, 두개열에 16개의 문자를 표시할 수 있습니다. 본 강좌에서는 LCD 라이브러리를 사용하는 아두이노 예제 프로그램을 실행하여 보고 다음 강좌에서는 센서를 이용하여 온도나 조도를 LCD에 표시하여 보도록 하겠습니다.

브레드보드 레이아웃

LCD 디스플레이는 동작을 위해서 6개의 아두이노 핀이 필요하며 6개의 핀은 모두 디지털 출력으로 셋팅되어야 합니다. 5v와 GND 연결은 당연히 필요하겠죠.

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

위의 그림과 같이 결선합니다. 포텐셔미터가 하나 연결되어 있는데, 이 포텐셔미터는 LCD의 constrast를 조절하는데 사용이 됩니다.

LCD가 납땜이 되어 있지 않다면 납땜을 합니다.

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

아두이노 코드

아두이노 IDE는 LCD 라이브러리를 사용한 예제코드를 가지고 있습니다. IDE에서 Examples --> Liquid Crystal --> HelloWorld 를 찾아 보십시오.

이 예제는 우리가 사용하는 핀과 다른 핀을 LCD용으로 사용하므로 코드를 수정하여 주어야 합니다. 이 부분은 사용하고자 하는 LCD의 종류에 따라 다를 수 있으므로 LCD 데이터 쉬트를 참고하여 고쳐주어야 합니다.

예제에서 아래의 코드를 찾아서,

  1. LiquidCrystal lcd(12,11,5,4,3,2);

아래와 같이 변경합니다:

  1. LiquidCrystal lcd(7,8,9,10,11,12);

코드를 아두이노에 업로드하면, 다음과 같이 'hello, world'가 디스플레이 되는 것을 볼 수 있습니다.

에제 코드에서 첫번째로 나오는 것은 아래의 코드입니다.

  1. #include<LiquidCrystal.h>

이 코드는 아두이노에 LCD라이브러리를 사용할 것이라고 알려주는 코드입니다. 다음에 나오는 코드는 우리가 수정한 코드로 아두이노와 LCD가 어떤 핀으로 연결되었는지를 알려주는 역활을 합니다.

  1. LiquidCrystal lcd(7,8,9,10,11,12);

함수에 넘겨주는 파라메터는 다음과 같습니다.

디스플레이 핀이름 디스플레이 핀번호 아두이노 핀
RS 4 7
E 6 8
D4 11 9
D5 12 10
D6 13 11
D7 14 12

이 예제를 업로드하고 글자가 나오지 않는다면 포텐셔미터를 조절하여 글자가 표시될때까지 명암을 조절하십시오.

setup함수에서는 다음의 두개의 명령이 있습니다.

  1. lcd.begin(16,2);
  2. lcd.print("hello, world!");

첫번째 줄은 디스플레이가 가진 행과 열 정보를 LCD라이브러리에 알려주는 코드이며, 두번째 줄은 "hello, world"를 LCD에 디스플레이하라는 코드입니다.

loop함수에는 두개의 명령이 있습니다.

  1. lcd.setCursor(0,1);
  2. lcd.print(millis()/1000);

첫번째 명령은 다음 텍스트가 위치할 커서를 설정하는 명령입니다. 여기서는 행이 0, 열이 1이 되겠네요. 두번째 줄은 밀리세컨드의 숫자를 출력합니다.

코딩/아두이노

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

DIYver 2021. 3. 14. 20:54

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

<목표>

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

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


<준비물>

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


<회로도>

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

아두이노  -  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

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


<실행 결과>

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

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

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

3가지 이유가 있다.

첫째로

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

-

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

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

I2C 통신 주소이다.

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

둘째로

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

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

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

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

셋째로 

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

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

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

<해결 방법>

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

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

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

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

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

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

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

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

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

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

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

아두이노 우노에 캐릭터 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

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

뭔 내용인가 싶을 것이다.

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

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

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

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

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

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

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

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

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

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

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

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

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

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

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

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

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei

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

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

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


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

아두이노 lcd 디스플레이 - adu-ino lcd diseupeullei