社区导航

 

搜索
查看: 367|回复: 15
打印 上一主题 下一主题

[求助] 单片机自带PWM 控制LED灯得亮度。怎么写??

[复制链接]

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

跳转到指定楼层
楼主
发表于 2019-10-17 17:00 | 只看该作者 |只看大图 |倒序浏览 |阅读模式

寄存器配置已经配好了, 我才学习单片机, 刚接触到PWM。现在寄存器配置好了,但是后面怎么是LED亮和灭。不知道怎么写。

我也知道高电平占整个周期的时间 就是  占空比。  但是应该怎么写呢??????????求助  !!!!!!!!!!!!!!!!!

 

此帖出自51单片机论坛
收藏收藏 收藏干货 分享分享


回复

使用道具 举报

388

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

沙发
发表于 2019-10-17 17:26 | 只看该作者

加一个while(1)循环,间隔一段时间比如100ms改变占空比,从0~100占空比,灯正常就会从亮到灭渐变

点评

我试了。没效果了。我是手动改变的值  详情 回复 发表于 2019-10-17 17:47


回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

板凳
 楼主| 发表于 2019-10-17 17:47 | 只看该作者
29447945 发表于 2019-10-17 17:26 加一个while(1)循环,间隔一段时间比如100ms改变占空比,从0~100占空比,灯正常就会从亮到灭渐变

我试了。没效果了。我是手动改变的值

点评

加了延时吗?  详情 回复 发表于 2019-10-17 21:34


回复

使用道具 举报

388

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

4
发表于 2019-10-17 21:34 | 只看该作者
一百年后的自己 发表于 2019-10-17 17:47 我试了。没效果了。我是手动改变的值
加了延时吗?

点评

没有加  详情 回复 发表于 2019-10-18 09:06


回复

使用道具 举报

3473

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

5
发表于 2019-10-18 08:14 | 只看该作者

修改占空比寄存器就行了



回复

使用道具 举报

3473

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

6
发表于 2019-10-18 08:16 | 只看该作者

是不是配置寄存器锁定了

点评

  直接修改这一部分就可以了嘛?  详情 回复 发表于 2019-10-18 09:07


回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

7
 楼主| 发表于 2019-10-18 09:06 | 只看该作者

没有加

点评

每次更改占空比都要延时,要不然你根本看不出来改变的过程  详情 回复 发表于 2019-10-18 09:10


回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

8
 楼主| 发表于 2019-10-18 09:07 | 只看该作者
huo_hu 发表于 2019-10-18 08:16 是不是配置寄存器锁定了

 

直接修改这一部分就可以了嘛?

image.png (17.95 KB, 下载次数: 0)

image.png


回复

使用道具 举报

388

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

9
发表于 2019-10-18 09:10 | 只看该作者

每次更改占空比都要延时,要不然你根本看不出来改变的过程

点评

[attachimg]438875[/attachimg] [attachimg]438876[/attachimg]然后我放在主函数里面,while 一直循环没问题吧,  而且周期和占空比我声明了变量,再主函数里面改变值就应该有效果吧。但是没声明改变  详情 回复 发表于 2019-10-18 09:38
[attachimg]438865[/attachimg] 这个是我新更改的寄存器配置。 每次更改占空比需要延时???  详情 回复 发表于 2019-10-18 09:26


回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

10
 楼主| 发表于 2019-10-18 09:26 | 只看该作者
29447945 发表于 2019-10-18 09:10 每次更改占空比都要延时,要不然你根本看不出来改变的过程

这个是我新更改的寄存器配置。

每次更改占空比需要延时???



回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

11
 楼主| 发表于 2019-10-18 09:38 | 只看该作者
29447945 发表于 2019-10-18 09:10 每次更改占空比都要延时,要不然你根本看不出来改变的过程

然后我放在主函数里面,while 一直循环没问题吧,  而且周期和占空比我声明了变量,再主函数里面改变值就应该有效果吧。但是没声明改变

点评

下面这是思路,你要自己去实现这些函数。 void main() { int pwm_value = 0; pwm_init(); while(1) { set_pwm(pwm_value ); pwm_value += 10; if(pwm_value  >= 100) pwm_valu  详情 回复 发表于 2019-10-18 09:50


回复

使用道具 举报

388

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

12
发表于 2019-10-18 09:50 | 只看该作者
一百年后的自己 发表于 2019-10-18 09:38 然后我放在主函数里面,while 一直循环没问题吧,  而且周期和占空比我声明了变量,再主函数里 ...

下面这是思路,你要自己去实现这些函数。

void main()

{

int pwm_value = 0;

pwm_init();

while(1)

{

set_pwm(pwm_value );

pwm_value += 10;

if(pwm_value  >= 100)

pwm_value  = 0;

delay_10ms();

}

}

点评

如果我开始不设置函数, 我直接更改占空比得值, 那那个led灯的亮度会不会有变化????????  详情 回复 发表于 2019-10-18 11:24
好的, 谢谢  详情 回复 发表于 2019-10-18 10:04


回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

13
 楼主| 发表于 2019-10-18 10:04 | 只看该作者
29447945 发表于 2019-10-18 09:50 下面这是思路,你要自己去实现这些函数。 void main() { int pwm_value = 0; pwm_init(); ...

好的, 谢谢



回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

14
 楼主| 发表于 2019-10-18 11:24 | 只看该作者
29447945 发表于 2019-10-18 09:50 下面这是思路,你要自己去实现这些函数。 void main() { int pwm_value = 0; pwm_init(); ...

如果我开始不设置函数, 我直接更改占空比得值, 那那个led灯的亮度会不会有变化????????

点评

当然要先设置好定时器,再改占空比才能用啊,不设置定时器改当然不起作用。延时时间可以加长点  详情 回复 发表于 2019-10-18 12:17


回复

使用道具 举报

388

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

15
发表于 2019-10-18 12:17 | 只看该作者
一百年后的自己 发表于 2019-10-18 11:24 如果我开始不设置函数, 我直接更改占空比得值, 那那个led灯的亮度会不会有变化????????

当然要先设置好定时器,再改占空比才能用啊,不设置定时器改当然不起作用。延时时间可以加长点

点评

定时器设置了,我现在又疑问,我用示波器看也有高低电平。 主要是我配置寄存器后,还需不需要用io控制led灯亮。 还是PWM就可以直接把led调亮?如果可以直接调亮,为什么我烧写程序,led不亮。我也把PWM的使能  详情 回复 发表于 2019-10-18 13:42


回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

16
 楼主| 发表于 2019-10-18 13:42 | 只看该作者
29447945 发表于 2019-10-18 12:17 当然要先设置好定时器,再改占空比才能用啊,不设置定时器改当然不起作用。延时时间可以加长点

定时器设置了,我现在又疑问,我用示波器看也有高低电平。

主要是我配置寄存器后,还需不需要用io控制led灯亮。

还是PWM就可以直接把led调亮?如果可以直接调亮,为什么我烧写程序,led不亮。我也把PWM的使能打开了。

 



回复

使用道具 举报

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

关闭

站长推荐上一条 /4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-11-10 22:58 , Processed in 0.414093 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表