ADS1015
TI ADS1015 4-channel 12-bit I²C ADC with PGA and input multiplexer — the 12-bit sibling of the ADS1115.
Live catalog
Prefer labwired_describe with the catalog id over guessing pins or addresses.
Status at a glance
| Aspect | Status |
|---|---|
| Catalog id | ads1015 |
| Bus | I²C |
| Address | 0x48 (ADDR→GND); 0x49 VDD, 0x4A SDA, 0x4B SCL |
| Source | configs/devices/ads1015.yaml (declarative, no Rust model) |
| Datasheet | TI ADS1013/ADS1014/ADS1015 SBAS473F, §7.3.3 Table 7-1, §7.5.4, §8 Register Map (Figures 8-2..8-6, Table 8-4) |
| Tier | smoke-proven (register-level tests: crates/core/tests/everyday_sensor_set.rs) |
Pins / attachment
| Pin / net | Role |
|---|---|
| SDA / SCL | I²C |
| AIN0..AIN3 | Analog inputs (stimulus a0..a3) |
| ALERT/RDY | Not modelled |
| VDD/GND | Power (digital twin) |
Support matrix
| Behavior | Status | Notes |
|---|---|---|
| CONFIG POR 0x8583, Lo_thresh 0x8000, Hi_thresh 0x7FFF | ✅ | Threshold reserved nibbles stay 0h / Fh through writes |
| CONVERSION: 12-bit two's complement in bits 15:4 | ✅ | Low nibble always 0; clips at 0x7FF0 / 0x8000 |
| MUX: 4 single-ended + 4 differential inputs | ✅ | POR is AIN0 − AIN1 |
| PGA ±6.144 … ±0.256 V (counts = V × 2048 / FSR) | ✅ | |
| OS bit / conversion time / DR | ⚠️ | OS always reads 1 (result always ready); DR and MODE stored only |
| Comparator, ALERT/RDY, general-call reset | ❌ |
Stimulus
Host inputs: a0, a1, a2, a3 (V).
How to run
- Place the part and an MCU in Playground, or add it to a system YAML:
- Agent:
labwired_list→labwired_describe id=ads1015→ wire →labwired_validate→labwired_run/labwired_verify. - Register-level smoke:
cargo test -p labwired-core --test everyday_sensor_set— CONFIG / threshold power-on words and reserved-bit behaviour. The same file's negative control proves the check fails against a part that answers only 0x00 or only 0xFF;ads1015_tracks_stimuluschecks the MUX, every PGA range, 12-bit quantisation and clipping.
Limitations
- A result is always available: the twin has no conversion time, so CONVERSION is never the 0000h the datasheet gives before the first conversion.
See the YAML header for the full datasheet trace and every named approximation.