analog_input.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "at32f403a_407.h"
  2. #include "analog_input.h"
  3. #include "shift_reg.h"
  4. #include "utility.h"
  5. #include "FreeRTOS.h"
  6. #include "task.h"
  7. #include <stdio.h>
  8. uint8_t input_mux; // выход сдвигового регистра U1010 (управляет MUX 301, 401)
  9. // мультиплексоры отвечат за коммутацию аналоговых входов и АЦП
  10. //
  11. void ai_connect_channel(uint8_t channel)
  12. {
  13. if (channel < MUX_401_CH)
  14. {
  15. input_mux &= 0x70;
  16. switch (channel)
  17. {
  18. case AN_INP_1: input_mux |= 0x03; break; // U301 Y3
  19. case AN_INP_2: input_mux |= 0x00; break; // U301 Y0
  20. case AN_INP_3: input_mux |= 0x05; break; // U301 Y5
  21. case AN_INP_4: input_mux |= 0x07; break; // U301 Y7
  22. case AN_INP_5: input_mux |= 0x06; break; // U301 Y6
  23. case AN_INP_6: input_mux |= 0x04; break; // U301 Y4
  24. case V_ISO_CL: input_mux |= 0x01; break; // U301 Y1
  25. case V_ISO : input_mux |= 0x02; break; // U301 Y2
  26. default: break;
  27. }
  28. }
  29. else
  30. {
  31. input_mux &= 0x07;
  32. switch (channel)
  33. {
  34. case AN_INP_7: input_mux |= (0x04 << 4); break; // U401 Y4
  35. case AN_INP_8: input_mux |= (0x06 << 4); break; // U401 Y6
  36. case AN_INP_9: input_mux |= (0x07 << 4); break; // U401 Y7
  37. case AN_INP_10:input_mux |= (0x05 << 4); break; // U401 Y5
  38. case AN_INP_11:input_mux |= (0x02 << 4); break; // U401 Y2
  39. case AN_INP_12:input_mux |= (0x01 << 4); break; // U401 Y1
  40. case CRNT_LIM_U_BFR_R: input_mux |= (0x00 << 4); break; // U401 Y0
  41. case CRNT_LIM_U_ABFR_R: input_mux |= (0x03 << 4); break; // U401 Y3
  42. default: break;
  43. }
  44. }
  45. printf("Analog input connect register: ");
  46. print_binary_byte(input_mux);
  47. printf("\r\n");
  48. }
  49. //
  50. void ai_connect_test(void)
  51. {
  52. ai_connect_channel(AN_INP_1);
  53. ai_connect_channel(AN_INP_2);
  54. ai_connect_channel(AN_INP_3);
  55. ai_connect_channel(AN_INP_4);
  56. ai_connect_channel(AN_INP_5);
  57. ai_connect_channel(AN_INP_6);
  58. ai_connect_channel(V_ISO_CL);
  59. ai_connect_channel(V_ISO);
  60. ai_connect_channel(AN_INP_7);
  61. ai_connect_channel(AN_INP_8);
  62. ai_connect_channel(AN_INP_9);
  63. ai_connect_channel(AN_INP_10);
  64. ai_connect_channel(AN_INP_11);
  65. ai_connect_channel(AN_INP_12);
  66. ai_connect_channel(CRNT_LIM_U_BFR_R);
  67. ai_connect_channel(CRNT_LIM_U_ABFR_R);
  68. }