打印

关于SH79F168 P0.0(OPOUT)用作ADC出现问题

[复制链接]
2011|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tjx727|  楼主 | 2011-1-10 15:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于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。调试了很久,发现只有这个通道不能得到数据,不知道原因,datasheet里面讲只要SCH[0:2]= 111,那么ADC通道自动切换到OPOUT端口,但是好像仅仅这样不行,是不是还需要在其他设置下?麻烦熟悉这个芯片的人能够告知下,谢谢!
沙发
tjx727|  楼主 | 2011-1-10 18:42 | 只看该作者
另补充问题:
是否P0.0(OPOUT)这个端口不能直接检测芯片外部的电压,而只能直接检测芯片内部放大器输出端电压(但是我看datasheet里面好像放大器跟这个P0.0是直接连接的,应该可以直接检测)?斑竹能够帮我回答下这个问题吗?

使用特权

评论回复
板凳
bananarer| | 2011-1-11 09:37 | 只看该作者
P0.0(OPOUT)这个端口在放大器开启时做OPOUT使用,在放大器关闭时做I/O使用,你现在程序中放大器没有打开,因此不能用作仿真信号检测,应该把CURSAMP.3位设为1.
另外,放大器打开后,也不能从外面直接灌电压到P0.0,因为这时放大器已经打开,OPOUT是放大器的输出. 你应该从放大器的输入端灌信号.

使用特权

评论回复
地板
tjx727|  楼主 | 2011-1-11 14:13 | 只看该作者
明白了,看样子得飞线了!

使用特权

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

本版积分规则

个人签名:我们在追忆中展望­ 在展望中  调整着向前的步伐 个人新浪微博:http://t.sina.com.cn/tjx727­

30

主题

322

帖子

0

粉丝