808

Dependents:   Chromatograph_Mobile

Revision:
1:54015254fc18
Parent:
0:1b92bdad27f6
Child:
2:ccfbc827eb2c
--- a/ads1248.cpp	Sat Aug 08 18:29:32 2020 +0000
+++ b/ads1248.cpp	Tue Aug 11 19:13:08 2020 +0000
@@ -58,10 +58,10 @@
     
     union{
         struct{
-            uint8_t
-            b1,b2,b3;
-            };
-            uint32_t all;
+        uint8_t
+        b1,b2,b3;
+        };
+        uint32_t all;
     }data;
     data.all=0;
     
@@ -102,3 +102,35 @@
     return 0;
     
 }
+
+//вызывать вместо простого чтения АЦП
+unsigned long ADS1248ReadCalibratedData(ADS1248_t * ads)
+{
+    unsigned long result=0;
+    //проверка адекватности коэффициентов (не доделана)
+    if ((ads->Calibr.k>0)&&(ads->Calibr.b<0x8000000))
+    result = ads->Calibr.k*ADS1248ReadData(ads)+ads->Calibr.b;
+    else return (0);
+    if (result & 0xFF000000) 
+    /*Если результат переполнен из-за коэффициентов то данные испорчены.
+    Наверное можно просто отбросить старший байт или лучше приравнять максимальному 0x00FFFFFF*/
+    return 0;
+}
+
+//программная калибровка через терминал, без использования регистров микросхемы
+void ADS1248CalibrateSoft(ADS1248_t * ads, /*костыль костылей*/float (*btf)(unsigned char*))
+{
+    //тут остановить все управляющие воздействия и считывание. Или перед использованием функции.
+    /*
+    
+    */
+    UART.printf("ADS CALIBRATE:\r\n");
+    __disable_irq ();
+    UART_gets(16);
+    UART.printf("%s\r\n",str);
+    if(str[0]=='k'){    
+    float result = btf(str);    
+    UART.printf("%f\r\n",result);
+    }
+    __enable_irq ();
+}