(본 글은 2017.09.12.에 필자의 다른 티스토리 http://avrlab.tistory.com에 적었던 것을 옮겨왔습니다.)
2016년에 atmega128과 atmega32로 arduino 호환 장치를 만드는 과정을 올린 적이 있습니다. 이때에 심심풀이 삼아 만들었던 LCD Smartie를 만들어 봤습니다.
LCD Smartie는 PC에 프로그램을 설치하고, 별도의 장치를 연결하여 PC의 정보를 볼 수 있습니다. PC가 인터넷에 연결되어 있으면, PC 정보 뿐만 아니라 BBC World News의 헤드라인을 보여 줄 수도 있습니다.
<
그래서 이번에 구입한 LCM4004A 문자형 LCD로 LCD Smartie를 구현해 볼까 시도하게 되었습니다.
한 줄에 40자씩 4행이면 꽤 많은 정보를 볼 수 있을 것 같아서 인테넷을 뒤져 보았습니다. 검색 실력이 부족한 것인지 40x4의 문자형 LCD를 이용한 LCD Smartie는 찾을 수가 없었습니다.
20x4 문자형 LCD를 이용한 작품은 많이 보았습니다. 그렇지만 20x4 크기의 문자형 LCD는 LCD 제어 칩셋이 하나이기 때문에 기본적으로 16x2의 문자형 LCD를 다루는 것과 별차이가 없습니다.
40x4 문자형 LCD는 LCD 제어 칩이 두 개입니다. 첫째줄과 둘째줄을 제어하는 칩셋이 하나있고, 세째줄과 네째줄을 제어하는 칩셋이 하나 더 있습니다. 따라서 16x2나 20x2, 20x4 문자형 LCD보다 제어용 배선을 하나 더 추가해야 합니다.
Arduino의 LCD 제어 라이브러리인 LiquidCrystal.cpp를 대충 훓어 보았는데, 제어 칩이 두 개인 LCD를 다루는 루틴은 없는 것 같습니다. 처음에는 arduino의 라이브러리를 개조하여 사용하려다가, 차라리 새로 프로그래밍하는 것이 더 빠르고 깨끗할 것 같아서 직접 프로그래밍하기로 했습니다.
프로그래밍 언어로는 avr 어셈블리어를 사용하고, 프로그래밍 툴로는 avr studio 4.19를 사용합니다. 사용 중인 노트북에 문제가 있는지 windows 10 64 버전에서 avr studio 4.19를 열면 자주 응답없음 상태가 되면서 멈추어 있습니다. 일단 프로젝트가 열리기만 하면 아무런 문제는 없는데, 열리는 과정에서 멈추어 버리는 사례가 종종 있습니다. 2007년에 구입한 노트북이라 노트북 사양이 낮아서 그런지, 노트북을 포맷해봐도 별로 개선되지 않습니다.
우선 동작하는 동영상 하나 올립니다. 이 동영상은 프로그래밍 초기에 촬영한 것이라서, 최종 작품과는 화면 구성이 조금 다릅니다.
사진도 몇 장 첨부합니다.
본 작품에서는 arduino 보드로 만들었던 만물상의 atmega32 보드를 사용했습니다. PC에 설치한 LCD Smartie 프로그램이 보내는 정보들을 atmega32가 받아서 40 x 4 문자형 LCD에 표시합니다. PC와 atmeag32는 serial 통신을 합니다.만물상의 atmega32 보드에는 CP2102를 이용한 USB Serial 변환 보드가 장착되어 있어서 PC와의 연결은 USB 케이블만 꼽으면 됩니다. USB 케이블 하나로 전원 공급 및 정보 교환의 두 가지 작업합니다.
Avr은 usart 단자로 정보를 받아서 문자형 LCD에 표현하는 역할만 하면 됩니다.
다음은 이 작품의 연결도입니다.
Windows 10의 그림판에서 대충 그렸습니다.
LCD 핀번호 |
LCD 기능 |
AVR 핀번호 |
AVR 기능 |
|
LCD 핀번호 |
LCD 기능 |
AVR 핀번호 |
AVR 기능 |
1 |
DB0 |
22 |
PC0 |
|
10 |
R/W |
20 |
PD6 |
2 |
DB1 |
23 |
PC1 |
|
11 |
RS |
21 |
PD7 |
3 |
DB2 |
24 |
PC2 |
|
12 |
Vo |
--- |
--- |
4 |
DB3 |
25 |
PC3 |
|
13 |
GND |
--- |
--- |
5 |
DB4 |
26 |
PC4 |
|
14 |
Vcc |
--- |
--- |
6 |
DB5 |
27 |
PC5 |
|
15 |
E2 |
18 |
PD4 |
7 |
DB6 |
28 |
PC6 |
|
16 |
N.C. |
--- |
--- |
8 |
DB7 |
29 |
PC7 |
|
17 |
A(+) |
--- |
--- |
9 |
E1 |
19 |
PD5 |
|
18 |
K(-) |
--- |
--- |
* LCD의 14번핀과 17번핀은 +5V에 연결하고, 12번핀과 13번핀, 18번핀은 GND에 연결합니다.
연결한 사진입니다.
다음 글에서부터는 두 가지 프로그래밍에 관해 다루겠습니다.
1. avr 어셈블리어를 이용해서 avr로 문자형 LCD 제어하기
문자형 LCD를 프로그래밍하는 방법에 관한 정보는 인터넷에 다양하게 많습니다. 하지만 제어칩이 두 개인 LCD를 다루는 경우는 많지 않고, 더군다나 어셈블리어로 다루는 경우는 별로 없는 듯합니다. 어쩌다 보니 C보다 어셈블리어로 프로그래밍 하는 것이 더 편하게 느껴져서 어셈블리어로 진행할 예정입니다. 어셈블리어로 작성하다보면 나름대로의 장점과 묘한 기쁨이 있습니다.
문자형 LCD를 다루는 방법에 4bit로 제어하는 방법이 있고, 8bit로 제어하는 방법이 있습니다. 두 가지 방법을 다 다룰 예정입니다.
2. 어셈블리어로 usart 통신하기
Avr의 usart 통신도 인터넷에 넘쳐납니다. 어셈블리로 작성했다는 정도와 기록을 남기는 의미에서 진행하고자 합니다. 어셈블리어로 usart 통신 프로그래밍에 관한 나름대로 know-how도 좀 있습니다.
'AVR > CLCD' 카테고리의 다른 글
Atmega32로 LCM4004A 다루기(5편) - 4bit 8bit 소스 합치기 (0) | 2018.11.09 |
---|---|
Atmega32로 LCM4004A 다루기(4편)-LCD구동 4비트 (0) | 2018.11.09 |
Atmega32로 LCM4004A 다루기(3편)-LCD구동 8비트 2/2 (0) | 2018.11.09 |
Atmega32로 LCM4004A 다루기(2편)-LCD구동 8비트 1/2 (0) | 2018.11.09 |
LCM4004A CLCD 다루기 (0) | 2018.11.09 |