打印

请教STC的PCA捕获问题

[复制链接]
15081|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxc806705|  楼主 | 2011-6-8 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在STC的datasheet中,说PCA用作捕获模式时,检测的外部脉冲沿变化会将计数器CH,CL的值装入CCAPnL,CCAPnH,然后置位相应的中断标志CCFn:
对于这里我有一点不解,比如说要用到两路PCA,CCAPM0配置为16位软件定时器,来产生一个5-10HZ的脉冲(由于频率很低,PWM实现不了)
另一路CCAPM1作为捕获模式,上升沿有效,来扩展外部中断。由于CCAPM0作为定时器CH,CL一直在增加,而CCAPM1在检测到外部上升沿之后会将
CH,CL采入CCAP0L,CCAP0H,这个会不会对软件定时器造成影响?如果没有影响的话那捕获模块为什么要有这么一个装入计数值的动作?这个动作的必要性在哪里?
我没搞清楚这个。

另外,datashet中采用了(软件定时器)在中断中每次CCAP0L,CCAP0H增加固定值的方法,为什么不是在中断中清0CH,CL呢?
如果设置CCAP0L,CCAP0H为固定值,(初始化中),清0CH,CL可能实现功能吗?我在网上没有找到这些东西的解释。
诚心求教,盼用过这个东西的童鞋指教一下。

相关帖子

沙发
lxc806705|  楼主 | 2011-6-8 11:38 | 只看该作者
么人用过么?:o

使用特权

评论回复
板凳
coody| | 2011-6-8 11:55 | 只看该作者
CH,CL共用的,你这里不能清0,捕获操作不会影响定时的

使用特权

评论回复
地板
autopccopy| | 2011-6-8 12:09 | 只看该作者
记号!LS是高手。LZ也可以搭个最小系统自己验证一下啊。。。 :)

使用特权

评论回复
5
lxc806705|  楼主 | 2011-6-8 12:33 | 只看该作者
不能清0看来只有让CCAPnLCCAPnH加一个固定值了,因为我现在只用了1个软件定时器,定时器0和1的TH,TL可以清0,为什么这里不可以呢?coody可以帮我解惑下麼?
多谢3,4楼回帖嘿嘿:D

使用特权

评论回复
6
coody| | 2011-6-8 19:31 | 只看该作者
如果只用一路PCA,则CH、CL可以清0,但是多路使用,并且功能不一样时,就不能清0。
CH、CL是多路PCA的公共计数器,比如一路PCA0是PWM,一路PCA1是软件定时,一路PCA2是捕捉测脉冲宽度,一路PCA3是做一个13bit的PWM(高速输出不抖动),那么,任何对CH、CL的操作(清0、置数、启动停止)都会影响个别或全部的PCA的准确性。

使用特权

评论回复
7
电子write_cai| | 2011-6-8 19:47 | 只看该作者
在STC的datasheet中,说PCA用作捕获模式时,检测的外部脉冲沿变化会将计数器CH,CL的值装入CCAPnL,CCAPnH,然后置位相应的中断标志CCFn:
对于这里我有一点不解,比如说要用到两路PCA,CCAPM0配置为16位软件定时器,来 ...
lxc806705 发表于 2011-6-8 10:42
这个和Pic16F系列的单片机差不多,哈哈

使用特权

评论回复
8
lxc806705|  楼主 | 2011-6-9 09:43 | 只看该作者
多谢coody,那么我还是在终端中加固定值来实现吧

使用特权

评论回复
9
gurong60| | 2011-6-9 16:05 | 只看该作者
PCA定时好像没有自动重装载,累计加法误差比较大,而且还是16位的,我以前就定时10us,结果不得不放弃

使用特权

评论回复
10
coody| | 2011-6-9 20:22 | 只看该作者
累计加法怎么会有误差? 误差来自晶振而已,如果你敢用一个0.01ppm的有源时钟。。。。

使用特权

评论回复
11
lxc806705|  楼主 | 2011-6-10 08:39 | 只看该作者
还好,我其实是想用软件定时器来产生10hz的波形,所以这个误差大点也无所谓,因为本身精度要求就不高,另外定时器0,1已经被占用,所以很无奈要用pca定时来产生脉冲

使用特权

评论回复
12
gurong60| | 2011-6-10 09:42 | 只看该作者
误差来之,中断里的累加运算所需要的时间
10# coody

使用特权

评论回复
13
lxc806705|  楼主 | 2011-6-13 10:14 | 只看该作者
误差来之,中断里的累加运算所需要的时间
10# coody
gurong60 发表于 2011-6-10 09:42

这的确是个问题,不过还好我的要求比较低的说,我突然思维有点混乱了
只要中断程序没完,那么计数器便不会计数,那么整个中断程序不是都导致误差?
那么定时器0和1怎么处理这个问题的?有点迷糊了,可能脑袋不太清醒

使用特权

评论回复
14
coody| | 2011-6-13 10:45 | 只看该作者
只要在下一个匹配中断前重装比较值,不会出现误差的,这是PCA的特点。
比如用22.1184MHZ时钟,PCA做32768HZ的中断率,只要晶振准确,程序不会引起误差。

使用特权

评论回复
15
cecwxf| | 2011-7-16 16:37 | 只看该作者

使用特权

评论回复
16
lycf| | 2011-7-25 17:48 | 只看该作者
楼主,你好!最近我也在学习PCA模块的使用。我单片机比较菜,不过我有个看法,就是CCAPM1在检测到外部上升沿之后,将CH,CL采入的是CCAP1L,CCAP1H之中。而不是CCAP0L和CCAP0H,这样的话就不会对软件定时器产生影响了。我是个初学者,希望和大家多交流交流,不知道我这样理解有没有错,望高手多多指教啊!谢谢了哈。。。

使用特权

评论回复
17
lifei092| | 2011-7-25 21:02 | 只看该作者
PCA这个东西我也搞了一段时间,感觉寄存器有点多。。。。。。

使用特权

评论回复
18
DownCloud| | 2011-7-26 15:34 | 只看该作者
捕获的脉冲数只能在中断中另设一个计数器,当然单独用一个PCA另一个闲置的话就不需要。软件定时要精确就要根据你晶振和中断补偿来确定你赋的初值。

使用特权

评论回复
19
dj狂人| | 2014-5-21 17:31 | 只看该作者
coody 发表于 2011-6-8 19:31
如果只用一路PCA,则CH、CL可以清0,但是多路使用,并且功能不一样时,就不能清0。
CH、CL是多路PCA的公共 ...

coody你用PCA做过脉宽测量么,我有些问题想请教下。

使用特权

评论回复
20
dj狂人| | 2014-5-21 17:34 | 只看该作者
coody 发表于 2011-6-8 19:31
如果只用一路PCA,则CH、CL可以清0,但是多路使用,并且功能不一样时,就不能清0。
CH、CL是多路PCA的公共 ...

我用PCA做脉宽测量时,计数源选的是系统时钟,然后我的晶振是24M的,可我用PCA捕获模式测脉宽的时候只能测到25K到30KHz左右,这正常么。我的单片机用的STC12LE5A60So

使用特权

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

本版积分规则

0

主题

154

帖子

1

粉丝