Nikolai Trushnikov / ADS1248-1

Dependents:   Chromatograph_Mobile

Files at this revision

API Documentation at this revision

Comitter:
nikmaos
Date:
Tue Aug 11 19:13:08 2020 +0000
Parent:
0:1b92bdad27f6
Child:
2:ccfbc827eb2c
Commit message:
1108

Changed in this revision

ads1248.cpp Show annotated file Show diff for this revision Revisions of this file
ads1248.h Show annotated file Show diff for this revision Revisions of this file
--- 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 ();
+}
--- a/ads1248.h	Sat Aug 08 18:29:32 2020 +0000
+++ b/ads1248.h	Tue Aug 11 19:13:08 2020 +0000
@@ -230,8 +230,13 @@
         GPIOCFG_t GPIOCFG;
         GPIODIR_t GPIODIR;
         GPIODAT_t GPIODAT;
+        struct {//хранение настроек калибровки
+            float k,b;
+        }Calibr;
     }ADS1248_t;
-
+    
+    
+    
     unsigned char ADS1248SleepCommand( void );
     
     unsigned char ADS1248WakeupCommand( void );
@@ -245,6 +250,9 @@
     unsigned long ADS1248ReadData( ADS1248_t * ads );
     
     unsigned char ADS1248SettingReg ( ADS1248_t * ads );
+    
+    unsigned long ADS1248ReadCalibratedData(ADS1248_t * ads);
+    void ADS1248CalibrateSoft(ADS1248_t * ads, float (*btf)(unsigned char *));
 
 #endif /*ADS1248_H*/