¿Lee el valor de la entrada analógica de un microcontrolador AVR?

1

He agregado un fotoresistor a ATMEGA328P-PU. Estoy tratando de leer el valor de la entrada analógica, pero no entiendo cómo asignar el valor de la entrada analógica al valor entero (photoResistorValue en while loop), por lo que puedo trabajar con él más adelante.

#define F_CPU     800000UL
#define BAUD      14400
#define BRC       ((F_CPU/8/BAUD) - 1)

#include <stdlib.h>

#include <avr/io.h>
#include <avr/interrupt.h>

#include <util/delay.h>
#include <util/setbaud.h> 
#include <avr/io.h>
#include <avr/interrupt.h>

double dutyCycle = 0;

int main(void)
{
    DDRD = (1 << PORTD6);

    TCCR0A = (1 << COM0A1) | (1 << WGM00) | (1 << WGM01);
    TIMSK0 = (1 << TOIE0);

    setupADC();

    sei();

    TCCR0B = (1 << CS00) | (1 << CS02);

    while(1)
    {
        // int photoResistorValue = ..;
    }
}

void setupADC()
{
    ADMUX = (1 << REFS0) | (1 << MUX0) | (1 << MUX2);
    ADCSRA = (1 << ADEN) | (1 << ADIE) | (1 << ADPS0) | (1 << ADPS1) | (1 << ADPS2);
    DIDR0 = (1 << ADC5D);

    startConversion();
}

void startConversion()
{
    ADCSRA |= (1 << ADSC);
}

ISR(TIMER0_OVF_vect)
{
    OCR0A = dutyCycle;
}

ISR(ADC_vect)
{
    dutyCycle = ADC;
    startConversion();
}
    
pregunta K666

1 respuesta

1

Primero defina el valor del fotorresistor INT fuera del bucle while, ya que no quiere que se inicie en cada bucle.

Luego, dentro del bucle while, sería tan simple como

 photoresistorvalue = ADCW;

ADCW debe ser el registro de resultados de ADC para microcontroladores AVR, pero puede variar según la familia o el tipo de ADC.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas