还是自己太粗心,芯片资料没有完全看透,主要问题还是芯片时序图没看明白,往芯片SDI口写命令时,转换完成的数据会从SDO口出来,因此,写数据和读数据应该同时进行(Mode 00)。为方便后来人,把代码贴上
u16 Write_Channel_Getvalue(u16 channel)
{
char i;
u16 tlc3574_temp;
u16 tlc3574_value;
tlc3574_CS_0;
for(i=0;i<16;i++)
{
tlc3574_value <<= 1;
tlc3574_temp = (channel >> (15-i)) & 0x01;
tlc3574_SCLK_1;
if(tlc3574_temp ==1)
tlc3574_SDI_1;
else
tlc3574_SDI_0;
Tlc3574_delay_us(2);
tlc3574_SCLK_0;
Tlc3574_delay_us(2);
if(tlc3574_READdata == 1)
tlc3574_value += 1;
Tlc3574_delay_us(2);
}
Tlc3574_delay_us(2);
tlc3574_CS_1;
Tlc3574_delay_us(5);
tlc3574_value >>= 2;
// tlc3574_value = tlc3574_value * 10 / 8192 ;
return tlc3574_value;
}
void Tlc3574_Init()
{
tlc3574_CS_1;
tlc3574_SCLK_0;
Tlc3574_delay_us(5);
//Write_Channel_Getvalue(0xa000);
Write_Channel_Getvalue(0xae00);
}
while(1)
{
// ads1286_Getvalue();
// decimal_1632_Disp(84, 165,ads1286_value, 0xf800,0xffff);
// Tlc3574_CONV();
for(i=0;i<25;i++)
{
Tlc3574_Init();
// Write_Channel_Getvalue(0x0000);
Tlc3574_Voltage_1 = Write_Channel_Getvalue(0x0000) * 10.0 / 8192;
Tlc3574_sum += Tlc3574_Voltage_1;
}
Tlc3574_sum = Tlc3574_sum / 25 ;
// Update_Data();
decimal_1632_Disp(84, 165,Tlc3574_sum, 0xf800,0xffff);
// paint_part(84,165,240,200,0xffff);
}
|