搜索
bottom↓
回复: 17

怎么实现50HZ的波形?

[复制链接]

出0入0汤圆

发表于 2010-6-9 11:50:38 | 显示全部楼层 |阅读模式
我打算用CCP1与TMR2实现50HZ的方波,但是算出来PR2的初值超出了8位,还有其它方法吗?
要求,我这个还要实时检测B口的按键状态,一旦B口某位为低,则会执行相应的程序,但此时50HZ的方波不能停止,也就是一上电就有50HZ的方波,任何操作不影响。

大家能指点一下么?

出0入0汤圆

发表于 2010-6-9 13:26:17 | 显示全部楼层
中断计数输出,一点点小技巧而已。

出0入0汤圆

 楼主| 发表于 2010-6-9 14:12:00 | 显示全部楼层
能说得稍微详细一点么?我才刚学这个,确实有很多地方不是很懂。

出0入0汤圆

 楼主| 发表于 2010-6-9 14:14:07 | 显示全部楼层
因为一旦中断,肯定会优先执行某一项任务,那么相应的执行程序就会暂停,我这个是不能暂停的。时时刻刻波形输出与按键检测任何一个都不能停的。

出0入0汤圆

发表于 2010-6-9 17:20:10 | 显示全部楼层
pwm设定好后,就有连续波形输出啊!除非程序把pwm关掉,所以期间操作不会影响波形输出

出0入0汤圆

 楼主| 发表于 2010-6-9 17:25:40 | 显示全部楼层
实现50HZ的方波,但是算出来PR2的初值超出了8位,还有没有其它的办法呢?

出0入0汤圆

发表于 2010-6-10 06:49:46 | 显示全部楼层
"我这个是不能暂停的。时时刻刻波形输出与按键检测任何一个都不能停的。"

what does that mean? if you want the mcu to be dedicated to one task, well, by definition, it cannot do anything else. and you have figure out the answer to your own question: not possible!

if you want to the mcu to multi-task without impacting the wave output, your problem is very easy to solve.

so the solution to your question depends on you understanding what you want.

出0入0汤圆

发表于 2010-6-10 08:47:34 | 显示全部楼层
回复【6楼】millwood0
-----------------------------------------------------------------------

麻烦你用中文可以吗?

出0入0汤圆

 楼主| 发表于 2010-6-10 09:29:22 | 显示全部楼层
6楼,我只是想大家帮手提供一下采用什么方法而已,没必要用这些英文吧?

出0入0汤圆

发表于 2010-6-10 21:39:19 | 显示全部楼层
回复【5楼】yealien
实现50hz的方波,但是算出来pr2的初值超出了8位,还有没有其它的办法呢?
-----------------------------------------------------------------------

怎么会超出8位呢?难道你用的型号没有分频?
中断输出的话,不会影响你其他操作的~~~
如果你的程序连处理中断的那段时间都不允许的话,那你用循环执行也还是要那么多的指令,还是要费时间扫描那段功能程序

出0入0汤圆

发表于 2010-6-10 23:44:36 | 显示全部楼层
简单.
采用市电过零,输出就50Hz.

出0入0汤圆

发表于 2010-6-10 23:56:34 | 显示全部楼层
NE555

出0入0汤圆

发表于 2010-6-11 07:57:38 | 显示全部楼层
here is the code, running on a 12F675:

=========code===============
void
main(void)
{
        mcu_init();                                                                //enable the mcu
        while (1){
                //TODO Auto-generated main function
        }
}
============================

here is its output. looks to be exactly 50hz to me.



(原文件名:12F675 50Hz.PNG)

出0入0汤圆

发表于 2010-6-11 08:59:58 | 显示全部楼层
不是所有来论坛的人都能打汉字的。比如有的公司电脑就不支持汉字。
不要因为人家用个英文,帮你还帮出错了。

出0入0汤圆

 楼主| 发表于 2010-6-11 11:35:54 | 显示全部楼层
回复【9楼】stublue
-----------------------------------------------------------------------

怎么会超出8位呢?难道你用的型号没有分频?
中断输出的话,不会影响你其他操作的~~~
如果你的程序连处理中断的那段时间都不允许的话,那你用循环执行也还是要那么多的指令,还是要费时间扫描那段功能程序
----------------------------------------------------
不会吧?你是怎么算的?PWM周期=(PR2+1)*4Tosc*(TMR2的分频值),照这个公式,就算用16分频,算出来不止8位啊?


回复13楼
我确实没有怪6楼的意思,不过在此我向六楼道歉!并多谢你们的帮助。

出0入0汤圆

 楼主| 发表于 2010-6-11 11:47:09 | 显示全部楼层
回复【9楼】stublue
-----------------------------------------------------------------------

中断输出的话,不会影响你其他操作的~~~
如果你的程序连处理中断的那段时间都不允许的话,那你用循环执行也还是要那么多的指令,还是要费时间扫描那段功能程序
-------------------------------------------------------------------------
比如我采用TMR1中断,并产生波形。在中断期间,单片机肯定会暂停扫描键盘,输出波形,当单片机的TMR1没有中断时,此时刚好有某键按下,肯定会转去执行相应的按键程序(比如驱动马达转动),在执行程序的过程中,此时产生了中断,肯定就会转去执行中断,而此时的相应按键程序就会被停止了(而马达驱动程序就会被停止)。

出0入0汤圆

 楼主| 发表于 2010-7-2 11:01:55 | 显示全部楼层
奇怪,我在PR2中赋初值F9H,得到的波形也是50HZ,算起来不对啊。

START
  BSF STATUS,RP0 ;BANK1
  MOVLW B'01111011'
  MOVWF TRISC ;设CCP1,RC7为输出
  MOVLW 0F9H
  MOVWF PR2 ;设定PWM周期为F9H


  BCF STATUS,RP0 ;BANK0

  MOVLW 0CH ;设CCP1为PWM输出
  MOVWF CCP1CON ;脉宽低2位固定为00
  MOVLW 7FH
  MOVWF CCPR1L ;脉宽
  CLRF T2CON ;设TMR2后分频比1:1,预分频比1:1,暂不开启
  BSF T2CON,1 ;重设预分频比为1:16
  BSF T2CON,TMR2ON ;开启TMR2
LOOP
  BSF PORTC,7
  END

不过我是用的RC振荡,在10脚测得的频率为211.5KHZ(系统4分频后的输出),为什么会这样呢?是我错误造成的?还是误打误撞搞对了?

出0入0汤圆

 楼主| 发表于 2010-7-2 13:26:40 | 显示全部楼层
仔细算了一下,好象是正确的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 01:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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