티스토리 뷰
HD44780 호환 칩들은 데이터라인을 8비트로 연결하여 동작할 수도 있지만, 4비트 데이터만 가지고도 동작할 수 있는 구조를 가진다. 그 이유는 AVR과 같이 외부로 나오는 핀의 개수가 많지 않은 마이크로 컨트롤러를 사용하는데 부담을 덜어주기 위해서이다. 이전 글처럼 8비트 모드로 동작 시키게 되면 모두 11개의 신호선이 필요하다. ATmega328의 경우 모두 28개의 핀이 있는데 전원과 외부 클럭을 연결하는데 필요한 핀을 제외하면 21개의 핀을 사용할 수 있게 된다. 그 중에서 11개의 핀을 LCD를 구동하는데 사용하게 되면 실제로 남는 핀의 개수는 그 절반밖에 되지 않는 10개만 사용할 수 있다는 얘기가 된다.
이러한 문제를 해결하기 위하여 4비트 모드로 동작시킬수 있는 구조를 제공하는 것이다. LCD의 경우 굳이 CPU에서 읽어오기 동작이 필요하지 않기 때문에 R/W 신호도 생략할 수 있다. 결론적으로 6개의 신호만 가지고도 LCD를 구동할 수 있다는 얘기가 된다.
단, 4비트 모드로 동작시키게 되면 쓰기 동작을 두번에 나누어서 수행하여야 하므로 8비트 모드에 비해서 좀더 많은 시간을 필요로 하는 단점이 있다.
그럼 이제 4비트 모드로 동작하기 위한 회로를 꾸며 보도록 하겠다.
LCD를 4비트 모드로 동작할 때에는 DB4~DB7을 연결하여야 한다. 이 핀들은 앞에서 설명한 8비트 모드 회로와 동일하므로 그대로 두면 된다.
R/W 신호는 쓰기 모드로만 동작 시키는 경우 GND에 연결하면 되지만 이번 프로젝트에서는 AVR에서 사용하도록 하겠다. 앞의 글에서는 LCD 제어를 위해서 PORTC를 이용하였지만, 이 번 4비트 모드에서는 RS를 PD0에, R/W를 PD1에, E를 PD2에 연결하여 사용하도록 하겠다.
헤더 파일에서 제어 신호선들에 대해서만 수정해주면 된다.
4비트 모드에서는 8비트 데이터를 반씩 나누어서 사용하므로 이 부분의 코드를 다음과 같이 수정해 준다.
모든 시그널들이 PORTD에 연결되어 있으므로 이 부분을 주의하여 코드를 작성하여야 한다.
port_init()와 set_rd(), set_wr() 코드와 8비트 모드때와 달라진것을 볼 수 있다.
4비트 모드로 동작할 때의 읽기와 쓰기 동작에 대한 타이밍도와 이에따른 코드는 다음과 같다.
AVR에서 LCD모듈로 읽기와 쓰기 동작을 할 때 4비트 단위로 나누어서 수행하는 것을 볼 수 있다. 반드시 상위 4비트 먼저 읽고 쓰기를 한 후, 하위 4비트값에 대하여 읽기와 쓰기 동작을 수행하여야 한다. 이 순서는 정해져 있으므로 주의 하여야 한다.
참고로 8비트를 바이트라고 부르는것처럼 4비트를 니블(nibble)이라고 부른다. 혹시 다른곳에서 nibble이라는 단어를 보면 4비트값이라고 생각하면 된다.
4비트 모드로 동작시키기 위한 초기화 절차와 코드는 다음과 같다.
LCD 모듈 초기화 과정은 8비트 모드일때와 차이가 없다. 단지 Function register설정 부분에서 4비트 모드로 동작한다는것을 알려주기 위한 코드만 달라지게 된다. 15, 18번 줄에서 DATA_8BIT 플래그가 삭제되어 있는 것을 확인할 수 있다.
위의 코드를 제외하고 나머지 드라이버 코드는 8비트 모드와 동일하다.
위의 회로와 드라이버 코드를 이용하여 4비트 모드로 LCD 모듈이 정상적으로 동작되는지 확인해 본다.
'프로젝트 > LCD1602' 카테고리의 다른 글
LCD1602 - ADC 출력 (2) | 2016.07.16 |
---|---|
LCD1602 드라이버 코드 - CGRAM (1) | 2016.07.15 |
LCD1602 드라이버 코드 - 4비트 모드(2) (0) | 2016.07.14 |
LCD1602 드라이버 코드 - 8비트 모드 (4) | 2016.07.10 |
LCD1602 - 회로 구성 (0) | 2016.07.10 |