ADS1112_ATY.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /**
  2. * @file ADS1112_ATY.c
  3. *
  4. * @param Project DEVICE_GENERAL_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2023 MZ-ATY
  10. * - This code follows:
  11. * - MZ-ATY Various Contents Joint Statement -
  12. * <a href="https://mengze.top/MZ-ATY_VCJS">
  13. * https://mengze.top/MZ-ATY_VCJS</a>
  14. * - CC 4.0 BY-NC-SA -
  15. * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  16. * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
  17. * - Your use will be deemed to have accepted the terms of this statement.
  18. *
  19. * @brief Familiar functions of ADS1112 for all embedded device
  20. *
  21. * @version
  22. * - 1_01_230828 > ATY
  23. * -# Preliminary version, first Release
  24. * - Undone
  25. ********************************************************************************
  26. */
  27. #ifndef __ADS1112_ATY_C
  28. #define __ADS1112_ATY_C
  29. #include "ADS1112_ATY.h"
  30. /******************************* For user *************************************/
  31. /******************************************************************************/
  32. /**
  33. * @brief Set ADS1112 paramas
  34. * @param channelP channel type, default 0 -> C0-C1
  35. * @param conversion conversion, default 0
  36. * @param resolution resolution, higher resolution with lower data rate, default 3
  37. * @param gain gain, default 0
  38. */
  39. uint8_t ADS1112_Setting(uint8_t channel, uint8_t conversion, uint8_t resolution, uint8_t gain)
  40. {
  41. /* INP controls which two of the four analog inputs are used to measure data in the ADC.
  42. INP1 INP0 V IN+ V IN-
  43. 0 0 AIN0 AIN1
  44. 0 1 AIN2 AIN3
  45. 1 0 AIN0 AIN3
  46. 1 1 AIN1 AIN3
  47. */
  48. /* Bits DR1 and DR2 control the ADS1112 data rate and resolution
  49. DR1 DR0 DATA RATE RESOLUTION
  50. 0 0 240SPS 12 Bits
  51. 0 1 60SPS 14 Bits
  52. 1 0 30SPS 15 Bits
  53. 1 1 15SPS 16 Bits
  54. */
  55. /* Bits PGA1 and PGA0 control the ADS1112 ADS1112 gain setting
  56. PGA1 PGA0 GAIN
  57. 0 0 1
  58. 0 1 2
  59. 1 0 4
  60. 1 1 8
  61. */
  62. uint8_t tempReg = (1 << 7 |
  63. channel << 5 |
  64. conversion << 4 |
  65. resolution << 2 |
  66. gain);
  67. return I2C_Write(ADS1112_ADDRESS, &tempReg, 1);
  68. }
  69. // ADS1112_Setting(CHANNEL_0_3, CONVERSION_CONTINUOUS, RESOLUTION_16BIT, GAIN_1);
  70. /**
  71. * @brief read data from ADS1112
  72. * @param chipAddr chip address
  73. * @return uint16_t data value
  74. */
  75. uint16_t ADS1112_Read(uint8_t chipAddr)
  76. {
  77. uint8_t errCount = 11;
  78. uint8_t tempRealValue[3] = {0};
  79. I2C_Read(chipAddr, tempRealValue, 3);
  80. while(errCount--){
  81. if((tempRealValue[2] & (uint8_t)0x80) != 0)
  82. I2C_Read(chipAddr, tempRealValue, 3);
  83. }
  84. if(errCount <= 1)
  85. return 0;
  86. return (uint16_t)((uint16_t)((uint16_t)tempRealValue[0] << 8) | (uint16_t)tempRealValue[1]);
  87. }
  88. // ADS1112_Read(ADS1112_ADDRESS);
  89. float ADS1112_Voltage(uint16_t u16Data)
  90. {
  91. if(u16Data > 0x7FFF)
  92. return ((((float)(u16Data - 0x8000) / 65536.0f) * 2.048f * 2) + (VREF_COM - 2.048f));
  93. else
  94. return ((((float)(u16Data + 0x8000) / 65536.0f) * 2.048f * 2) + (VREF_COM - 2.048f));
  95. }
  96. // ADS1112_Voltage(ADS1112_Read(ADS1112_ADDRESS));
  97. #endif /* __ADS1112_ATY_C */
  98. /******************************** End Of File *********************************/