-
Notifications
You must be signed in to change notification settings - Fork 4
/
mgos_ads1x1x.h
124 lines (111 loc) · 4.49 KB
/
mgos_ads1x1x.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
* Copyright 2019 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "mgos.h"
#include "mgos_i2c.h"
#ifdef __cplusplus
extern "C" {
#endif
struct mgos_ads1x1x;
enum mgos_ads1x1x_type {
ADC_NONE = 0,
ADC_ADS1013,
ADC_ADS1014,
ADC_ADS1015,
ADC_ADS1113,
ADC_ADS1114,
ADC_ADS1115
};
enum mgos_ads1x1x_fsr {
MGOS_ADS1X1X_FSR_MIN = 0, // 6.144V
MGOS_ADS1X1X_FSR_6144, // 6.144V
MGOS_ADS1X1X_FSR_4096, // 4.096V
MGOS_ADS1X1X_FSR_2048, // 2.048V
MGOS_ADS1X1X_FSR_1024, // 1.024V
MGOS_ADS1X1X_FSR_512, // 0.512V
MGOS_ADS1X1X_FSR_256, // 0.256V
MGOS_ADS1X1X_FSR_DEFAULT, // 2.048V
MGOS_ADS1X1X_FSR_MAX, // 0.256V
};
enum mgos_ads1x1x_dr {
MGOS_ADS1X1X_SPS_MIN = 0, // 8SPS for ADS111X, 128SPS for ADS101X
MGOS_ADS1X1X_SPS_8, // 8SPS, ADS111X only
MGOS_ADS1X1X_SPS_16, // 16SPS, ADS111X only
MGOS_ADS1X1X_SPS_32, // 32SPS, ADS111X only
MGOS_ADS1X1X_SPS_64, // 64SPS, ADS111X only
MGOS_ADS1X1X_SPS_128, // 128SPS, both ADS111X and ADS101X
MGOS_ADS1X1X_SPS_250, // 250SPS, both ADS111X and ADS101X
MGOS_ADS1X1X_SPS_475, // 475SPS, ADS111X only
MGOS_ADS1X1X_SPS_490, // 490SPS, ADS101X only
MGOS_ADS1X1X_SPS_860, // 860SPS, ADS111X only
MGOS_ADS1X1X_SPS_920, // 920SPS, ADS101X only
MGOS_ADS1X1X_SPS_1600, // 1600SPS, ADS101X only
MGOS_ADS1X1X_SPS_2400, // 2400SPS, ADS101X only
MGOS_ADS1X1X_SPS_3300, // 3300SPS, ADS101X only
MGOS_ADS1X1X_SPS_DEFAULT, // 128SPS for ADS111X, 1600SPS for ADS101X
MGOS_ADS1X1X_SPS_MAX, // 860SPS for ADS111X, 3300SPS for ADS101X
};
/*
* Initialize a ADS1X1X on the I2C bus `i2c` at address specified in `i2caddr`
* parameter (default ADS1X1X is on address 0x48). The device will be polled for
* validity, upon success a new `struct mgos_ads1x1x` is allocated and
* returned. If the device could not be found, NULL is returned.
*/
struct mgos_ads1x1x *mgos_ads1x1x_create(struct mgos_i2c *i2c, uint8_t i2caddr, enum mgos_ads1x1x_type type);
/*
* Destroy the data structure associated with a ADS1X1X device. The reference
* to the pointer of the `struct mgos_ads1x1x` has to be provided, and upon
* successful destruction, its associated memory will be freed and the pointer
* set to NULL and true will be returned.
*/
bool mgos_ads1x1x_destroy(struct mgos_ads1x1x **dev);
/* Get or Set the Full Scale Range (FSR). All chips in the ADS1X1X family support
* the same settings. By default, 2.048V is used.
*
* Note: ADS1x13 does not support this, and always has an FSR of 2.048V.
*
* Returns true on success, false otherwise.
*/
bool mgos_ads1x1x_set_fsr(struct mgos_ads1x1x *dev, enum mgos_ads1x1x_fsr fsr);
bool mgos_ads1x1x_get_fsr(struct mgos_ads1x1x *dev, enum mgos_ads1x1x_fsr *fsr);
/* Get or Set the Data Rate (in Samples per Second). If the supplied `dr`
* argument cannot be set on the chip, false is returned. Otherwise, the
* supplied `dr` is set. By default, ADS101X sets 1600SPS, ADS111X sets 128SPS.
*
* Returns true on success, false otherwise.
*/
bool mgos_ads1x1x_set_dr(struct mgos_ads1x1x *dev, enum mgos_ads1x1x_dr dr);
bool mgos_ads1x1x_get_dr(struct mgos_ads1x1x *dev, enum mgos_ads1x1x_dr *dr);
/* Read a channel from the ADC and return the read value in `result`. If the
* channel was invalid, or an error occurred, false is returned and the result
* cannot be relied upon.
*
* Returns true on success, false otherwise.
*/
bool mgos_ads1x1x_read(struct mgos_ads1x1x *dev, uint8_t chan, int16_t *result);
/* Read a 2-channel differential from the ADC and return the read value in `result`.
* If the channel pair invalid, or an error occurred, false is returned and the
* result cannot be relied upon. Upon success, true is returned.
*
* Note: This is only available on ADS1X15 chips.
* Valid chanP/chanN pairs are : 0/1, 0/3, 1/3, 2/3.
*
* Returns true on success, false otherwise.
*/
bool mgos_ads1x1x_read_diff(struct mgos_ads1x1x *dev, uint8_t chanP, uint8_t chanN, int16_t *result);
#ifdef __cplusplus
}
#endif