From b2e96fc35af54b9975f2ce02849bc17f208bf0e3 Mon Sep 17 00:00:00 2001 From: Ron Evans Date: Mon, 22 Apr 2019 07:59:35 +0200 Subject: [PATCH] machine/atsamd21: select internal ground for ADC and scale result correctly to 16-bit Signed-off-by: Ron Evans --- src/machine/machine_atsamd21.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/machine/machine_atsamd21.go b/src/machine/machine_atsamd21.go index 5f166e50..278fa3c0 100644 --- a/src/machine/machine_atsamd21.go +++ b/src/machine/machine_atsamd21.go @@ -343,6 +343,12 @@ func (a ADC) Get() uint16 { sam.ADC.INPUTCTRL |= sam.RegValue(ch << sam.ADC_INPUTCTRL_MUXPOS_Pos) waitADCSync() + // Select internal ground for ADC input + sam.ADC.INPUTCTRL &^= sam.ADC_INPUTCTRL_MUXNEG_Msk + waitADCSync() + sam.ADC.INPUTCTRL |= sam.RegValue(sam.ADC_INPUTCTRL_MUXNEG_GND << sam.ADC_INPUTCTRL_MUXNEG_Pos) + waitADCSync() + // Enable ADC sam.ADC.CTRLA |= sam.ADC_CTRLA_ENABLE waitADCSync() @@ -368,7 +374,7 @@ func (a ADC) Get() uint16 { sam.ADC.CTRLA &^= sam.ADC_CTRLA_ENABLE waitADCSync() - return uint16(val) + return uint16(val) << 4 // scales from 12 to 16-bit result } func (a ADC) getADCChannel() uint8 {