코드를 넣고 돌렸는데, 아무런 반응도 없습니다.
결국 device 초기화 루틴을 모두 삭제하고 (AVR MCU의 RESET 이후 초기 모드로), 동작시키니 LED가 켜지면서 정상 동작하는 군요.
나중에 FAE와 통화하면서 알게 된 것인데, 실수가 있었더군요. (LED 제어시 Low On으로 사용)
초기화 코드 중에서
MCUCR |= (1<<PUD);
부분이 있는데, 이것이 GPIO 사용 방법에 문제가 있었더군요.
이 부분을 삭제하니깐 모두 정상동작하는 군요. 분명 이전에는 이 코드와 관계없이 동작하였었는데 말이죠...
AVR GPIO에 LED를 연결하여 사용하려면, AVR GPIO - LED - pull-up register - VCC 순으로 연결하여야 합니다.
그런데 지금 보드에서는 AVR GPIO - register - LED - GND 순으로 연결하였습니다.
LED를 ON 시키기 위해서는 AVR GPIO를 OUTPUT_HIGH 상태로 제어해야 하는데, AVR internal pull-up을 제거하고 하면, 이 line에 전류가 많이 흐르게 되어 아마도 AVR이 정상적으로 동작하지 않는 듯 하더군요.
나중에는 꼭 LED 제어를 Low active로 해야 겠더군요.
결국은 internal pull-up enable 상태로 모두 정상 동작합니다.
참고로 LED 밝기가 형편없습니다. 겨우 켜져있다는 것을 알 정도입니다.
코드 한 줄에 먹통이 되니, 조심 또 조심 해야 겠습니다.
ATmeag168V는 chip이 너무 작다 보니 그 흔한 JTAG 하나 없더군요.
대신에 debug-WIRE 라는 것이 있더군요. AVR JTAGICE mkII 장비가 있어야만 사용할 수 있구요.
다행인지 불행인지 장비가 있는 관계로 시도해 보기로 하였습니다.
그런데 이게 복병이었습니다. 후회 막급입니다.
AVR ISP 모드로 연결이 잘 된 것을 확인한 후, DWEN enable을 했습니다.
그리고, AVR JTAGICE mkII와 RESET, Vcc, GND 만을 연결하였습니다.
Error - RESET 라인에 문제가???
datasheet를 읽어보니, RESET 라인의 pull-up을 10k ohm 이상 달라는 군요 그리고 C도 달지 말라는 군요.
뭐 재주가 없으니, 하라는 대로 해야죠. pull-up 바꾸고, C는 떼어냈습니다.
오호 debug-WIRE 연결이 되었습니다.
AVRStudio4로 debug binary올려서 연결했습니다.
Code 화면까지 나와서 RUN 해 보았습니다.
뭔가 돌아가는 것 같은데, 알 수가 없군요.
막상 동작하는 것을 보니, 시간이 좀 걸리는 모드인 것 같군요.
다시 AVR ISP 모드로 전환하려면, AVR ISP 라인을 모두 연결하여야 한다는 군요.
모두 연결하고, disable debugg-WIRE button을 눌렀습니다.
메시자가 뜨는 군요. "disable debug-WIRE를 설정한 후에, ISP 모드로 전환된 것을 확인한다" 고 하는데, 확인이 안된다는 error가 발생하였습니다.
난감...
이제 이 보드는 debug-WIRE 모드나, AVR ISP 모두 둘 다 안되는 군요.
결국 보드 3장 날리고, 포기하기 까지 3시간 걸렸습니다.
(모드 전환을 위해서는 pull-up과 C를 떼었다 붙였다. H/W하는 친구에게 미안했습니다.)
나중에 시간나면 debug-WIRE를 제대로 함 해 볼까 합니다.
여하튼 결국은 ISP로 갑니다.
AVR FAE 왈, debug-WIRE 안 써 봤는데요. 그냥 ISP로 합니다.... 더 군요..
AVR 사용하는 사람들이 AVR ISP 사서 하는게 대부분이 겠더군요. (가격이 싸니까요)
쓸데없이 보내버린 3시간 어디에 하소연할 데도 없군요.
몇 가지 언급하면, (앞의 XTAL도 연관이 있을 듯)
1. 먼저 ISP 모드에서 XTAL 설정을 명확하게 하고 동작을 확인 한 후에 debug-WIRE 전환 시험을 한다.
2. debug-WIRE / ISP를 사용하려면, RESET line의 pull-up을 10k ohm 이상을 단다. (C는 달지 않는다)
(다른 device와 RESET 라인을 공유하는 것은 바람직하지 않다.)
주말 사이에 ATMEL 사의 ATmeag168V를 사용하였습니다.
이전에 AT90USB1287을 사용해서 그런대로 AVR이 친숙하기 때문에 사용했건만, JTAG이 없다 보니, 조금 불편하군요. 뭐 어쨌든 package도 작고, 가격도 싸니 (다른 솔루션에 비해서는 따져봐야겠지만요) 그런대로 쓸만합니다.
AVR로 맨 먼저 할 일은 ISP 혹은 JTAG으로 연결하여 칩의 정보(signature)를 읽어 보는 것입니다.
그런데, 억! 읽히지가 않습니다.
직접 손대보는 것은 처음이니, 음 우여 곡절 끝에 읽었습니다.
datasheet에 있지만 다시 설명하면,
1. 우선 AVR 칩은 무조건 Internal RC osc로 CPU_CLK를 사용하도록 되어 있습니다.
2. RESET 라인은 4.7k pull-up, 10uF C pull-down으로 설정되어 있으며,
3. XTAL1 및 XTAL2 단자는 모두 Open 상태로 놓으면,
이제야 AVR ISP로 chip signature가 읽힙니다.
작업 순서를 정리하면,
1. XTLA1 및 XTAL2 단자에 모두 Open 상태로 놓는다.
2. ISP로 연결하여, 외부 XTAL 모드로 설정: (10MHz XTAL을 사용하기 때문에 8MHz 이상으로 설정하였음)
3. XTAL1 및 XTAL2 단자에 crystal 및 회로를 연결합니다.
4. ISP로 다시 연결하여, chip signature를 읽는다: OK.
뭐 이후 부터는 정상적으로 사용할 수 있더군요.
그런데 만일 여기에서 다시 Internal RC osc로 설정하면, AVR ISP와 AVR간의 통신이 더 이상 되지 않더군요. 그래서 XTAL1 과 XTAL2의 crystal을 떼고 통신하면 통신이 됩니다.
뭐 간단한 것인데, 이것 때문에 2시간 낭비했습니다.