4971|11

22

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求大神,在扫描点亮灯的基础上,如何调节亮度? [复制链接]

如题,现在我的单片机上面,是5个IO口控制10个灯,5个IO口只有一个口是有PWM功能,即下图的 P57口,现在是用扫描的方式点亮灯,请问如何在扫描这个基础上面 调节灯的亮度?

QQ图片20131228111911.jpg (67.23 KB, 下载次数: 1)

这个是原理图

这个是原理图
此帖出自单片机论坛

最新回复

控制亮灯的时间就好了  详情 回复 发表于 2014-3-5 10:23
点赞 关注
 

回复
举报

22

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
求版主,求大神·······
此帖出自单片机论坛
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

板凳
 
你可能是L1亮→等t时间→L1灭,L2亮→等t时间→L2灭,L3亮→……

在频率固定的情况下,可以试试:
L1亮→等t'时间→L1灭→等t-t'时间→L2亮→等t'时间→L2灭→等t-t'时间→L3亮→……

为了看起来不闪烁,频率要足够快,即t要足够小,你有5个灯,所以刷新周期是5t,通常频率在60Hz时还能感到闪,达到75Hz就几乎观察不到闪烁啦。
此帖出自单片机论坛

点评

感谢回复,我明天再去试试,tks  详情 回复 发表于 2013-12-28 20:43
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

4
 
你这个本来就是扫描显示,再加上每个要pwm,时间片分的很细,逻辑相当复杂啊。
此帖出自单片机论坛

点评

是比较复杂,我们公司老大出差了,我也只能硬扛着了  详情 回复 发表于 2013-12-28 20:45
 
 
 

回复

4008

帖子

0

TA的资源

版主

5
 
定时器实现每个io的pwm.
你这个led比较多,相当于10扫描显示,所以亮度会差些.在加上亮度调节就更暗了.
你每个led都不独立所以只能分时控制了.

给你一个大概的框架
uint led1pwm,led2pwm,...;  //10个led比较值
定时器10us中断服务函数 {
计数count++;
    switch (count/32%10) {   //32是每个pwm占32个计数即每个led有32个亮度级,此数值越小频率越高,10是10个led
         case 0 : //led1分时
              if (led1pwm>(count%32))
                           //led1亮的io状态
              else
                          //led1灭的io状态
         break;
         case 1:
                if (led2pwm>(count%32))
                           //led2亮的io状态
              else
                          //led2灭的io状态      
         break;
...底下省略了




此帖出自单片机论坛

点评

代码简介,功能NB.学习了。 1、按这个下来每个灯pwm=100%时也只有常亮时1/10亮度,估计调节效果很差。如果扫描可行,能把不相关的两个灯放一个pwm里面可以改善一点。 2、不值LZ用的MCU主频多少,有无除法指令,10u  详情 回复 发表于 2013-12-28 22:27
好的,感谢版主的回复,另外,您的头像太帅了!  详情 回复 发表于 2013-12-28 20:49
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

6
 
sjtitr 发表于 2013-12-28 11:46
你可能是L1亮→等t时间→L1灭,L2亮→等t时间→L2灭,L3亮→……

在频率固定的情况下,可以试试:

感谢回复,我明天再去试试,tks
此帖出自单片机论坛
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

7
 
shower.xu 发表于 2013-12-28 14:50
你这个本来就是扫描显示,再加上每个要pwm,时间片分的很细,逻辑相当复杂啊。

是比较复杂,我们公司老大出差了,我也只能硬扛着了
此帖出自单片机论坛
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

8
 
huo_hu 发表于 2013-12-28 20:26
定时器实现每个io的pwm.
你这个led比较多,相当于10扫描显示,所以亮度会差些.在加上亮度调节就更暗了.
你 ...

好的,感谢版主的回复,另外,您的头像太帅了!
此帖出自单片机论坛
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

9
 
huo_hu 发表于 2013-12-28 20:26
定时器实现每个io的pwm.
你这个led比较多,相当于10扫描显示,所以亮度会差些.在加上亮度调节就更暗了.
你 ...

代码简介,功能NB.学习了。
1、按这个下来每个灯pwm=100%时也只有常亮时1/10亮度,估计调节效果很差。如果扫描可行,能把不相关的两个灯放一个pwm里面可以改善一点。
2、不值LZ用的MCU主频多少,有无除法指令,10us的定时中断里做除法和取余数,不知道其它任务会不会有冲突
此帖出自单片机论坛

点评

1.扫描显示所以最大只能是1/10,这个无解,除非每个led独立io控制. 2.10us只是举个例子,如果是2的n次幂可以用与运算 //32级pwm,16扫 switch((count>>5)&15) { case 0: if(count&31) { ...  详情 回复 发表于 2013-12-29 13:01
 
 
 

回复

4008

帖子

0

TA的资源

版主

10
 
shower.xu 发表于 2013-12-28 22:27
代码简介,功能NB.学习了。
1、按这个下来每个灯pwm=100%时也只有常亮时1/10亮度,估计调节效果很差。如 ...

1.扫描显示所以最大只能是1/10,这个无解,除非每个led独立io控制.
2.10us只是举个例子,如果是2的n次幂可以用与运算
//32级pwm,16扫
switch((count>>5)&15) {
     case 0:
              if(count&31) {
...

此帖出自单片机论坛

点评

这个功能实现了,62.5us中断一次,每1ms扫描一个灯,10ms扫一轮,做了16级,效果不错  详情 回复 发表于 2014-1-7 15:18
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

11
 
huo_hu 发表于 2013-12-29 13:01
1.扫描显示所以最大只能是1/10,这个无解,除非每个led独立io控制.
2.10us只是举个例子,如果是2的n次幂可 ...

这个功能实现了,62.5us中断一次,每1ms扫描一个灯,10ms扫一轮,做了16级,效果不错
此帖出自单片机论坛
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

12
 
控制亮灯的时间就好了
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表