adc8 2.0.0.0
adc8.h
Go to the documentation of this file.
1/*
2 * MikroSDK - MikroE Software Development Kit
3 * Copyright© 2020 MikroElektronika d.o.o.
4 *
5 * Permission is hereby granted, free of charge, to any person
6 * obtaining a copy of this software and associated documentation
7 * files (the "Software"), to deal in the Software without restriction,
8 * including without limitation the rights to use, copy, modify, merge,
9 * publish, distribute, sublicense, and/or sell copies of the Software,
10 * and to permit persons to whom the Software is furnished to do so,
11 * subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22 * OR OTHER DEALINGS IN THE SOFTWARE.
23 */
32// ----------------------------------------------------------------------------
33
34#ifndef ADC8_H
35#define ADC8_H
36
41#ifdef PREINIT_SUPPORTED
42#include "preinit.h"
43#endif
44
45#ifdef MikroCCoreVersion
46 #if MikroCCoreVersion >= 1
47 #include "delays.h"
48 #endif
49#endif
50
51#include "drv_digital_in.h"
52#include "drv_i2c_master.h"
53
54// -------------------------------------------------------------- PUBLIC MACROS
64#define ADC8_MAP_MIKROBUS( cfg, mikrobus ) \
65 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
66 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
67 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
74#define ADC8_RETVAL uint8_t
75
76#define ADC8_OK 0x00
77#define ADC8_INIT_ERROR 0xFF
84#define ADC8_REG_CONFIGURATION 0x01
85#define ADC8_REG_CONVERSION 0x00
86#define ADC8_REG_THRESHOLD_LOW 0x02
87#define ADC8_REG_THRESHOLD_HIGH 0x03
94#define ADC8_CFG_CONVERSION_ENABLE 0x0000
95#define ADC8_CFG_CONVERSION_DISABLE 0x8000
102#define ADC8_CFG_MUX_AINP0_AINN1 0x0000
103#define ADC8_CFG_MUX_AINP0_AINN3 0x1000
104#define ADC8_CFG_MUX_AINP1_AINN3 0x2000
105#define ADC8_CFG_MUX_AINP2_AINN3 0x3000
106#define ADC8_CFG_MUX_AINP0_GND 0x4000
107#define ADC8_CFG_MUX_AINP1_GND 0x5000
108#define ADC8_CFG_MUX_AINP2_GND 0x6000
109#define ADC8_CFG_MUX_AINP3_GND 0x7000
116#define ADC8_CFG_GAIN_6144mV 0x0000
117#define ADC8_CFG_GAIN_4096mV 0x0200
118#define ADC8_CFG_GAIN_2048mV 0x0400
119#define ADC8_CFG_GAIN_1024mV 0x0600
120#define ADC8_CFG_GAIN_512mV 0x0800
121#define ADC8_CFG_GAIN_256mV 0x0A00
128#define ADC8_CFG_MODE_CONTINUOUS 0x0000
129#define ADC8_CFG_MODE_SINGLE 0x0100
136#define ADC8_CFG_SPS_8 0x0000
137#define ADC8_CFG_SPS_16 0x0020
138#define ADC8_CFG_SPS_32 0x0040
139#define ADC8_CFG_SPS_64 0x0060
140#define ADC8_CFG_SPS_128 0x0080
141#define ADC8_CFG_SPS_250 0x00A0
142#define ADC8_CFG_SPS_475 0x00C0
143#define ADC8_CFG_SPS_860 0x00E0
150#define ADC8_CFG_COMP_MODE_TRADITIONAL 0x0000
151#define ADC8_CFG_COMP_MODE_WINDOW 0x0010
158#define ADC8_CFG_COMP_POL_LOW 0x0000
159#define ADC8_CFG_COMP_POL_HIGH 0x0008
166#define ADC8_CFG_COMP_LAT_ENABLE 0x0000
167#define ADC8_CFG_COMP_LAT_DISABLE 0x0004
168
169#define ADC8_CFG_COMP_QUE_1_CONV 0x0000
170#define ADC8_CFG_COMP_QUE_2_CONV 0x0001
171#define ADC8_CFG_COMP_QUE_4_CONV 0x0002
172#define ADC8_CFG_COMP_QUE_ALERT_CONV 0x0003
179#define ADC8_DEVICE_SLAVE_ADDR_GND 0x48
180#define ADC8_DEVICE_SLAVE_ADDR_VDD 0x49
181#define ADC8_DEVICE_SLAVE_ADDR_SDA 0x4A
182#define ADC8_DEVICE_SLAVE_ADDR_SCL 0x4B
189#define ADC8_SINGLE_CHANNEL_0 0x00
190#define ADC8_SINGLE_CHANNEL_1 0x01
191#define ADC8_SINGLE_CHANNEL_2 0x02
192#define ADC8_SINGLE_CHANNEL_3 0x03
193#define ADC8_DIFF_CHANNEL_0_1 0x04
194#define ADC8_DIFF_CHANNEL_0_3 0x05
195#define ADC8_DIFF_CHANNEL_1_3 0x06
196#define ADC8_DIFF_CHANNEL_2_3 0x07
199 // End group macro
200// --------------------------------------------------------------- PUBLIC TYPES
209typedef struct
210{
211 // Input pins
212
213 digital_in_t int_pin;
214
215 // Modules
216
217 i2c_master_t i2c;
218
219 // ctx variable
220
222
225 uint8_t diff_flag;
226
227} adc8_t;
228
232typedef struct
233{
234 // Communication gpio pins
235
236 pin_name_t scl;
237 pin_name_t sda;
238
239 // Additional gpio pins
240
241 pin_name_t int_pin;
242
243 // static variable
244
245 uint32_t i2c_speed;
246 uint8_t i2c_address;
247
248} adc8_cfg_t;
249
253typedef struct
254{
255 float ch_0;
256 float ch_1;
257 float ch_2;
258 float ch_3;
259
261
265typedef struct
266{
267 float ch_0_1;
268 float ch_0_3;
269 float ch_1_3;
270 float ch_2_3;
271
273
274 // End types group
275// ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
276
282#ifdef __cplusplus
283extern "C"{
284#endif
285
295
305
326
337void adc8_generic_write ( adc8_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
338
350void adc8_generic_read ( adc8_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
351
370void adc8_set_cfg_register ( adc8_t *ctx, uint16_t cfg );
371
380uint16_t adc8_get_adc_value ( adc8_t *ctx, uint8_t channel );
381
390float adc8_get_voltage ( adc8_t *ctx, uint8_t channel );
391
400
410
420
421#ifdef __cplusplus
422}
423#endif
424#endif // _ADC8_H_
425
426 // End public_function group
428
429// ------------------------------------------------------------------------- END
#define ADC8_RETVAL
Definition adc8.h:74
void adc8_set_cfg_register(adc8_t *ctx, uint16_t cfg)
Device configuration for measurement.
uint8_t adc8_get_interrupt_state(adc8_t *ctx)
Get interrupt pin state.
void adc8_generic_read(adc8_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
void adc8_get_single_channel(adc8_t *ctx, adc8_single_volt_t *volt)
Get [Package} Single channel voltage.
void adc8_cfg_setup(adc8_cfg_t *cfg)
Config Object Initialization function.
void adc8_get_diff_channel(adc8_t *ctx, adc8_diff_volt_t *volt)
Get [Package] Diff channel voltage.
uint16_t adc8_get_adc_value(adc8_t *ctx, uint8_t channel)
Get ADC value on the channel.
float adc8_get_voltage(adc8_t *ctx, uint8_t channel)
Read Voltage in mV.
ADC8_RETVAL adc8_init(adc8_t *ctx, adc8_cfg_t *cfg)
Initialization function.
void adc8_default_cfg(adc8_t *ctx)
Click Default Configuration function.
void adc8_generic_write(adc8_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
Click configuration structure definition.
Definition adc8.h:233
uint32_t i2c_speed
Definition adc8.h:245
pin_name_t scl
Definition adc8.h:236
pin_name_t int_pin
Definition adc8.h:241
pin_name_t sda
Definition adc8.h:237
uint8_t i2c_address
Definition adc8.h:246
Diff channel (volt) type.
Definition adc8.h:266
float ch_2_3
Definition adc8.h:270
float ch_1_3
Definition adc8.h:269
float ch_0_3
Definition adc8.h:268
float ch_0_1
Definition adc8.h:267
Single channel (volt) type.
Definition adc8.h:254
float ch_1
Definition adc8.h:256
float ch_0
Definition adc8.h:255
float ch_2
Definition adc8.h:257
float ch_3
Definition adc8.h:258
Click ctx object definition.
Definition adc8.h:210
uint16_t cfg_reg_value
Definition adc8.h:224
float max_voltage
Definition adc8.h:223
uint8_t diff_flag
Definition adc8.h:225
digital_in_t int_pin
Definition adc8.h:213
i2c_master_t i2c
Definition adc8.h:217
uint8_t slave_address
Definition adc8.h:221