tlv2545的数据SDO端输出都是高电平
我参考电压和供电电压都是3.3V,AIN+接2V,AIN-接地,CS线和SLK接STM32端口,电路图和datasheet给的是一样的,对照时序图写的程序,但是我SDO端输出的全部是高电平。不知道是时序还是有问题还是芯片有问题呢
UINT16 AD_Read_Data(void){
int i;
UINT16 data = 0x0000;
SCLK_High;
CS_High;
SCLK_Low;
SCLK_High;
CS_Low;
delay_5us(2);//延迟10us
for(i=0;i<12;i++)
{
SCLK_Low;
data <<= 1;
data = data|SDO;
SCLK_High;
}
for(i=0;i<5;i++){
SCLK_Low;
SCLK_High;
}
delay_5us(2);//延迟10us
CS_High;
data&=0x0fff;
return data;
}
1.判定程序对不对最简单的方法是用示波器测试CS, SCLK,FS,SDO的波形,然后与datasheet提供的波形做比较,符合时序要求即可。(建议您用波形对照,因为TI在ADC控制上,是没有程序参考的)
2. 关于芯片方面,市面上的ADC芯片假货并不多,如果不放心,可以在TI网站上申请:
申请网站: www.ti.com.cn/.../buy.tsp
申请方法:www.ti.com.cn/.../gencontent.tsp
我用示波器比对过了,时序图和datasheet的差不多,但是还是出不来波形,您有没有碰到这样的情况呢,我最近又申请了两片,换个新的试试再说吧,谢了先~~
调出来了,还是程序的问题,换了一种思维。
UINT16 AD_Read_Data(void){
int i=0;
UINT16 data = 0x0000;
CS_High;
for(i=0;i<20;i++)
{
SCLK_High;
if(i>7)
{
CS_Low;
data <<= 1;
if(SDO&0x01)
data|=0x01;
}
SCLK_Low;
}
CS_High;
data&=0x0fff;
return data;
}
这个可以用~~~给后面的人吧,避免也出现我这样的情况。
调出来了,还是程序的问题,换了一种思维。
UINT16 AD_Read_Data(void){
int i=0;
UINT16 data = 0x0000;
CS_High;
for(i=0;i<20;i++)
{
SCLK_High;
if(i>7)
{
CS_Low;
data <<= 1;
if(SDO&0x01)
data|=0x01;
}
SCLK_Low;
}
CS_High;
data&=0x0fff;
return data;
}
这个可以用~~~给后面的人吧,避免也出现我这样的情况。