diff --git a/firmware/slavechip/main.c b/firmware/slavechip/main.c index ae317b3..ca905ba 100644 --- a/firmware/slavechip/main.c +++ b/firmware/slavechip/main.c @@ -26,6 +26,8 @@ void baz() { * - multiplexer: * C3: inhibit * C0-C2: muxer select + * - offset measurement + * D0-D3 offset compensation * * * amp 0 is on muxer channel 2 @@ -47,6 +49,7 @@ void hardinit() { spi_init(); muxer_init(); + offset_measure_init(); i2c_init(); @@ -96,6 +99,19 @@ int __attribute__((noreturn)) main(void) { dbgLog("temp: %6li (%li µV, %li mK)\n",temp,nV/1000, mK); } + SOFTTIMER(3,4000){ + static uint8_t toggle; + if(toggle){ + offset_measure_start(0); + toggle=0; + dbgLog("measuring offset\n"); + } else { + offset_measure_stop(); + toggle=1; + dbgLog("stopping offset-measuring\n"); + } + } + } } diff --git a/firmware/slavechip/muxer.c b/firmware/slavechip/muxer.c index 53fecd4..4dbe6f7 100644 --- a/firmware/slavechip/muxer.c +++ b/firmware/slavechip/muxer.c @@ -14,3 +14,19 @@ void muxer_set(uint8_t channel){ //TODO: delays, check everything, mask in register } + +void offset_measure_init(){ + DDRD |= 0x0f; // first 4 pins as output + PORTD = 0x00; // turn everything off +} + +void offset_measure_start(uint8_t channel){ + if(channel >3){ + return; + } + PORTD = (1<