diff --git a/fabscope_proto1.pdf b/fabscope_proto1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2a380aa6423aed0fd8b3052e0fa8c6b262815ce3 Binary files /dev/null and b/fabscope_proto1.pdf differ diff --git a/firmware/main.c b/firmware/main.c index 6b58f5e902caa11e647231712cb82e3ed305029d..7be05602e30171786b4b8001257d8ad9018598e1 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -133,16 +133,16 @@ void ADC_Init() ADCA.CTRLA = ADC_ENABLE_bm; // enabled, no DMA, no started conversion, no flush ADCA.CTRLB = (1<<4); // high impedance, no limit, signed, non-freerunning, 12-bit right - ADCA.REFCTRL = ADC_BANDGAP_bm; // Internal 1v ref + ADCA.REFCTRL = (ADC_REFSEL1_bm) | (ADC_REFSEL0_bm); // AREFB ADCA.EVCTRL = 0 ; // no events - ADCA.PRESCALER = ADC_PRESCALER_DIV4_gc ; + ADCA.PRESCALER = ADC_PRESCALER_DIV64_gc ; ADCA.CALL = ReadSignatureByte(0x20) ; //ADC Calibration Byte 0 ADCA.CALH = ReadSignatureByte(0x21) ; //ADC Calibration Byte 1 _delay_us(400); // Wait at least 25 clocks - ADCA.CH0.CTRL = ADC_CH_GAIN_1X_gc | 1; - ADCA.CH0.MUXCTRL = 0; // ADC0 + ADCA.CH0.CTRL = ADC_CH_GAIN_4X_gc | ADC_CH_INPUTMODE_DIFFWGAIN_gc; + ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN0_gc | ADC_CH_MUXNEG_PIN4_gc; ADCA.CH0.INTCTRL = 0; // no interrupt } @@ -150,22 +150,21 @@ int32_t ADC_Read(void) { int32_t res = 0; - // throw away 5 readings and average the next 128 (software denoising attempt) + // throw away 1 reading and take the next one - for(uint8_t i = 0; i < 5; i++) { + //for(uint8_t i = 0; i < 1; i++) { ADCA.CH0.CTRL |= ADC_CH_START_bm; // Start conversion while (ADCA.INTFLAGS==0) ; // Wait for complete ADCA.INTFLAGS = ADCA.INTFLAGS ; // writing 1 to INTFLAGS clears it - } + //} - for(uint8_t i = 0; i<128; i++) - { - ADCA.CH0.CTRL |= ADC_CH_START_bm; // Start conversion - while (ADCA.INTFLAGS==0) ; // Wait for complete - ADCA.INTFLAGS = ADCA.INTFLAGS ; // writing 1 to INTFLAGS clears it - res += ADCA.CH0RES; - } - return res >> 7; + //for(uint8_t i = 0; i < 1; i++) { + ADCA.CH0.CTRL |= ADC_CH_START_bm; // Start conversion + while (ADCA.INTFLAGS==0) ; // Wait for complete + ADCA.INTFLAGS = ADCA.INTFLAGS ; // writing 1 to INTFLAGS clears it + res = ADCA.CH0RES; + //} + return res; } /** Configures the board hardware and chip peripherals for the demo's functionality. */ diff --git a/firmware/makefile b/firmware/makefile index 01c39dec8360ea94bef2d486eb4ea91b4eccd6ea..e2c581b66d2596242cda1d0cd6646b2cc5125e29 100644 --- a/firmware/makefile +++ b/firmware/makefile @@ -49,3 +49,6 @@ program-dfu: $(TARGET).hex program-avrisp2: $(TARGET).hex avrdude -p $(MCU) -c avrisp2 -U flash:w:$(TARGET).hex + +program-avrisp2-dfu-fuses: + avrdude -p $(MCU) -c avrisp2 -U fuse2:w:0xBF:m