关于ADS1118驱动程序的问题
ADS1118回读配置信息正确,但采用电压返回数据恒为0,采样温度返回值固定为29700(十进制)
代码如下:
/************************************************************************ADS1118驱动程序头文件************************************************************/
#include "msp430g2553.h"
#ifndef ADS1118_H_
#define ADS1118_H_
#define uchar unsigned char
#define uint unsigned int
#define US 3
#define Set_Bit(val, bitn) (val |= bitn) //置一
#define Clr_Bit(val, bitn) (val &= ~bitn) //置零
#define Get_Bit(val, bitn) (val & (1<<(bitn)) ) //获取其bitn位的数值
//-----------------------SPI通信I/O口电定义-----------------------------
/*ADS1118 SPI 时钟Clk*/
/*说明:DOUT/DRDY 中数据的 MSB (bit 15) 在第一个 SCLK 上升沿随时钟移出。
在转换结果随时钟移出 DOUT/DRDY 的同时,新配置寄存器数据在 SCLK 下降沿锁存至 DIN 中。*/
#define ADS1118_SCLK_PIN_NUM (BIT3)
#define ADS1118_SCLK_IO_INIT (Set_Bit(P1DIR,ADS1118_SCLK_PIN_NUM))
#define ADS1118_SCLK_Set() (Set_Bit(P1OUT,ADS1118_SCLK_PIN_NUM))
#define ADS1118_SCLK_Clr() (Clr_Bit(P1OUT,ADS1118_SCLK_PIN_NUM))
/*ADS1118 SPI 数据输入SDI*/
#define ADS1118_SDIN_PIN_NUM (BIT0)
#define ADS1118_SDIN_IO_INIT (Set_Bit(P1DIR,ADS1118_SDIN_PIN_NUM))
#define ADS1118_SDIN_Set() (Set_Bit(P1OUT,ADS1118_SDIN_PIN_NUM))
#define ADS1118_SDIN_Clr() (Clr_Bit(P1OUT,ADS1118_SDIN_PIN_NUM))
/*ADS1118 SPI 数据输出SDO*/
/*说明:这是一个三态输出端口(430相应管脚设为输入)
当CS为高电平时,SDO为高阻态
当采样未完成时,SDO为高电平
当采样完成时,SDO由高电平变为低电平
*/
#define ADS1118_SDOUT_PIN_NUM (BIT1)
#define ADS1118_SDOUT_IO_INIT_DIR (Clr_Bit(P1DIR,ADS1118_SDOUT_PIN_NUM)) //设为输入
#define ADS1118_SDOUT_IO_INIT_REN (Set_Bit(P1REN,ADS1118_SDOUT_PIN_NUM)) //启用内部上下拉电阻
#define ADS1118_SDOUT_Set() (Set_Bit(P1OUT,ADS1118_SDOUT_PIN_NUM)) //上拉电阻
#define ADS1118_SDOUT_Clr() (Clr_Bit(P1OUT,ADS1118_SDOUT_PIN_NUM))
/*ADS1118 SPI 片选CS*/
#define ADS1118_CS_PIN_NUM (BIT2)
#define ADS1118_CS_IO_INIT (Set_Bit(P1DIR,ADS1118_CS_PIN_NUM))
#define ADS1118_CS_Set() (Set_Bit(P1OUT,ADS1118_CS_PIN_NUM))
#define ADS1118_CS_Clr() (Clr_Bit(P1OUT,ADS1118_CS_PIN_NUM))
//------------------------配置指令-----------------------
/*默认之前的模式*/
#define DEFAULT 0x0000 //默认之前的模式
/*套餐*/
#define MEAL1 0x040b //CH0-CH1差分输入;连续转换模式;量程:±2.048V,分辨率:62.5μV;传输速率8SPS;
#define MEAL2 0x060b //CH0-CH1差分输入;连续转换模式;量程:±1.024V ,分辨率:31.25μV;传输速率8SPS;
#define MEAL3 0x080b //CH0-CH1差分输入;连续转换模式;量程:±0.512V,分辨率:15.625μV;传输速率8SPS;
#define MEAL4 0x0a0b //CH0-CH1差分输入;连续转换模式;量程:±0.256V,分辨率:7.8125μV;传输速率8SPS;
#define MEAL5 0x348b //CH2-CH3差分输入;连续转换模式;量程:±2.048V,分辨率:62.5μV;传输速率8SPS;
#define MEAL6 0x360b //CH2-CH3差分输入;连续转换模式;量程:±1.024V ,分辨率:31.25μV;传输速率8SPS;
#define MEAL7 0x380b //CH2-CH3差分输入;连续转换模式;量程:±0.512V,分辨率:15.625μV;传输速率8SPS;
#define MEAL8 0x3a0b //CH2-CH3差分输入;连续转换模式;量程:±0.256V,分辨率:7.8125μV;传输速率8SPS;
#define MEAL9 0x04fb //开启温度传感器
extern void ADS1118_Init(void); //--------------------初始化------------------------
extern uint ADS1118_RE_WR(uint meal, uchar sel); //---------------------读写一体化函数-------------------
#endif /* ADS1118_H_ */
/*****************************************************ADS1118驱动程序***********************************************/
#include "msp430g2553.h"
#include "ads1118.h"
//----------------------延时--------------------------
void delay(unsigned int t)
{
while(t)
{
_NOP();
t--;
}
return;
}
//--------------------初始化SPI串口------------------------
void ADS1118_Init(void)
{
ADS1118_SCLK_IO_INIT;
ADS1118_SDIN_IO_INIT;
ADS1118_SDOUT_IO_INIT_DIR;
ADS1118_CS_IO_INIT;
ADS1118_CS_Set() ;
ADS1118_SCLK_Clr();
ADS1118_SDIN_Clr();
// ADS1118_SDOUT_IO_INIT_REN;
// ADS1118_SDOUT_Set();
ADS1118_CS_Clr() ;
}
//---------------------读写一体化函数(SCLK上升沿更新OUT输出,下降沿读入DIN)-------------------
uint ADS1118_RE_WR(uint meal, uchar sel)
{
uchar i = 0x00;
volatile uint result = 0x0000, config = 0x0000, temp;
config = meal;
for(; i < 16; i++)
{
/*****写数据*****/
if(meal&0x8000)
ADS1118_SDIN_Set();
else
ADS1118_SDIN_Clr();
meal<<=1;
delay(US);
ADS1118_SCLK_Set();
// delay(MS);
delay(US);
ADS1118_SCLK_Clr();
delay(US);
/*****读数据*****/
result<<=1;
if((*(volatile unsigned char*)0x0020)&ADS1118_SDOUT_PIN_NUM)
result |= 0x0001;
// delay(MS);
}
meal = config;
config = 0;
for(; i < 32; i++)
{
/*****再次写入配置参数*****/
if(meal&0x8000)
ADS1118_SDIN_Set();
else
ADS1118_SDIN_Clr();
meal<<=1;
delay(US);
ADS1118_SCLK_Set();
// delay(MS);
delay(US);
ADS1118_SCLK_Clr();
delay(US);
/*****回读配置信息读数据*****/
temp<<=1;
if((*(volatile unsigned char*)0x0020)&ADS1118_SDOUT_PIN_NUM)
temp |= 0x0001;
// delay(MS);
}
if(sel == 0)
return result;
else
return temp;
}
ADS1118 提供了EVM source code,用这个souce code试试还出现相同问题吗
http://www.ti.com/lit/zip/sbac117
不好意思我没用过这个集成开发环境,压缩包我下载下来看了,没有找到相应的代码,您能帮帮忙吗?