2020-01-22 12:09发布
wujin715 发表于 2014-8-12 19:21 去年用过 现在这个项目还在 所以就只能把最基本的串口初始化跟读写函数贴出来 如果最基本的没问题 剩下的 ...
wujin715 发表于 2014-8-13 11:31 不用非要校准 有个连续测量 你开了没 CS5463芯片初始化没问题吧?
最多设置5个标签!
把你的硬件图传上来
.............
void SpiInit()
{
unsigned char i,j,write_temp;
SDI=0;
SCLK=0;
CS2=0;
SDO=1;
for(i=0;i<3;i++)
{
write_temp=0xff;
for(j=0;j<8;j++)
{
write_temp<<=1;
SDI=CY; //Any Digital Input Rise/Fall Time < 1us
_nop_();
SCLK=1; //Rise Time SCLK < 100us
_nop_();
// delay100us();
SCLK=0; //Fall Time SCLK < 100us
_nop_();
// delay100us();
}
}
write_temp=0xfe;
for(j=0;j<8;j++)
{
write_temp<<=1;
SDI=CY; //Any Digital Input Rise/Fall Time < 1us
_nop_();
SCLK=1; //Rise Time SCLK < 100us
_nop_();
// delay100us();
SCLK=0; //Fall Time SCLK < 100us
_nop_();
// delay100us();
}
CS2=1;
}
/*****************************************
函数名称:SdiWrite
功 能:Write Command & Data to CS5463
参 数:pointer--The Char Array of Command + Data (1 + 3)
返 回 值:无
******************************************/
void SdiWrite (unsigned char *pointer)
{
unsigned char i,j,write_temp;
CS2=0;
for(i=0;i<4;i++)
{
write_temp=pointer[i];
for(j=0;j<8;j++)
{
write_temp<<=1;
SDI=CY; //Any Digital Input Rise/Fall Time < 1us
_nop_();
SCLK=1; //Rise Time SCLK < 100us
_nop_();
// delay100us();
SCLK=0; //Fall Time SCLK < 100us
_nop_();
// delay100us();
}
}
SDI=1;
CS2=1;
}
/*****************************************
函数名称:SdoRead
功 能:Write Command to CS5463 & Read Data from CS5463
参 数:pointer-->The Char Array of Command + Data (1 + 3)
返 回 值:无
******************************************/
void SdoRead (unsigned char *pointer)
{
unsigned char i,j,cmd;
CS2=0;
cmd=pointer[0];
for(i=0;i<8;i++)
{
cmd<<=1;
SDI=CY; //Any Digital Input Rise/Fall Time < 1us
_nop_();
SCLK=1; //SCLK Rise Time < 100us
_nop_();
// delay100us();
SCLK=0; //SCLK Fall Time < 100us
_nop_();
// delay100us();
}
SDI=1;
for(i=1;i<4;i++)
{
for(j=0;j<8;j++)
{
SDO=1; //读取数据前先置高
pointer[i]<<=1;
SCLK=1;
_nop_();
// delay100us();
if(SDO)
pointer[i]++;
// temp=SDO;
// pointer[i]+=temp;
SCLK=0;
_nop_();
// delay100us();;
}
}
CS2=1;
}
我用的是stc89c52 晶振11.0592MHz
这是SPI协议 这里我是没问题的
void main()
{
timer_init();
com_init(); //串口初始化
InitCS5460A(); //CS5460A初始化
//Calibraton_run(); //通道增益校准
while(1)
{
if(flag==1)
{
RunCS5460A(); //读取转换值
flag=0;
}
}
}
void RunCS5460A()
{
Read_CS5460A(Buf,0x1e);
if(Buf[0]&0x80)
{
Read_CS5460A(Buf,0x18);
SendSerialData(Buf,3); //232V 这里发出的东西始终是0 难道一定要做校准 我在考虑下一步做校准 不过看手册貌似很麻烦
ClearCS5460A();
}
else SendSerial_Data(9);
}
void InitCS5460A()//初始化CS5460A
{
RestCS5460A();//复位CS5490A
Sync_CS5460A();
Wr_configure();//配置
Load_Calibraton();
ClearCS5460A();
Wr_interrupt();
Wr_Control();
Buf[0] = 0xE8;
Write_CS5460A(Buf,1); //启动CS5460A
}
这片子 非常不熟悉 还求多多指导指导
一周热门 更多>