用AVRStudio4开发Arduino


用AVRStudio4开发Arduino

初学Arduino﹐吾系好钟意Arduino个IDE﹐晌网上揾到篇关于在AVRStudio4开发Arduino software既网页http://smileymicros.com/blog/2010/10/03/42/ ﹐目弟黎又几方便﹐加上揾到个STK500 v2兼容的bootloader﹐于是在Arduino试试看。
1. 用bitbang方法将STK500v2既bootloader image (AASB328.hex)写入Arduino 上既 Mega328P。详情见http://www.geocities.jp/arduino_ ... tbang_w_ide_en.html ﹐要注意的是写完Flash image后要写 Fuse -即要set BOOTRST fuse同BOOTSZ to 1024 words (2KB)。如果未用过 bitbang 方法我建议先吾好写 (STK500v2 bootloader) 住, 而系写一次Arduino既bootloader﹐再试试用Arduino IDE目弟下连吾连到﹐拱可以先verify bitbang 方法/接线有无错。当然﹐你都可以直接写STK500v2 bootloader﹐然后用AVR programmer (PC software) 黎verify ﹐不过出左问题你都吾知系接线问题定系PC上AVR Programmer问题。至于Arduino既bootloader﹐可以在C:\Program Files\arduino-0022\hardware\arduino\bootloaders\atmega\ 内揾一个叫ATmegaBOOT_168_atmega328.hex既file (我用的是arduino-0022版本) 。这里的STK500v2 bootloader会用Port B4 (即Arduino板上面的Digital Pin 12) 决定行bootloader定系行application ﹐所以reset时如果Digital Pin 12系Low就会入bootloader(板上粒LED会长亮) ﹐如果系High就吾行bootload而直接行application code﹐我建议加枝10k ohm pull up resistor同一粒 pushbutton晌 Digital Pin 12做boot select。
2. Download smileymicros.com个library(libACW001.a) 同 header file (libACW001.h) 。
3. 晌AVRStudio4上开个新project (我叫TestBlink2), device要Atmega320p, new个c file (我叫TestBlink.c), 在TestBlink.c内写program:
#include <libACW001.h>
#define F_CPU 16000000L //我的Arduino板上面的crystal是 16MHz
int ledPin = 13; //用Arduino上Digital Pin 13 做 LED
void setup(void) {
pinMode(ledPin, OUTPUT);
}
void loop(void) {
digitalWrite(ledPin, HIGH); //开
delay(100);
digitalWrite(ledPin, LOW); //关
delay(100);
digitalWrite(ledPin, HIGH); //开
delay(100);
digitalWrite(ledPin, LOW); //关 --即闪2下
delay(1000);
}
int main(void)
{
init();
setup();
for (;;) loop();
return 0;
}
4. Project Config要拱set ﹐要select “Create Hex File” ﹐因program AVR时要用hex file。

5. 记得 include path要啱。我个libACW001.h系放晌 ..\ 度

6. 重要叫linker要link libACW001.a

7. 其他compiler/linker option用default就OK。
8. 跟着 build ... (会见到以下message)
avr-gcc -I"C:\.\Arduino_AS5\TestBlink2\.." -mmcu=atmega328p -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT TestBlink.o -MF dep/TestBlink.o.d -c ../TestBlink.c
avr-gcc -mmcu=atmega328p -Wl,-Map=TestBlink2.map TestBlink.o -L"C:\.\Arduino_AS5" -lACW001 -o TestBlink2.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature TestBlink2.elf TestBlink2.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex TestBlink2.elf TestBlink2.eep || exit 0
avr-objdump -h -S TestBlink2.elf > TestBlink2.lss
AVR Memory Usage
----------------
Device: atmega328p
Program: 1628 bytes (5.0% Full)
(.text + .data + .bootloader)
Data: 16 bytes (0.8% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...
OK。无Error。(LED闪两下都要成1.6KB Flash )
9. 拔走晒bitband时用的4条电线。用USB线将Arduino接上PC(接时要将Digital Pin 12接地﹐即我上面所讲入bootloader)。PC上应该见到新COM port。
在AVRStudio4上 ToolsProgram AVRConnect…

简 STK500同 COM port ﹐click Connect…

10. Read一下 Signature ﹐如果有Error就一系bootloader之前无写好(去返上面bitbang过bootloader入去)﹐一系就系入吾都bootloader(reset再黎过﹐可以按Arduino板上的reset制﹐拱吾洗的PC再认USB-COM device) 。
11. 写(Program) 完hex file入 Flash之后可以reset ﹐但今次吾洗再将Digital Pin 12接地﹐直接行 application code, 你应该见到LED每1秒半闪2下。收工。

问题系libACW001.a只有Arduino基本Digital I/O, Analog I/O (即ADC同 PWM) 同serial port ﹐距无包Arduino入面其也library如 servo, Ethernet, SD, Stepper …etc. 但系对我黎讲已经够用﹐做Servo时直接用analogWrite(10, PWMValue) call将PWM直出 Digital Pin 10 ﹐不过在 setup()内要加多句改 Timer/Counter1既prescaler令到PWM周期等于50Hz。
至于libACW001.a的serial port, 可以在setup()内加以下function call去 init:
serialBegin(9600); // set serial port to 9600-8-n-1
在 loop()内要用serial port时可以用 printf(),例如:
ADCVal = analogRead(analogInPin); //read analog value via ADC
SensorVal = map(ADCVal, 0, 1023, 0, 255);
printf(“ADC value = %d\n”, ADCVal); //output to serial port --即USB-COM port
由于Arduino上好多library都无port到libACW001.a ﹐重有好多功夫留比大家做。但自从用左STK500v2 bootloader后﹐我已经无再用Arduino个IDE ﹐而系用左AVRStudio 4 + libACW001.a ﹐迟下再晌AVRStudio 5上试试﹐今日到此为止﹐手软。
http://www.4shared.com/file/cfUjTJeX/AASBv03.html
http://www.4shared.com/file/Dr_xGi49/libACW001.html
http://www.4shared.com/file/KXIjgHuh/TestBlink2.html

优质内容筛选与推荐>>
1、ubuntu默认防火墙
2、Windows下的MongoDB的安装与配置
3、一位Erlang程序员的自白
4、[leetcode] 682 Baseball Game 棒球比赛
5、UVA_1401_Remerber the Word


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号