CSK.Blog--个人原创Weblog

Arduino-Lite, 轻量级且高性能的AVR固件库

一篇拖了2年多的文章...目前首发于我们RoboPeak团队网站,可以过去查看中英文版本以及最好的阅读体验。这里只是缩略版本。

RP Blog文章:

Arduino-Lite, RoboPeak使用的高效轻量级AVR库(1) -- 介绍篇

http://www.robopeak.net/blog/?p=42

Arduino-Lite, RoboPeak使用的高效轻量级AVR库(2) -- 使用篇

http://www.robopeak.net/blog/?p=70

Arduino-Lite开发参考文档

http://www.robopeak.net/blog/?p=107

我blog早先时候写的一篇相关文章:

说说我从去年9月份开始的AVR单片机学习和使用

http://www.csksoft.net/blog/post/255.html

Arduino-Lite是我们RoboPeak机器人团队开发使用的轻量级高性能AVR固件库,我们机器人小车的AVR系统中全部采用Arduino-Lite所开发。目前已经将他全部开源了,希望对各位有所帮助。

Google Code项目主页: http://code.google.com/p/arduino-lite/

简介

Arduino固件库提供了非常易于初学者使用的函数库,可以很快对AVR进行开发,即使是专业人员用这个库也会觉得便利。同时他对引脚的抽象编号也有利于固件代码的移植。不过这个库相对体积过大,性能也不理想,所以难以在产品领域使用。这就是我们开发Arduino-Lite的原因所在。

Arduino-Lite包括了2大部分

1) 改良和扩充的Arduino固件库,

提供大多数情况下大于50%的代码尺寸缩小和10倍以上的运行速度加速。同时支持更多的AVR芯片和时钟频率。使得这个库能可被用于对成本和性能敏感的产品应用中

2) 自我包含的编译开发环境

不需要安装任何第三方程序即可完成AVR的开发、下载工作。Arduino-Lite自带了avr-gcc(WINAVR),不过创建新工程非常简单,基本的文件夹复制操作即可自动产生新的工程,也不用编写和修改Makefile脚本,都是智能进行的

 

这里先给出2个直观的例子:

实现PWM输出功能:

代码类型 代码 执行所需的AVR时钟周期
Arduino analogWrite(9, pwm_val); ~80
Arduino-Lite ANALOG_WRITE(9, pwm_val); 2
Arduino-Lite PWM_SET(9, pwm_val); 1
avr-gcc直接寄存器操作 OCR01 = pwm_val; 1

可以看出,Arduino-Lite提供的函数和使用方式与Arduino非常接近,但效率上他有和直接去操作AVR寄存器性能一致。

编写一个PWM驱动LED闪烁程序的代码尺寸对比: 

  • Arduino库产生的最终代码: 2048 byte
  • Arduino-Lite产生的最终代码: 100byte

对于AVR ISP编程器的支持,Arduino-Lite支持Arduino方式的串口下载,也支持HIDboot的USB-HID下载,同时原生支持我们RoboPeak做的开源USB免驱动编程器RoboPeak USB Connector进行AVR芯片编程(见http://www.robopeak.net/blog/?p=133)。

特点和适合使用的场合

同样使用C++/C编写且基于avr-gcc编译器。但与Arduino固件库相比,Arduino-Lite有如下优势。

非常轻量级

使用Arduino-Lite的固件往往比使用Arduino固件库小了50%以上.

高效率

许多Arduino-Lite提供的与Arduino固件相同功能的函数,例如digitalWrite之Arduino-Lite版本:DIGITAL_WRITE仅使用一条AVR指令实现.

支持更多的AVR芯片和时钟频率

除了 Atmega8(A), Atmega168(PA), Atmega328(PA), Atmega1280 芯片外, Arduino-Lite 也支持以下芯片: Attiny2313, Attiny26, Atmega48(PA), Atmega88(PA)

对于时钟频率, Arduino-Lite 支持从1Mhz 至 20Mhz 的频率范围.

 

除此之外,Arduino-Lite还有如下特点:

 

自包含,无需依赖任何第三方工具/编译器/库

只要系统中带有文本编辑器,即可直接用Arduino-Lite进行AVR固件开发、编译、烧录等动作。Arduino-Lite自带了avr-gcc(WINAVR)以及相关的函数库。

灵活易与整合的编译环境,基于Make,但无需用户编写或是生成任何Makefile

创建一个新的Arduino-Lite工程,最简单的办法是将模板工程文件夹解压缩并重命名为希望的工程文件。并将相关的源代码以任何目录结构放置于工程目录下,Arduino-Lite就能编译项目,无需用户修改/编写/生成Makefile.

 

我们认为Arduino-Lite适用于以下领域

  1. 对固件代码尺寸/器件成本敏感的场合,比如需要使用Attiny或者Atmega48等小Rom尺寸的芯片的场合
  2. 对固件执行速度有较高要求的场合,比如对实时性要求较高的工控领域和机器人控制器领域
  3. 喜欢使用Make脚本、自定义IDE等的开发环境
  4. Arduino/AVR爱好者,且有一定的编程经验,不满足于Arduino IDE环境,期望更高效的固件库
  5. 希望将Arduino的简易开发特性运用于Attiny, Atmega48以及不同时钟条件下的硬件环境
相比Ardunio的固件库,Arduino-Lite或许不适合
  1. 不喜欢命令行界面、Make编译脚本的人群 (我们也有计划将Arduino-Lite支持Arduino-IDE)
  2. 希望直接使用Arduino各类第三方库,急需应用的情况

实现细节

省略,请参考RP Blog原文:http://www.robopeak.net/blog/?p=42

 

如何使用

 可以在Google code上下载已经打包好的zip包,或者直接checkout 源代码使用,具体见:http://www.robopeak.net/blog/?p=70

 

开发和配置过程都异常的简单,基本都是鼠标操作即可搞定,也无需以来别的软件、库。

 

下面有段使用RP USB Connector进行AVR烧录的视频:

(http://www.tudou.com/programs/view/Den9uh3HTHE/)

 

函数手册

 略文,详见:http://www.robopeak.net/blog/?p=107

Arduino-Lite新增函数/宏

基本IO引脚控制

PWM输出控制

模拟量采集(ADC)

睡眠和延迟

中断处理和管理

串口通讯

调试功能

文本格式化

RoboPeak: the 1st Release Soon!

业余时间和朋友们做了一年多的机器人项目,RoboPeak Project。快要接近第一次公开发布了~

 

很好很强大。我Blog将在正式发布后做更多详细介绍,敬请期待:-) 这里也感谢各位忙里抽空的朋友们,大家辛苦啦。

 

 

 

RoboPeak演示视频系列:指南车与时钟车

开始陆续放出一些演示视频,几个月后会迎来RoboPeak的一次milestone,届时有比较系统的介绍和功能性和概念性的视频演示。我们作品的性能参数也会一起给出。所以有问题到时候再提吧,现在不保证会解答:-)

这次是演示小车上的罗盘系统做的一些好玩的效果,稍稍有点猥琐...

低成本的激光测距雷达

很久没有更新Blog,这仍旧是一篇凑数性质的文章。等空下来了会写一些具体和系统的东西。

这是我和其他朋友在业余从事的一个项目,代号为RoboPeak。可能之前一些发出的一些视频中已经有所透露,这里就算是非正式的正式介绍吧。因为这是篇凑数文,所以具体细节就不介绍了。

这是最近做出的一个低成本的激光测距系统,以及基于这个测距仪做的平面障碍物雷达图。用的是简单的三角测距原理。不过精确度在经过了校正后可以做到很小(0-7米范围内<10cm),对于室内应用有一定的实用价值。

所谓雷达,就是以自身为中心的平面内,将一定角度范围内的物体距离自身的距离求出,并在极坐标下作图。这里得到的是自身前方-90度至90度范围的扫描图。用途嘛自然有很多。如果对这个原理感兴趣,可以等以后某个时间我有空了可能会做介绍。

 

1. 演示视频#1

2. 演示视频#2

3. 演示视频#3

 

4. 实际布局

5. 雷达图#1

6. 雷达图#2

再贴些视频,色彩缤纷的..

算是凑数文章,原本不想发了,不过还是贴出来给各位看看吧。但不解释...

 

下回不掉各位胃口了,写点实在的东西,只要时间允许:-)

最近做的电子罗盘和惯导系统视频

贴些视频凑数好了,所谓凑数:不介绍、不说原理、不解释。等以后有机会和时间再介绍吧

 

2轴磁阻做成的电子指南针,画面上为PC通过该模块得道的地磁北极夹角,精确度<3度,分辨率0.1度。相应速率20Hz

 

 

Z-轴陀螺仪得道的原始角度信息,将用于惯导系统:

 

 

真感觉自己变成搞硬件的了,回想以前小学的时候还没接触电脑时对电子制作那种痴迷。不过那时候没文化,只是照着书上搭电路,同时没有现在如此便捷的网上购物,所用的电子元件都是从其他机器和垃圾中拆来的,没有匹配型号的就找别的代用。奇迹的是那时候还真能做出点东西,比如当时最喜欢做FM无线MIC,然后当成是一个广播电台用。另外就是做DC升压电路来得到300伏左右的高电压。

后来接触PC后就很少做这类东西了,现在想想主要原因是搞电子制作还是需要花很多精力和物力的。不想写程序,再复杂高效的算法,只要有思想,都可以实现。做电子设计就不同了,身边没有相关器件,就只能搁置。同时不是有本事就能做出顶尖的东西,比如我肯定做不出CPU... 所以搞电子设计的很容易让人有山寨的感觉,尤其是仅靠着家里的设备...

不过现在又感觉还是做电子的实在,因为这些是实实在在的东西。不过也可能是平时代码写多了想换下环境把...从去年开始Blog上就主要贴电子制作相关的东西了,其实也差不多那个时候开始业余就作点电子制作。这个过程还是有蛮多收获的,最有体会的就是把大学学的东西利用了起来(其实是前两年学的,后来CS的专业知识到一直挺管用)。到如今差不多1年了,感觉从去年下半年自己已经有点疯狂了...

分页:[«]1[»]

日历

<< 2015-6 >>

Sun

Mon

Tue

Wed

Thu

Fri

Sat

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)