2601|3

9

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

难道Timer的回调函数与round数学运算有冲突吗?请高手指教。 [复制链接]

  本帖最后由 zzwqw 于 2018-3-28 16:01 编辑

在学习使用ADC时碰到个疑问,求高手解答,具体情况如下:设定PYB Nano 的“X5”(PB8)为PWM模式,外接LED,“X7”(PA7)脚为ADC外接可调电位器,通过调节电位器来控制LED的亮度,如下图:





代码如下:
  1. from pyb import Pin,Timer,ADC

  2. tm = Timer(4,freq=100)

  3. led = tm.channel(3,Timer.PWM,pin=Pin.cpu.B8)

  4. led_liangdu = led.pulse_width_percent

  5. adc =ADC(Pin.cpu.A7)

  6. while True:
  7.     shuzhi = round(100/4095*adc.read())
  8.     led_LD(shuzhi)
  9.     pyb.delay(100)
复制代码

以上代码工作正常,LED的亮度受电位器的控制,可是尝试把循环代码改写成用定时器触发时,却不能正常工作,代码只运行一次就退出了不能连续。
改写后的代码如下:
  1. from pyb import Pin,Timer,ADC

  2. tm = Timer(4,freq=100)

  3. led = tm.channel(3,Timer.PWM,pin=Pin.cpu.B8)

  4. led_liangdu = led.pulse_width_percent

  5. adc =ADC(Pin.cpu.A7)

  6. def tiaoguang(t=0):
  7.     shuzhi = round(100/4095*adc.read())  #取整
  8.    
  9.     led_liangdu(shuzhi)
  10.     print(shuzhi)

  11. Timer(3,freq=100,callback=tiaoguang())
复制代码

运行结果如下图所示

如果调用定时器语句时的回调函数不加括号,象下面这样
  1. Timer(3,freq=100,callback=tiaoguang)
复制代码

则会抛出错误,如下图

但是如果不做取整运算,就正常,调用回调函数也不用加括号。
  1. from pyb import Pin,Timer,ADC

  2. tm = Timer(4,freq=100)

  3. led = tm.channel(3,Timer.PWM,pin=Pin.cpu.B8)

  4. led_liangdu = led.pulse_width_percent

  5. adc =ADC(Pin.cpu.A7)

  6. def tiaoguang(t=0):
  7.     #shuzhi = round(100/4095*adc.read())  #取整
  8.     shuzhi = adc.read()
  9.     led_liangdu(shuzhi)
  10.     print(shuzhi)
  11.    

  12. Timer(3,freq=100,callback=tiaoguang)
复制代码



(为了方便截个图,调低了Timer.freq的值)




这个round运算为什么会造成这样的后果,请高手指导下其中的原由,谢谢。

最新回复

厉害厉害,哪儿有回调函数的资料啊?我在定时器里调用dht测量温湿度,也报错了。  详情 回复 发表于 2018-5-8 16:54
点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 
mpy中回调函数相当于嵌入式系统的中断,中断程序里不能执行太复杂的逻辑和计算,否则可能引起超时或堆栈溢出。
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
dcexpert 发表于 2018-3-28 20:37
mpy中回调函数相当于嵌入式系统的中断,中断程序里不能执行太复杂的逻辑和计算,否则可能引起超时或堆栈溢 ...

答案已找到,在定时器回调函数中不能用浮点数,改为整数计算就正常了,谢谢回复!
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

4
 
zzwqw 发表于 2018-4-13 17:08
答案已找到,在定时器回调函数中不能用浮点数,改为整数计算就正常了,谢谢回复!

厉害厉害,哪儿有回调函数的资料啊?我在定时器里调用dht测量温湿度,也报错了。
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表