打印

求助:AD7190软件驱动

[复制链接]
7273|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhu_chunyan86|  楼主 | 2012-10-9 12:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有谁用过AD7190作为测压力的电压啊?我是软件新手,刚开始学写程序,我从ADI官网上下了一个AD7190的初始化程序,再根据我的电路对配置寄存器做了一定的修改,结果发现AD转换后得到的数据始终为0,这时怎么回事啊。初始化源码见下:
void LC_Init(void)
{
CPU_CS0_ADC = 0;
nops();
buf[2] = 0xff;
buf[1] = 0xff;
buf[0] = 0xff;
WriteToAD7190(3,buf);    //Reset AD7190 CHIP.
buf[1] = 0xff;
buf[0] = 0xff;
WriteToAD7190(2,buf);    //Reset AD7190 CHIP.
/* buf[0] = 0x40;
WriteToAD7190(1,buf);  //write communication register 0x50 to control the progress to read state register
ReadFromAD7190(3,buf);  //read state register
*/
//  Configuration register
buf[0] = 0x10;
WriteToAD7190(1,buf);    //write communication register(8-bits) 0x10 to control the progress to write configuration register
buf[2] = 0x00;
buf[1] = 0x01;
buf[0] = 0x5f;    //enable to check Vrefin.enable the buffer.
WriteToAD7190(3,buf);  //write configuration register:disable chop,unipolar operation,gain=128,channel:AIN1 to AIN2
// mode register(Internal zero calibration)
buf[0] = 0x08;
WriteToAD7190(1,buf);  //write communication register 0x08 to control the progress to write mode register
buf[2] = 0x94;    //enable transfor the data of status register and enable external 4.92MHz clock.
buf[1] = 0x03;    //select to Continuous Conversion mode
buf[0] = 0xFF;
WriteToAD7190(3,buf);  //write mode register,external 4.92MHz clock,output data rate=4.7Hz
// mode register(Internal full scale calibration)
buf[0] = 0x08;
WriteToAD7190(1,buf);  //write communication register 0x08 to control the progress to write mode register
buf[2] = 0xB4;    //enable transfor the data of status register and enable external 4.92MHz clock.
buf[1] = 0x03;    //select to Continuous Conversion mode
buf[0] = 0xFF;
WriteToAD7190(3,buf);  //write mode register,external 4.92MHz clock,output data rate=4.7Hz
// mode register
buf[0] = 0x08;
WriteToAD7190(1,buf);  //write communication register 0x08 to control the progress to write mode register
buf[2] = 0x14;    //enable transfor the data of status register and enable external 4.92MHz clock.
buf[1] = 0x03;    //select to Continuous Conversion mode
buf[0] = 0xFF;
WriteToAD7190(3,buf);  //write mode register,external 4.92MHz clock,output data rate=4.7Hz
// read ID register
buf[0] = 0x64;
WriteToAD7190(1,buf);  //write communication register 0x64 to control the progress to read ID register
ReadFromAD7190(1,buf);  //read ID register
// read data register
  buf[0] = 0x5A;    //enable Continuous transformation format
WriteToAD7190(1,buf);  //write communication register 0x58 to control the progress to read data register
ReadFromAD7190(3,buf);  //read data register
CPU_CS0_ADC = 1;
  
return;

}

相关帖子

沙发
dongdawei| | 2012-10-9 12:35 | 只看该作者
AD7190是目前国内最牛的AD了,这个程序是可以用的,可能是你底层SPI有问题吧?

使用特权

评论回复
板凳
dongdawei| | 2012-10-9 12:38 | 只看该作者
先排除硬件问题吧,再用示波器或逻辑分析仪看看波形。

使用特权

评论回复
地板
zhu_chunyan86|  楼主 | 2012-10-9 12:52 | 只看该作者
我将MCU的SPI功能已关闭,使用的是模拟的时钟来进行读写数据的。
void WriteToAD7190(unsigned char count, unsigned char *buf)
{
        unsigned        char        ValueToWrite = 0;
    unsigned        char        i = 0;
        unsigned        char        j = 0;
               
        CPU_SCK = 1;                        // the clock is set.
        waiting(1);

//        CPU_CS0_ADC = 1;                // the SSEL1 is set.
//        waiting(1);

//        CPU_CS0_ADC = 0;                // the SSEL1 is clear.
//        waiting(1);                               

        for(i=count;i>0;i--)
        {
                 ValueToWrite = *(buf + i - 1);
                for(j=0; j<8; j++)
                {
                        CPU_SCK = 0;        // the clock is clear.
                        if(0x80 == (ValueToWrite & 0x80))
                        {
                                CPU_DO = 1;          //Send one to SDO pin
                        }
                        else
                        {
                                CPU_DO = 0;          //Send zero to SDO pin
                        }
                        waiting(1);
                        CPU_SCK = 1;
                        waiting(1);
                        ValueToWrite <<= 1;        //Rotate data
                }
        }
//        CPU_CS0_ADC = 1;
}

//---------------------------------
//void ReadFromAD7190(unsigned char count,unsigned char *buf)
//---------------------------------
//Function that reads from the AD7190 via the SPI port.
//--------------------------------------------------------------------------------
void ReadFromAD7190(unsigned char count, unsigned char *buf)
{
        unsigned        char        i = 0;
        unsigned        char        j = 0;
        unsigned        long          iTemp = 0;                        //ARM:int is a 32-bits,C51:int is 16-bits
        unsigned        char          RotateData = 0;

        CPU_SCK = 1;
        waiting(1);
//        CPU_CS0_ADC = 1;
//        waiting(1);
//        CPU_CS0_ADC = 0;
//        waiting(1);
       
                for(j=count; j>0; j--)
                {
                        for(i=0; i<8; i++)
                        {
                                    CPU_SCK = 0;
                                RotateData <<= 1;                //Rotate data,equel RotateData = RotateData << 1;
                                waiting(1);
                                iTemp = CPU_DI;                        //Read SDI of AD7190
                                CPU_SCK = 1;
                                if(0x00000020 == (iTemp & 0x00000020))                //ARM:int is a 32-bits,C51:int is 16-bits
                                {
                                        RotateData |= 1;       
                                }
                       
                                waiting(1);
                        }
                        *(buf + j - 1)= RotateData;
                }         
//        CPU_CS0_ADC = 1;
}

使用特权

评论回复
5
zhu_chunyan86|  楼主 | 2012-10-9 12:54 | 只看该作者
我在不初始化AD7190时,复位后读了状态寄存器、配置寄存器和模式寄存器,其中模式寄存器读回的数据为0,而不是0X080060

使用特权

评论回复
6
mcuatmel| | 2012-11-26 09:07 | 只看该作者
不知楼主搞定没?
我现在也在用AD7190,发现读写状态寄存器,配置寄存器,模式寄存器都好用,但就是读数据是感觉不对,数跳得厉害。

使用特权

评论回复
7
klcblfxy| | 2012-12-11 16:41 | 只看该作者
楼主,通道装换具体怎样选择啊?我只是数据寄存器的数据,但都是零,还有就是转换速率应该怎样匹配

使用特权

评论回复
8
HAPPY小越越| | 2013-2-20 13:45 | 只看该作者
请问楼主,是否调试成功?我是用的AD7192,刚刚调试,就是调不通,数据乱跳,请给点意见。。。

使用特权

评论回复
9
slot867| | 2024-2-1 12:57 | 只看该作者
平替ADI芯片
SIG7190 平替 AD7190

SIG7192 平替 AD7192
SIG7193 平替 AD7193


平替TI芯片

SIG1232A 平替 ADS1232 (24-bit)

SIG1230A 平替 ADS1230 (20-bit)


平替ADI芯片

SIG7792 平替 AD7792
SIG7793 平替 AD7793
SIG7794 平替 AD7794
SIG7795 平替 AD7795
SIG7796 平替 AD7796
SIG7797 平替 AD7797
SIG7798 平替 AD7798
SIG7799 平替 AD7799

平替Cirrus Logic芯片
SIG5532B 平替 CS5532BS(32-bit)
SIG5534B 平替 CS5534BS(32-bit)
SIG5532A 平替 CS5532AS(24-bit)
SIG5534A 平替 CS5534AS(24-bit)
SIG5530 平替 CS5530 (24-bit)
SIG5530B 平替 CS5530(32-bit)

功能替代TI芯片
SIG24130/SIG24131/SIG24132 替代 ADS1220、ADS1247、ADS1248
SIG16130/SIG16131/SIG16132 替代 ADS1120、ADS1147、ADS1148

使用特权

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

本版积分规则

22

主题

111

帖子

1

粉丝