Jelajahi Sumber

Управление MUX 301, 401.

TelenkovDmitry 1 tahun lalu
induk
melakukan
56ce44a510
6 mengubah file dengan 1010 tambahan dan 1004 penghapusan
  1. 49 51
      fw/modules/io/analog_input.c
  2. 6 3
      fw/modules/io/analog_input.h
  3. TEMPAT SAMPAH
      output/fw.bin
  4. 442 446
      project/ewarm/iap/iap.dep
  5. 512 503
      project/ewarm/module_universal_io.dep
  6. 1 1
      shared/utils/utility.c

+ 49 - 51
fw/modules/io/analog_input.c

@@ -8,48 +8,45 @@
 
 
 uint8_t input_mux; // выход сдвигового регистра U1010 (управляет MUX 301, 401)
-                    // мультиплексоры отвечат за коммутацию аналоговых входов и АЦП
+                   // мультиплексоры отвечат за коммутацию аналоговых входов и АЦП
 
 
 //
-void ai_connect_channel_301(uint8_t ch)
+void ai_connect_channel(uint8_t channel)
 {
-    input_mux &= 0x70;
-    
-    switch (ch)
+    if (channel < MUX_401_CH) 
     {
-        case AN_INP_1: input_mux |= 0x03; break; // U301 Y3
-        case AN_INP_2: input_mux |= 0x00; break; // U301 Y0
-        case AN_INP_3: input_mux |= 0x05; break; // U301 Y5
-        case AN_INP_4: input_mux |= 0x07; break; // U301 Y7
-        case AN_INP_5: input_mux |= 0x06; break; // U301 Y6
-        case AN_INP_6: input_mux |= 0x04; break; // U301 Y4
-        case V_ISO_CL: input_mux |= 0x01; break; // U301 Y1
-        case V_ISO   : input_mux |= 0x02; break; // U301 Y2
-        default: break;
-    }
-    
-    printf("Analog input connect register: ");
-    print_binary_byte(input_mux);
-    printf("\r\n");
-}
-
-//
-void ai_connect_channel_401(uint8_t ch)
-{
-    input_mux &= 0x07;
+        input_mux &= 0x70;
     
-    switch (ch)
+        switch (channel)
+        {
+            case AN_INP_1: input_mux |= 0x03; break; // U301 Y3
+            case AN_INP_2: input_mux |= 0x00; break; // U301 Y0
+            case AN_INP_3: input_mux |= 0x05; break; // U301 Y5
+            case AN_INP_4: input_mux |= 0x07; break; // U301 Y7
+            case AN_INP_5: input_mux |= 0x06; break; // U301 Y6
+            case AN_INP_6: input_mux |= 0x04; break; // U301 Y4
+            case V_ISO_CL: input_mux |= 0x01; break; // U301 Y1
+            case V_ISO   : input_mux |= 0x02; break; // U301 Y2
+            default: break;
+        }
+    }
+    else
     {
-        case AN_INP_7: input_mux |= (0x04 << 3); break; // U401 Y4
-        case AN_INP_8: input_mux |= (0x06 << 3); break; // U401 Y6
-        case AN_INP_9: input_mux |= (0x07 << 3); break; // U401 Y7
-        case AN_INP_10:input_mux |= (0x05 << 3); break; // U401 Y5
-        case AN_INP_11:input_mux |= (0x02 << 3); break; // U401 Y2
-        case AN_INP_12:input_mux |= (0x01 << 3); break; // U401 Y1
-        case CRNT_LIM_U_BFR_R: input_mux  |= (0x00 << 3); break; // U401 Y0
-        case CRNT_LIM_U_ABFR_R: input_mux |= (0x03 << 3); break; // U401 Y3
-        default: break;
+        input_mux &= 0x07;
+        
+        switch (channel)
+        {
+            case AN_INP_7: input_mux |= (0x04 << 4); break; // U401 Y4
+            case AN_INP_8: input_mux |= (0x06 << 4); break; // U401 Y6
+            case AN_INP_9: input_mux |= (0x07 << 4); break; // U401 Y7
+            case AN_INP_10:input_mux |= (0x05 << 4); break; // U401 Y5
+            case AN_INP_11:input_mux |= (0x02 << 4); break; // U401 Y2
+            case AN_INP_12:input_mux |= (0x01 << 4); break; // U401 Y1
+            case CRNT_LIM_U_BFR_R: input_mux  |= (0x00 << 4); break; // U401 Y0
+            case CRNT_LIM_U_ABFR_R: input_mux |= (0x03 << 4); break; // U401 Y3
+            default: break;
+        }
     }
     
     printf("Analog input connect register: ");
@@ -57,24 +54,25 @@ void ai_connect_channel_401(uint8_t ch)
     printf("\r\n");
 }
 
+
 //
 void ai_connect_test(void)
 {
-    ai_connect_channel_301(AN_INP_1);
-    ai_connect_channel_301(AN_INP_2);
-    ai_connect_channel_301(AN_INP_3);
-    ai_connect_channel_301(AN_INP_4);
-    ai_connect_channel_301(AN_INP_5);
-    ai_connect_channel_301(AN_INP_6);
-    ai_connect_channel_301(V_ISO_CL);
-    ai_connect_channel_301(V_ISO);
+    ai_connect_channel(AN_INP_1);
+    ai_connect_channel(AN_INP_2);
+    ai_connect_channel(AN_INP_3);
+    ai_connect_channel(AN_INP_4);
+    ai_connect_channel(AN_INP_5);
+    ai_connect_channel(AN_INP_6);
+    ai_connect_channel(V_ISO_CL);
+    ai_connect_channel(V_ISO);
     
-    ai_connect_channel_401(AN_INP_7);
-    ai_connect_channel_401(AN_INP_8);
-    ai_connect_channel_401(AN_INP_9);
-    ai_connect_channel_401(AN_INP_10);
-    ai_connect_channel_401(AN_INP_11);
-    ai_connect_channel_401(AN_INP_12);
-    ai_connect_channel_401(CRNT_LIM_U_BFR_R);
-    ai_connect_channel_401(CRNT_LIM_U_ABFR_R);
+    ai_connect_channel(AN_INP_7);
+    ai_connect_channel(AN_INP_8);
+    ai_connect_channel(AN_INP_9);
+    ai_connect_channel(AN_INP_10);
+    ai_connect_channel(AN_INP_11);
+    ai_connect_channel(AN_INP_12);
+    ai_connect_channel(CRNT_LIM_U_BFR_R);
+    ai_connect_channel(CRNT_LIM_U_ABFR_R);
 }

+ 6 - 3
fw/modules/io/analog_input.h

@@ -16,20 +16,23 @@
 
 typedef enum 
 {
-    AN_INP_1 = 0,
+    MUX_301_CH = 0,
+    AN_INP_1,
     AN_INP_2,
     AN_INP_3,
     AN_INP_4,
     AN_INP_5,
     AN_INP_6,
+    V_ISO_CL,   // +24 V
+    V_ISO,      // +5 V
+    
+    MUX_401_CH,
     AN_INP_7,
     AN_INP_8,
     AN_INP_9,
     AN_INP_10,
     AN_INP_11,
     AN_INP_12,
-    V_ISO_CL,   // +24 V
-    V_ISO,      // +5 V
     CRNT_LIM_U_BFR_R,
     CRNT_LIM_U_ABFR_R
     

TEMPAT SAMPAH
output/fw.bin


File diff ditekan karena terlalu besar
+ 442 - 446
project/ewarm/iap/iap.dep


File diff ditekan karena terlalu besar
+ 512 - 503
project/ewarm/module_universal_io.dep


+ 1 - 1
shared/utils/utility.c

@@ -30,7 +30,7 @@ void vApplicationMallocFailedHook(void)
 //
 void print_binary_byte(uint8_t val)
 {
-    for (uint8_t i = 0; i < 8; i++)
+    for (int i = 7; i >= 0; i--)
     {
         if (val & (1 << i))
             printf("1");

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini