From ea8d6b4f1bc32fa258d310cc364ec5578010397e Mon Sep 17 00:00:00 2001 From: eddyem Date: Thu, 14 Jun 2018 16:37:57 +0300 Subject: [PATCH] Add scan mode & fix reaction on error readings --- STM32/TSYS_controller/2DO | 1 - STM32/TSYS_controller/main.c | 41 +++++++++++++++++++++---- STM32/TSYS_controller/sensors_manage.c | 30 ++++++++++++------ STM32/TSYS_controller/sensors_manage.h | 2 ++ STM32/TSYS_controller/tsys01.bin | Bin 10944 -> 11208 bytes STM32/TSYS_controller/usart.c | 2 +- STM32/TSYS_controller/usart.h | 3 +- 7 files changed, 60 insertions(+), 19 deletions(-) diff --git a/STM32/TSYS_controller/2DO b/STM32/TSYS_controller/2DO index b215f7f..e9245ca 100644 --- a/STM32/TSYS_controller/2DO +++ b/STM32/TSYS_controller/2DO @@ -1,5 +1,4 @@ - CAN bus: PB8 (Rx), PB9 (Tx) - USB bus: PA11 (DM), PA12 (DP) - ADC inputs: PA0 (V12/4.93), PA1 (V5/2), PA3 (I12 - 1V/A), PA6 (V3.3/2) -- controller CAN address: PA13..PA15 (0..2 bits); 0 - master, other address - slave diff --git a/STM32/TSYS_controller/main.c b/STM32/TSYS_controller/main.c index e800e4e..e94b9c2 100644 --- a/STM32/TSYS_controller/main.c +++ b/STM32/TSYS_controller/main.c @@ -64,6 +64,7 @@ void iwdg_setup(){ int main(void){ uint32_t lastT = 0, lastS = 0; int16_t L = 0; + uint8_t scan = 0, gotmeasurement = 0; char *txt; sysreset(); SysTick_Config(6000, 1); @@ -87,6 +88,20 @@ int main(void){ sensors_process(); lastS = Tms; } + if(scan){ + if(SENS_SLEEPING == sensors_get_state()){ // show temperature @ each sleeping occurence + if(!gotmeasurement){ + //SEND("\nTIME="); + printu(Tms); + usart_putchar('\t'); + //newline(); + gotmeasurement = 1; + showtemperature(); + } + }else{ + gotmeasurement = 0; + } + } if(usartrx()){ // usart1 received data, store in in buffer L = usart_getline(&txt); char _1st = txt[0]; @@ -99,6 +114,9 @@ int main(void){ case 'O': sensors_on(); break; + case 'F': + sensors_off(); + break; case 'T': // 'T' - get temperature showtemperature(); break; @@ -123,6 +141,14 @@ int main(void){ printu(getCANaddr()); newline(); break; + case 'S': + SEND("Start scan mode\n"); + scan = 1; + break; + case 'P': + SEND("End scan mode\n"); + scan = 0; + break; #ifdef EBUG case 'd': case 'g': @@ -136,13 +162,16 @@ int main(void){ #endif default: // help SEND("'C' - show coefficients\n" - "'O' - turn On sensors\n" - "'T' - get raw temperature\n" - "'R' - reinit I2C\n" - "'V' - very low speed\n" - "'L' - low speed\n" - "'H' - high speed\n" "'G' - get CAN address\n" + "'F' - turn oFf sensors\n" + "'H' - high speed\n" + "'L' - low speed\n" + "'O' - turn On sensors\n" + "'P' - stoP themperature scan\n" + "'R' - reinit I2C\n" + "'S' - Start themperature scan\n" + "'T' - get raw temperature\n" + "'V' - very low speed\n" #ifdef EBUG "\t\tTEST OPTIONS\n" "'d' - discovery\n" diff --git a/STM32/TSYS_controller/sensors_manage.c b/STM32/TSYS_controller/sensors_manage.c index 9849ae0..36cbc41 100644 --- a/STM32/TSYS_controller/sensors_manage.c +++ b/STM32/TSYS_controller/sensors_manage.c @@ -210,11 +210,11 @@ newline(); MSG("try more\n"); if(!write_i2c(Taddr[i], TSYS01_RESET)) i2c_setup(CURRENT_SPEED); // maybe I2C restart will solve the problem? } - if(j == 5){ -MSG("error start monitoring, reset\n"); + /*if(j == 5){ +MSG("error start monitoring, reset counter\n"); sensors_on(); // all very bad return 1; - } + }*/ } return 0; } @@ -224,6 +224,7 @@ static uint8_t gettempproc(){ uint8_t i; for(i = 0; i < 2; ++i){ if(!(sens_present[i] & (1<gather\n"); case SENS_GATHERING: // scan all sensors, get thermal data & calculate temperature if(sensors_scan(gettempproc)){ lastSensT = Tms; + if(Nsens_present != Ntemp_measured) i2c_setup(CURRENT_SPEED); + Sstate = SENS_SLEEPING; +MSG("->sleep\n"); + /* if(Nsens_present == Ntemp_measured){ // All OK, amount of T == amount of sensors MSG("->sleep\n"); Sstate = SENS_SLEEPING; @@ -393,7 +405,7 @@ MSG("->sleep\n"); MSG("gather error ->start\n"); i2c_setup(CURRENT_SPEED); Sstate = SENS_START_MSRMNT; - } + }*/ } break; case SENS_SLEEPING: // wait for `SLEEP_TIME` till next measurements diff --git a/STM32/TSYS_controller/sensors_manage.h b/STM32/TSYS_controller/sensors_manage.h index 335bb66..c699783 100644 --- a/STM32/TSYS_controller/sensors_manage.h +++ b/STM32/TSYS_controller/sensors_manage.h @@ -32,6 +32,8 @@ #define SLEEP_TIME (3000) // error in measurement == -300degrC #define BAD_TEMPERATURE (-30000) +// no sensor on given channel +#define NO_SENSOR (-31000) typedef enum{ SENS_INITING // power on diff --git a/STM32/TSYS_controller/tsys01.bin b/STM32/TSYS_controller/tsys01.bin index 4198438d22163c884957b59179cfdba31bacadb0..52a2d04c432a7a026926630b16f3062310f8c5df 100755 GIT binary patch delta 2785 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 F{1bX#NhkmS diff --git a/STM32/TSYS_controller/usart.c b/STM32/TSYS_controller/usart.c index 5ab9c7f..47c5e44 100644 --- a/STM32/TSYS_controller/usart.c +++ b/STM32/TSYS_controller/usart.c @@ -26,7 +26,7 @@ extern volatile uint32_t Tms; static int datalen[2] = {0,0}; // received data line length (including '\n') -int linerdy = 0, // received data ready +volatile int linerdy = 0, // received data ready dlen = 0, // length of data (including '\n') in current buffer bufovr = 0, // input buffer overfull txrdy = 1 // transmission done diff --git a/STM32/TSYS_controller/usart.h b/STM32/TSYS_controller/usart.h index 8ecd6d3..f1d1d50 100644 --- a/STM32/TSYS_controller/usart.h +++ b/STM32/TSYS_controller/usart.h @@ -31,7 +31,6 @@ // macro for static strings #define SEND(str) do{}while(LINE_BUSY == usart_send_blocking(str, sizeof(str)-1)) -#define NEWLINE() do{}while(LINE_BUSY == usart_send_blocking('\n', 1)) #ifdef EBUG #define MSG(str) do{SEND(__FILE__ " (L" STR(__LINE__) "): " str);}while(0) @@ -48,7 +47,7 @@ typedef enum{ #define usartrx() (linerdy) #define usartovr() (bufovr) -extern int linerdy, bufovr, txrdy; +extern volatile int linerdy, bufovr, txrdy; void usart_setup(); int usart_getline(char **line);