打印

通道不能得到数据

[复制链接]
1694|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dingy|  楼主 | 2011-6-15 11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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。调试了很久,发现只有这个通道不能得到数据
沙发
zwll| | 2011-6-15 11:29 | 只看该作者
datasheet里面讲只要SCH[0:2]= 111,那么ADC通道自动切换到OPOUT端口

使用特权

评论回复
板凳
bananarer| | 2011-6-15 13:28 | 只看该作者
OPOUT端口有没有电压?

使用特权

评论回复
地板
dingy|  楼主 | 2011-6-15 13:36 | 只看该作者
datasheet里面讲只要SCH[0:2]= 111,那么ADC通道自动切换到OPOUT端口
zwll 发表于 2011-6-15 11:29
好像仅仅这样不行,是不是还需要在其他设置下?

使用特权

评论回复
5
pengf| | 2011-6-15 13:42 | 只看该作者
貌视P0.0(OPOUT)这个端口不能直接检测芯片外部的电压,而只能直接检测芯片内部放大器输出端电压

使用特权

评论回复
6
dingy|  楼主 | 2011-6-15 13:56 | 只看该作者
datasheet里面好像放大器跟这个P0.0是直接连接的,应该可以直接检测

使用特权

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

使用特权

评论回复
8
juventus9554| | 2011-6-15 14:17 | 只看该作者
放大器打开后,也不能从外面直接灌电压到P0.0

使用特权

评论回复
9
dingy|  楼主 | 2011-6-15 14:59 | 只看该作者
为什么

使用特权

评论回复
10
juventus9554| | 2011-6-15 15:04 | 只看该作者
因为这时放大器已经打开,OPOUT是放大器的输出. 你应该从放大器的输入端灌信号

使用特权

评论回复
11
dingy|  楼主 | 2011-6-15 15:20 | 只看该作者
明白了,看样子得飞线了!

使用特权

评论回复
12
bananarer| | 2011-6-15 15:59 | 只看该作者
恩,对的。llljh and juventus9554讲得很对

使用特权

评论回复
13
dingy|  楼主 | 2011-6-15 16:50 | 只看该作者
嗯,多谢各位

使用特权

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

本版积分规则

745

主题

10920

帖子

6

粉丝