请问8位MCU的SPI如何接驱ADS1118?
如果可以,编程要注意的要点是什么?有例程更好,谢谢
连续发三四次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