ADS1115是高精度的16位AD,号称电赛必备的芯片,可以通过I2C总线与MCU相连,ADS1115的引脚图见附件。
ADS1115和MCU连接图如下
程序如下
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
void I2CforADS1115_NOACK(void) { SDA_OUT; SCL_OUT; SDA_H; _NOP(); _NOP(); SCL_H; SCL_L; _NOP(); _NOP(); SDA_L; } /**************起始信号***************/ void I2CforADS1115_Start() { SDA_L; SCL_H; SDA_H; SDA_L; SCL_L; } /*************终止信号*************/ void I2CforADS1115_Stop() { SDA_L; SCL_H; SDA_H; } /*************向I2C总线发送一个字节************/ void I2CforADS1115_WriteByte(uchar wData) { uchar i; SDA_OUT; for(i=0;i<8;i++) { if((wData<<i) & 0x80) SDA_H; else SDA_L; SCL_H; SCL_L; } SDA_H; SCL_H; SCL_L; } /**************读取一个字节**************/ uchar I2CforADS1115_ReadByte() { uchar temp=0,i; SDA_IN; for(i=0;i<8;i++) { temp=temp<<1; SCL_L; SCL_H; if(SDA_VAL) { temp|=0x01; } } SCL_L; SDA_L; SCL_H; SCL_L; SDA_H; return temp; }
void Configure_ADS1115() { uchar i=0; Init_Data[0] =0x90; // 地址 + 写命令(写地址0x90,读地址0X91) Init_Data[1] =0x01; // 指向配置寄存器 Init_Data[2] =0xc0; // 配置字高字节,采用-4.096到+4.096,选择AINp0输入,AINPn为GND Init_Data[3] =0x83; // 配置字低字节,选择转换速率即通信速率 SCL_H; I2CforADS1115_Start(); for(i=0;i<4;i++) { I2CforADS1115_WriteByte(Init_Data[i]); _NOP(); } I2CforADS1115_Stop(); } /************指向转换结果寄存器***************/ void PointRegister_ADS115(void) { uchar i=0; Init_Data[0] =0x90; // 地址 + 写命令 Init_Data[1] =0x00; // 指向转换结果寄存器 SDA_OUT; SCL_H; I2CforADS1115_Start(); for(i=0;i<2;i++) { I2CforADS1115_WriteByte(Init_Data[i]); } I2CforADS1115_Stop(); } /**************读取转换结果***************/ uint32 ReadData_ADS1115(void) { uchar ResultL,ResultH; uint32 Result; SCL_H; I2CforADS1115_Start(); I2CforADS1115_WriteByte(0x91); ResultH=I2CforADS1115_ReadByte(); I2CforADS1115_NOACK();//非应答一定要,表示我还要数据 ResultL=I2CforADS1115_ReadByte(); I2CforADS1115_NOACK(); I2CforADS1115_Stop(); Result=ResultH*256+ResultL; return Result; } /***********模拟量采集转化为数字量***********/ uint32 GetData_ADS1115() { uint32 ResultValue; Configure_ADS1115(); PointRegister_ADS115(); ResultValue=ReadData_ADS1115(); //结果存储AD转化值 return ResultValue; }