From 7f0db02066a7554b959fa264fcc200b2a2e4c929 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 1 Jan 2023 18:03:19 +0100 Subject: Add driver for ADS111x 16-Bit ADC --- include/driver/ads111x.h | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 include/driver/ads111x.h (limited to 'include/driver/ads111x.h') diff --git a/include/driver/ads111x.h b/include/driver/ads111x.h new file mode 100644 index 0000000..f25dcde --- /dev/null +++ b/include/driver/ads111x.h @@ -0,0 +1,88 @@ +/* + * Copyright 2023 Daniel Friesel + * + * SPDX-License-Identifier: BSD-2-Clause + * + * Driver for ADS111x 16-Bit ADCs + */ +#ifndef ADS111x_H +#define ADS111x_H + +class ADS111x { + private: + ADS111x(const ADS111x ©); + unsigned char const address; + unsigned char fsr_scale; + + unsigned char txbuf[3]; + unsigned char rxbuf[2]; + + unsigned char const P_CONVERSION = 0; + unsigned char const P_CONFIG = 1; + unsigned char const P_LO_THRESH = 2; + unsigned char const P_HI_THRESH = 3; + + public: + ADS111x(unsigned char const addr) : address(addr), fsr_scale(8) {} + + unsigned short const START_CONVERSION = 1 << 15; + enum conf_mux : unsigned short { + DIFFERENTIAL_01 = 0 << 12, + DIFFERENTIAL_03 = 1 << 12, + DIFFERENTIAL_13 = 2 << 12, + DIFFERENTIAL_23 = 3 << 12, + SINGLE_0 = 4 << 12, + SINGLE_1 = 5 << 12, + SINGLE_2 = 6 << 12, + SINGLE_3 = 7 << 12 + }; + unsigned short const CONF_PGA_MASK = 0b0000111000000000; + unsigned short const CONF_PGA_OFFSET = 9; + enum conf_pga : unsigned short { + FSR_6V = 0 << 9, + FSR_4V = 1 << 9, + FSR_2V = 2 << 9, + FSR_1V = 3 << 9, + FSR_0V5 = 4 << 9, + FSR_0V25 = 5 << 9 + }; + enum conf_mode : unsigned short { + CONTINUOUS = 0 << 8, + SINGLE_SHORT = 1 << 8, + }; + enum conf_data_rate : unsigned short { + SPS_8 = 0 << 5, + SPS_16 = 1 << 5, + SPS_32 = 2 << 5, + SPS_64 = 3 << 5, + SPS_128 = 4 << 5, + SPS_250 = 5 << 5, + SPS_475 = 6 << 5, + SPS_860 = 7 << 5 + }; + enum conf_comp_mode : unsigned short { + TRADITIONAL = 0 << 4, + WINDOW = 1 << 4 + }; + enum conf_comp_pol : unsigned short { + ACTIVE_LOW = 0 << 3, + ACTIVE_HIGH = 1 << 3, + }; + enum conf_comp_lat : unsigned short { + NONLATCHING = 0 << 2, + LATCHING = 1 << 2 + }; + enum conf_comp_queue : unsigned short { + ONE_CONVERSON = 0, + TWO_CONVERSIONS, + FOUR_CONVERSIONS, + DISABLED + }; + + void configure(unsigned short config); + float readVoltage(); +}; + +extern ADS111x ads111x; + +#endif -- cgit v1.2.3