打印
[其它应用]

发现只有这个通道不能得到数据

[复制链接]
262|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bqyj|  楼主 | 2019-8-18 13:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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。调试了很久,发现只有这个通道不能得到数据

使用特权

评论回复
沙发
wenfen| | 2019-8-18 13:21 | 只看该作者
嗯,IIC通讯下,CY7C67300是独立用的,所以你只能用SPI于CY7C67300通讯。

使用特权

评论回复
板凳
zhuhuis| | 2019-8-18 14:02 | 只看该作者
datasheet里面讲只要SCH[0:2]= 111,那么ADC通道自动切换到OPOUT端口

使用特权

评论回复
地板
tian111| | 2019-8-18 14:05 | 只看该作者

OPOUT端口有没有电压?

使用特权

评论回复
5
bqyj|  楼主 | 2019-8-18 14:10 | 只看该作者
好像仅仅这样不行,是不是还需要在其他设置下?

使用特权

评论回复
6
tian111| | 2019-8-18 14:12 | 只看该作者
貌视P0.0(OPOUT)这个端口不能直接检测芯片外部的电压,而只能直接检测芯片内部放大器输出端电压

使用特权

评论回复
7
chenho| | 2019-8-18 14:15 | 只看该作者
datasheet里面好像放大器跟这个P0.0是直接连接的,应该可以直接检测

使用特权

评论回复
8
lium| | 2019-8-18 14:20 | 只看该作者


P0.0(OPOUT)这个端口在放大器开启时做OPOUT使用,在放大器关闭时做I/O使用,你现在程序中放大器没有打开,因此不能用作仿真信号检测,应该把CURSAMP.3位设为1

使用特权

评论回复
9
chenho| | 2019-8-18 14:25 | 只看该作者
放大器打开后,也不能从外面直接灌电压到P0.0

使用特权

评论回复
10
huanghuac| | 2019-8-18 14:28 | 只看该作者
为什么

使用特权

评论回复
11
wenfen| | 2019-8-18 14:31 | 只看该作者
因为这时放大器已经打开,OPOUT是放大器的输出. 你应该从放大器的输入端灌信号

使用特权

评论回复
12
bqyj|  楼主 | 2019-8-18 15:23 | 只看该作者
明白了,看样子得飞线了!

使用特权

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

本版积分规则

390

主题

4526

帖子

2

粉丝