Raspberry PiでADS1115を使う
I2CアドレスはADDR端子の配線で設定する。
ADS1115 I2C Address
ADDR pin connection | I2C address |
---|---|
GND | 0x48 |
VDD | 0x49 |
SDA | 0x4A |
SCL | 0x4B |
使用したI2Cチャネルは1。
ADS1115 Register
Pointer | Description |
---|---|
0x00 | Conversion Register : AD変換結果 |
0x01 | Config Register : 設定 |
ADS1115のレジスタデータはBig Endianだが、pigpio の I2CライブラリはSMBusベースなので Little Endianである。よって上位バイトと下位バイトを入れ替える必要がある。
Config Register 0x01
Bit | Field | Set | Description |
---|---|---|---|
15 | OS | 0 | No efect |
14:12 | MUX[2:0] | 0b100 | Input single end AIN0 |
11:9 | PGA[2:0: | 0b001 | Full Scale 4.096V |
8 | MODE | 0 | Continuous-conversion mode |
7:5 | DR[2:0] | 0b010 | Speed 32 Sample/s |
4 | COMP_MODE | 0 | Normal Comparator - no use |
3 | COMP_POL | 0 | Comparator output L active - no use |
2 | COMP_LAT | 0 | Comparator No latching - no use |
1:0 | COMP_QUE[1:0] | 0b11 | Disable Comparator que - no use |
Sample code
import time
import pigpio
pi = pigpio.pi()
adc = pi.i2c_open(1, 0x48)
pi.i2c_write_word_data(adc, 0x01, 0x4342) # little endian
ad0raw = pi.i2c_read_word_data(adc, 0x00)
ad0 = ((ad0raw & 0x00ff)<<8) + ((ad0raw & 0xff00)>>8)
while True:
ad0raw = pi.i2c_read_word_data(Adc, 0x00)
ad0 = ((ad0raw << 8) & 0xff00) | ((ad0raw >> 8) & 0x00ff)
print(ad0)
time.sleep(0.2)