ADS1112_ATY.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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. * - 1_02_231229 > ATY
  25. * -# add multy addr and channel
  26. ********************************************************************************
  27. */
  28. #ifndef __ADS1112_ATY_C
  29. #define __ADS1112_ATY_C
  30. #include "ADS1112_ATY.h"
  31. /******************************* For user *************************************/
  32. /******************************************************************************/
  33. /**
  34. * @brief Set ADS1112 paramas
  35. * @param adChannel channel type, default 0 -> C0-C1
  36. * @param conversion conversion, default 0
  37. * @param resolution resolution, higher resolution with lower data rate, default 3
  38. * @param gain gain, default 0
  39. * @param addr chip address
  40. * @param channel chip channel
  41. */
  42. uint8_t ADS1112_Setting(uint8_t adChannel, uint8_t conversion, uint8_t resolution, uint8_t gain, uint8_t addr, uint8_t channel)
  43. {
  44. /* INP controls which two of the four analog inputs are used to measure data in the ADC.
  45. INP1 INP0 V IN+ V IN-
  46. 0 0 AIN0 AIN1
  47. 0 1 AIN2 AIN3
  48. 1 0 AIN0 AIN3
  49. 1 1 AIN1 AIN3
  50. */
  51. /* Bits DR1 and DR2 control the ADS1112 data rate and resolution
  52. DR1 DR0 DATA RATE RESOLUTION
  53. 0 0 240SPS 12 Bits
  54. 0 1 60SPS 14 Bits
  55. 1 0 30SPS 15 Bits
  56. 1 1 15SPS 16 Bits
  57. */
  58. /* Bits PGA1 and PGA0 control the ADS1112 ADS1112 gain setting
  59. PGA1 PGA0 GAIN
  60. 0 0 1
  61. 0 1 2
  62. 1 0 4
  63. 1 1 8
  64. */
  65. uint8_t tempReg = (1 << 7 |
  66. adChannel << 5 |
  67. conversion << 4 |
  68. resolution << 2 |
  69. gain);
  70. return I2C_Write(addr, &tempReg, 1, channel);
  71. }
  72. /**
  73. * @brief read data from ADS1112
  74. * @param addr chip address
  75. * @param channel chip channel
  76. * @return uint16_t data value
  77. */
  78. uint16_t ADS1112_Read(uint8_t addr, uint8_t channel)
  79. {
  80. uint8_t errCount = 11;
  81. uint8_t tempRealValue[3] = {0};
  82. I2C_Read(chipAddr, tempRealValue, 3);
  83. while(errCount--){
  84. if((tempRealValue[2] & (uint8_t)0x80) != 0)
  85. I2C_Read(addr, tempRealValue, 3, channel);
  86. }
  87. if(errCount <= 1)
  88. return 0;
  89. return (uint16_t)((uint16_t)((uint16_t)tempRealValue[0] << 8) | (uint16_t)tempRealValue[1]);
  90. }
  91. /**
  92. * @brief
  93. * @param u16Data chip return data
  94. * @return float voltage value
  95. */
  96. float ADS1112_VoltageConvert(uint16_t u16Data)
  97. {
  98. if(u16Data > 0x7FFF)
  99. return ((((float)(u16Data - 0x8000) / 65536.0f) * 2.048f * 2) + (VREF_COM - 2.048f));
  100. else
  101. return ((((float)(u16Data + 0x8000) / 65536.0f) * 2.048f * 2) + (VREF_COM - 2.048f));
  102. }
  103. // void main()
  104. // {
  105. // while(1)
  106. // {
  107. // float result = 0;
  108. // ADS1112_Setting(CHANNEL_0_3, CONVERSION_CONTINUOUS, RESOLUTION_16BIT, GAIN_1, ADS1112_ADDRESS, ADS1112_I2C);
  109. // result = ADS1112_VoltageConvert(ADS1112_Read(ADS1112_ADDRESS, ADS1112_I2C));
  110. // printf(result);
  111. // DelayMs(1000);
  112. // ADS1112_Setting(CHANNEL_1_3, CONVERSION_CONTINUOUS, RESOLUTION_16BIT, GAIN_1, ADS1112_ADDRESS, ADS1112_I2C);
  113. // result = ADS1112_VoltageConvert(ADS1112_Read(ADS1112_ADDRESS, ADS1112_I2C));
  114. // printf(result);
  115. // DelayMs(1000);
  116. // }
  117. // }
  118. #endif /* __ADS1112_ATY_C */
  119. /******************************** End Of File *********************************/