808
Dependents: Chromatograph_Mobile
Diff: ads1248.cpp
- 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 (); +}