hx710a.c 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * @file hx710a.c
  3. *
  4. * @param Project DEVICE_GENERAL_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2026 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 functions of HX710A for C platform (Dev-style)
  20. *
  21. * @version
  22. * - 1_01_251112 > ATY
  23. * -# Add Dev-style interface aligned to LED_ATY; keep legacy APIs
  24. ********************************************************************************
  25. */
  26. #ifndef __HX710A_C
  27. #define __HX710A_C
  28. #include "hx710a.h"
  29. uint8_t HX710A_InitDev(struct HX710A_ATY_Dev* dev)
  30. {
  31. __ATY_LOCK(dev);
  32. if (dev->sckSet) dev->sckSet(__ATY_HL_H);
  33. if (dev->delay_ms) dev->delay_ms(2);
  34. if (dev->sckSet) dev->sckSet(__ATY_HL_L);
  35. if (dev->delay_ms) dev->delay_ms(2);
  36. if (dev->debugEnable == 1 && dev->LOG) dev->LOG("\r\nHX710A init done.");
  37. __ATY_UNLOCK(dev);
  38. return 0;
  39. }
  40. uint8_t HX710A_IsReadyDev(struct HX710A_ATY_Dev* dev)
  41. {
  42. return (dev->doutRead && dev->doutRead() == __ATY_HL_L) ? 1 : 0;
  43. }
  44. uint8_t HX710A_ReadRawDev(uint8_t p, uint32_t* raw, struct HX710A_ATY_Dev* dev)
  45. {
  46. __ATY_LOCK(dev);
  47. uint32_t data = 0;
  48. if (dev->sckSet) dev->sckSet(__ATY_HL_L);
  49. while (!HX710A_IsReadyDev(dev)) { /* wait ready */ }
  50. for (uint8_t i = 0; i < 24; i++) {
  51. if (dev->sckSet) dev->sckSet(__ATY_HL_H);
  52. data = (data << 1);
  53. if (dev->sckSet) dev->sckSet(__ATY_HL_L);
  54. if (dev->doutRead) data += dev->doutRead();
  55. }
  56. if (dev->sckSet) dev->sckSet(__ATY_HL_H);
  57. data = data ^ 0x800000; // sign bit adjust
  58. if (dev->sckSet) dev->sckSet(__ATY_HL_L);
  59. if (p == 1 || p == 2) {
  60. // internal temp select pulse
  61. if (dev->sckSet) dev->sckSet(__ATY_HL_H);
  62. if (dev->sckSet) dev->sckSet(__ATY_HL_L);
  63. }
  64. if (p == 2) {
  65. // 40Hz out select pulse
  66. if (dev->sckSet) dev->sckSet(__ATY_HL_H);
  67. if (dev->sckSet) dev->sckSet(__ATY_HL_L);
  68. }
  69. *raw = data;
  70. if (dev->debugEnable == 1 && dev->LOG) dev->LOG("\r\nHX710A read raw.");
  71. __ATY_UNLOCK(dev);
  72. return 0;
  73. }
  74. // No legacy APIs retained; use Dev-style interfaces only.
  75. #endif /* __HX710A_C */
  76. /******************************** End Of File *********************************/