대학원을 들어왔더니 생각치도 앖게 LED를 제어할 일이 생겨서 MCU를 알아보다가 입맛에 맞는 제품을 발견했다!
여느 atmega128 개발 보드와 비슷한 모양이지만 isp와 usb2serial을 내장하고 있어서 JTAG와 같은 다른 장비 없이도, 또 usb2serial같은 장비가 없이도 왠만한 테스트는 다 할 수 있다. 가히 혁명적인 보드라고 할 수 있다. 하지만 이 제품의 진가는 다른데 있었으니, 뒤에서 설명하겠다.
기존에는 회사에서 IAR Studio를 사용해서 개발했었기 때문에 이번에도 그리 하려고 크랙을 설치하는데.. 안된다 -_-.. 하루를 고생하다가 이건 아니다 싶어서 포기하고, AVR Studio와 Win AVR을 설치했는데! MFC 에러가 뜬다. -_-... 그래서 다시 하루를 버리고..
에라 모르겠다 이왕 이렇게 된거 최선 환경에서 개발해보자! 란 마음에서 atmel에 들어가니까 atmelStudio6라는 거창한 이름의 개발 툴이 있는게 아닌가! 그래서 이를 받아서 설치했다. Visual Studio를 기반으로 해서 UI가 매우 익숙했다.
주소: http://www.atmel.com/microsite/atmel_studio6/
몬가 모던하고 깔끔한게 좋아보였다. 이때까진.. 받아보니 용량이 700메가가 넘어가더라 -_-.. 인고의 시간을 거치고 나서 실행을 하니 몬가 좋긴 한데 PIC의 새로운 개발환경인 MPLAB X 같이 무겁다..
<실제 개발 환경>
내 Visual studio는 Visual assist X가 깔려 있는데 이것 역시 연동이 되어서 더 보기가 편했다. 게다가 기존의 AVR Studio 4는 별도의 gcc 컴파일러를 필요로 했었는데 이것은 자체 컴파일러가 있다. (F7을 똭)
모 여튼 IAR과 비교했을 때 문법이 조금 다르기 떄문에 인터넷을 뒤지고 뒤져서 예제 파일을 받았고, 컴파일 까지 됐는데.. 문제는 downloading을 하는 곳이 없는 것이다 -_-.... 이 보드에 내장된 칩을 이용하려면 STK500을 이용해야 하는데, 지원하는 mcu에 atmega128이 없는 것이다. atmega128은 atmel에서 내놓은 자식이었단 말인가.. 여기서 굴하기엔 여기까지 삽질한 시간이 너무 길다. 그래서 물어물어 STK500에서 atmega128을 사용할 수 있는 방법을 찾았다. (실은 이것이 이번 포스팅의 주 목적이다.)
결론부터 말하자면 아래 블로그의 포스팅을 따라가면 된다.
http://kpg1226.blogspot.com/2012/03/how-to-use-stk500-in-avr-studio-5.html
필요한 것은 아래 파일만 있으면 된다.
1. 이 파일의 압축을 풀은 후에 Program Files 폴더 밑에 Atmel 폴더에 놓는다.
2. 압축을 풀은 폴더 안에 있는 STK500.reg 파일을 실행한다. 레지스터 파일이라 진짜 하겠냐고 묻는데 걍 고
3. 자 여기서부터가 복잡한데, Atmel Studio에서 Tools->External Tools에 들어간다.
4. 자 여기서 위에 네모 친 5곳을 채워넣어야 한다. 물론 먼저 Add를 해야지
Title : "Any titles" - 아무거나
Command : "Select [...] Stk500.exe". - 아까 압축 풀어서 옮긴 것으로
Args : "-e -b -t -J -I1.84MHz -dATMega128 -pf -vf -if$(ProjectDir)Debug\$(ItemFileName).hex". - 그대로 복사
Init Dir. : "$(ItemDir) or perhaps $(ProjectDir)". - 그대로 복사
... 귀찮다 블로그에 있는거 복사 붙여넣기.
7. New your toolbar add command.(Add or Remove Buttons -> Customize)
8. Select [Add Command...] → "Tools" → "External Command1"
근데 사실 여기까지 하고 난 안됐었다.. 그래서 다음 파일을 설치했다.
막상 설치하면 중복 설치라고 뜨지만 설치하고 나서 됐으니...
여튼 이렇게하고 나면 됐다. 난
10. JMOD 128-1 의 예제 소스는 다음과 같다.
- 동작은 uart echo와 'a'를 넣었을 경우 LED를 켠다. 회로에서 PG0에 연결되어있다.
#define F_CPU 16000000UL
#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
void UART_int(void)
{
UCSR0A = 0; // 비동기 모드
UCSR0B = 0x98; // RX,TX 동작허용, 문자길이 8비트,수신 인터럽트
UCSR0C = 0x06; // 비동기 모드 송신시 상승에지, 수신시 하강에지, 전송데이터 8비트
UBRR0H = 0x00; // 보레이트 설정 9600bps -->>UBRR = 8(U2X=0, 16MHz일때)
UBRR0L = 0x67;
}
unsigned char rx0_char(void)
{
while((UCSR0A&0x80) == 0X00);
return UDR0;
}
void tx0_char(char ch)
{
while((UCSR0A&0x20) == 0X00);
UDR0 = ch;
}
ISR(SIG_UART0_RECV)
{
unsigned char rdata;
rdata = UDR0;
if(rdata == 'a')
PORTG = 0xff;
else
PORTG = 0x0;
tx0_char(rdata);
}
void uart_putChar(unsigned char commPort, unsigned char sendData)
{
switch(commPort)
{
case 0:
while(!( UCSR0A & 0x20 ));
UDR0 = sendData;
break;
case 1:
while(!( UCSR1A & 0x20 ));
UDR0 = sendData;
break;
}
}
int sys_putchar(char c, FILE *file)
{
tx0_char(c);
if(c == '\n') tx0_char('\r');
}
FILE mystdout = FDEV_SETUP_STREAM(tx0_char, NULL, _FDEV_SETUP_WRITE);
int main(void)
{
char ch;
char buf[100];
int xx;
UART_int();
DDRG = 0xff;
stdout = &mystdout;
printf("Hello Embedded HOlic ?\n");
sei();
while(1)
{
}
}
11. 이 보드의 큰 장점은 바로 엄청난 서포트에 있다!
임베디드 홀릭이라는 카페가 있다.
http://cafe.naver.com/lazydigital
이 카페는 이 보드의 제작사가 운영하는 카페인데 질문을 하면 대답을 잘해주신다. 너무 감사하다 ! ㅠㅠ
12. 실제 동작 사진
'Enginius > Firmware' 카테고리의 다른 글
JMOD-128 UART 인터럽트와 LED 제어 예제 (0) | 2012.06.24 |
---|---|
VUSB (AVRUSB) usb를 avr의 gpio를 이용해서 제어. (0) | 2011.01.26 |
NEC 코드 리모컨 (0) | 2010.04.16 |
PIC32 - UART (2) | 2010.04.13 |
PIC32 - TIMER (0) | 2010.04.13 |