CS5532溢出及通道切换问题,求指导

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
狂奔的蜗牛哥|  楼主 | 2014-8-11 15:00 | 显示全部楼层
mage心寒 发表于 2014-8-11 14:56
你电压降了,读的数据正确? 2.5V  1.25溢出是不是你程序换算乘以5V的参考值了? ...

  voltage=(double)(value*2.488/16777215.0);我没有乘啊,如果*5了那整个都会翻倍的

使用特权

评论回复
狂奔的蜗牛哥|  楼主 | 2014-8-11 15:03 | 显示全部楼层
mage心寒 发表于 2014-8-11 14:56
你电压降了,读的数据正确? 2.5V  1.25溢出是不是你程序换算乘以5V的参考值了? ...

下面是初始化的程序。
void CS5532_Init(void)      
{
  CS_L;
  SDI_L;
  SCLK_L;
  Serial_Reset();               //reset AD's serial
  delay_ms(10);
  Write_Command(CONFIG_REG_W);  //write config registor
  Write_Date(0x22000000);       // reset CS5532          RS=1(SYSTEM RESET) VRS=1(Reference voltage range:1~2.5v )
  Write_Command(STUP_REG_W);    //write stup registor
  Write_Date(0x00400000);       //单极性
//  Write_Command(0x02);
//  Write_Date(0x00800000);
  //Calibration();
  delay_ms(10);
  Write_Command(CONT_CONVERT);  // continu conversion
  delay_ms(40);
}

使用特权

评论回复
mage心寒| | 2014-8-11 15:30 | 显示全部楼层
你复位后没有读寄存器的值?怎么知道有没有成功复位?  Value右移几位的??

使用特权

评论回复
qiyuwang| | 2014-8-11 15:35 | 显示全部楼层
问题解决了没?小弟过些阵子也准备用这个芯片

使用特权

评论回复
mage心寒| | 2014-8-11 15:38 | 显示全部楼层
本帖最后由 mage心寒 于 2014-8-11 17:03 编辑

总结一点我不知道你现在的读的数据怎么算的,cs5532就算溢出,那个最大值就是能测量电压的最大值,比如你现在的溢出值是7fffff = 8388607
8388607 * 2.488 / 16777216 = 0.195V?如果按你这么算最大电压只能测0.195v????  好吧算错了是1.24。。。不好意思。。

使用特权

评论回复
mage心寒| | 2014-8-11 15:46 | 显示全部楼层
void CS5532_SPIInit(void)
{
         unsigned char i;
         unsigned int CS5532ID=0;
       
          Delay_ms(20);
          for(i=0;i<16;i++)
             SPI_FLASH_SendByte(0xff);
           SPI_FLASH_SendByte(0xfe);

                 for(i=0;i<5;i++)
              SPI_FLASH_SendByte(cs5532ResetData[i]);
            ;  
            Delay_ms(20);
                  SPI_FLASH_SendByte(0x0b);
       
                  CS5532ID=SPI_ReadByte();       //返回值0x10 说明正确复位CS5532了 3.3V可以reset VD一定要跟单片机电压一样,当然单片机5V我就不知道了
            SPI_ReadByte();
            SPI_ReadByte();
            SPI_ReadByte();
            if(CS5532ID==0x10)
              Uart0_Printf("Reset sucess \r\n");
            
            CS5532_Config();
                        Delay_ms(500);
                       
}

我的共享一下吧,这是SPI的。。

unsigned int ReadCs5532ID(void)    //读id 复位cs5532
{
          unsigned char i;
          unsigned char reg0,reg1,reg2,reg3;
          Delay_ms(20);
          for(i=0;i<31;i++)
     Cs5532_WriteByte(0xff);        //初始化,写15个字节SYNC1
       
         Cs5532_WriteByte(0xfe);         //写一个字节的SYNC0

        for(i=0;i<5;i++)
          Cs5532_WriteByte(cs5532ResetData[i]);    //reset cs5532

        ;;
        Delay_ms(20);
              //复位后RV会返回1(如果成功)。
       
        Cs5532_WriteByte(0x0b);         //从物理通道1配置寄存器读  //读寄存器的值
       
        reg0=ReadCs5532_Reg();
        reg1=ReadCs5532_Reg();
        reg2=ReadCs5532_Reg();
        reg3=ReadCs5532_Reg();
       
       
        if(reg0==0x10)     //复位成功,bitRV=1       
        {
                   Uart0_Printf("read cs5532id success");
        }
        else
  {
                  Uart0_Printf("read cs5532id error");
        }
       
       
        Cs5532_WriteByte(0x03);  //写配置寄存器
  Cs5532_WriteByte(0x00);//
  Cs5532_WriteByte(0x08);
  Cs5532_WriteByte(0x00);
  Cs5532_WriteByte(0x00);
       
        Cs5532_WriteByte(0x05);  //写通道寄存器
  Cs5532_WriteByte(0x32);//
  Cs5532_WriteByte(0x40);
  Cs5532_WriteByte(0x32);
  Cs5532_WriteByte(0x40);
       
        Cs5532_WriteByte(0xc0);
       
  
  return 0;
          
}

IO口模拟。
这款芯片我调试了很长时间,后面的干扰也是我一个人搞的。。读数据是基本的,抗干扰是最大的问题,直接影响到精度,办公室电脑很多的情况下开增益一个小时肯定会NG(芯片裸露的情况)。

使用特权

评论回复
狂奔的蜗牛哥|  楼主 | 2014-8-11 15:59 | 显示全部楼层
mage心寒 发表于 2014-8-11 15:30
你复位后没有读寄存器的值?怎么知道有没有成功复位?  Value右移几位的??

没有读,延时了,右移8位

使用特权

评论回复
狂奔的蜗牛哥|  楼主 | 2014-8-11 16:01 | 显示全部楼层
mage心寒 发表于 2014-8-11 15:38
总结一点我不知道你现在的读的数据怎么算的,cs5532就算溢出,那个最大值就是能测量电压的最大值,比如你现 ...

你这里的值算错了,8388607*2.488/16777215=1.244的样子,跟我那个结果是一样的

使用特权

评论回复
狂奔的蜗牛哥|  楼主 | 2014-8-11 16:08 | 显示全部楼层
mage心寒 发表于 2014-8-11 15:46
void CS5532_SPIInit(void)
{
         unsigned char i;

谢谢你

使用特权

评论回复
狂奔的蜗牛哥|  楼主 | 2014-8-11 16:09 | 显示全部楼层
qiyuwang 发表于 2014-8-11 15:35
问题解决了没?小弟过些阵子也准备用这个芯片

还木有

使用特权

评论回复
diweo| | 2014-8-11 16:29 | 显示全部楼层
VRS (Voltage Reference Select)[25]
   0     2.5 V < VREF ≤ [(VA+) - (VA-)]
   1    1 V ≤ VREF ≤ 2.5V
这个位有没有换个值试试看?
我觉得参考电压定2.5有点尴尬,因为参考源本身可能有波动,或者同一型号的不同器件有差异,可能有的刚好比2.5V多一点点,有的就少一点点。
你现在测的电压,又刚好有点特殊,差不多参考电压的一半。。。。

使用特权

评论回复
狂奔的蜗牛哥|  楼主 | 2014-8-11 16:32 | 显示全部楼层
diweo 发表于 2014-8-11 16:29
VRS (Voltage Reference Select)[25]
   0     2.5 V < VREF ≤ [(VA+) - (VA-)]
   1    1 V ≤ VREF ≤ 2 ...

我读取了一下复位后的值,配置寄存器的读一个字节为0xff,程序不动了

使用特权

评论回复
狂奔的蜗牛哥|  楼主 | 2014-8-11 16:37 | 显示全部楼层
mage心寒 发表于 2014-8-11 15:30
你复位后没有读寄存器的值?怎么知道有没有成功复位?  Value右移几位的??

我读取了一下复位后的值,配置寄存器的读一个字节为0xff,程序不动了

使用特权

评论回复
狂奔的蜗牛哥|  楼主 | 2014-8-11 18:00 | 显示全部楼层
貌似解决了,谢谢楼上的各位了!

使用特权

评论回复
狂奔的蜗牛哥|  楼主 | 2014-8-12 13:19 | 显示全部楼层
接下来要进行双通道切换,是不是要在初始化的时候就设定好物理通道和setup中的设置单元?两个通道之间该怎么切换呢?

使用特权

评论回复
diweo| | 2014-8-14 10:59 | 显示全部楼层
看数据手册27-28页。
2.4. Setting up the CSRs for a Measurement

使用特权

评论回复
狂奔的蜗牛哥|  楼主 | 2014-8-14 12:12 | 显示全部楼层
diweo 发表于 2014-8-14 10:59
看数据手册27-28页。
2.4. Setting up the CSRs for a Measurement

谢谢您的回答,昨天已经解决了!

使用特权

评论回复
360豆子| | 2015-9-28 21:34 | 显示全部楼层
diweo 发表于 2014-8-14 10:59
看数据手册27-28页。
2.4. Setting up the CSRs for a Measurement

运用双通道是用单次转换还是连续转换呢?

使用特权

评论回复
樊人| | 2017-7-15 10:37 | 显示全部楼层
本帖最后由 樊人 于 2017-7-15 10:39 编辑

楼主好,最近在调CS5532,有幸看到了这个帖子。想请教您一个问题,现在时序没有问题,CS5532复位后读取到的值也是正确的复位值。写入连续转换的命令然后去读取ADC值时发现无论何时都是溢出的。用示波器看SDO线是能拉低的,但是数据为都是高电平。
20170715103916.png

使用特权

评论回复
樊人| | 2017-7-15 19:27 | 显示全部楼层
24位ADC CS5532采集溢出问题,求大佬帮助
https://bbs.21ic.com/forum.php?mo ... amp;fromuid=1495454

使用特权

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

本版积分规则