数据一直采样到的是0

[复制链接]
1559|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
好像仅仅这样不行,是不是还需要在其他设置下?
zhuhuis 发表于 2012-3-10 09:04 | 显示全部楼层
貌视P0.0(OPOUT)这个端口不能直接检测芯片外部的电压,而只能直接检测芯片内部放大器输出端电压
 楼主| 冰清玉洁 发表于 2012-3-10 09:06 | 显示全部楼层
datasheet里面好像放大器跟这个P0.0是直接连接的,应该可以直接检测
chenho 发表于 2012-3-10 09:13 | 显示全部楼层
P0.0(OPOUT)这个端口在放大器开启时做OPOUT使用,在放大器关闭时做I/O使用,你现在程序中放大器没有打开,因此不能用作仿真信号检测,应该把CURSAMP.3位设为1
tian111 发表于 2012-3-10 09:17 | 显示全部楼层
放大器打开后,也不能从外面直接灌电压到P0.0
 楼主| 冰清玉洁 发表于 2012-3-10 09:22 | 显示全部楼层
为什么
huwr 发表于 2012-3-10 09:27 | 显示全部楼层
因为这时放大器已经打开,OPOUT是放大器的输出. 你应该从放大器的输入端灌信号
 楼主| 冰清玉洁 发表于 2012-3-10 09:29 | 显示全部楼层
明白了,看样子得飞线了!
 楼主| 冰清玉洁 发表于 2012-3-10 09:29 | 显示全部楼层
先结贴了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

307

主题

3250

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部