#include <avr/io.h>
#include <util/delay.h>
#define LIMITE 205
void config_port(void);
void config_ADC(void);
//Variable global para guardar el valor del ADC
volatile uint16_t valor_analogico;
int main(void) {
config_port();
config_ADC();
while (1) {
proceso();
// Esperar un tiempo antes de tomar otra lectura (opcional)
_delay_ms(100);
}
return 0;
}
//configura puerto salida
void config_port(void){
//Configura PORTB5 COMO SALIDA
DDRB|=0x01<<05;
PORTB&=~(0x01<<05); //PORTB5 APAGADO
}
//configura ADC
void config_ADC(void){
// Habilitar el convertidor Analógico a Digital
ADCSRA |= (0x01 << ADEN);
// Configurar referencia de voltaje (AVCC con cap. externo)
ADMUX |= (0x01 << REFS0);
ADMUX &=~(0x01 << REFS1);
// Habilitar el ADC y configurar el pre-escaler a 128
// Frecuencia de muestreo de 125 kHz a 16MHz)
ADCSRA |= (0x01 << ADPS0);
ADCSRA |= (0x01 << ADPS1);
ADCSRA |= (0x01 << ADPS2);
// Seleccionar el canal ADC 0
ADMUX &=~(0x01<<MUX0);
ADMUX &=~(0x01<<MUX1);
ADMUX &=~(0x01<<MUX2);
ADMUX &=~(0x01<<MUX3);
}
//ACCIONES A REALIZAR
void proceso(void){
// Iniciar la conversión ADC
ADCSRA |= (0x01 << ADSC);
// Espera a que la conversión termine
//Método de polling
while (ADCSRA & (0x01 << ADSC))
;
// Devolver el valor de la conversión
valor_analogico=ADC;
// Comparando el valor analogico
if (valor_analogico > LIMITE)
PORTB |= (0x01 << PORTB5); // Encender el LED conectado al pin PB5
else
PORTB &= ~(1 << PORTB5); // Apagar el LED
}