From 4281e89e5d7505c079bf49070554a26643ffe186 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Mon, 12 Jul 2021 17:42:32 +0300 Subject: [PATCH] HAL adc --- src/hal/adc.cpp | 24 +++++++++++++++++++++++- src/hal/adc.h | 3 ++- src/main.cpp | 2 +- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/hal/adc.cpp b/src/hal/adc.cpp index 5089d7d..731a486 100644 --- a/src/hal/adc.cpp +++ b/src/hal/adc.cpp @@ -1,9 +1,31 @@ #include "adc.h" +#include namespace hal { namespace adc { -uint16_t ReadADC(uint8_t adc) { return 0; } +void Init() { + ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); + ADMUX |= (1 << REFS0); + ADCSRA |= (1 << ADEN); +} + +uint16_t ReadADC(uint8_t channel) { + uint8_t admux = ADMUX; + admux &= ~0x1F; + admux |= channel & 0x07; + ADMUX = admux; + + uint8_t adcsrb = ADCSRB; + adcsrb &= ~(1 << MUX5); + adcsrb |= (channel & 0x08) << 1; + ADCSRB = adcsrb; + + ADCSRA |= (1 << ADSC); + while (ADCSRA & (1 << ADSC)); + + return ADC; + } } // namespace adc } // namespace hal diff --git a/src/hal/adc.h b/src/hal/adc.h index 9116dff..26029d3 100644 --- a/src/hal/adc.h +++ b/src/hal/adc.h @@ -7,7 +7,8 @@ namespace hal { namespace adc { /// ADC access routines -uint16_t ReadADC(uint8_t adc); +void Init(); +uint16_t ReadADC(uint8_t channel); } // namespace adc } // namespace hal diff --git a/src/main.cpp b/src/main.cpp index 27c5d5b..d63635c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -137,7 +137,7 @@ void setup() { ml::leds.SetMode(1, ml::Color::green, ml::Mode::on); ml::leds.Step(); - // adc::Init(); + adc::Init(); ml::leds.SetMode(0, ml::Color::green, ml::Mode::on); ml::leds.Step(); }