TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS1118写入函数返回值与理论值不符且无法给变量赋值

写了一个ADS1118的AD转换程序,不知道是不是SPI的写入函数出问题了,返回的值和理论值不同,且无法给变量赋值,程序如下:

unsigned int Write_SIP(unsigned int temp)
{
unsigned char i;
unsigned int Read_Data;
Data_Out; //设置P3.0为输出 DIN –>对应(SOMI)
Data_In; //设置P3.1为数据输入 Dout–>对应(SOMO);
CLK_L;
CS_L;
for(i=0;i<16;i++) //只有在时钟上升沿时数据被锁存,为控制器通过下降沿读取数据
{
if((temp&0x8000)==0x8000) { DOUT_H;}
else { DOUT_L;}
temp<<=1;
CLK_H;
//delay_us(50);
Read_Data<<=1;
if(DIN){Read_Data++;}
CLK_L;
// delay_us(50);
}
DOUT_L;
CS_H; //拉高Config Register读错误
_NOP();
return Read_Data;

}

void ADS1118_GPIO()
{
Data_Out; //MOSI
Data_In; //MISO

CLK_Out; //CLK
CS_Out; //CS
}

void main(void)
{

WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
ADS1118_GPIO();

while(1)
{

CS_L;
ConfigRegister = (Write_SIP(0xC18B)); //配置寄存器 Config Register

Value = (Write_SIP(0xC18B)); //AD数值 Conversion Register

CS_H;
t = (Value*6.144)/32768;
delay_ms(3600);
_NOP(); //断点
}
}

注:配置寄存器的写入值选择0XC18B是因为我选择的满量程是+-6.144V供电电压是5V,AINO输入的3.3V电压,最终函数的结果为:

Value=0,ConfigRegister=0,Write_SIP(0xC18B)的返回值是0XC680,无法给Value,ConfigRegister赋值,不知道哪里错了,老师说我的SPI_Write()写的有问题,但是本人太菜了看不出来啊,希望大家帮我看看,谢谢大家!

Amy Luo:

您好,
您可以参考网友总结的驱动程序:
e2echina.ti.com/…/68454

赞(0)
未经允许不得转载:TI中文支持网 » ADS1118写入函数返回值与理论值不符且无法给变量赋值
分享到: 更多 (0)