本帖最后由 xinxincaijq 于 2013-2-22 17:56 编辑
原帖由
黑马
发自:dev.eefocus.com
------------------------------------------------------------------------------------------------------------------------------------------
终于拿到了uno32的板子,和大家分享一些自己的初步试用的心得,欢迎讨论和指教。 硬件篇 先晒晒图给大家养养眼吧。 chipKIT的端口复用是通过跳线来实现的,习惯了arduino的朋友一定要留意跳线的配置是否正确。 整个板子设计得很规整,走线和铺地中规中矩,红色的板子个性十分鲜明。 chipKIT的心脏~,一枚32位的处理器。 和arduino mega2560合个影吧。 chipKIT Uno32的外形和Arduino uno良好的兼容,板子上的三个固定孔(arduino uno有4个,mega 2560有六个)位置完全一致,这很大的提高了我们DIY时的通用性。 有点小可惜的是,chipKIT和arduino的板子有一个共同的小问题,定位孔和周围器件很近,对于塑料柱定位当然没有问题,但是如果用螺丝固定的话,螺帽都会有干涉。
Uno32的做工很精致,毕竟是比较高端的mcu配置,从设计布局各方面都很出色。 再来看看主要与arduino主流产品主要参数的对比:
Uno32的控制器性能远超Mega2560,而Mega2560则在端口数量方面表现出了优势。Uno32在软、硬件方面最大限度的和Arduino兼容。对于厂商来说,借助Arduino强大的配套资源可以快速的得到接受和认可;而对于玩家来说,Uno32大大弥补了Arduino高性能产品线缺失的尴尬。
在大部分情况下,chipKIT uno32可以良好的替代arduino uno,其外形、定位孔以及pin脚分布和编号都完美兼容。但是需要特别注意的是chipKIT的I/O电平是3.3V,最大输入输出电流为18mA。
软件篇
chipKIT的IDE(右)界面和arduino(左)几乎完全相同,但是程序包体积却增大了一半,多出来的部分基本都在hardware文件夹下。可以看到mpIDE支持的硬件众多,不仅支持了chipKIT系列,同时也提供了对arduino系列产品的支持。 关于驱动安装、选择com口和board同arduino基本一样,论坛里有非常详细的教程,这里就不再重复。 安装运行库的方法有所不同,在File>references里找到Sketchbook location,把运行库解压到其下的libraries文件夹里,重启IDE就可以调用了。
感觉比较可惜的是,chipKIT的运行库依然比较少,稍微偏门一些的器件都难以获得支持。万分期待各位高手一起来做一些运行库的移植和编写。
至于程序语法,mpIDE和arduino完全相同,reference文档甚至索性直接copy了arduino IDE 0023的。值得留意的是现在arduino已经升级为1.0,其语法与0023版有所差异。
实战篇
软硬件介绍完毕,现在来跑两个简单的小程序尝试一下。
Blink是最简单的单片机程序,就像软件编程的“hello world!”一样,虽然简单,却几乎是所有平台编程者的第一个程序,同时也是测试软硬件配置是否正常的非常理想的程序。
Uno32板载两颗红色的用户LED,标注为LD4、LD5,对应数字端口13、43。这次索性都用上,让它们交替闪亮。 这里要注意的是mpIDE和arduino的IDE有相同的问题,对中文不支持,所以输入程序之前记得把输入法关了,要不就木有反应~
/*******************************
Blink:轮流点亮两颗用户LED
******************************/ void setup() { pinMode(13, OUTPUT); pinMode(43, OUTPUT); // 将两颗LED对应的13、43端口设置为数字输出 } void loop() { digitalWrite(13, HIGH); // 点亮LD4 digitalWrite(43, LOW); // 熄灭LD5 delay(200); // 保持0.2秒 digitalWrite(13, LOW); // 熄灭LD4 digitalWrite(43, HIGH); // 点亮LD5 delay(200); // 保持0.2秒 }
点upload(左边第二个)按钮,IDE会执行编译和上传,串口灯一阵乱闪(表示程序在上传),随后就可以看到两颗LED交替闪烁。硬件功能正常,程序实现了我们预想的功能。
第二个程序我们来外接一个传感器,这是一个超声波距离传感器,带有两个超声波器件,分别用于发射和接受,根据信号波和反射波之间的时间差计算距离。 chipKIT和arduino的外形兼容性很好,为arduino专门切割的通用载板可以直接用上。实物连线如下,很简单,从左到右依次为5V、Trig、Echo、GND四根线。
/*******************************
超声测距程序
******************************/
const int TrigPin = 2; // 定义pin2为发射端 const int EchoPin = 3; // 定义pin3位接收端 float dist; // 距离变量dist void setup() { Serial.begin(9600); // 与PC通信的串口波特率 pinMode(TrigPin, OUTPUT); // 配置端口模式 pinMode(EchoPin, INPUT); }
void loop() { digitalWrite(TrigPin, LOW); // 把信号送往发射端 delayMicroseconds(2); digitalWrite(TrigPin, HIGH); delayMicroseconds(10); digitalWrite(TrigPin, LOW); dist = pulseIn(EchoPin, HIGH) / 2.0 / 1000000.0 * 340.0 * 100.0; // 根据回波时间计算距离(cm) Serial.print("Distance="); Serial.print(dist); // 发送距离值 Serial.print("cm"); Serial.println(); delay(1000); }
程序上传完毕后,点击右方的Serial Monitor,从弹出的窗口里可以看到chipKIT回传的信息。 通过数据口采集数据,并通过串口回传给上位机,这是获取传感器数据最基本的方式。其他诸如光敏、热敏电阻等各种模拟信号传感器都与之类似,略微改动程序就可以实现。
最后,我们来简单测试一下chipKIT的浮点运算性能,每进行百万次正弦运算回传一次当前时间(微秒):
/*******************************
浮点运算测试程序
******************************/
double para = 1; void setup() { Serial.begin(9600); // 与PC通信的串口波特率 } void loop() { int i; for (i = 0; i < 1000000; i++) para = sin(para); // 进行百万次正弦运算 Serial.println(micros()); // 回传时间 }
根据两次回传时间的差值,可以计算出每个loop所用的时间。 可以看到,mega2560一次loop耗时比uno32高出整整两个数量级,浮点运算能力的比拼,差距还是非常明显的,uno32完胜。
以上是关于chipKIT的最初体验,更多传感器、显示器件的应用正在尝试和摸索中,随时完善和更新,欢迎大家共同参与讨论和交流。
一直在国内国外的论坛各种找,没有发现支持128x64的库。于是经过近一个礼拜的苦苦摸索,终于成功驱动了128x64的OLED。运行库是在Basic IO Shield OLED基础上修改的,有兴趣的朋友不妨试试。 接口目前是固定的 OLED uno32 max32 SCK——13——13 SDI ——11——11 RST ——10——10 D/C —— 39——83 连接这四根信号线以及Vcc和Gnd就可以了。
|