Inital commit Version 1.0
This commit is contained in:
40
adc.cpp
Normal file
40
adc.cpp
Normal file
@ -0,0 +1,40 @@
|
||||
#include "adc.h"
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
|
||||
ISR(ADC_vect)
|
||||
{
|
||||
uint16_t sample = ADCL;
|
||||
sample |= ADCH << 8;
|
||||
if(Adc::sampleCallback_) Adc::sampleCallback_(sample, Adc::userData_);
|
||||
}
|
||||
|
||||
Adc::Adc(void (*sampleCallback)(uint16_t sample, void* userData), void* userData, uint8_t input, uint8_t referance)
|
||||
{
|
||||
userData_ = userData;
|
||||
sampleCallback_ = sampleCallback;
|
||||
ADCSRA = (1 << ADEN) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
|
||||
setInput(input);
|
||||
setReferance(referance);
|
||||
}
|
||||
|
||||
Adc::~Adc()
|
||||
{
|
||||
ADCSRA = 0;
|
||||
}
|
||||
|
||||
void Adc::setInput(const uint8_t input)
|
||||
{
|
||||
ADMUX = (ADMUX & 0b11110000) | (input & 0b00001111);
|
||||
}
|
||||
|
||||
void Adc::setReferance(const uint8_t input)
|
||||
{
|
||||
ADMUX = (ADMUX & 0b00101111) | ((input & 0b00000100) << 2) | ((input & 0b00000011) << 6);
|
||||
}
|
||||
|
||||
void Adc::aquire()
|
||||
{
|
||||
ADCSRA |= 1 << ADSC;
|
||||
}
|
Reference in New Issue
Block a user