ADC
/* Hello_AVR.cpp
*
* Created: 2017-01-07(YYYY-MM-DD) AM 5:08:05
* Author : Michael Jun-Hyuk Im([email protected])
*/
#define F_CPU 16000000
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
volatile unsigned int ADC_Buffer, ADC_Flag;
void MI_ADC_Config()
{
//Single Conversion each ADCS flag -> Need: MI_ReadADC();
//ADCSRA = (1 << ADEN) | (0 << ADFR) | (0 << ADIE) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // ADC Prescaler : 128
//Free running, Complete Interrupt
ADCSRA = (1 << ADEN) | (1 << ADFR) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // ADC Prescaler : 128
ADMUX |= (0 << REFS1) | (1 << REFS0) | (0 <<ADLAR); //Reference Voltage: AVCC, Left alignment
ADMUX |= (0 << MUX4) | (0 << MUX3) | (0 << MUX2) | (0 << MUX1) | (0 << MUX0);
ADCSRA |= (1 << ADSC); //Start Conversion
}
int MI_ReadADC()
{
ADCSRA |= (1 << ADSC); // Start the AD conversion
while (!(ADCSRA & (1 << ADIF))); // Wait for the AD conversion to complete
return ADCW;
}
ISR(ADC_vect)
{
while (!(ADCSRA & (1 << ADIF)));
ADC_Buffer = ADCW;
ADC_Flag = 1;
}
int main(void)
{
MI_ADC_Config();
sei();
while (1)
{
if(ADC_Flag == 1)
{
ADC_Flag = 0;
//printf("Value: %d \r\n",ADC_Buffer);
}
}
}