打印

PIC16F1823的电容感应模块用不了

[复制链接]
2499|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
马坝腾|  楼主 | 2014-5-14 19:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用了下电容感应模块,感觉电容传感振荡器不起振
硬件电路是弹簧串个330欧的电阻连到电容检测引脚上
程序采用Timer0为时基,Timer1作为电容传感振荡器的计数,用在线调试看,发现了几个问题
1、开了Timer0的中断却进不到中断函数,于是改成在主函数里扫描;
2、调试的时钟和单片机的时钟不同步?定时器0经过分频,每秒大概500个计数,但是调试步进一条指令,定时器0计数就加了几十,没几条指令就溢出中断了
3、使用内部500KHz的振荡器作为系统时钟的时候,在初始化完定时器1时,定时器1上大概得到一个20000多的计数,第一次检测完清零定时器1的计数后,定时器计数基本是0了,偶尔跑出个几十的计数,采用内部31kHz振荡器时,定时器1上的计数每次都是73
4、在线调试能调出点灯的效果,直接通电又没有。。。

总之调试看来,最大的问题就是电容传感振荡器,或者不起振,或者timer1不计数。有没有大神用过这个模块的?求指点!
程序如下
#include<pic.h>
__CONFIG(0x0F84);        //禁止故障监视时钟、禁止内外切换、CLKOUT引脚为I/O功能、使能BOR、禁止代码保护、MCLRE为数字输入、使能PWRT、禁止看门狗、内部振荡器
__CONFIG(0x3CFF);        //使能低电压编程、使能在线调试、禁止4XPLL、写保护关闭、

#define uchar unsigned char
#define uint  unsigned int

#define TRIP 20                //阀值

uint raw=0;                                //当前采集频率               

void init(void)
{
        OSCCON=0x3A;                        //禁止4XPLL、500KHz、内部振荡器
        OSCTUNE=0x00;                        //频率不调节
        INTCON=0xE0;                        //总中断、外设中断、TIMER0中断
        PIE1=0x30;                                //串口通信收发中断
        PIE2=0x00;                               
        CPSCON0=0xCC;                        //使能CPS、高功耗模式
        CPSCON1=4;                                //通道4-RC0
        T1CON=0xC5;                                //时钟源为电容传感振荡器、1:1分频、禁止专用振荡器、不同步系统时钟、使能TIMER1
        T1GCON=0x00;                        //不使能门控
        OPTION_REG=0x07;                //内部指令周期时钟、预分频1:256
        TMR0=245;                                //20ms
        APFCON=0x8C;                        //RA1有RX功能、RA0有TX功能               
        TRISA=0x02;                               
        LATA=0x00;
        ANSELA=0x00;       
        TRISC=0x07;                               //RC0-2为输入
        ANSELC=0x07;                       //RC0-2为模拟输入口
        LATC=0x30;      
}

void main(void)
{
         init();
         while(1)
         {
                if(TMR0IF==1)
                {
                        TMR1ON=0;
                        raw=TMR1;
                       (……
                          读数的处理
                         ……)                        TMR1L=0;
                        TMR1H=0;
                        TMR1ON=1;
                        TMR0=245;
                        TMR0IF=0;
                }
         }
}


沙发
zlzhang1980| | 2014-9-6 22:43 | 只看该作者
第一。未设置参考电压,第二。未使能TI的门控。第三。读取频率值不对。

使用特权

评论回复
板凳
禹雨小鱼| | 2015-3-12 22:36 | 只看该作者
zlzhang1980 发表于 2014-9-6 22:43
第一。未设置参考电压,第二。未使能TI的门控。第三。读取频率值不对。

怎么设置门控啊》?还有怎么读取频率值,频率值不是TIMER1的计数值么?

使用特权

评论回复
地板
禹雨小鱼| | 2015-3-12 22:37 | 只看该作者
楼主解决问题了没有,现在我也碰到这个问题了,搞不懂

使用特权

评论回复
5
禹雨小鱼| | 2015-3-12 22:37 | 只看该作者
楼主解决问题了没有,现在我也碰到这个问题了,求分享

使用特权

评论回复
6
martin| | 2015-3-13 12:47 | 只看该作者
和另一个帖子里说的一样,这种张弛振荡方式的触摸感应在原理上就有缺陷,MCHP早就不建议使用了。1823在触摸按键的实际量产应用很多,都是采用CVD方式。官网上有提供CVD方式触摸按键、滑条等应用的Framework,你只需要在Framework里稍作些头文件里的参数配置就可以完成触摸按键部分了。如果你的应用产量足够大,还会有专门的工程师来帮你审核PCB、机械结构及调试代码。建议你就近联系MCHP的FAE或者代理商FAE,不要在弯路上继续走下去。

使用特权

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

本版积分规则

3

主题

7

帖子

0

粉丝