總瀏覽量

2011年9月26日 星期一

Arduino Atmega328 supporting

很少人會拿到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

沒有留言:

張貼留言