ADS1115采样问题
Init_Data[0] =0x90; // 地址 + 写命令(写地址0x90,读地址0X91)
Init_Data[1] =0x01; // 指向配置寄存器
Init_Data[2] =0x54; // 配置字高字节,采用-2.048到+2.048,选择AINp1输入,AINPn为GND
Init_Data[3] =0x83; // 配置字低字节,选择转换速率即通信速率
这是对1115的配置 为什么实际当中只能采到0.6多一点的电压 再大就不行了
有可能是你的数据处理程序段有问题,可以把采到的数据不加处理直接上传到计算机串口分析。若怀疑有硬件问题,可以上传原理图
adcx=adc_get_agin();
LCD12864_DATA3(4,0,adcx);
temp=(float)adcx*((float)2048*2/65535);
LCD12864_DATA3(3,3,(uint)((temp)));
这应该没有错吧
注明:在实际使用中只使用SCL和SDA引脚与MSP430连接,未使用ALERT引脚。
用某一通道时 其他都接地
你这temp=(float)adcx*((float)2048*2/65535);是什么意思?输入大于0.6以后的输出一直是饱和的7FFFh吗
另外注意数据输出格式为二进制补码
uint ReadData_ADS1115(void) {
uchar ResultL,ResultH;
uint 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;
}
我的adcx就是这里的result 超过0.6也不是固定的 都比0.6小 我都没有涉及到补码啊 我那个temp是用来显示的数据 参考电压2.048*2 16位就被分成65535份 这样对吗
你这个读取段应该没问题,但是temp=(float)adcx*((float)2048*2/65535)明显是错了,建议你先看一下datasheet上数据输出格式,这个数据是有正负的,用的是二进制补码表示形式
如果你输入的都是正电压,可以这样:temp=(float)adcx*((float)2048/32767),另外看一下你的编译器能不能支持这样的计算。另外,建议你直接输出内码到屏幕,即直接显示出result的值,然后用笔算一下看看电压对不对,再增加电压看看内码是否增加
超过0.6 几 内码也会变得很小 换算都是对的
能不能麻烦你看看具体的转换公式是怎样的 英语不好 芯片手册找了半天没有看到 正的 怎么处理 负的怎么处理
uint ReadData_ADS1115(void) {
uint ResultL,ResultH;
uint Result; SCL_H;
I2CforADS1115_Start();
I2CforADS1115_WriteByte(0x91);
delay_us(10);
ResultH=I2CforADS1115_ReadByte();
I2CforADS1115_NOACK();//非应答一定要,表示我还要数据
delay_us(10); ResultL=I2CforADS1115_ReadByte();
I2CforADS1115_NOACK(); I2CforADS1115_Stop();
Result=(ResultH<<8)|ResultL;
if(Result>0x7fff)
Result=~Result+1;//用于测量负电压,负电压从8000~ffff,负电压与正关于0有类似对称关系,按位取反后+1相同
return Result;
}
我的配置完善了下 你看看 可是还是只能采到0.6多