打印
[技术求助]

ads1230的Dout脚有时候正常,有时候就一直输出为高,这个有遇到吗?太奇怪了

[复制链接]
1436|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ads1230的Dout脚有时候正常,有时候就一直输出为高,这个有遇到吗?太奇怪了
unsigned long ReadAD(void)
{
    unsigned char i=0;
                unsigned long ADdatatemp=0;                      //设置AD转换的初始值为0
                while(ADC_RDY1);                                                                                                //RDY = 0??等待AD转换完成
    for(i = 0;i < 20;i ++)            //获取20位数据
    {
        ADdatatemp = ADdatatemp << 1;
                                ADC_SCLK1 = 1;                                                        //CLK = 1
                                if(ADC_DOUT1 == 1)       
                                        ADdatatemp =  ADdatatemp | 0x000001;
                                else
                                        ADdatatemp = ADdatatemp & 0xFFFFFE;
                                ADC_SCLK1 = 0;                                                        //CLK = 0               
                                }   
    for(i = 0;i < 4;i ++)             //为下一次转换准备
    {
        ADC_SCLK1 = 1;
        ADC_SCLK1 = 0;                                                        //CLK = 0       
                        }
    return(ADdatatemp);
        }

相关下载

相关帖子

沙发
angerbird| | 2016-12-28 22:09 | 只看该作者
这个程序中看着没有问题的,,检查下硬件的。

使用特权

评论回复
板凳
smilingangel| | 2016-12-28 22:23 | 只看该作者
这个没遇到过的,软件上就不稳定的?

使用特权

评论回复
地板
airwill| | 2016-12-29 07:39 | 只看该作者

从这个时序图上看, 时钟的上升沿后需要有个时间间隔, 不知道你用的是什么 MCU, 会不会达不到所要的延迟?
建议可以改在 SCLK 下降沿采集数据.

使用特权

评论回复
5
xyz549040622| | 2016-12-29 11:24 | 只看该作者
    while(ADC_RDY1);     
这里判断两次试试,另外DOUT引脚电平的高低,只取决于你实际测量电压的大小,以及你的测量频率,测量频率也不能太高。

使用特权

评论回复
6
13323807784| | 2017-1-3 00:00 | 只看该作者
本帖最后由 13323807784 于 2017-3-18 21:24 编辑

/****************************************************
* 函 数 名         : get_ADValue
* 函数功能                   : 获取AD码
* 输    入         : 无
* 输    出         : 无
****************************************************/
unsigned long get_ADValue( void )
{
        unsigned long value;
        unsigned char i;

                  Sclk=0;
                  while(!Dout);
                  while(Dout);                 //确认AD转换是否完成
                  value=0;                          
                  EA=0;
          for(i=0;i<20;i++)  //读20位数据
            {
              Sclk = 1;
                          value<<=1;
              Sclk = 0;
              if(Dout)
              value++;
            }
           EA=1;
           value=value^0x80000;
        return (value);
}
试试吧,刚刚调试过。

使用特权

评论回复
7
tianye907| | 2017-8-30 09:41 | 只看该作者
一直高应该是PDWN脚拉低了,检查下程序中对PDWN的操作。

使用特权

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

本版积分规则

2

主题

31

帖子

1

粉丝