nodemcu-firmware/docs/en/modules/ads1115.md

177 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ADS1115 Module
| Since | Origin / Contributor | Maintainer | Source |
| :----- | :-------------------- | :---------- | :------ |
| 2017-04-24 | [fetchbot](https://github.com/fetchbot) | [fetchbot](https://github.com/fetchbot) | [ads1115.c](../../../app/modules/ads1115.c)|
This module provides access to the ADS1115 16-Bit analog-to-digital converter.
!!! caution
The **ABSOLUTE MAXIMUM RATINGS** for all analog inputs are `0.3V to VDD+0.3V` referred to GND.
## ads1115.read()
Gets the result stored in the register of a previously issued conversion, e.g. in continuous mode or with a conversion ready interrupt.
#### Syntax
`volt, volt_dec, adc = ads1115.read()`
#### Parameters
none
#### Returns
- `volt` voltage in mV (see note below)
- `volt_dec` voltage decimal (see note below)
- `adc` raw adc value
!!! note
If using float firmware then `volt` is a floating point number. On an integer firmware, the final value has to be concatenated from `volt` and `volt_dec`.
#### Example
```lua
local id, alert_pin, sda, scl = 0, 7, 6, 5
i2c.setup(id, sda, scl, i2c.SLOW)
ads1115.setup(ads1115.ADDR_GND)
-- continuous mode
ads1115.setting(ads1115.GAIN_6_144V, ads1115.DR_128SPS, ads1115.SINGLE_0, ads1115.CONTINUOUS)
-- read adc result with read()
volt, volt_dec, adc = ads1115.read()
print(volt, volt_dec, adc)
-- comparator
ads1115.setting(ads1115.GAIN_6_144V, ads1115.DR_128SPS, ads1115.SINGLE_0, ads1115.CONTINUOUS, ads1115.COMP_1CONV, 1000, 2000)
local function comparator(level, when)
-- read adc result with read() when threshold reached
volt, volt_dec, adc = ads1115.read()
print(volt, volt_dec, adc)
end
gpio.mode(alert_pin, gpio.INT)
gpio.trig(alert_pin, "both", comparator)
-- read adc result with read()
volt, volt_dec, adc = ads1115.read()
print(volt, volt_dec, adc)
```
## ads1115.setting()
Configuration settings for the ADC.
#### Syntax
`ads1115.setting(GAIN, SAMPLES, CHANNEL, MODE[, CONVERSION_RDY][, COMPARATOR, THRESHOLD_LOW, THRESHOLD_HI])`
#### Parameters
- `GAIN` Programmable gain amplifier
* `ads1115.GAIN_6_144V` 2/3x Gain
* `ads1115.GAIN_4_096V` 1x Gain
* `ads1115.GAIN_2_048V` 2x Gain
* `ads1115.GAIN_1_024V` 4x Gain
* `ads1115.GAIN_0_512V` 8x Gain
* `ads1115.GAIN_0_256V` 16x Gain
- `SAMPLES` Data rate in samples per second
* `ads1115.DR_8SPS`
* `ads1115.DR_16SPS`
* `ads1115.DR_32SPS`
* `ads1115.DR_64SPS`
* `ads1115.DR_128SPS`
* `ads1115.DR_250SPS`
* `ads1115.DR_475SPS`
* `ads1115.DR_860SPS`
- `CHANNEL` Input multiplexer for single-ended or differential measurement
* `ads1115.SINGLE_0` channel 0 to GND
* `ads1115.SINGLE_1` channel 1 to GND
* `ads1115.SINGLE_2` channel 2 to GND
* `ads1115.SINGLE_3` channel 3 to GND
* `ads1115.DIFF_0_1` channel 0 to 1
* `ads1115.DIFF_0_3` channel 0 to 3
* `ads1115.DIFF_1_3` channel 1 to 3
* `ads1115.DIFF_2_3` channel 2 to 3
- `MODE` Device operating mode
* `ads1115.SINGLE_SHOT` single-shot mode
* `ads1115.CONTINUOUS` continuous mode
- `CONVERSION_RDY` Number of conversions after conversion ready asserts (optional)
* `ads1115.CONV_RDY_1`
* `ads1115.CONV_RDY_2`
* `ads1115.CONV_RDY_4`
- `COMPARATOR` Number of conversions after comparator asserts (optional)
* `ads1115.COMP_1CONV`
* `ads1115.COMP_2CONV`
* `ads1115.COMP_4CONV`
- `THRESHOLD_LOW`
* `0` - `+ GAIN_MAX` in mV for single-ended inputs
* `- GAIN_MAX` - `+ GAIN_MAX` in mV for differential inputs
- `THRESHOLD_HI`
* `0` - `+ GAIN_MAX` in mV for single-ended inputs
* `- GAIN_MAX` - `+ GAIN_MAX` in mV for differential inputs
#### Returns
`nil`
#### Example
```lua
local id, sda, scl = 0, 6, 5
i2c.setup(id, sda, scl, i2c.SLOW)
ads1115.setup(ads1115.ADDR_GND)
ads1115.setting(ads1115.GAIN_6_144V, ads1115.DR_128SPS, ads1115.SINGLE_0, ads1115.SINGLE_SHOT)
```
## ads1115.setup()
Initializes the device on the defined I²C device address.
#### Syntax
`ads1115.setup(ADDRESS)`
#### Parameters
- `ADDRESS`
* `ads1115.ADDR_GND`
* `ads1115.ADDR_VDD`
* `ads1115.ADDR_SDA`
* `ads1115.ADDR_SCL`
#### Returns
`nil`
#### Example
```lua
local id, sda, scl = 0, 6, 5
i2c.setup(id, sda, scl, i2c.SLOW)
ads1115.setup(ads1115.ADDR_GND)
```
## ads1115.startread()
Starts the ADC reading for single-shot mode and after the conversion is done it will invoke an optional callback function in which the ADC conversion result can be obtained.
#### Syntax
`ads1115.startread([CALLBACK])`
#### Parameters
- `CALLBACK` callback function which will be invoked after the adc conversion is done
* `function(volt, volt_dec, adc) end`
#### Returns
- `nil`
#### Example
```lua
local id, alert_pin, sda, scl = 0, 7, 6, 5
i2c.setup(id, sda, scl, i2c.SLOW)
ads1115.setup(ads1115.ADDR_GND)
-- single shot
ads1115.setting(ads1115.GAIN_6_144V, ads1115.DR_128SPS, ads1115.SINGLE_0, ads1115.SINGLE_SHOT)
-- start adc conversion and get result in callback after conversion is ready
ads1115.startread(function(volt, volt_dec, adc) print(volt, volt_dec, adc) end)
-- conversion ready
ads1115.setting(ads1115.GAIN_6_144V, ads1115.DR_128SPS, ads1115.SINGLE_0, ads1115.SINGLE_SHOT, ads1115.CONV_RDY_1)
local function conversion_ready(level, when)
volt, volt_dec, adc = ads1115.read()
print(volt, volt_dec, adc)
end
gpio.mode(alert_pin, gpio.INT)
gpio.trig(alert_pin, "down", conversion_ready)
-- start conversion and get result with read() after conversion ready pin asserts
ads1115.startread()
```