2008. 10. 31. 13:58

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 밝기가 형편없습니다. 겨우 켜져있다는 것을 알 정도입니다.

코드 한 줄에 먹통이 되니, 조심 또 조심 해야 겠습니다.

2008. 10. 30. 07:46

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 라인을 공유하는 것은 바람직하지 않다.)

2008. 10. 29. 11:40

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시간 낭비했습니다.