很少人會拿到Atmega328要用在arduino上開發,通常都是用Atmega328P, 如何修改Arduino環境來使用 Atmega328(不是Atmega328p),基本上只有Signature不一樣,Atmega328P是1E950F, Atmega328是1E9514,最簡單方式就是修改arduino signature的check.底下做法也可以用在其他Mega系列.
1.修改AtmegaBoot_168.c
增加底下定義
#elif defined __AVR_ATmega328__
#define SIG2
0x95
#define SIG3
0x14
#define PAGE_SIZE
0x40U
//64 words
2.修該Makefile
增加底下定義
atmega328_pro16: TARGET = atmega328_pro_16MHz
atmega328_pro16: MCU_TARGET = atmega328
atmega328_pro16: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600 -DDOUBLE_SPEED
atmega328_pro16: AVR_FREQ = 16000000L
atmega328_pro16: LDSECTION = --section-start=.text=0x7800
atmega328_pro16: $(PROGRAM)_atmega328_pro_16MHz.hex
3.產生bootloader的 command :
>make clean
>make atmega328_pro16
將產生 ATmegaBOOT_168_atmega328_pro_16MHz.hex
4.修改avrdude.conf
#------------------------------------------------------------
# ATmega328P
#------------------------------------------------------------
signature = 0x1e 0x95 0x0F;
改成
signature = 0x1e 0x95 0x14;
5.在 boards.txt修改或增加一項,如下
##############################################################
pro5v328.name=My Arduino Pro(16MHz) w/ ATmega328
pro5v328.upload.protocol=stk500
pro5v328.upload.maximum_size=30720
pro5v328.upload.speed=57600
pro5v328.bootloader.low_fuses=0xFF
pro5v328.bootloader.high_fuses=0xDA
pro5v328.bootloader.extended_fuses=0x05
pro5v328.bootloader.path=atmega328Led
pro5v328.bootloader.file=ATmegaBOOT_168_atmega328_pro_16MHz.hex
pro5v328.bootloader.unlock_bits=0x3F
pro5v328.bootloader.lock_bits=0x0F
pro5v328.build.mcu=atmega328p
pro5v328.build.f_cpu=16000000L
pro5v328.build.core=arduino
6.利用Arduino把bootloader燒錄:
a.打開arduino選擇Tools的Board: "My Arduino Pro(16MHz) w/ ATmega328"
b.選擇Burn Bootloader 如USBtinyISP
下圖(手機拍攝不是很清楚)我把Atmega328 mounting上去的arduino板子,一切正常work.
有興趣或有問題的arduino同好,可以mail me: sinocgtchen@gmail.com