/** * @file ADS1112_ATY.c * * @param Project DEVICE_GENERAL_ATY_LIB * * @author ATY * * @copyright * - Copyright 2017 - 2023 MZ-ATY * - This code follows: * - MZ-ATY Various Contents Joint Statement - * * https://mengze.top/MZ-ATY_VCJS * - CC 4.0 BY-NC-SA - * * https://creativecommons.org/licenses/by-nc-sa/4.0/ * - Your use will be deemed to have accepted the terms of this statement. * * @brief Familiar functions of ADS1112 for all embedded device * * @version * - 1_01_230828 > ATY * -# Preliminary version, first Release * - Undone ******************************************************************************** */ #ifndef __ADS1112_ATY_C #define __ADS1112_ATY_C #include "ADS1112_ATY.h" /******************************* For user *************************************/ /******************************************************************************/ /** * @brief Set ADS1112 paramas * @param channelP channel type, default 0 -> C0-C1 * @param conversion conversion, default 0 * @param resolution resolution, higher resolution with lower data rate, default 3 * @param gain gain, default 0 */ uint8_t ADS1112_Setting(uint8_t channel, uint8_t conversion, uint8_t resolution, uint8_t gain) { /* INP controls which two of the four analog inputs are used to measure data in the ADC. INP1 INP0 V IN+ V IN- 0 0 AIN0 AIN1 0 1 AIN2 AIN3 1 0 AIN0 AIN3 1 1 AIN1 AIN3 */ /* Bits DR1 and DR2 control the ADS1112 data rate and resolution DR1 DR0 DATA RATE RESOLUTION 0 0 240SPS 12 Bits 0 1 60SPS 14 Bits 1 0 30SPS 15 Bits 1 1 15SPS 16 Bits */ /* Bits PGA1 and PGA0 control the ADS1112 ADS1112 gain setting PGA1 PGA0 GAIN 0 0 1 0 1 2 1 0 4 1 1 8 */ uint8_t tempReg = (1 << 7 | channel << 5 | conversion << 4 | resolution << 2 | gain); return I2C_Write(ADS1112_ADDRESS, &tempReg, 1); } // ADS1112_Setting(CHANNEL_0_3, CONVERSION_CONTINUOUS, RESOLUTION_16BIT, GAIN_1); /** * @brief read data from ADS1112 * @param chipAddr chip address * @return uint16_t data value */ uint16_t ADS1112_Read(uint8_t chipAddr) { uint8_t errCount = 11; uint8_t tempRealValue[3] = {0}; I2C_Read(chipAddr, tempRealValue, 3); while(errCount--){ if((tempRealValue[2] & (uint8_t)0x80) != 0) I2C_Read(chipAddr, tempRealValue, 3); } if(errCount <= 1) return 0; return (uint16_t)((uint16_t)((uint16_t)tempRealValue[0] << 8) | (uint16_t)tempRealValue[1]); } // ADS1112_Read(ADS1112_ADDRESS); float ADS1112_Voltage(uint16_t u16Data) { if(u16Data > 0x7FFF) return ((((float)(u16Data - 0x8000) / 65536.0f) * 2.048f * 2) + (VREF_COM - 2.048f)); else return ((((float)(u16Data + 0x8000) / 65536.0f) * 2.048f * 2) + (VREF_COM - 2.048f)); } // ADS1112_Voltage(ADS1112_Read(ADS1112_ADDRESS)); #endif /* __ADS1112_ATY_C */ /******************************** End Of File *********************************/