这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于ad芯片cs5532的输出问题,求助

共16条 1/2 1 2 跳转至

关于ad芯片cs5532的输出问题,求助

菜鸟
2013-10-23 15:38:51     打赏
小弟最近一直在纠结一个问题,就是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);
}



关键词: cs5532     输出     ffff    

院士
2013-10-23 15:55:40     打赏
2楼

没有人玩儿AD的芯片?


院士
2013-10-23 15:56:08     打赏
3楼

刚刚看到一个类似的帖子哦,也是AD的

http://forum.eepw.com.cn/thread/240935/1

 


高工
2013-10-23 16:55:05     打赏
4楼

没用过cs5532,不过读取寄存器一直是ffff的话,感觉还是IC驱动有问题。

如果时序没错的话,建议检查一下延时函数,是不是精确的。

顶一下。


高工
2013-10-23 18:52:20     打赏
5楼

帮顶


菜鸟
2013-10-24 08:45:22     打赏
6楼
谢谢。

菜鸟
2013-10-24 08:45:54     打赏
7楼
谢谢。

菜鸟
2013-10-24 08:51:36     打赏
8楼
谢谢。

菜鸟
2013-11-04 16:19:01     打赏
9楼

问题已经解决了,只是这两天没有上来论坛。

5532芯片的data bus在不读数的时候应该是低电平的,所以在开始读数前向芯片的DIN 脚送一个低电平。

谢谢帮助。


高工
2013-11-04 16:23:02     打赏
10楼
对着手册看示波器,改时序

共16条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]