diff --git a/datasheets/OP37GS.pdf b/datasheets/OP37GS.pdf new file mode 100644 index 0000000..7bfa244 Binary files /dev/null and b/datasheets/OP37GS.pdf differ diff --git a/documentation/SPI-Proto b/documentation/SPI-Proto index 56c3441..557e7f0 100644 --- a/documentation/SPI-Proto +++ b/documentation/SPI-Proto @@ -30,3 +30,8 @@ Where following values are Valid: | Thermometer Representing Temperature| | Starting with 0 the Temperature | |--------------------------------------------------------------------------------------------------------------------------| + + +Änderungen: +1 ist nun Echo. +7 ist read-temp diff --git a/firmware/shared/spi.c b/firmware/shared/spi.c index 2077c82..3ad03cb 100644 --- a/firmware/shared/spi.c +++ b/firmware/shared/spi.c @@ -83,16 +83,17 @@ void spi_init(){ void spi_mst_start_packet(){ #ifdef SPI_MASTER + _delay_us(2*1e6/SPI_BAUDRATE); SPI_SSOUT &= ~(_BV(SPI_SS_PIN)); - _delay_us(1e6/SPI_BAUDRATE); + _delay_us(2*1e6/SPI_BAUDRATE); #endif } void spi_mst_end_packet(){ #ifdef SPI_MASTER - _delay_us(1e6/SPI_BAUDRATE); + _delay_us(2*1e6/SPI_BAUDRATE); SPI_SSOUT |= _BV(SPI_SS_PIN); - _delay_us(1e6/SPI_BAUDRATE); + _delay_us(2*1e6/SPI_BAUDRATE); #endif } @@ -124,6 +125,11 @@ void spi_mst_write_read(uint8_t len, uint8_t *data){ } } +void spi_mst_packet_delay(){ + // wait for 2 byte + _delay_us(16*1e6/SPI_BAUDRATE); +} + #ifndef SPI_MASTER void spi_sla_handle_packet(){ diff --git a/firmware/shared/spi_proto.c b/firmware/shared/spi_proto.c index e55fc05..a354276 100644 --- a/firmware/shared/spi_proto.c +++ b/firmware/shared/spi_proto.c @@ -20,6 +20,7 @@ uint16_t spi_master_transceive(uint8_t opcode, uint8_t addr, uint16_t value) spi_mst_start_packet(); spi_mst_write_read(5,mst_buf); spi_mst_end_packet(); + spi_mst_packet_delay(); for(uint8_t i=0; i<5; ++i){ mst_buf[0] = 0; mst_buf[1] = 0; @@ -33,6 +34,7 @@ uint16_t spi_master_transceive(uint8_t opcode, uint8_t addr, uint16_t value) if(mst_buf[1] == opcode && mst_buf[2] == addr){ // valid answer return ((mst_buf[3] << 8) | mst_buf[4]); } + spi_mst_packet_delay(); } // } return 0xffff; // error-code @@ -90,7 +92,7 @@ uint16_t spi_proto_slaveaction(uint8_t opcode, uint8_t addr, uint16_t data) { (*spi_proto_globals16[addr]) = data; break; case 6: - (*spi_proto_funcs[addr])(); + retval = (*spi_proto_funcs[addr])(data); //TODO: prevent a function from being run several times because the message gets repeated. break; case 7: diff --git a/firmware/slavechip/filter.c b/firmware/slavechip/filter.c index 0ea3379..0e8355e 100644 --- a/firmware/slavechip/filter.c +++ b/firmware/slavechip/filter.c @@ -1,6 +1,7 @@ #include "filter.h" #include +#include "debug.h" Sensordata sensordata[4]; float ambient_temp=25.; @@ -13,7 +14,7 @@ float avg_noise[CHANNELCOUNT]; void process_thermocouple_value(int16_t raw_data, uint8_t channel){ - dbgLog("procthermval, val %i, chan %i",raw_data,channel); +// dbgLog("procthermval, val %i, chan %i",raw_data,channel); // This function does everything that needs to be done to raw adc values float a = raw_data; a -= sensordata[channel].offset; @@ -37,7 +38,7 @@ void process_ambient_value(int16_t raw_data){ a = a * 0.03125; //adc to mV after amp a = a / 9.625; ambient_temp = a; - dbgLog("ambient: %3.3f°C (lastval %i)\n",a, raw_data); + dbgLog("ambient: %3.3f°C (value %i)\n",a, raw_data); } diff --git a/firmware/slavechip/main.c b/firmware/slavechip/main.c index 9bb9bf3..d43025d 100644 --- a/firmware/slavechip/main.c +++ b/firmware/slavechip/main.c @@ -56,11 +56,12 @@ int __attribute__((noreturn)) main(void) { int16_t data; for(;;){ + _delay_ms(4000); dbgLog("loop iteration\n"); // measure temps 5*2 times for(uint8_t i=0; i<5; i++) { - dbgLog("starting temp measuring"); +// dbgLog("starting temp measuring\n"); for(uint8_t active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two probes atm muxer_set(active_sensor); while(!mcpadc_has_new_data()) _delay_ms(10); @@ -69,14 +70,15 @@ int __attribute__((noreturn)) main(void) { data = mcpadc_get_data(); process_thermocouple_value(data,active_sensor); + _delay_ms(1000); } dbgLog("a"); } - dbgLog("now measuring offsets"); +// dbgLog("now measuring offsets\n"); // measure 2 offsets for(uint8_t active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two offsets atm - dbgLog("active sensor: %i",active_sensor); +// dbgLog("active sensor: %i",active_sensor); muxer_set(active_sensor); offset_measure_start(active_sensor); while(!mcpadc_has_new_data()) _delay_ms(10); @@ -84,7 +86,7 @@ int __attribute__((noreturn)) main(void) { while(!mcpadc_has_new_data()) _delay_ms(10); data = mcpadc_get_data(); - dbgLog("retrieved offset data %i", data); +// dbgLog("retrieved offset data %i\n", data); // TODO: what to do with the offset? offset_measure_stop(); diff --git a/firmware/slavechip/spi_pointers.h b/firmware/slavechip/spi_pointers.h index 575b961..b8e1f88 100644 --- a/firmware/slavechip/spi_pointers.h +++ b/firmware/slavechip/spi_pointers.h @@ -3,7 +3,7 @@ #include -typedef void(*funptr_t)(); +typedef int16_t(*funptr_t)(int16_t); extern uint8_t *spi_proto_globals8[]; extern uint16_t *spi_proto_globals16[];