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