微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 请问8位MCU的SPI如何接驱ADS1118?

请问8位MCU的SPI如何接驱ADS1118?

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

如果可以,编程要注意的要点是什么?有例程更好,谢谢

连续发三四次8位SPI数据 然后将读回来的数据自己调整一下啊。

这个地方有一个例程, 你看看是不是基于8位的SPI 的?


http://www.deyisupport.com/question_answer/analog/data_converters/f/58/p/66635/159109.aspx#159109

你是要用SPI模块驱动AD还是用I/O口模拟SPI时序进行读写?

用的是SPI模块。MCU是STC15W4K系列的芯片。

以下是我写的程序片段

void ADS1118_config(uint config_h,uint config_l)
{
 SS=0;
 
 SPDAT=config_h;
 while(!(SPSTAT&SPIF));//等待传输完毕
 SPSTAT=SPIF|WCOL;//清除状态
 
 SPDAT=config_l;
 while(!(SPSTAT&SPIF));
 SPSTAT=SPIF|WCOL;
 
 SPDAT=config_h;
 while(!(SPSTAT&SPIF));
 SPSTAT=SPIF|WCOL;
 
 SPDAT=config_l;
 while(!(SPSTAT&SPIF));
 SPSTAT=SPIF|WCOL;
 
 SS=1;
 DelayUS(10);
}

int ADS1118_read()
{
 SS=0; 
 
 SPDAT=0xFF;//产生SCLK时钟,读出数据
 while(!(SPSTAT&SPIF));
 SPSTAT=SPIF|WCOL;
 ADS1118_DATA=SPDAT;
 ADS1118_DATA=ADS1118_DATA<<8;
 
 SPDAT=0xFF;
 while(!(SPSTAT&SPIF));
 SPSTAT=SPIF|WCOL;
 ADS1118_DATA|=SPDAT;
 
 SPDAT=0xFF;
 //while(!(SPSTAT&SPIF));
 //SPSTAT=SPIF|WCOL; 
 SPDAT=0xFF;
 //while(!(SPSTAT&SPIF));
 //SPSTAT=SPIF|WCOL;

 SS=1;
 return ADS1118_DATA;
}

void main()
{

......

ADS1118_config(0x43,0x89);//通道0,单次模式
ADS1118_read();
......

}

实际运行后,ADS1118_DATA中的数据随温度升高而增大(比如常温下0F5C,对着芯片吹口热气马上爬升到0F88,停止吹气又逐步回落到0F5C),貌似没有工作在AD状态;如将注释掉的4条语句打开,则ADS1118_DATA中的数据一直是0000

有点晕,不知道啥情况?MCU采用22.1184Mhz,SPI初始化时钟设定为Fsys/128

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

网站地图

Top