打印
[51单片机]

关于ADS7825这款AD

[复制链接]
1502|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
黑小子mxx|  楼主 | 2014-10-14 09:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 黑小子mxx 于 2014-10-14 09:17 编辑

最近要做一个四通道的信号采集,用到了ADS7825这款AD芯片,可是根据datasheet里时序图写的程序始终读不到数据,已经在上面耗了两天了。。。有没有哪位大神用过这款芯片,可否分享一下程序。。。。我用的是串行数据输出!

相关帖子

沙发
chen_jhhb| | 2014-10-14 09:52 | 只看该作者
和硬件结合调试看看

使用特权

评论回复
板凳
黑小子mxx|  楼主 | 2014-10-14 16:21 | 只看该作者
chen_jhhb 发表于 2014-10-14 09:52
和硬件结合调试看看

是用的硬件+示波器,可是数据引脚一直没有数据输出,而且BUSY一直为低电平。。。兄台有用过ADS7825么?

使用特权

评论回复
地板
许世霞| | 2014-10-14 16:54 | 只看该作者
你确定是程序的问题?我没用过这个电路,就是说下我的看法。仔细看下电路是否正确,电源供电是否正常,模拟信号端有没有信号?如果上面都没问题,可以贴出来你的时序图和读程序段,看看你的程序是否满足要求。

使用特权

评论回复
5
chen_jhhb| | 2014-10-15 10:25 | 只看该作者
黑小子mxx 发表于 2014-10-14 16:21
是用的硬件+示波器,可是数据引脚一直没有数据输出,而且BUSY一直为低电平。。。兄台有用过ADS7825么? ...

BUSY一直为低电平,就不对。读不到数据就不奇怪了,不一定是程序的问题

使用特权

评论回复
6
黑小子mxx|  楼主 | 2014-10-16 14:39 | 只看该作者
许世霞 发表于 2014-10-14 16:54
你确定是程序的问题?我没用过这个电路,就是说下我的看法。仔细看下电路是否正确,电源供电是否正常,模拟 ...

uint read_ads7825(void)
{
        uchar i;
        uint TempBit  = 0;
        uint TempData = 0;
        DATACLK = 0;                                                                                                                        //´®ÐÐʱÖÓΪµÍµçƽ
        RC = 1;
        _nop_();
        DATACLK = 1;
        _nop_();
        for (i = 0; i < 16; i++)
        {
                DATACLK = 0;       
                _nop_();
                if (SDATA)
                {
                        TempBit = 1;                                                                                                  //¶ÁÈ¡Ò»¸ö¸ßµçƽ
                }
                else
                {
                        TempBit = 0;                                                                                                  //¶ÁÈ¡Ò»¸öµÍµçƽ
                }
                _nop_();
                DATACLK = 1;                                                                                                          //´®ÐÐʱÖÓΪµÍµçƽ
                TempData = (TempData << 1) | TempBit;
        }
        _nop_();
        DATACLK = 0;
        _nop_();
        DATACLK = 1;
        _nop_();
        DATACLK = 0;
        _nop_();
        DATACLK = 1;
        return TempData;
}

/****************************ADS7825ת»»º¯Êý**************************/
/*º¯ÊýÔ­ÐÍ:uint ads7825_convert(uchar channel)       
/*º¯Êý¹¦ÄÜ:ADS7825ת»»º¯Êý
/*ÊäÈë²ÎÊý:ͨµÀºÅ
/*Êä³ö²ÎÊý:ת»»ºóµÄÊý¾Ý
/*µ÷ÓÃÄ£¿é:
/*½¨Á¢Ê±¼ä:
/*×÷Õß:
/**********************************************************************/
uint ads7825_convert(uchar channel)       
{
        if(channel==0x00)
        {
                A1 = 0, A0 = 0;
        }
        else if(channel==0x01)
        {
                A1 = 0, A0 = 1;
        }
        else if(channel==0x02)
        {
                A1 = 1, A0 = 0;
        }
        else
        {
                A1 = 1, A0 = 1;
        }
        RC = 1,
        RC = 0;                                                                                                                //RCµÍÂö³åʹÄÜת»»
        RC = 1;
        //while (!BUSY)
                ;                                                                                                                                                        //DRDYΪµÍ²»ÄܽøÐжÁ²Ù×÷
        Temp = read_ads7825();
  if(Temp<0)
                Temp += 32768;
        else
                Temp -= 32767;                                                                               
        return(Temp);                                                                //½ÓÊÕµ½µÄÊý¾ÝΪAD16bit
}

使用特权

评论回复
7
黑小子mxx|  楼主 | 2014-10-18 09:50 | 只看该作者
现在能读到数据了,原因是我不小心把AD设置成了省电模式(因为单片机引脚默认输出高,所以需要手动置0),但是有一个问题,因为我读数据只需要16个脉冲,但是用示波器发现在这16个脉冲的前后各还有好几个脉冲,而且脉宽比较窄。我不解的是我明明只给了16个脉冲,为什么会多出来这些个脉冲信号呢?

使用特权

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

本版积分规则

42

主题

307

帖子

2

粉丝