| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /**
- * @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 -
- * <a href="https://mengze.top/MZ-ATY_VCJS">
- * https://mengze.top/MZ-ATY_VCJS</a>
- * - CC 4.0 BY-NC-SA -
- * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
- * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
- * - 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
- * - 1_02_231229 > ATY
- * -# add multy addr and channel
- ********************************************************************************
- */
- #ifndef __ADS1112_ATY_C
- #define __ADS1112_ATY_C
- #include "ADS1112_ATY.h"
- /******************************* For user *************************************/
- /******************************************************************************/
- /**
- * @brief Set ADS1112 paramas
- * @param adChannel 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
- * @param addr chip address
- * @param channel chip channel
- */
- uint8_t ADS1112_Setting(uint8_t adChannel, uint8_t conversion, uint8_t resolution, uint8_t gain, uint8_t addr, uint8_t channel)
- {
- /* 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 |
- adChannel << 5 |
- conversion << 4 |
- resolution << 2 |
- gain);
- return I2C_Write(addr, &tempReg, 1, channel);
- }
- /**
- * @brief read data from ADS1112
- * @param addr chip address
- * @param channel chip channel
- * @return uint16_t data value
- */
- uint16_t ADS1112_Read(uint8_t addr, uint8_t channel)
- {
- 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(addr, tempRealValue, 3, channel);
- }
- if(errCount <= 1)
- return 0;
- return (uint16_t)((uint16_t)((uint16_t)tempRealValue[0] << 8) | (uint16_t)tempRealValue[1]);
- }
- /**
- * @brief
- * @param u16Data chip return data
- * @return float voltage value
- */
- float ADS1112_VoltageConvert(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));
- }
- // void main()
- // {
- // while(1)
- // {
- // float result = 0;
- // ADS1112_Setting(CHANNEL_0_3, CONVERSION_CONTINUOUS, RESOLUTION_16BIT, GAIN_1, ADS1112_ADDRESS, ADS1112_I2C);
- // result = ADS1112_VoltageConvert(ADS1112_Read(ADS1112_ADDRESS, ADS1112_I2C));
- // printf(result);
- // DelayMs(1000);
- // ADS1112_Setting(CHANNEL_1_3, CONVERSION_CONTINUOUS, RESOLUTION_16BIT, GAIN_1, ADS1112_ADDRESS, ADS1112_I2C);
- // result = ADS1112_VoltageConvert(ADS1112_Read(ADS1112_ADDRESS, ADS1112_I2C));
- // printf(result);
- // DelayMs(1000);
- // }
- // }
- #endif /* __ADS1112_ATY_C */
- /******************************** End Of File *********************************/
|