这几天一直和ADS1115较劲,把阅读数据手册的要点记录一下,便于以后再使用着有新点子的时候查阅。
差分输入的等效阻抗,便于以后和指针电压表测量结果对比
放大倍率和量程选择
当多个ADS1115一起使用时的地址
四个寄存器地址
如果使用这个系列的裸片,外围只要3个电阻一个电容就够了
手册最后配了一个比较有价值的电流监测,换个OPA可以单电源供电
回到Arduino IDE,可以不再使用现成的ADS1115库了,阿达水果Adafruits有海量的模块驱动库
/* 仅使用Arduino下的I2C wire库驱动ADS1115 */
#include <Wire.h> //提供I2C支持
#define ASD1115 0x48
//ADS1115的ADDR接GND时的地址为0X48
unsigned int val = 0;
byte writeBuf[3];
byte buffer[3];
const float VPS = 4.096 / 32768.0;
//量程为其他数值时,需要改动,例如0.256/32768.0等
void setup() {
Serial.begin(9600);
Wire.begin(); //启动I2C
writeBuf[0] = 1; //配置寄存器1
writeBuf[1] = 0b00000010;
//0x02,差分在A0和A1间,量程4.096,连续转换
/* bit 15:
For a write status:
0 : No effect
1 : Begin a single conversion (when in power-down mode)
For a read status:
0 : Device is currently performing a conversion
1 : Device is not currently performing a conversion
*/
// Bits 14-12 input selection:
/*
000 : AIN P = AIN0 and AIN N = AIN1 (default)
001 : AIN P = AIN0 and AIN N = AIN3
010 : AIN P = AIN1 and AIN N = AIN3
011 : AIN P = AIN2 and AIN N = AIN3
100 : AIN P = AIN0 and AIN N = GND
101 : AIN P = AIN1 and AIN N = GND
110 : AIN P = AIN2 and AIN N = GND
111 : AIN P = AIN3 and AIN N = GND
*/
// Bits 11-9 Amp gain.
/*
000 : FS = ±6.144V
001 : FS = ±4.096V
010 : FS = ±2.048V(default)
011 : FS = ±1.024V
100 : FS = ±0.512V
101 : FS = ±0.256V
110 : FS = ±0.256V
111 : FS = ±0.256V
*/
// Bit 8 Operational mode of the ADS1115.
/*
0 : Continuous conversion mode
1 : Power-down single-shot mode (default)
*/
writeBuf[2] = 0b10000101;
// bits 7-0,0x85,采样率设置
// Bits 7-5 data rate default to 100 for 128SPS
/*
000 : 8SPS
001 : 16SPS
010 : 32SPS
011 : 64SPS
100 : 128SPS(default)
101 : 250SPS
110 : 475SPS
111 : 860SPS
*/
// Bits 4-0 comparator functions see spec sheet.
//数据手册第19页
Wire.beginTransmission(ASD1115);
Wire.write(writeBuf[0]);
Wire.write(writeBuf[1]);
Wire.write(writeBuf[2]);
Wire.endTransmission();
delay(500);
}
void loop() {
buffer[0] = 0;
Wire.beginTransmission(ASD1115);
Wire.write(buffer[0]);
Wire.endTransmission();
Wire.requestFrom(ASD1115, 2);
buffer[1] = Wire.read();
buffer[2] = Wire.read();
Wire.endTransmission();
val = buffer[1] << 8 | buffer[2];
//获取寄存器数据
if (val > 32768) //如果是负电压
{
val = 65535 - val;
Serial.println(-1 * (float)val * VPS);
Serial.println(-1 * val);
}
else {
Serial.println(val * VPS);
Serial.println(val);
}
// just an indicator
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
}
联系客服