이글의 전부 또는 일부, 사진, 소스프로그램 등은 저작자의 동의 없이는 상업적인 사용을 금지합니다. 또한, 비상업적인 목적이라하더라도 출처를 밝히지 않고 게시하는 것은 금지합니다.


(2014.12.23.에 다음 블로그(http://blog.daum.net/microcontroller/13651139)에 적었던 글을 옮겨왔습니다.)

2014.10.12. - 2014.10.13. 이틀 동안 작업했던 내용을 정리하여 2014.12.23.에 올립니다.


먼저 글에서 밝혔듯이 MPU 18F67J10이 코드 프로텍트되어 있어서 내용을 읽을 수도 없습니다. 그래서 aliexpress에서 약 10,000여원 주고 3개를 구입했습니다. 먼저 원래 기판에 HC-05 블루투스 모듈을 달았던 사진입니다.


MPU가 보이고 오른쪽에 세 개의 칩이 있습니다.

맨 위의 16핀짜리는 74HC42(BCD To Decimal Decoder)입니다. 이 칩은 18F67J10의 RB0-RB3와 연결되어 LED 패널의 8개 열을 제어합니다.

여기서 이해안되는 부분이 있는데, RB0부터 RB3를 74HC42의 A부터 D까지 순서대로 연결하면 LATB에 0부터 7까지 순서대로 출력하면 되기 때문에 제어가 간편합니다.

그런데 실제로는 거꾸로 즉, RB0는 D, RB1은 C,RB2는 B, RB3은 A와 연결되어 있어서, 출력할 때에 순서를 지키도록 하는 단계를 한 번 더 거쳐야 하도록 만들었습니다.

단계를 많이 거칠수록 당연히 시간은 더 걸립니다.

특히 Led를 동적으로 제어하는데, 출력에 소요되는 시간이 길어질수록 깜박가릴 가능성이 많아집니다.

왜 그랬을까?

하드웨어 설계하는 사람과 프로그래머의 다툼에서 하드웨어 설계자가 이겼나?

그래도 이 부분은 제품의 핵심 성능과 관련된 것이라서 프로그래머가 양보할만한 내용이 아닌데...


그 아래 8핀 칩이 EN25F16-100HIP로 2Mega byte(16 mega bit) serial flash rom입니다.

SPI 프로그램을 작성해서 처음부터끝까지 다 읽어 보았는데 읽힌 내용이 모두 0xFF입니다.

즉, 기록된 것이 하나도 없다는 말씀입니다.

뭔가에 쓰려고 집어 넣었지만 기능을 다 완성하지 못한 채 출시한 것 같습니다.

어찌보면 미완성 작품을 출시한 것이라고도 볼 수 있습니다.

대충 짐작에 폰트 데이터를 넣으려고 하지 않았을까...

현 상태의 CNK HUD는 출력 데이터를 비트 이미지로 받고 있습니다.

즉 4점을 연속해서 찍으려면 0x46('F')를 받고 있습니다.

16dot * 16dot의 한글 한 글자를 출력하려 해도 64바이트를 전송해야 합니다.

이런 방식은 통신량이 많기 때문에 별로 바람직한 방법이라고 할 수 없습니다.

미래 과제로 이 칩에 완성형 폰트를 심어 놓고, 휴대폰 메시지를 출력하는데 사용하고자 합니다.


그 아래 칩은 Atmel 사의 AT24C256 32 Kilo byte(256 kilo bit) serial eeprom입니다.

이 것도 읽어 봤는데 32 킬로 바이트 중 단 몇 바이트만 쓰이고 있습니다.

주차시 전화 번호...

왜 별로 사용하지도 않는 외부 ROM을 두 개나 집어 넣었을까?

보드에 PICKIT2나 PICKIT3와 연결할 수 있는 ICSP 단자 5개가 있습니다.

위 사진의 맨 아래 5개 케이블을 납땜한 자리입니다.

이 부분을 찍은 사진입니다.



여기서도 이해할 수 없는 점이 있습니다.

핀의 순서가 일반적인 ICSP 배열과 다릅니다.

CNK HUD 개발자가 어떤 툴을 사용해서 개발했는지는 모르지만, 일반적인 microchip사의 ICSP 핀배열과 조금 다릅니다.


핀번호 

 일반적인 ICSP

 CNK HUD

 1

 /MCLR(VPP)

 /MCLR(VPP)

 2

 VDD

 VDD

 3

 GND

 ICSPDAT

 4

 ICSPDAT

 ICSPCLK

 5

 ICSPCLK

 GND

 6

 PGM(LVP)

 없음


보통 6번 PGM은 필요 없는 경우에 생략합니다. 18F67J10 프로그래밍에는 6번핀이 필요 없으므로 생략한 것은 이상한 일이라고 볼 수는 없지만 나머지 핀들의 배열을 다르게 했다는 점이 이해가 잘 안됩니다.

왜 GND을 3번이 아니라 5번으로 보냈을까?

그래서 위 사진을 보면 플랫 케이블의 가운데선 3번을 맨 오른쪽 5번에 납땜해 놓았습니다.

가지고 있는 도구가 PICKIT2와 PICKIT3 호환 기종들 뿐이라 다른 프로그래머들은 어떻게 구성되어 있는지 몰라 더 이상 언급하지 않기로 합니다.


CNK HUD의 18F67J10는 코드 프로텍트가 걸려 있어서 그 내용을 읽을 수가 없습니다.

새로 프로그램을 써 넣었다가 기능 재현에 실패하면 이 제품을 완전히 버리게 될 수도 있습니다.

혹시 그런 경우에 원래의 18F67J10을 다시 붙일 수 있도록 하기 위해서 18F67J10을 교체하기로 했습니다.

원래 있던 18F67J10을 떼어 내고, 18F67J10을 새로 구입해서 붙이기로 했습니다. 18F67J10은 aliexpress에서 쉽게 구입할 수 있습니다.




걸리적 거리지 않게하기 위해서 블루투스 모듈과 ICSP 연결선들도 모두 분리하고 열풍기로 불어서 18F67J10을 떼어 내었습니다. 주변에 있는 부품들이 떨어지지 않도록 하기 위해서 종이를 잘라서 붙이고, 그위에 종이 테이프를 덧 대어서 고정시킨 후에 열풍기로 가열하였습니다. 열풍기로 30초 가량 가열한 후에, 계속 열풍기로 가열하면서 송곳으로 톡치니까 가볍게 분리되었습니다.

새 18F67J10 장착.




새 18F67J10을 장착하고 ICSP 선을 연결한 상태입니다.

PICKIT3로 확인하니까 MPU는 정상으로 인식합니다.

이 CNK HUD는 당분간 먹통인 상태로 있을 듯합입니다.

블로그 이미지

엠쿠스

Microprocessor(STM32, AVR)로 무엇인가를 만들어 보고자 학습 중입니다.

,