summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2017-12-15 11:40:35 -0500
committerScott Shawcroft <scott@tannewt.org>2017-12-15 09:56:39 -0800
commit0c0a09aeb6ec0357acbe64b034c162c805e07c9e (patch)
treea2fb8fbf3df6e341eef257f6366dfbecc0fa5451
parent6d603e462d578a83bfeab78bfdf806d8d45c6701 (diff)
Speed up AnalogIn.value.
-rw-r--r--atmel-samd/common-hal/analogio/AnalogIn.c9
-rw-r--r--atmel-samd/common-hal/microcontroller/Processor.c4
2 files changed, 9 insertions, 4 deletions
diff --git a/atmel-samd/common-hal/analogio/AnalogIn.c b/atmel-samd/common-hal/analogio/AnalogIn.c
index 03c502dff..cbb9f5de5 100644
--- a/atmel-samd/common-hal/analogio/AnalogIn.c
+++ b/atmel-samd/common-hal/analogio/AnalogIn.c
@@ -74,8 +74,10 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
config_adc.reference = ADC_REFERENCE_INTVCC1;
config_adc.gain_factor = ADC_GAIN_FACTOR_DIV2;
config_adc.positive_input = self->pin->adc_input;
- config_adc.resolution = ADC_RESOLUTION_16BIT;
- config_adc.clock_prescaler = ADC_CLOCK_PRESCALER_DIV128;
+ config_adc.resolution = ADC_RESOLUTION_12BIT;
+ // Default input clock is GCLK0 (48 MHz)
+ // 48Mhz / 32 = 1.5MHz. Max ADC clock is 2.1MHz
+ config_adc.clock_prescaler = ADC_CLOCK_PRESCALER_DIV32;
struct adc_module adc_instance;
// ADC must have been disabled before adc_init() is called.
@@ -108,7 +110,8 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
}
adc_disable(&adc_instance);
- return data;
+ // Scale to 16 bits. In the future we might make this be this be under API control.
+ return data * 16;
}
float common_hal_analogio_analogin_get_reference_voltage(analogio_analogin_obj_t *self) {
diff --git a/atmel-samd/common-hal/microcontroller/Processor.c b/atmel-samd/common-hal/microcontroller/Processor.c
index c398c5e6f..15bfb510b 100644
--- a/atmel-samd/common-hal/microcontroller/Processor.c
+++ b/atmel-samd/common-hal/microcontroller/Processor.c
@@ -111,7 +111,9 @@ STATIC void configure_adc_temp(struct adc_module *adc_instance) {
// "Discard the first conversion result whenever there is a change
// in ADC configuration like voltage reference / ADC channel change."
- config_adc.clock_prescaler = ADC_CLOCK_PRESCALER_DIV16;
+ // Default input clock is GCLK0 (48 MHz)
+ // 48Mhz / 32 = 1.5MHz. Max ADC clock is 2.1MHz
+ config_adc.clock_prescaler = ADC_CLOCK_PRESCALER_DIV32;
config_adc.reference = ADC_REFERENCE_INT1V;
config_adc.positive_input = ADC_POSITIVE_INPUT_TEMP;
config_adc.negative_input = ADC_NEGATIVE_INPUT_GND;