mirror of
https://github.com/eddyem/tsys01.git
synced 2026-02-01 04:45:05 +03:00
Add scan mode & fix reaction on error readings
This commit is contained in:
parent
5e73de26a5
commit
ea8d6b4f1b
@ -1,5 +1,4 @@
|
|||||||
- CAN bus: PB8 (Rx), PB9 (Tx)
|
- CAN bus: PB8 (Rx), PB9 (Tx)
|
||||||
- USB bus: PA11 (DM), PA12 (DP)
|
- USB bus: PA11 (DM), PA12 (DP)
|
||||||
- ADC inputs: PA0 (V12/4.93), PA1 (V5/2), PA3 (I12 - 1V/A), PA6 (V3.3/2)
|
- 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
|
|
||||||
|
|
||||||
|
|||||||
@ -64,6 +64,7 @@ void iwdg_setup(){
|
|||||||
int main(void){
|
int main(void){
|
||||||
uint32_t lastT = 0, lastS = 0;
|
uint32_t lastT = 0, lastS = 0;
|
||||||
int16_t L = 0;
|
int16_t L = 0;
|
||||||
|
uint8_t scan = 0, gotmeasurement = 0;
|
||||||
char *txt;
|
char *txt;
|
||||||
sysreset();
|
sysreset();
|
||||||
SysTick_Config(6000, 1);
|
SysTick_Config(6000, 1);
|
||||||
@ -87,6 +88,20 @@ int main(void){
|
|||||||
sensors_process();
|
sensors_process();
|
||||||
lastS = Tms;
|
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
|
if(usartrx()){ // usart1 received data, store in in buffer
|
||||||
L = usart_getline(&txt);
|
L = usart_getline(&txt);
|
||||||
char _1st = txt[0];
|
char _1st = txt[0];
|
||||||
@ -99,6 +114,9 @@ int main(void){
|
|||||||
case 'O':
|
case 'O':
|
||||||
sensors_on();
|
sensors_on();
|
||||||
break;
|
break;
|
||||||
|
case 'F':
|
||||||
|
sensors_off();
|
||||||
|
break;
|
||||||
case 'T': // 'T' - get temperature
|
case 'T': // 'T' - get temperature
|
||||||
showtemperature();
|
showtemperature();
|
||||||
break;
|
break;
|
||||||
@ -123,6 +141,14 @@ int main(void){
|
|||||||
printu(getCANaddr());
|
printu(getCANaddr());
|
||||||
newline();
|
newline();
|
||||||
break;
|
break;
|
||||||
|
case 'S':
|
||||||
|
SEND("Start scan mode\n");
|
||||||
|
scan = 1;
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
SEND("End scan mode\n");
|
||||||
|
scan = 0;
|
||||||
|
break;
|
||||||
#ifdef EBUG
|
#ifdef EBUG
|
||||||
case 'd':
|
case 'd':
|
||||||
case 'g':
|
case 'g':
|
||||||
@ -136,13 +162,16 @@ int main(void){
|
|||||||
#endif
|
#endif
|
||||||
default: // help
|
default: // help
|
||||||
SEND("'C' - show coefficients\n"
|
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"
|
"'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
|
#ifdef EBUG
|
||||||
"\t\tTEST OPTIONS\n"
|
"\t\tTEST OPTIONS\n"
|
||||||
"'d' - discovery\n"
|
"'d' - discovery\n"
|
||||||
|
|||||||
@ -210,11 +210,11 @@ newline();
|
|||||||
MSG("try more\n");
|
MSG("try more\n");
|
||||||
if(!write_i2c(Taddr[i], TSYS01_RESET)) i2c_setup(CURRENT_SPEED); // maybe I2C restart will solve the problem?
|
if(!write_i2c(Taddr[i], TSYS01_RESET)) i2c_setup(CURRENT_SPEED); // maybe I2C restart will solve the problem?
|
||||||
}
|
}
|
||||||
if(j == 5){
|
/*if(j == 5){
|
||||||
MSG("error start monitoring, reset\n");
|
MSG("error start monitoring, reset counter\n");
|
||||||
sensors_on(); // all very bad
|
sensors_on(); // all very bad
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -224,6 +224,7 @@ static uint8_t gettempproc(){
|
|||||||
uint8_t i;
|
uint8_t i;
|
||||||
for(i = 0; i < 2; ++i){
|
for(i = 0; i < 2; ++i){
|
||||||
if(!(sens_present[i] & (1<<curr_mul_addr))) continue; // no sensors @ given line
|
if(!(sens_present[i] & (1<<curr_mul_addr))) continue; // no sensors @ given line
|
||||||
|
Temperatures[curr_mul_addr][i] = NO_SENSOR;
|
||||||
uint8_t err = 1;
|
uint8_t err = 1;
|
||||||
MSG("Sensor #");
|
MSG("Sensor #");
|
||||||
#ifdef EBUG
|
#ifdef EBUG
|
||||||
@ -311,21 +312,28 @@ void showtemperature(){
|
|||||||
}
|
}
|
||||||
if(Ntemp_measured == 0){
|
if(Ntemp_measured == 0){
|
||||||
SEND("No right measurements\n");
|
SEND("No right measurements\n");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
for(a = 0; a <= MUL_MAX_ADDRESS; ++a){
|
for(a = 0; a <= MUL_MAX_ADDRESS; ++a){
|
||||||
for(p = 0; p < 2; ++p){
|
for(p = 0; p < 2; ++p){
|
||||||
if(!(sens_present[p] & (1<<a))) continue; // no sensor
|
if(!(sens_present[p] & (1<<a))){
|
||||||
char b[] = {'T', a+'0', p+'0', '=', '+'};
|
SEND("-31000\t"); // NO_SENSOR
|
||||||
|
continue; // no sensor
|
||||||
|
}
|
||||||
|
//char b[] = {'T', a+'0', p+'0', '=', '+'};
|
||||||
int16_t t = Temperatures[a][p];
|
int16_t t = Temperatures[a][p];
|
||||||
if(t < 0){
|
if(t < 0){
|
||||||
b[4] = '-';
|
//b[4] = '-';
|
||||||
t = -t;
|
t = -t;
|
||||||
|
usart_putchar('-');
|
||||||
}
|
}
|
||||||
while(ALL_OK != usart_send_blocking(b, 5));
|
//while(ALL_OK != usart_send_blocking(b, 5));
|
||||||
printu(t);
|
printu(t);
|
||||||
newline();
|
usart_putchar('\t');
|
||||||
|
//newline();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
newline();
|
||||||
}
|
}
|
||||||
|
|
||||||
// finite state machine for sensors switching & checking
|
// finite state machine for sensors switching & checking
|
||||||
@ -386,6 +394,10 @@ MSG("->gather\n");
|
|||||||
case SENS_GATHERING: // scan all sensors, get thermal data & calculate temperature
|
case SENS_GATHERING: // scan all sensors, get thermal data & calculate temperature
|
||||||
if(sensors_scan(gettempproc)){
|
if(sensors_scan(gettempproc)){
|
||||||
lastSensT = Tms;
|
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
|
if(Nsens_present == Ntemp_measured){ // All OK, amount of T == amount of sensors
|
||||||
MSG("->sleep\n");
|
MSG("->sleep\n");
|
||||||
Sstate = SENS_SLEEPING;
|
Sstate = SENS_SLEEPING;
|
||||||
@ -393,7 +405,7 @@ MSG("->sleep\n");
|
|||||||
MSG("gather error ->start\n");
|
MSG("gather error ->start\n");
|
||||||
i2c_setup(CURRENT_SPEED);
|
i2c_setup(CURRENT_SPEED);
|
||||||
Sstate = SENS_START_MSRMNT;
|
Sstate = SENS_START_MSRMNT;
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SENS_SLEEPING: // wait for `SLEEP_TIME` till next measurements
|
case SENS_SLEEPING: // wait for `SLEEP_TIME` till next measurements
|
||||||
|
|||||||
@ -32,6 +32,8 @@
|
|||||||
#define SLEEP_TIME (3000)
|
#define SLEEP_TIME (3000)
|
||||||
// error in measurement == -300degrC
|
// error in measurement == -300degrC
|
||||||
#define BAD_TEMPERATURE (-30000)
|
#define BAD_TEMPERATURE (-30000)
|
||||||
|
// no sensor on given channel
|
||||||
|
#define NO_SENSOR (-31000)
|
||||||
|
|
||||||
typedef enum{
|
typedef enum{
|
||||||
SENS_INITING // power on
|
SENS_INITING // power on
|
||||||
|
|||||||
Binary file not shown.
@ -26,7 +26,7 @@
|
|||||||
extern volatile uint32_t Tms;
|
extern volatile uint32_t Tms;
|
||||||
static int datalen[2] = {0,0}; // received data line length (including '\n')
|
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
|
dlen = 0, // length of data (including '\n') in current buffer
|
||||||
bufovr = 0, // input buffer overfull
|
bufovr = 0, // input buffer overfull
|
||||||
txrdy = 1 // transmission done
|
txrdy = 1 // transmission done
|
||||||
|
|||||||
@ -31,7 +31,6 @@
|
|||||||
|
|
||||||
// macro for static strings
|
// macro for static strings
|
||||||
#define SEND(str) do{}while(LINE_BUSY == usart_send_blocking(str, sizeof(str)-1))
|
#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
|
#ifdef EBUG
|
||||||
#define MSG(str) do{SEND(__FILE__ " (L" STR(__LINE__) "): " str);}while(0)
|
#define MSG(str) do{SEND(__FILE__ " (L" STR(__LINE__) "): " str);}while(0)
|
||||||
@ -48,7 +47,7 @@ typedef enum{
|
|||||||
#define usartrx() (linerdy)
|
#define usartrx() (linerdy)
|
||||||
#define usartovr() (bufovr)
|
#define usartovr() (bufovr)
|
||||||
|
|
||||||
extern int linerdy, bufovr, txrdy;
|
extern volatile int linerdy, bufovr, txrdy;
|
||||||
|
|
||||||
void usart_setup();
|
void usart_setup();
|
||||||
int usart_getline(char **line);
|
int usart_getline(char **line);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user