'ATmega168'에 해당되는 글 4건
- 2008.11.03 AVR ATmega168V를 사용하는 것은 개발 마무리 중
- 2008.10.31 AVR GPIO와 LED 제어 - 실수 하나
- 2008.10.30 AVR debug-WIRE - 나중을 기약
- 2008.10.29 ATMEL AVR ATmega168V - 시작
AVR ATmega168V를 사용하는 것은 개발 마무리 중
별로 도움이 될 만한 내용을 작성하지도 않았는데, 벌써 언급할 만한 게 없다.
debugWIRE 전환 시험하느라고 망가졌던 것 - 총 4개는 다시 시험해 보니, 여전히 동작하지 않았다.
그냥 포기하기로 하였다. - 시간 낭비인 듯.
나중에 시간되면, FAE에게 보내 봐야 겠다.
작은 MCU이다 보니, 참 쉽고 빠르게 진행되었던 것 같다.
AVR 쓰면서 좋은 것 하나는 Internal RC OSC가 있어서 별도로 XTAL을 달지 않아도 된다는 것이다.
처음에 10MHz XTAL 짜리 붙였다가 모두 떼었다. 큰 장점인 듯.
그런데, AVR내의 Flash 정보는 security 기능이 있는 걸까? 양산 전에 확인해 볼 사항이다.
(복제 방지에는 필수품)
AVR GPIO와 LED 제어 - 실수 하나
코드를 넣고 돌렸는데, 아무런 반응도 없습니다.
결국 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 밝기가 형편없습니다. 겨우 켜져있다는 것을 알 정도입니다.
코드 한 줄에 먹통이 되니, 조심 또 조심 해야 겠습니다.
AVR debug-WIRE - 나중을 기약
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 AVR ATmega168V - 시작
주말 사이에 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시간 낭비했습니다.