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




Arduino UNO, Arduino MEGA는 각각 atmega328, atmega2560을 사용합니다.

정작 요즈음 많이 쓰는 atmega128용 arduino는 찾아보기 힘듭니다.

그래서 뭔가 수가 있지 않을까하여 검색해 보았습니다.

 

어렵지 않게 바로 찾을 수 있었습니다.

이미 이런 생각을 하고 atmega128용 아두이노를 만드신 분이 있습니다.

http://jumpjoo.tistory.com/1

 

위 블로그를 따라 진행해 봤는데 도중에 막혀서 진행이 안되었습니다.

부트로더 굽는 작업이 실패하면서 더 이상 진행이 불가하였습니다.

 

하루종일 삽질한 끝에 드디어 성공하여 이 글을 작성합니다.

 

준비할 물품

 

1) atmega128 보드

  전에 보드프리(http://www.boardfree.kr)에서 받아 둔 보드(BL-202)를 이용했습니다.

 

 

 

위 사진은 보드프리 홈페이지에서 가져온 것인데, 실제 받은 것하고는 약간 차이가 납니다. 저항과 콘덴서의 번호가 다릅니다.

 

2) USB - TTL 변환 보드

  만물상(http://www.manmullsang.com)에서 사장님께서 주신 제품을 사용했습니다.

 

led가 3개 달려 있어서 동작 확인하기도 좋습니다. 이하 cp2102 보드라 부르겠습니다.

 

3) mega128 보드 부품들

atmega128-16au 1개

crystal 16Mhz(SMD) 1개

콘덴서 22p(SMD) 2개

콘덴서 0.1uF 2개

저항 10k(SMD) 1개

저항 470(SMD) 1개

헤더소켓 2.5mm 16x2 2개

핀헤더 2.5mm 3x2 1개

 

4) mega128 보드와 cp2102 보드 연결 등 기타 부품

저항 2.2k 1개

저항 130 1개

세라믹 콘덴서 0.1uF 1개

LED 1개

배선을 위한 선 약간

 

5) ISP, AVRISP MKii 등 부트로더를 기록하기 위한 장비

 

 

꼭 위의 보드가 있어야만 하는 것은 아닙니다.

일반 시중에서 판매하는 atmega128용 보드도 모두 사용 가능할 것 같습니다.

다만 serial 통신을 위해 MAX232 등이 붙어 있는 보드는 USB - TTL 보드와 충돌할 가능성이 있으므로 가급적 피하는 것이 좋을 듯합니다.

부득이한 경우는 Rx 신호선과 Tx 신호선에 저항을 달아서 충돌 가능성을 줄이도록 합니다.

MPU 동작 속도는 16MHz로 해야 115200 bps로 원활하게 통신할 수 있으므로 가급적 16MHz 이상의 속도를 사용하기 바랍니다.

물론 16MHz 이하의 속도도 사용 가능합니다. 부트로더 구울 때에와 스케치에서 보드 종류 선택할 때에 적절하게 잘 선택해야 합니다.

 

1단계) atmega128 보드와 cp2102 보드가 정상적으로 동작하는지 확인합니다.

 

2단계) atmega128보드와 cp2102 보드를 연결하기 전에 RESET 신호와 접지 간에 연결된 0.1uF 콘덴서를 찾아서 분리합니다. 위 보드프리의 기판에서는 오른쪽 사진에 있는 C8입니다. 제가 가진 기판에는 C4로 찍혀 있습니다. 이 콘덴서를 접지쪽만 분리할 수 있다면, 접지쪽만 분리하여 3단계에서 활용하는 것이 좋습니다. 부품이 매우 작기 때문에 정밀한 납땜 작업이 필요합니다.

 

 

 

 

3단계) cp2102의 DTR(28번핀)을 콘덴서 0.1uF을 통하여 atmega128 보드의 RESET 신호와 연결합니다. 위 2단계에서 접지쪽만 분리했다면 그 콘덴서를 활용하는 것이 좋습니다. 위 그림에 빨간 색으로 네모 표시한 부분을 보면 0.1uF 콘덴서의 한 끝을 GND와 분리하고, 분리한 핀에 검은색 선을 연결하였습니다. 이 선의 다른 끝을 cp2102의 28번 핀에 연결하면 됩니다.

 

 

 

 

위 사진의 빨간 색 네모 표시 부분이 cp2102 28번 핀을 연결한 것입니다. 이렇게 함으로써 cp2102의 DTR이 0.1uF콘덴서를 통하여 Atmega128의 RESET 신호와 연결되었습니다.

 

 

4단계) mega128 보드와 cp2102 보드의 다른 신호선들을 연결합니다. 5V, GND, Rx, Tx 4개의 선을 연결합니다. 5V와 GND는 바로 연결하면되고, Rx와 Tx는 서로 바꾸어서 연결합니다. cp2102 보드의 Rx 선은 atmega128의 3번 핀(TxD0)와 연결하고, cp2102 보드의 Tx 선은 atmega128의 2번 핀(RxD0)와 연결합니다. 이 두선을 연결할 때에 필수적인 것은 아니지만 부품4)에 있는 2.2k, 130옴의 저항을 사용합니다. atmega128과 cp2102 모두 5V로 동작하므로 저항이 꼭 있어야 하는 것은 아니지만, 차후에 바꿀 것을 대비해서 사용했습니다.

위 두 사진에 보이는 주황색 선들이 5V, GND, Rx, Tx를 연결하는 선들입니다. 22.k와 130옴의 저항들은 첫 번째 사진으로 제시한 뒷 면에 있습니다만, 나중에 추가로 붙인 DC-DC 컨버터에 가려서 보이지 않습니다.

 

 

5단계) arduino를 맨 처음 접할 때 첫 시동 프로그램이 Blink입니다. 아두이노 기판에 달린 led를 켰다 껐다 하는 작업입니다. 이 led는 atmega128의 PORTB PB5 핀에 달려 있습니다. 이 작업을 위해서 PB5와 GND 사이에 led를 추가합니다. 필자는 임시로 헤더홀더의 해당 난에 led를 꽂아 주었습니다.

원칙대로 한다면 저항 470옴 정도를 led와 직렬로 달아주어야 하지만 avr에서는 전혀 무리가 없으므로 그냥 바로 연결하였습니다. 만일 SMD 형태의 led를 설치한다면 반드시 470옴 정도의 저항을 달아야 합니다.

 

 

5단계까지 하면서 필수적인 하드웨어적 작업은 모두 마쳤습니다.

 

추가로 Arduino 보드에서 3.3V를 제공하고 있으며, 또 적지 않은 Arduino shield들이 3.3V로 동작하기 때문에 3.3V를 만들기 위해서 DC-DC 컨버터를 추가하였습니다. 첫 사진의 Marvell이라고 적혀 있는 모듈이 3.3V를 만들기 위한 DC-DC 컨버터입니다. 자세한 사항은 http://avrlab.tistory.com/7을 참고하기 바랍니다.

 

 

다음 2편에서 소프트웨어 작업을 계속합니다.

 

 

블로그 이미지

엠쿠스

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

,