diff --git a/firmware/slavechip/main.c b/firmware/slavechip/main.c index dad6498..a9b407d 100644 --- a/firmware/slavechip/main.c +++ b/firmware/slavechip/main.c @@ -6,6 +6,7 @@ #include "debug.h" #include #include "filter.h" +#include uint16_t timertmp; uint16_t temperatures[4]; @@ -54,53 +55,95 @@ int __attribute__((noreturn)) main(void) { muxer_set(1); uint8_t active_sensor = 0; - + int16_t data; for(;;){ - - SOFTTIMER(1,10) { - if(mcpadc_has_new_data()) { - int16_t data = mcpadc_get_data(); - float f = filter_voltage_to_temp( - ((float)data) * 0.000625 ); - // total gain is 100 (50 from INA, 2 from ADC) - // full signed range on ADC is +-2.048V - // with 16bit, 1LSB is worth 0.0625mV - // with the gain added in that's 0.000625mV + // measure temps 5*2 times + for(int i=0; i<5; i++) { + for(int active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two probes atm + muxer_set(active_sensor); + while(!mcpadc_has_new_data()) _delay_ms(1); + mcpadc_get_data(); // first data after switch to trash + while(!mcpadc_has_new_data()) _delay_ms(1); + + data = mcpadc_get_data(); + float f = filter_voltage_to_temp(((float)data) * 0.000625 ); filter_average_input(active_sensor, f); if(filter_average_done(active_sensor,16)){ - float noise = filter_average_noise(active_sensor); - float temp = filter_average_result(active_sensor); - dbgLog("temp: %3.3f°C (lastval %i), noise: %e\n",temp, data, noise); - } + filter_average_noise(active_sensor); + temperatures[active_sensor] = filter_average_result(active_sensor); + } } } -/* SOFTTIMER(2,500){ - for(int i=0; i<4; i++) { - if(sensor_active[i]) { - int32_t temp = temp_avg_cumul[i]; - temp /= temp_avg_count[i]; - temp_avg_count[i] = 0; temp_avg_cumul[i] = 0; - int32_t nV = (temp * 625); - int32_t mK = nV/39; - dbgLog("temp-%i: %6li (%li µV, %li mK)\n",i,temp,nV/1000, mK); - } - } + // measure 2 offsets + for(int active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two offsets atm + muxer_set(active_sensor); + offset_measure_start(active_sensor); + while(!mcpadc_has_new_data()) _delay_ms(1); + mcpadc_get_data(); // first data after switch to trash + while(!mcpadc_has_new_data()) _delay_ms(1); + + data = mcpadc_get_data(); + // TODO: what to do with the offset? + + offset_measure_stop(); } -*/ - SOFTTIMER(3,4000){ - static uint8_t toggle; - if(toggle){ - offset_measure_start(1); - toggle=0; - dbgLog("measuring offset\n"); - } else { - offset_measure_stop(); - toggle=1; - dbgLog("stopping offset-measuring\n"); - } + + SOFTTIMER(1,8000) { // maybe measure coldjunction comp + muxer_set(23); // TODO: channel for ntc?! + + // first measure ntc offset?! maybe? + offset_measure_start(active_sensor); + while(!mcpadc_has_new_data()) _delay_ms(1); + mcpadc_get_data(); // first data after switch to trash + while(!mcpadc_has_new_data()) _delay_ms(1); + + data = mcpadc_get_data(); + offset_measure_stop(); + + // now measure temp-data + while(!mcpadc_has_new_data()) _delay_ms(1); + mcpadc_get_data(); // first data after switch to trash + while(!mcpadc_has_new_data()) _delay_ms(1); + + data = mcpadc_get_data(); } + + + + /* SOFTTIMER(1,10) { */ + /* if(mcpadc_has_new_data()) { */ + /* int16_t data = mcpadc_get_data(); */ + /* float f = filter_voltage_to_temp( */ + /* ((float)data) * 0.000625 ); */ + /* // total gain is 100 (50 from INA, 2 from ADC) */ + /* // full signed range on ADC is +-2.048V */ + /* // with 16bit, 1LSB is worth 0.0625mV */ + /* // with the gain added in that's 0.000625mV */ + + /* filter_average_input(active_sensor, f); */ + /* if(filter_average_done(active_sensor,16)){ */ + /* float noise = filter_average_noise(active_sensor); */ + /* float temp = filter_average_result(active_sensor); */ + /* dbgLog("temp: %3.3f°C (lastval %i), noise: %e\n",temp, data, noise); */ + /* } */ + /* } */ + /* } */ + + /* SOFTTIMER(3,4000){ */ + /* static uint8_t toggle; */ + /* if(toggle){ */ + /* offset_measure_start(1); */ + /* toggle=0; */ + /* dbgLog("measuring offset\n"); */ + /* } else { */ + /* offset_measure_stop(); */ + /* toggle=1; */ + /* dbgLog("stopping offset-measuring\n"); */ + /* } */ + /* } */ + } }