微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 一个ADS1118的程序,搞了很长时间,求助各位朋友给瞧瞧

一个ADS1118的程序,搞了很长时间,求助各位朋友给瞧瞧

时间:10-02 整理:3721RD 点击:

只列出主要函数部分:

先是主函数如下:

main()函数
{
uchar Data_H=0;
uchar Data_L=0;
uint Data=0; //接收的数据
........//各种初始化语句
while(1)
{
CS_L();
Write_byte(0x85);
Write_byte(0x8B); //写配置字,单次转换....
CS_H;

delay_us(); //简单延时

CS_L();
while(SOMI_IN); //等待转换结束,DRDY变低电平,读取数据
Data_H=Rec_byte(); //接收高字节
Data_L=Rec_byte(); //接收低字节
CS_H;

Data|=Data_H;
Data=Data<<8;
Data|=Data_L; //数据处理

LCD_Printf(0,0,"Data:%u ",Data); //液晶显示Data的值
}
}

然后是,写字节和读字节的函数如下

//主机向从机发送一个字节的数据,从机接收数据
void Write_byte(uchar data)
{
CLK_L;
uchar i=0;
for(i=0;i<8;i++)
{
if((data<<i)&BIT7)
SIMO_H;
else
SIMO_L;

delay_us();

CLK_H;
delay_us();
CLK_L; //下降沿写数据
delay_us();
}
//CLK_H;
}


//主机接受一个字节的数据,从机发送数据
uchar Rec_byte()
{
uchar i=0;
uchar Temp=0;
CLK_L;
for(i=0;i<8;i++)
{
CLK_L;
delay_us(); //延时
Temp=Temp<<1; //移位,
CLK_H; //产生上升沿,读取数据
if(SOMI_IN )
Temp |=BIT0; //置1
else
Temp &=~BIT0; //可省略,默认就是0
delay_us();
}

return Temp;
}

void delay_us() //延时函数
{
Delay_us(10); //延时10微秒
}

现在的问题是,每次读回来的数据都是一个随意的数据11592,每次都不变。无论给什么电压都是这个值。一直找不出问题,所以请教各位朋友。

主要请帮忙看一下,写和读的函数时序有没有问题,还有 ,主函数这么操作有没有问题,谢谢!

主要是,第一次写这种时序,所以可能时序有问题。

楼主有没有使用jlink或者jtag调试过啊?建议从以下几个方面检查

1.检查下函数有无逻辑错误。

2.根据datasheet来检查下信号的时序有没有问题,功能的使能。

3.检查下外围电路,因为电压不管怎么变,输出一定,外围电路大半是有问题的。

上一篇:ADS1181的问题
下一篇:ADS1259的稳定度

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top