打印
[MCU]

PIC单片机:ECCP可以做16位PWM?

[复制链接]
2115|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
irun2|  楼主 | 2015-10-27 13:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我在PIC的一份应用文档里看到利用ECCP的比较模式可以做一个16bit的PWM。
大概的思想是把ECCP配置为匹配时输出清0,然后TIMER1溢出后产生中断,在中断子程序把CCP1管脚置1。
让人困惑的是既然配置了比较模式,CCP1管脚就已经不受软件控制了啊,在中断是怎么做到置1 CCP1的呢?

相关帖子

沙发
mahaokai| | 2015-10-27 14:24 | 只看该作者
看型号吧,你用的什么型号

使用特权

评论回复
板凳
ayb_ice| | 2015-10-28 08:16 | 只看该作者
那就用中断控制GPIO就可以了

匹配中断清0,溢出中断置1

使用特权

评论回复
地板
irun2|  楼主 | 2015-10-28 09:04 | 只看该作者
mahaokai 发表于 2015-10-27 14:24
看型号吧,你用的什么型号

你好!我用的是684

使用特权

评论回复
5
irun2|  楼主 | 2015-10-28 09:08 | 只看该作者
ayb_ice 发表于 2015-10-28 08:16
那就用中断控制GPIO就可以了

匹配中断清0,溢出中断置1

看文档描述,清0 CCP1不是中断完成的,请看附图。


10b_pwm.png (54.82 KB )

10b_pwm.png

使用特权

评论回复
6
ayb_ice| | 2015-10-28 09:26 | 只看该作者
irun2 发表于 2015-10-28 09:08
看文档描述,清0 CCP1不是中断完成的,请看附图。

简单看了一下手册

说的没有错啊

就按说的做就是了

未命名2.jpg (155.89 KB )

未命名2.jpg

未命名.jpg (112.39 KB )

未命名.jpg

使用特权

评论回复
7
irun2|  楼主 | 2015-10-28 14:35 | 只看该作者
ayb_ice 发表于 2015-10-28 09:26
简单看了一下手册

说的没有错啊

首先谢谢你的回复。
我不明白的是:
假设CCP1M<3:0>=1001,比较模式,匹配时清0输出(CCP1管脚,也就是PC5),然后等待TMR1IF中断,中断想把PC5置1,但由于设置了比较模式,PC5的输出就不再受软件控制了吧?

使用特权

评论回复
8
irun2|  楼主 | 2015-10-28 14:39 | 只看该作者
ayb_ice 发表于 2015-10-28 09:26
简单看了一下手册

说的没有错啊

难道是配置CCP1M=1010,匹配产生软件中断,CCP1管脚(PC5)不受ECCP模块控制,这样就可以用软件对PC5清0、置1了?

使用特权

评论回复
9
ayb_ice| | 2015-10-28 14:50 | 只看该作者
irun2 发表于 2015-10-28 14:39
难道是配置CCP1M=1010,匹配产生软件中断,CCP1管脚(PC5)不受ECCP模块控制,这样就可以用软件对PC5清0 ...

一看都是不喜欢看手册的主

都是硬件在控制

使用特权

评论回复
10
ayb_ice| | 2015-10-28 14:52 | 只看该作者
irun2 发表于 2015-10-28 14:35
首先谢谢你的回复。
我不明白的是:
假设CCP1M=1001,比较模式,匹配时清0输出(CCP1管脚,也就是PC5), ...

看手册吧

明明说了是事件触发了

使用特权

评论回复
11
tianfu2118| | 2015-10-28 20:50 | 只看该作者
中断中重新给定时器或比较器赋值时关一下比较器再重新打开即可实现电平变化,有疑问@me

使用特权

评论回复
12
irun2|  楼主 | 2015-10-29 09:15 | 只看该作者
ayb_ice 发表于 2015-10-28 14:52
看手册吧

明明说了是事件触发了

再认真看了一遍,确实看漏相关字眼,一直以为处于比较模式下,CCP1管脚就完全由ECCP模块控制。
谢谢啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

18

帖子

0

粉丝