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);            
        }
    }
}

results matching ""

    No results matching ""