打印
[PIC®/AVR®/dsPIC®产品]

由PIC12F508升级到675,上电读取GP3电平异常

[复制链接]
4316|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gbook|  楼主 | 2013-8-12 18:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由508升级到675,上电读取GP3电平异常,GP3下拉2K电阻,GP0接LED ,其它口悬空,代码精简至如下:
------------PIC12F508---------------

#include<pic.h>
  __CONFIG(0x01);
#define gout GP0
#define ikey  GP3

void main()
{
    TRIS=0x08;                   //设置GP3为输入
    OPTION=0xC0;  //禁止上拉

if(!ikey){gout=0; ……读GP3电平正常



------------PIC12F675---------------

#include<pic.h>
  __CONFIG(0x3001);
#define gOut GPIO0
#define iKey  GPIO3

void main()
{
//OSCCAL = _READ_OSCCAL_DATA();
CMCON = 0x07;   // 关闭比较器
TRISIO = 0x3E; // 先设置所有引脚为输入
ANSEL=0x00;
IOCB = 0;  // 禁止引脚电平变化引起中断
WPU = 0;  // 禁止弱上拉,这里排除过

if(!iKey){gOut=0;        ……读GP3电平失常



现在的现象是上电大概40%机率是读到低电平,40%“死机”或者GPIO0 的LED灯频闪。20%读到高电平,给人的直觉很大干扰的样子

分别试过内置振荡和4M晶振、读GP3前延时、上电延时等都没有办法解决了,看了两天PIC12F675的数据手册也看不出所然,小弟刚接触单片机,文字表达能力也不强,请大家指导下,不胜感激:D
沙发
gbook|  楼主 | 2013-8-13 12:41 | 只看该作者
又反复测试了多遍无解,自己顶下

使用特权

评论回复
板凳
ssccquan| | 2013-8-13 14:15 | 只看该作者
表示看不明白,

使用特权

评论回复
地板
gbook|  楼主 | 2013-8-13 16:49 | 只看该作者
ssccquan 发表于 2013-8-13 14:15
表示看不明白,

哪一点看不明白呢?

使用特权

评论回复
5
l4157| | 2013-8-13 22:10 | 只看该作者
本帖最后由 l4157 于 2013-8-13 22:53 编辑

在  WPU = 0;  // 禁止弱上拉,这里排除过
后面延时,一般要1-2个 指令周期就OK(675的GP3有上拉)

使用特权

评论回复
6
gbook|  楼主 | 2013-8-13 23:37 | 只看该作者
l4157 发表于 2013-8-13 22:10
在  WPU = 0;  // 禁止弱上拉,这里排除过
后面延时,一般要1-2个 指令周期就OK(675的GP3有上拉) ...

谢谢您的回复,这个我之前有考虑过,在检测语句前面加了一个延时,大概有0.1秒,情况一样,请再帮我研究一下,不胜感激

现在有怀疑是跑飞或者不起振了,因为刚才试了不要检测的语句直接跑,也是一样,是不是GP3不能下拉,加下拉就这样了,电路已作最简化了

使用特权

评论回复
7
l4157| | 2013-8-14 00:08 | 只看该作者
方便贴原理图么?你是用外部晶振?

使用特权

评论回复
8
l4157| | 2013-8-14 00:11 | 只看该作者
本帖最后由 l4157 于 2013-8-14 00:13 编辑

我有一个案子就是用GP3做按键,可以试一下:先检测下拉时的电压值,然后修改下拉阻值再量电压,一般卡拉电流为250uA


__CONFIG( CP_ON & CPD_ON &  BOREN_ON & MCLRE_OFF & PWRTE_ON & WDTE_ON & FOSC_INTRCIO);//
初始程序片段:

  NOP();
  NOP();
  TRISIO = 0x3C;  //Set RFDATA & KEY to input
  GPIO=0;
  WPU    = 0;     //Enable the RA4
  CMCON = 0x7;    //Switch off all analog Comparator
  ANSEL = 0x14;    //Set the ADC clock to Fosc/8 and the AN2 is  to analog input
  NOP();
  NOP();

使用特权

评论回复
9
gbook|  楼主 | 2013-8-14 00:12 | 只看该作者
l4157 发表于 2013-8-14 00:08
方便贴原理图么?你是用外部晶振?

是用外部晶振的,我现在出画一个原理图,马上发,请稍等

使用特权

评论回复
10
l4157| | 2013-8-14 00:16 | 只看该作者
我使用这个芯片在内部复位有时是不能运行,约0.1%的概率,你加上BOR再试一下

使用特权

评论回复
11
gbook|  楼主 | 2013-8-14 00:21 | 只看该作者
原理图有了,7脚接LED

未命名.jpg (147.95 KB )

未命名.jpg

使用特权

评论回复
12
gbook|  楼主 | 2013-8-14 00:26 | 只看该作者
复位这个问题我也感觉到,正常时连接好几次正常的,当然我测试的时间有点短,偶尔有时还会保留上次的状态(也可能是检测结果反了),电路图上的电路大了,我现在测试的是104的

使用特权

评论回复
13
l4157| | 2013-8-14 00:33 | 只看该作者
本帖最后由 l4157 于 2013-8-14 00:35 编辑

你加上BOR,可能复位会好一点,然后有可能并个电容(0.1u)在D5上,我现在已经不用这颗料了,改成用12F1501,目前没有发现复位问题

使用特权

评论回复
14
gbook|  楼主 | 2013-8-14 00:44 | 只看该作者
BOR是掉电休眠吗?手册上查不到,那个上电延时72MS的用上了,欠压检测也测过,按你的使用经验好像这颗东西有问题了,我原来用508好好的,一点问题都没有,现在要用A/D所以换成675的,因为比较急,当时试了几次可以就让它一直工作了,没有问题了要匆匆下单了……现在一直搞不定

使用特权

评论回复
15
l4157| | 2013-8-14 08:49 | 只看该作者
看你的配置字, bit 6 = 0,
bit 6 BODEN: Brown-out Detect Enable bit(4)
1 = BOD enabled
0 = BOD disabled
所以,你的BOD没有使能。为了方便阅读,配置字可能参考一下这种格式:__CONFIG( CP_ON & CPD_ON &  BOREN_ON & MCLRE_OFF & PWRTE_ON & WDTE_ON & FOSC_INTRCIO);//

使用特权

评论回复
16
opal11| | 2013-8-19 23:46 | 只看该作者

使用特权

评论回复
17
jimmy817| | 2013-9-27 16:58 | 只看该作者
呵呵,我想说我之前也在做675测试,功能都OK的。,我看看下,你要么在后面直接加个死循环,这样防止程序往后跑,试试。还有就是PIC 很多附带的功能如上拉,电平唤醒,在上电时都是被屏蔽的,不用在写一遍。ANSEL CMCON,作为数字端口要设置的。PIC 官网资料上有写对端口的初始化,汇编代码。

使用特权

评论回复
18
伏尔加的鱼| | 2013-9-27 17:31 | 只看该作者
检查配置位的设置,试试是不是电阻设置不当

使用特权

评论回复
19
xgh110| | 2013-9-28 16:33 | 只看该作者
楼主搞定了吗?我也很想知道是怎么回事

使用特权

评论回复
20
tozxq| | 2013-9-29 08:38 | 只看该作者
如果怀疑软件问题可看下*.lst文件,里面有C语言编译后的汇编语言,分析下汇编也许更容易找出软件问题

使用特权

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

本版积分规则

7

主题

25

帖子

0

粉丝