이 제품도 소리 장터에 싸게 나왔는데 아무도 사가는 사람이 없어서 그냥 대량(?) 구매했습니다. 인터넷 검색하니까 쓸만한 데이터시트도 나오는데 구매해 가는 사람이 없네요. 컨트롤러가 장착된 상품이라 별도의 외부 메모리가 필요 없으므로 일단 atmega32 16MHz로 동작시켜 봤습니다.
내심 뭔가 만들어서 저렴하게 재판매하려는 생각을 가지고 구매했습니다만, 여의치가 않습니다.
기판 앞 뒤로 TRULY MGG19264-61B1-E(이하 MGG19264)라고 기판에 크게 인쇄되어 있고, 기판 뒷면 한 변으로 상대적으로 작게 MSG-19264DYSY-61N-E라고 찍혀 있습니다. 정작 데이터시트를 찾아보니 MSG-19264DYSY-61N이 검색됩니다. 데이터시트를 첨부합니다.
데이터시트는 20쪽에 달하는데, 콘트롤러 관련된 제어 명령 등의 정보가 전혀 담겨 있지 않아서 정작 필요한 내용은 별로 없는 듯합니다. 연결용 20핀의 기능 정도가 유용했습니다. 데이터시트 만든 날짜를 보니 2007년도인 것으로 보아 10년 정도된 제품인 것 같습니다. 10년 전의 제품들은 대체로 요즘 제품보다 데이터시트에 실려 있는 정보가 부족한 경우가 많은 듯합니다.
MGG19264의 데이터시트를 보니까 콘트롤러는 ST7565P를 사용했습니다. ST7565는 처음 접해보는 컨트롤러라 인터넷 검색해 보니 꽤 많은 정보가 검색됩니다. 이 컨트롤러도 TAB IC라서 이 GLCD도 COG 방식인 듯합니다. 하여간 얇고, 가볍고 좋습니다.
MGG19264의 데이터시트로부터 컨트롤러 ST7565P의 제어 명령을 파악할 수 없으므로 컨트롤러의 데이터시트도 열심히 살펴 보아야 했습니다. ST7565P의 데이터시트를 첨부합니다.
아직 콘트롤러의 특징을 다 파악한 것은 아니지만, 제어 명령이 많습니다. 그만큼 소프트웨어로 제어할 수 있는 것이 많다는 뜻이지만 초기화하기가 만만하지 않았습니다. 하여간 글자의 밝기를 소프트웨어로 조절할 수 있는 기능은 마음에 듭니다.
ST7565P의 데이터시트 제목은 65 x 132 Dot Matrix LCD Controller/Driver입니다. 65개의 common driver, 132 개의 segment driver를 가졌다는 뜻이고, 더 쉽게 해석하면 65행의 132 열의 점을 찍을 수 있다는 뜻입니다.
MGG19264는 ST7565P를 두 개 사용하고 있습니다. ST7565P를 두 개 사용하니까 최대 65행, 264열을 관리할 수 있는데, 실제로 사용한 GLCD 패널이 64행, 192열이라서 실제 해상도는 64 x 192입니다. 1열부터 96열까지는 chip1이 97열부터 192열까지는 chip2가 관리합니다.
칩 하나 당 132열을 관리할 수 있는데 실제 연결된 열은 96열이므로 36열이 남습니다. 어느 쪽에 있는 36열을 안쓰고 있는지를 알지 못하여 꽤 많은 시간을 낭비했습니다. 데이터시트에서 이정도는 알려 주어야 하는데...
사실 이 GLCD를 제어하면서 제어프로그램을 제대로 작성하고 있는지를 확신하지 못했기 때문에 어느 부분의 열을 사용하지 않는지를 파악하는 데어 더 어려움을 겪었습니다.
화면에 뭔가 데이터를 뿌리면 나오기는 하는데 좌표가 맞지를 않았습니다. 여러 번를 시행착오를 겪으면서 맨 앞과 맨 뒤의 18열씩을 안 쓴다는 사실을 확인했습니다.
MGG19264 데이터시트에 나온 커넥터 핀 기능입니다.
핀 번호 |
기능 |
핀 번호 |
기능 |
1 |
DB7 |
11 |
RS |
2 |
DB6 |
12 |
NC |
3 |
DB5 |
13 |
Vdd |
4 |
DB4 |
14 |
Vss |
5 |
DB3 |
15 |
/CS1 |
6 |
DB2 |
16 |
/CS2 |
7 |
DB1 |
17 |
NC |
8 |
DB0 |
18 |
/REST |
9 |
E_RD |
19 |
SLA |
10 |
RW_WR |
20 |
SLK |
전압은 Vdd에 3.3V를 공급하고 Vss는 0V에 연결합니다. SLA는 LED 백라이트 +로 4.2V를 공급하고, SLK는 백라이트 -로 0V에 연결합니다.
MPU와 주변기기가 통신을 하는 방식에는 크게 두 가지 방법이 쓰입니다. 하나는 6800 방식이고 다른 하나는 8080방식입니다. 두 방식다 읽고 쓰기에 두 개의 신호를 사용합니다만 사용하는 방식이 조금 다릅니다
6800 방식은 Motorola사의 마이크로 프로세서 MC6800에서 사용하던 방법입니다. 6800 방식에서는 주변기기와 데이터를 주고 받을 때에 E(enable) 신호와 RW(Read Write) 두 개의 신호를 사용합니다. RW 신호는 MPU가 주변기기로부터 데이터를 읽어 올 것인지, 기록할 것인지를 결정하고, E 신호는 latch 신호로 사용합니다.
즉 MPU가 주변 기기로부터 데이터를 읽어 올 때에는 RW 신호를 high로 하고 E 신호에 펄스를 전송합니다. 반대로 MPU가 주변 기기로 데이터를 기록할 때에는 RW 신호를 low로 하고, E 신호에 펄스를 전송합니다.
8080 방식은 Intel사의 마이크로 프로세서 8080에서 사용하던 방법입니다. 8080 방식은 Read 신호와 Write 신호를 따로 둡니다. MPU가 데이터를 읽어 올 때에는 Read는 low, Write는 high로 하고, 데이터를 기록할 때에는 Read는 high, Write는 low로 설정합니다.
MSG19264는 두 가지 방식을 모두 사용할 수 있습니다. 그래서 9번핀과 10번 핀의 명칭이 특이합니다. 6800 방식으로 제어할 때에는 9번핀을 E(enable) 신호로 사용하고, 10번핀을 RW(Read Write) 신호로 사용합니다. 8080 방식으로 제어할 때에는 9번핀을 RD(Read) 신호로 사용하고, 10번핀을 WR(Write) 신호로 사용합니다.
avr 보드는 그동안 애용해 오고 있는 만물상 atmega32 보드를 사용합니다. 이 보드는 본 사이트의 Arduino 편에서 Arduino로 개조했던 보드입니다(http://mcus.tistory.com/41). 아직도 만물상 홈페이지에 몇 개 남아서 판매하고 있습니다(http://www.manmullsang.com/shop/item.php?it_id=1318981497). 저 보드 설계해서 만든지가 한 5 ~ 6년은 족히 되지 않았나 싶습니다. 그때에는 아두이노라는 것이 있는지도 몰랐습니다. 처음 아두이노라는 것을 알게 되었을 때에도, 아두이노가 이처럼 거대한 시장을 형성할 거라는 생각을 못했습니다. 일반인들이 어려워서 사용하겠나? 제대로 공부한 사람들이 불편하고 싱거워서 사용하겠나? 싶었는데, 완전히 예상이 빗나갔습니다. 물론 본글에서는 아두이노로 사용하지는 않습니다. 앞으로는 본 글에서 사용한 소스 프로그램을 C로 변환한 다음에, 아두이노 실드와 결합해서 뭔가 작품을 만들어 볼 계획입니다.
atmega32와 MGG-19264와의 연결을 표로 정리해 봤습니다. 회로도 형태로 그리는 것보다 표로 표시하는 것이 만들기도 쉽고 보기도 쉬운 듯하여 이 방법을 애용하겠습니다.
MGG-19264 |
atmega32 |
MGG-19264 |
atmega32 | ||||
Pin No |
Function |
Pin No |
Function |
Pin No |
Function |
Pin No |
Function |
1 |
DB7 |
29 |
PC7 |
11 |
RS |
19 |
PD5 |
2 |
DB6 |
28 |
PC6 |
12 |
NC |
... |
... |
3 |
DB5 |
27 |
PC5 |
13 |
Vdd |
... |
(3.3V) |
4 |
DB4 |
26 |
PC4 |
14 |
Vss |
... |
(0V) |
5 |
DB3 |
25 |
PC3 |
15 |
/CS1 |
18 |
PD4 |
6 |
DB2 |
24 |
PC2 |
16 |
/CS2 |
17 |
PD3 |
7 |
DB1 |
23 |
PC1 |
17 |
NC |
... |
... |
8 |
DB0 |
22 |
PC0 |
18 |
/REST |
16 |
PD2 |
9 |
E_RD |
21 |
PD7 |
19 |
SLA |
... |
(4.2V) |
10 |
RW_WR |
20 |
PD6 |
20 |
SLK |
... |
(0V) |
atmega32는 5V로 동작하고 MGG-19264는 3.3V로 동작하기 때문에 둘 사이에 전압 변환을 해주는 level shift 장치를 넣어 주어야 하지만, 당장은 없는 관계로 그냥 1k옴 저항으로 대체하였습니다.
atmega32와 MGG-19264를 연결해 놓은 사진입니다.
글씨가 작아서 잘 안보입니다만, 가운데 제일 큰 빨간 네모 친 부분에 있는 저항들이 전압 차 조절을 위해 넣은 1k옴 저항입니다. 총 14개 사용하였습니다.
오른쪽 위에 있는 중간 크기의 빨간 네모 친 부분에 있는 것이 본 사이트의 Workplace에서 다룬 88MG877로 5V를 3.3V로 step down 시키고 있습니다. (http://mcus.tistory.com/3)
중간의 작은 네모에는 백라이트에 4.2V를 공급해 주어야 하는데 컨버터를 하나 더 넣기가 번거로와서 33옴의 저항으로 전압을 약간 다운시켜 공급합니다. 별로 다운되지는 않는 듯합니다.
다음의 2편에서 본격적으로 프로그램에 관하여 다루겠습니다.
'AVR > GLCD' 카테고리의 다른 글
ST7565P GLCD 다루기 - MGG19264(3편) (2) | 2018.11.09 |
---|---|
ST7565P GLCD 다루기 - MGG19264(2편) (0) | 2018.11.09 |
컨트롤러 없는 GLCD 제어하기 - TG322431(320*240) (1) | 2018.11.09 |
컨트롤러 없는 GLCD 제어하기 - LTBE9H372K8K(2편) (1) | 2018.11.09 |
컨트롤러 없는 GLCD 제어하기 - LTBE9H372K8K(1편) (0) | 2018.11.09 |