아두이노에서 AVR 사용하기
Hardware 2010. 11. 10. 22:45
Arduino를 조금 써보니깐 왠지 직접 못건드리니 찝찝하다....
C로 직접 건들여보면 더 좋을것 같아서 "AVR 처럼 사용가능하게 하는 방법" 을
구글에서 찾으니깐 다음과 같은 글이 나왔다...
2번쩨 링크를 보면....예제소스도 있고, Makefile도 있겠다 싶어서 바로
해봤으나 실패...
다음과 같은 오류가 떠버리고 더이상 진행되지 않는다.
에러를 또 구글에서 찾아보니깐 다름과 같이 하면 된다구 하네. (역시 구글신은 모르는게 없엉....)
http://www.neuraladvance.com/2010/04/08/using-avrdude-with-the-arduino-duemilanove/
응? 거의 비슷한데.... 하다가 좀더 자세히 보니 upload할때 -b 플래그가 빠져있는것을 확인했다..
man페이지 보니깐 baudrate라고 한다... 업로드 속도 관련된듯하다 (이것도 구글이 갈켜줌...ㅋ)
그래서 최종으로 만들어진 Makefile.... 첫번째 링크의 Makefile과 유사하다.
그리고 다음 소스를 복사해서...
(첫번째 링크에 있는 소스와 같은 소스, 왔다가따 하기 귀찮아서 그냥 따로 붙여 넣었다)
C로 직접 건들여보면 더 좋을것 같아서 "AVR 처럼 사용가능하게 하는 방법" 을
구글에서 찾으니깐 다음과 같은 글이 나왔다...
http://www.javiervalcarce.eu/wiki/Program_Arduino_with_AVR-GCChttp://symbolx.org/robotics/107-arduinoavr-command-line-dev-environment
2번쩨 링크를 보면....예제소스도 있고, Makefile도 있겠다 싶어서 바로
#make;make upload
해봤으나 실패...
다음과 같은 오류가 떠버리고 더이상 진행되지 않는다.
avrdude: stk500_recv(): programmer is not responding
에러를 또 구글에서 찾아보니깐 다름과 같이 하면 된다구 하네. (역시 구글신은 모르는게 없엉....)
http://www.neuraladvance.com/2010/04/08/using-avrdude-with-the-arduino-duemilanove/
응? 거의 비슷한데.... 하다가 좀더 자세히 보니 upload할때 -b 플래그가 빠져있는것을 확인했다..
man페이지 보니깐 baudrate라고 한다... 업로드 속도 관련된듯하다 (이것도 구글이 갈켜줌...ㅋ)
그래서 최종으로 만들어진 Makefile.... 첫번째 링크의 Makefile과 유사하다.
CC=avr-gcc
CFLAGS=-Wall -Os -DF_CPU=$(F_CPU) -mmcu=$(MCU)
MCU=atmega168
F_CPU=16000000UL
OBJCOPY=avr-objcopy
BIN_FORMAT=ihex
# 통신포트 는 개인마다 다를수 있으므로 수동으로 설정 (arduino 의 그 통신포트를 그대로 사용)
PORT=/dev/ttyACM0
BAUD=19200
PROTOCOL=stk500v1
PART=$(MCU)
# 당연히 avrdude 가 설치되어 있어야 한다.
AVRDUDE=avrdude -F -V
RM=rm -f
.PHONY: all
all: main.hex
main.hex: main.elf
main.elf: main.s
# 소스파일명이 다르다면 변경해 주도록 한다.
main.s: main.c
.PHONY: clean
clean:
$(RM) main.elf main.hex main.s
.PHONY: upload
upload: main.hex
$(AVRDUDE) -c $(PROTOCOL) -p $(PART) -P $(PORT) -U flash:w:$<
%.elf: %.s ; $(CC) $(CFLAGS) -s -o $@ $<
%.s: %.c ; $(CC) $(CFLAGS) -S -o $@ $<
%.hex: %.elf ; $(OBJCOPY) -O $(BIN_FORMAT) -R .eeprom $< $@
CFLAGS=-Wall -Os -DF_CPU=$(F_CPU) -mmcu=$(MCU)
MCU=atmega168
F_CPU=16000000UL
OBJCOPY=avr-objcopy
BIN_FORMAT=ihex
# 통신포트 는 개인마다 다를수 있으므로 수동으로 설정 (arduino 의 그 통신포트를 그대로 사용)
PORT=/dev/ttyACM0
BAUD=19200
PROTOCOL=stk500v1
PART=$(MCU)
# 당연히 avrdude 가 설치되어 있어야 한다.
AVRDUDE=avrdude -F -V
RM=rm -f
.PHONY: all
all: main.hex
main.hex: main.elf
main.elf: main.s
# 소스파일명이 다르다면 변경해 주도록 한다.
main.s: main.c
.PHONY: clean
clean:
$(RM) main.elf main.hex main.s
.PHONY: upload
upload: main.hex
$(AVRDUDE) -c $(PROTOCOL) -p $(PART) -P $(PORT) -U flash:w:$<
%.elf: %.s ; $(CC) $(CFLAGS) -s -o $@ $<
%.s: %.c ; $(CC) $(CFLAGS) -S -o $@ $<
%.hex: %.elf ; $(OBJCOPY) -O $(BIN_FORMAT) -R .eeprom $< $@
그리고 다음 소스를 복사해서...
(첫번째 링크에 있는 소스와 같은 소스, 왔다가따 하기 귀찮아서 그냥 따로 붙여 넣었다)
/*
* LED 껌벅 껌벅 소스
*/
#include <avr/io.h>
#include <util/delay.h>
int main (void)
{
/* set PORTB for output*/
DDRB = 0xFF;
while (1) {
/* set PORTB.6 high */
PORTB = 0x20;
_delay_ms(1000);
/* set PORTB.6 low */
PORTB = 0x04;
_delay_ms(1000);
}
return 1;
}
실행하면... 뭐라고 메세지가 쭉 나오고 Arduino 보드에 반응이 나타날것이다
제대로 확인하고 싶으면 딜레이 속도를 조절해서 LED의 깜박임 속도를 보면 된다~
아 그리구 Arduino랑 AVR랑 핀 배열에 조금 차이가 있으니깐 꼭 한번 보자.
Arduino 소스를 AVR로 만들어볼때 유용할듯... 해봐야지...ㅋ
http://www.arduino.cc/en/Hacking/PinMapping168
http://techblog.textcube.com/156
어... 근데 이거 적다보니깐 다 어디서 배껴온거네 ㅋㅋㅋㅋ 내가 만든건 뭐냑 ㅋㅋㅋ
ps1; Makefile로 하는거니깐.... vim에서 이제 편하게 코딩이 가능하다 -_-v 자바 안녕~ 스케치 안녕~
ps2; avrdude로 하니깐 부트로더 툴체인 어쩌고 신경 안써서 편한거 같다.
3학년 임베디드 시간에 툴체인 설정하는거 생각하면 이건 축복이나 다름없다 (뭐 다르긴하다만)
ps3; 위에 적힌대로 말고, 그냥 Arduino Code를 외부 에디터로 사용하려면
다음과 같은 방법을 사용 하면 된다.
http://www.arduino.cc/en/uploads/Hacking/Makefile
난 시도는 해봤는데 이상하게 컴파일은 안되서 때려치웠음 -_-.....
'Hardware' 카테고리의 다른 글
아두이노 리눅스에서 사용하기 (7) | 2010.10.23 |
---|---|
NEXT-510UHP USB허브 구입기 (10) | 2010.09.13 |
모니터를 사자 #1 (6) | 2010.08.01 |