2645|1

1297

帖子

2

TA的资源

纯净的硅(中级)

楼主
 

【linknode评测】05 LinkNode玩呼吸灯 [复制链接]

这个其实就是利用PWM的占空比来控制LED的亮度,对于单片机来说是很普通的功能,但在mbed下会发现更加无法想象的简单。在没有看官方例子前,总觉得该配置点定时器什么的,然后再得到PWM。结果并非如此。因为已经定义了PwmOut这个类了!!官方例子是控制蜂鸣器演奏一首歌曲,那我们就改造成呼吸灯吧。不够在pwm的duty-cycle设置中有个小坑,跟大家分享一下。

编程环境,mbed,添加mbed库即可。在库中可以找到pwm类的说明,还是比较简单的。下图所示的方法用用就够了

另外write和read可以简单的用实例=和=实例来完成。废话少说,先来试试这个duty-cycle到底是数字大亮还是数字小亮。既然是百分比,那么肯定在0-1.0之间取值。我们给两盏LED都点上
  1. #include <mbed.h>
  2. PwmOut L_red(P0_20);
  3. PwmOut L_blue(P0_19);
  4. int main(void){
  5.     L_red=0.1;
  6.     L_blue=0.9;
  7.     while(1){
  8.     }
  9. }
复制代码
实验结果:红灯很亮,蓝灯比较暗。但是因为IO口接的是LED灯的阴极,所以这个duty-cycle数字表示的是高电平的比例。然后就是咱们的呼吸灯了,定时改变占空比咯。蓝色比较优雅,就选它了。不过很奇怪 ,现象并不乐观,首先使用这段代码,预期是灯从最暗变到最亮,然后再回到最暗。
  1. #include <mbed.h>
  2. PwmOut L_blue(P0_19);
  3. int main(void){
  4.     L_blue=1.0;
  5.     while(1){
  6.         wait(1);
  7.         L_blue=L_blue-0.2;                     
  8.         if (L_blue==0) {
  9.         L_blue=1.0;
  10.         }
  11.     }
  12. }
复制代码
结果实际情况是:从暗变到最亮,然后就停在最亮状态不变了!!开始以为是0值比较问题,可是把第三行变成L_blue<0也没戏。参考了下mbed的PWM例程。也是失败。

但是while(1)中,使用这段代码可以。
  1. wait(1);
  2.         L_blue=1.0;
  3.         wait(1);
  4.         L_blue=0.8;
  5.         wait(1);
  6.         L_blue=0.6;
  7.         wait(1);
  8.         L_blue=0.4;
  9.         wait(1);
  10.         L_blue=0.2;
  11.         wait(1);
  12.         L_blue=0.0;
复制代码
想了半天,最后使用了一个中间变量dc,严格保证给到L_blue的值一定在0和1之间。于是就成功了。最终完整代码如下:
  1. #include <mbed.h>
  2. PwmOut L_blue(P0_19);
  3. int main(void){
  4.     float dc=0.0;
  5.     L_blue=dc;
  6.     L_blue.period_us(10);
  7.     while(1){
  8.         wait(1);
  9.         dc=dc+0.2;                    
  10.         if (dc>1.1) {
  11.             dc=0.0;
  12.         }
  13.         L_blue=dc;
  14.     }
  15. }
复制代码
看来mbed也是有坑的啊,官方例程也靠不住。当然也许在底层实现中,有些mcu会自动检查duty-cycle的范围,有些就没有?如果误写入了不合理的数值,可能就引起单片机的奇怪状态了。库的源文件并不可见,所以也不追究了。   

此帖出自RF/无线论坛

最新回复

汇总帖在此: 【linknode评测】—— by johnrey https://bbs.eeworld.com.cn/forum. ... 0308&fromuid=536508  详情 回复 发表于 2016-5-30 13:49
点赞 关注
 

回复
举报

1万

帖子

2854

TA的资源

管理员

来自 2楼
 
汇总帖在此:

【linknode评测】—— by johnrey
https://bbs.eeworld.com.cn/forum. ... 0308&fromuid=536508
此帖出自RF/无线论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

玩板看这里:

https://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表