#include "main.h" #include "spi.h" #include "muxer.h" #include "i2c_simple.h" #include "mcp_adc.h" uint8_t foo; uint16_t bar; uint16_t timertmp; uint16_t temperatures[4]; void baz() { foo++; } /* pinout * - i2c: * C5 * C4 * - multiplexer: * C3: inhibit * C0-C2: muxer select * * * amp 0 is on muxer channel 2 */ void hardinit() { /* initializes the hardware */ // enable softtimer isr TCCR1A = _BV(WGM10); TCCR1B = _BV(WGM12) | _BV(CS11); // clk/8 prescaler, 4kHz PWM-freq. TIMSK1 |= _BV(TOIE1); spi_init(); muxer_init(); i2c_init(); sei(); } void softinit() { // TODO: to prevent evil random access and stuff? temperatures[0] = 0; temperatures[1] = 0; temperatures[2] = 0; temperatures[3] = 0; //test values foo = 0x87; bar= 0xfafa; mcpadc_init(ADC_GAIN_2|ADC_CONV_SINGLE|ADC_BITS_16); } int __attribute__((noreturn)) main(void) { hardinit(); softinit(); muxer_set(2); for(;;){ SOFTTIMER(1,500) { // for(int i=0; i < 4; i++) { // muxer_set(i); // if(mcpadc_has_new_data()) { // temperatures[i] = mpcadc_get_data(); // } // } } } } ISR(TIMER1_OVF_vect,ISR_NOBLOCK){ timertmp=timer1_acc; timertmp++; /* the ATOMIC is acutally only needed if timer1_acc is never read from an ISR, which * is probably the case. * ATOMIC_FORCEON: the ISR_NOBLOCK sets sei() a few cycles before. */ ATOMIC_BLOCK(ATOMIC_FORCEON){ timer1_acc=timertmp; } }