打印

关于cs5532的输出问题

[复制链接]
2358|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lovezichao|  楼主 | 2013-10-23 15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近一直在纠结一个问题,就是ad芯片cs5532读出来的数据一直是ffff。用的单片机是pic16f1937。下面附上我的AD部分的程序,劳烦哪位前辈帮忙看下,哪里有问题。谢谢。

//write
void CS5532_Write_Byte(unsigned char dat){
        unsigned char i;  
        ADCS_L();
        delay_us(2);
        ADCLK_L();
        for(i=0;i<8;i++){
                if((dat<<i)&0x80)
                        ADDI_H();
                else
                        ADDI_L();
                ADCLK_H();
                delay_us(2);
                ADCLK_L();
                delay_us(2);
        }
        ADDI_L();
        ADCS_H();
}

//read
void CS5532_Read_Data(void){
        unsigned char i,j;
        ADCS_L();
        delay_us(2);
        ADCLK_L();
        for(j=0;j<4;j++){
                for(i=0;i<8;i++){
                        ADCLK_H();
                        delay_us(2);   
                        Sample_buf[j]<<=1;
                        if(PIN_C5)
                                Sample_buf[j] |= 0x01;  //从SDO读取数据   
                        else   
                                Sample_buf[j] &= 0xfe;   
                        delay_us(2);
                        ADCLK_L();
                        delay_us(2);
                }
        }
}

//采样
void CS5532_Sample(void){
        unsigned char i;
        ADCS_L();
        ADDI_L();
        ADCLK_L();
        for(i=0;i<8;i++){
                delay_us(2);
                ADCLK_H();
                delay_us(2);   
                ADCLK_L();   
        }
        CS5532_Read_Data();
        ADCS_H();
        ADDI_H();
}

//初始化
void CS5532_Init(void){
        unsigned char i;
//        set_tris_a(0xdf);
//        set_tris_c(0xd7);

        ADCS_L();
        delay_ms(20);

        for(i=0;i<15;i++){
                CS5532_Write_Byte(0xff);//发送命令   
        }
        CS5532_Write_Byte(0xfe);

        ADCS_L();
        delay_ms(1000);

        CS5532_Write_Byte(0x03);////写入CS5532复位命令   
        CS5532_Write_Byte(0x22);   
        CS5532_Write_Byte(0x00);   
        CS5532_Write_Byte(0x00);   
        CS5532_Write_Byte(0x00);

        ADCS_L();
        delay_ms(1000);

        CS5532_Write_Byte(0x03);//写配置寄存器   
        CS5532_Write_Byte(0x00);   
        CS5532_Write_Byte(0x40);   
        CS5532_Write_Byte(0x00);   
        CS5532_Write_Byte(0x00);

        ADCS_L();
          delay_ms(1000);

        CS5532_Write_Byte(0x05);//写通道设置寄存器   
        CS5532_Write_Byte(0x31);//物理通道1、64倍增益、15Hz字速率
        CS5532_Write_Byte(0xc0);//单极性
        CS5532_Write_Byte(0x31);   
        CS5532_Write_Byte(0xc0);  

        ADCS_L();
        delay_ms(1000);

        //偏移寄存器自校准self calibration of offset
        CS5532_Write_Byte(0x81);

        ADCS_L();
        delay_ms(1000);

        CS5532_Write_Byte(0x89);

        ADCS_L();
        delay_ms(1000);

        //增益寄存器自校准self calibration of gain
        CS5532_Write_Byte(0x82);

        ADCS_L();
        delay_ms(1000);

        CS5532_Write_Byte(0x8a);

        ADCS_L();
        delay_ms(1000);

        CS5532_Write_Byte(0xc0);//启动A/D连续转换

        ADCS_L();
        delay_ms(80);
}

相关帖子

沙发
lovezichao|  楼主 | 2013-10-24 08:30 | 只看该作者
自己顶一下。

使用特权

评论回复
板凳
lovezichao|  楼主 | 2013-10-25 08:55 | 只看该作者
现在是可以读数了,只是数据跳动的非常的厉害。解决一个问题又遇到另一个问题。。。

使用特权

评论回复
地板
花间隐梦| | 2014-6-28 16:48 | 只看该作者
你开始是什么情况导致的数据读到的都是1呢?我现在也遇到这种情况

使用特权

评论回复
5
wll006| | 2018-4-11 15:30 | 只看该作者
请问cs5532总是跳动的问题您解决了吗?我现在也遇到这个问题了,自校准后数据较稳定,但是增益增大后,由于不知道怎么进行系统校准,所以数据跳,请问怎么进行系统校准啊?

使用特权

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

本版积分规则

个人签名:欢迎前辈指点,必将勇往直前。

31

主题

225

帖子

4

粉丝