ATmega128 I2C 1602 텍스트 LCD 정리

2019. 7. 6. 18:50임베디드/ATmega128

이번에 제어할 장치는 2줄과 한 줄에 16글자를 표시할 수 있는 문자 기반의 LCD(Liquid Crystral Display)다. 텍스트 LCD는 LCD 화면 출력을 제어하는 LCD 드라이버를 포함하고 있다. 히타치의 HD44780 혹은 삼성의 KS0066 드라이버를 주로 사용하는데, 이들은 서로 호환이 된다. LCD 드라이버는 명령 레지스터와, 데이터 레지스터에 저장된 정보를 바탕으로 화면을 제어하며, MCU에서 직접 정보를 기록할 수 있다. 데이터를 전송한 후에는 MCU가 LCD 드라이버의 동작 신호인 enable 신호를 제어하며, LCD 드라이버가 LCD 모듈에 전달된 정보를 처리하도록 지시한다

 

제품 링크: https://smartstore.naver.com/domekit/products/291850259

1602 텍스트 LCD를 제어하는 방법은 2가지가 있다. 현재 나와있는 핀 16개를 모두 사용해야하는 경우와, I2C를 이용해서 SCL, SDA 그리고 전원 2핀만을 이용해서 제어하는 방법이 있다

 

16개를 사용해야 하는 경우는 연결 복잡도가 매우 높은 반면, I2C는 4핀만 연결을 하면 전혀 문제가 되지 않는다. 하지만 I2C를 알아야 한다는 수고가 있지만, 전에 배웠기 때문에 우리는 I2C 방식을 사용할 것이다. 그렇지만 동작원리는 비슷하기 때문에 먼저 각 핀이 무슨 역할을 하는지 살펴볼 것이다

 

https://www.electronicwings.com/avr-atmega/lcd16x2-interfacing-with-atmega16-32

 

 

  • V0는 가변저항과 연결되어 조절된 전압이 들어가서 lcd 밝기가 조절된다
  • RS는 데이터 전달에 있어 명령어와 데이터를 구분하는 핀으로 0일 때는 명령어로 인식되어 전달되며, 1일때는 데이터로 인식되어 전달된다
  • R/W는 해당 레지스터를 읽을지 쓸지에 대해서 결정한다
  • Enable Signal로 1에서 0으로 레벨이 떨어지는 하강엣지 신호를 보내면 준비된 데이터들이 보내진다

 

다음은 히타치 HD44780 LCD 드라이버의 명령어 코드와 관련된 표다

 

http://www.dinceraydin.com/lcd/commands.htm

 

http://www.dinceraydin.com/lcd/commands.htm

1행만 디스플레이로 사용할 수 있고, DDRAM은 현재 화면에 표시 중인 데이터를 저장하는 램이다. 문자를 2행으로 화면에 표시하는 경우에는 텍스트 LCD에 표시되는 문자를 저장할 수 있다. 하지만 문자를 2행으로 화면에 표시하는 경우, 텍스트 LCD에 표시되는 문자는 최대 32개이므로, 텍스트 LCD 모듈의 메모리에 저장된 문자 중 일부만이 텍스트 LCD 모듈에 표시될 수 있다

 

그리고 주의할 점이, 1행으로 문자를 표시할 경우(Function N=0) DDRAM의 주소는 0x00에서 0x4F로 연속적으로 정해진다. 반면 2행으로 표시할 경우(Function N=1) 1행의 DDRAM 주소는 0x00에서 0x27(=39)까지, 2행의 주소는 0x40에서 0x67까지로 행별로 40바이트씩 분리되어 정해진다

 

[I2C 1602 LCD 데이터시트] https://opencircuit.nl/ProductInfo/1000061/I2C-LCD-interface.pdf

I2C로 제어하기 위해서, 확장 IO Slave 장치인 PCF8574의 주소와 어떻게 I2C로 데이터를 전달하는지 알아야만 한다

[PCF8574 데이터시트] http://www.ti.com/lit/ds/symlink/pcf8574.pdf

 

 

100KHz까지 속도를 지원한다

 

 

 

제가 사용한는 장치주소는 A2 A1 A0 = { 0, 0, 0 } 으로 0x20이 된다. 아마 나온 제품들은 거의 0x20 아니면 0x27이 될 것이다

 

 

PCF8574의 쓰기 모드에서의 I2C 프로토콜 특징은 장치 주소에 접근한 이후 그 안의 레지스터 접근 없이 바로 Data를 쓴쓴다는 점이다. 대부분의 I2C 통신에서는 데이터 전송 전의 레지스터 위치를 요구하기도 한다. 아마 lcd는 데이터에 따라 모드가 결정되어서 레지스터를 따로 만들지 않았을 것이라고 보인다

 

그러면 결국 8핀은 LCD 모듈과 어떻게 연결되어있을까? 아래 그림을 보면 알 수 있다

 

 

데이터는 4비트와 연결되어있고, 나머지는 EN(시작 신호), R/W(읽기, 쓰기), RS(명령어, 데이터)의 정보를 전달하는 핀이고, P7은 BJT 스위칭과 관련해 백그라운 LED와 관련이 있어 보인다. P7이 Low가 되어야만 도통이 되어 전류가 흘러 켜지는 것으로 확인된다

 

 

[참고] 도서, ATmega128로 배우는 마이크로컨트롤러 프로그래밍

'임베디드 > ATmega128' 카테고리의 다른 글

ATmega128 I2C 1602 텍스트 LCD 코드  (5) 2019.07.11
ATmega128 16핀 LCD 8비트 인터페이스 제어 소스  (0) 2019.07.07
AVR 스터디 [2019.06.30]  (0) 2019.06.30
ATS75 온도값  (0) 2019.06.30
SG90 서보모터 제어  (0) 2019.06.26