打印

数据一直采样到的是0

[复制链接]
1110|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冰清玉洁|  楼主 | 2012-3-10 08:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SH79F168 P0.0(OPOUT)用作ADC出现问题
初始化程序如下:
void InitADConversion(void)
{
    P0CR   &= Bin(00000010);    // 将管脚设置为输入
    P0PCR  &= Bin(00000010);      
    ADCON  = 0x80;               // ADON=1;ADCIF=0;EC=0;REFC=0;选择通道0
    ADCH   = Bin(00111111);     // AN0~5作为检测电压通道
    ADT  = 0x80;               
}
采样程序如下:
/*A/D转换通道*/
#define     AN0             ADCON | 0x00
#define     AN1             ADCON | 0x02
#define     AN2             ADCON | 0x04
#define     AN3             ADCON | 0x06
#define     AN4             ADCON | 0x08
#define     AN5             ADCON | 0x0A
#define     OPOUT         ADCON | 0x0E
/**********************************************/
#define     NET_K1          0                       //K1
#define     NET_K2          1                       //K2
#define     AnSimBattVolL   2                       //第一节模拟电池电压
#define     AnSimBattVolH   3                       //第二节模拟电池电压
#define     AnTargetVolL    4                       //第一节接口处电压
#define     AnTargetVolH    5                       //第二节接口处电压
#define     AnSimBattCur    6                       //模拟电池电流
uint16 GetADResult(uint8 ADChannel)
{
    uint16  result = 0;
    uint8   i = 0;
    ADCON &= 0xF1;
    switch(ADChannel)
    {
        case    NET_K1:
            ADCON = OPOUT;
            break;
        case    NET_K2:
            ADCON = AN5;
            break;
        default:
            break;
    }
   
    delay100uS();   
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
        
    for(i=0;i<32;i++)
    {
        ADCON |= 0x01;        //启动转换并等待转换结束
        while(ADCON & 0x01);
        result += ADDH*4 + ADDL;
    }
    result = result >>5;
   
    return    result;
}
现在的问题是通过上面这个函数,通道AN5能够得到正确数据,但是OPOUT通道的数据一直采样到的是0。调试了很久,发现只有这个通道不能得到数据
沙发
happy_10| | 2012-3-10 08:57 | 只看该作者
datasheet里面讲只要SCH[0:2]= 111,那么ADC通道自动切换到OPOUT端口

使用特权

评论回复
板凳
wenfen| | 2012-3-10 09:00 | 只看该作者
OPOUT端口有没有电压?

使用特权

评论回复
地板
冰清玉洁|  楼主 | 2012-3-10 09:01 | 只看该作者
datasheet里面讲只要SCH[0:2]= 111,那么ADC通道自动切换到OPOUT端口
happy_10 发表于 2012-3-10 08:57
好像仅仅这样不行,是不是还需要在其他设置下?

使用特权

评论回复
5
zhuhuis| | 2012-3-10 09:04 | 只看该作者
貌视P0.0(OPOUT)这个端口不能直接检测芯片外部的电压,而只能直接检测芯片内部放大器输出端电压

使用特权

评论回复
6
冰清玉洁|  楼主 | 2012-3-10 09:06 | 只看该作者
datasheet里面好像放大器跟这个P0.0是直接连接的,应该可以直接检测

使用特权

评论回复
7
chenho| | 2012-3-10 09:13 | 只看该作者
P0.0(OPOUT)这个端口在放大器开启时做OPOUT使用,在放大器关闭时做I/O使用,你现在程序中放大器没有打开,因此不能用作仿真信号检测,应该把CURSAMP.3位设为1

使用特权

评论回复
8
tian111| | 2012-3-10 09:17 | 只看该作者
放大器打开后,也不能从外面直接灌电压到P0.0

使用特权

评论回复
9
冰清玉洁|  楼主 | 2012-3-10 09:22 | 只看该作者
为什么

使用特权

评论回复
10
huwr| | 2012-3-10 09:27 | 只看该作者
因为这时放大器已经打开,OPOUT是放大器的输出. 你应该从放大器的输入端灌信号

使用特权

评论回复
11
冰清玉洁|  楼主 | 2012-3-10 09:29 | 只看该作者
明白了,看样子得飞线了!

使用特权

评论回复
12
冰清玉洁|  楼主 | 2012-3-10 09:29 | 只看该作者
先结贴了。。。

使用特权

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

本版积分规则

307

主题

3250

帖子

5

粉丝