CS5532读数据不成功,寻求原因
本帖最后由 haolaishi 于 2013-1-22 22:30 编辑单片机用的STC12C5A60S2,1T的单片机,现已验证5532复位成功,但是读取AD值时都为ff?
现在有几个疑问
1.5532只有一个数据存储寄存器,可是有两个通道,如何确定所读数值是哪一通道的呢?
2.通道设置寄存器setup的作用,如何对应物理通道呢?
3.数据存储寄存器是否有8bit的读命令,如何读取呢?
如果有哪位前辈用过5532,求指教,下面附上程序。。。/**************************************
;WWW.STCMCU.COM
;Mobile:13922805190
;0755-82948412
AT24C04测试程序
主芯片: STC12C5A60S2 (1T)
工作频率: 12.000MHz
**************************************/
#include "cs5532.h"
mtb_1={0x03,0x22,0x00,0x00,0x00};//0x03写配置寄存器0x20选择复位,参考电压选择2.5~VA+,其余默认 复位AD,并配置功能
unsigned char xdata tep5={0};
unsigned char xdata tep4={0};
//////写一个字节数据到5532
void WriteCs5532(unsigned char da)
{
unsigned char loop;
ad_sck=0;
delay_1us();
for(loop=0;loop<8;loop++)
{
da=da<<1;
ad_di=CY;
ad_sck=1;
delay_1us();
ad_sck=0;
delay_1us();
}
}
/////从cs5532内部单元读出一个字节
unsigned char ReadCs5532(void)///读a/d
{
unsigned char loop,da;
ad_sck=0;
delay_1us();
for(loop=0;loop<8;loop++)
{
da=da<<1;
da=da|ad_do;
ad_sck=1;
delay_1us();
ad_sck=0;
delay_1us();
}
return(da);
}
unsigned long ReadCs5532_ADvalue(void)///读a/d转换寄存器中的值 此段即读AD值得程序,有疑问?
{
unsigned char i;
unsigned long temp0=0,temp1=0,temp2=0,temp3=0,reg=0;
for(i=0;i<8;i++)
{
WriteCs5532(0xff);
}
temp0=ReadCs5532();
temp1=ReadCs5532();
temp2=ReadCs5532();
temp3=ReadCs5532();
reg=temp0<<24|temp1<<16|temp2<<8|temp3;
return reg>>11;
}
unsigned long ReadCs5532_Reg(void)///读a/d转换寄存器中的值
{
unsigned long temp;//返回值
tep5=ReadCs5532();
tep5=ReadCs5532();
tep5=ReadCs5532();
tep5=ReadCs5532();
temp=((unsigned long)tep5)<<24|((unsigned long)tep5)<<16|((unsigned long)tep5)<<8|((unsigned long)tep5);
return temp;
}
void InitCs5532(void) ///a/d初始化
{
unsigned char loop;//配置寄存器中的32位数据
ad_do=1;
ad_di=0;
ad_sck=0;
delay_10ms(2);
for (loop=0;loop<31;loop++)//初始化,写15个字节SYNC1
{
WriteCs5532(0xff);
}
WriteCs5532(0xfe); //写一个字节的SYNC0
for (loop=0;loop<5;loop++) //写入复位命令
{
WriteCs5532(mtb_1);
}
WriteCs5532(0x0b); //读配置寄存器
if(ReadCs5532_Reg()==0x10000000)//验证是否复位成功
{
PutString(0,18,"rest is ok!");
}
else
{
PutString(0,18,"rest is wrong!");
}
WriteCs5532(0x03);//写配置寄存器
WriteCs5532(0x00);//
WriteCs5532(0x08);
WriteCs5532(0x00);
WriteCs5532(0x00);
WriteCs5532(0x05);// 写通道设置寄存器 **通道设置寄存器,有疑问?
WriteCs5532(0x40);//物理通道2,增益1
WriteCs5532(0x80);//通道2的偏移和增益
WriteCs5532(0x40);
WriteCs5532(0x80);
WriteCs5532(0xc0); //执行转换命令 向CS5532中写入启动A/D连续转换 (8位串口命令)
} 支持,咱俩的问题一样,初始化成功,但读回的数据溢出,等回答 兄弟,电源接的有问题吧,我的解决了 请问我用cs5530和你们5532用法一样吗?或者告诉我下这两者的区别 首先验证一下SPI接口通信是否正常,一定要保定最基本的东西是对的。内部应该有一些默认的参数,读回来看看能不能对上,如果不能对上那就是通信接口有问题。
然后再看看外围电路的接法是不是正确, 正负12V,5V,参考电压等。有一次我的供电电压没接对,也直接导致不能正常读出数据。
CS5532,价钱也不便宜,功耗也高,只是一个ADC芯片,供电电流都需要十几mA。外围电路要多累赘有多累赘,但还是有那么多人用。
页:
[1]