cs5532配置 通道设置寄存器 求指点

[复制链接]
7489|27
 楼主| wolf1116 发表于 2013-5-10 11:32 | 显示全部楼层 |阅读模式
==============================================================================
    D23(MSB)   D22   D21   D20   D19   D18   D17   D16   D15   D14   D13   D12
------------------------------------------------------------------------------
    A1         A0    CS2   CS1   CS0   WR2   WR1   WR0   G2    G1    G0    U/ B
==============================================================================
    D11        D10   D9    D8    D7    D6    D5    D4    D3    D2     D1    D0
------------------------------------------------------------------------------
    A1         A0    CS2   CS1   CS0   WR2   WR1   WR0   G2    G1     G0    U/ B

CS5532_Write_Byte(0x05);    //写单个通道设置寄存器(8位):0x05
CS5532_Write_Byte(0x31);    //原为0x35);//(0x34);//(0x25);        960       
                            /*物理通道1、32倍增益、60Hz字速率*/
CS5532_Write_Byte(0x40);    //(0x40);//                /*双极性模式:0xc0*/
CS5532_Write_Byte(0x28);
CS5532_Write_Byte(0xc0);

对照注释,我怎么对应不上啊~~
达人指点!!!
mage心寒 发表于 2014-3-13 15:06 | 显示全部楼层
为什么我买的cs5532asdatasheet上面没有你上面的数据表呢。。。直接读数据不行吗?
xyz549040622 发表于 2014-3-13 17:18 | 显示全部楼层
楼主读到的都是0xFF吧,很简单,你读寄存器的时序不对,随意读到的都是0xff,你逻辑分析仪抓波形看看
xyz549040622 发表于 2014-3-13 17:18 | 显示全部楼层
楼主读到的都是0xFF吧,很简单,你读寄存器的时序不对,随意读到的都是0xff,你逻辑分析仪抓波形看看
mage心寒 发表于 2014-3-14 11:10 | 显示全部楼层
@xyz549040622 我看楼上之前写过一个帖子就是说cs5532的https://bbs.21ic.com/forum.php?mod=viewthread&tid=434540  我用spi直接驱动的,我就是有点不明白,复位命令中那个参考电压datasgeet上面怎么选择的,有点没有看明白能不能请教一下,还有就是我看你复位命令的第二位写的0x22,感觉0x21也是自动校准的意思啊,你上面那个帖子的代码不知道有啥问题能不能稍微参考一下?
xyz549040622 发表于 2014-3-14 11:18 | 显示全部楼层
mage心寒 发表于 2014-3-14 11:10
@xyz549040622 我看楼上之前写过一个帖子就是说cs5532的https://bbs.21ic.com/forum.php?mod=viewthread&tid ...

上面那个代码的版本早就更新了,读出数据为0xff和你选择的参考电压无关,默认即可
只要确认你读的时序正确就没事了
你现在的问题是什么呢?
mage心寒 发表于 2014-3-14 11:30 | 显示全部楼层
1.参考电压怎么选择,我看你程序里面写了,我的参考电压15脚va+是直接外部接5V的不知道有没有影响?
2.IO模拟暂时没有问题,看了几天datssheet现在在写程序框架,根据时序来,就是第一点有点不明白,其它暂时没有,我读数据的格式是直接32位一起读的应该没有问题吧。
mage心寒 发表于 2014-3-14 13:17 | 显示全部楼层

@xyz549040622  
unsigned int ReadCs5532ID(void)    //读id 复位cs5532
{
          unsigned char i;
          unsigned int Cs5532ID;
           CS5532_SDO_1;
          CS5532_SDI_0;
          CS5532_CLK_0;
          for(i=0;i<31;i++)
     Cs5532_WriteByte(0xff);        //初始化,写15个字节SYNC1
    ;;
         Cs5532_WriteByte(0xfe);         //写一个字节的SYNC0
         Delay_ms(50);
        for(i=0;i<5;i++)
          Cs5532_WriteByte(cs5532ResetData);    //reset cs5532
        ;;
        Cs5532_WriteByte(0x0b);         //从物理通道1配置寄存器读
       
        Cs5532ID=Cs5532_ReadData();
        if(Cs5532ID==0x10000000)     //复位成功,bitRS=1       
        {
                   Uart0_Printf("read cs5532id success");
        }
        else
  {
                  Uart0_Printf("read cs5532id error");
        }
  Delay_ms(5);       
        Cs5532_WriteByte(0x03);  //写配置寄存器
  Cs5532_WriteByte(0x00);//
  Cs5532_WriteByte(0x08);
  Cs5532_WriteByte(0x00);
  Cs5532_WriteByte(0x00);
       
        Delay_ms(5);
        Cs5532_WriteByte(0x05);  //写通道寄存器
  Cs5532_WriteByte(0x02);//
  Cs5532_WriteByte(0x08);
  Cs5532_WriteByte(0x00);
  Cs5532_WriteByte(0x00);
       
        Cs5532_WriteByte(0x0c);
       
  
  return Cs5532ID;
          
}

ID能读到,读到的数据是-2啥意思??

unsigned int Cs5532_ReadData(void)
{
            unsigned char  i;
      uint32_t AD5532Value = 0;
      CS5532_CLK_0;//时钟拉低
      CS5532_SDO_0;//
      delay_AD(100);
      for(i = 0;i < 32; i++)
      {
          if(GPIO_ReadValue(2)&(1<<8)) //假如读取的是高电平
          {
               AD5532Value|=0x00000001;  //把高电平给了最低位,因为MSB优先
          }
          delay_AD(100);
          CS5532_CLK_1;//时钟拉高
          delay_AD(100);
          CS5532_CLK_0;//时钟拉低
                                       
          AD5532Value<<=1;//
      }
      CS5532_CLK_0;//时钟拉低
      CS5532_SDO_1;//
      return AD5532Value;
}  //read


void Cs5532_WriteByte(unsigned char data)
{
          unsigned char  i;
    CS5532_CLK_0;//先把时钟拉低
    CS5532_SDI_0;//数据拉低
    for(i = 0;i<8;i++)
    {  
           if(data&0x80)//高位先出
           {
                CS5532_SDI_1;
           }
           else
           {           
                CS5532_SDI_0;        
           }
           delay_AD(100);
           CS5532_CLK_1;//时钟拉高
           delay_AD(100);
           CS5532_CLK_0;//时钟拉低
           data<<=1;//数据移位
     }
     CS5532_CLK_0;//时钟拉低
     CS5532_SDI_0;
}  write
不知道哪里有问题,可以知道一下吗
mage心寒 发表于 2014-3-14 13:18 | 显示全部楼层
我的意思是-2是读AD的值,不是id的
xyz549040622 发表于 2014-3-14 13:43 | 显示全部楼层
        for(u8i = 0;u8i < 8;u8i++)//8个清串口时钟
        {
                DrvSYS_Delay(2);
                SetBit_CSCLK();//时钟拉高
                DrvSYS_Delay(2);
                ClrBit_CSCLK();//时钟拉低
        }
读数据时和读寄存器时不一样的,多了8个清串口时钟,你看看手册上的时序
mage心寒 发表于 2014-3-14 14:05 | 显示全部楼层
xyz549040622 发表于 2014-3-14 13:43
for(u8i = 0;u8i < 8;u8i++)//8个清串口时钟
        {
                DrvSYS_Delay(2);

看到了,谢谢。。
mage心寒 发表于 2014-3-17 11:03 | 显示全部楼层
@xyz549040622  电路图A0,A1空着有影响吗?我焊接的电路板RS返回一都不对,这是什么问题?
xyz549040622 发表于 2014-3-17 11:58 | 显示全部楼层
mage心寒 发表于 2014-3-17 11:03
@xyz549040622  电路图A0,A1空着有影响吗?我焊接的电路板RS返回一都不对,这是什么问题?  ...

没影响的,悬空即可
mage心寒 发表于 2014-3-17 16:24 | 显示全部楼层

@xyz549040622,我今天用示波器测试了下,从我M3出来的信号都是正常的,到cs5532这边信号就NG了,不知道什么原因,可以请教一下吗?
mage心寒 发表于 2014-3-17 17:03 | 显示全部楼层

@xyz549040622   延迟的clk是以cs5532的晶振算吗,你之前延迟1us是不是短了,应该延迟2us或者3us吗??希望指点一下,谢谢。。
xyz549040622 发表于 2014-3-17 17:15 | 显示全部楼层
mage心寒 发表于 2014-3-17 17:03
@xyz549040622   延迟的clk是以cs5532的晶振算吗,你之前延迟1us是不是短了,应该延迟2us或者3us吗??希望 ...

你用的SPI对吧,我也是SPI没调通转的IO模拟,你抓波形,波形正确了就好,时间无所谓
mage心寒 发表于 2014-3-17 17:50 | 显示全部楼层
@xyz549040622  我现在就是IO口模拟啊,发现SDO的数据永远是1,延迟到底是多少???,datasheet我找不到,我抓波形显示我的时序是对的。。。求解。。
mage心寒 发表于 2014-3-17 17:58 | 显示全部楼层

@xyz549040622  给个联系方式可以吗,公司这东西比较感,我没有多少时间,估计还要麻烦你一下。。。我的QQ2656351599
mage心寒 发表于 2014-3-18 14:55 | 显示全部楼层

@xyz549040622 可以把你的读数据的函数借我参考下吗??谢谢
xyz549040622 发表于 2014-3-18 15:28 | 显示全部楼层
mage心寒 发表于 2014-3-17 17:58
@xyz549040622  给个联系方式可以吗,公司这东西比较感,我没有多少时间,估计还要麻烦你一下。。。我的QQ ...

不好意思,刚看到
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

38

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部