Tengo que hacer un interruptor de luz basado en LDR que encienda las luces en condiciones de luz definidas. Para hacer esto tengo que usar el micro controlador atmega32. Sigo algunos tutoriales y escribo algunos códigos. el código se compila en Atmel studio sin ningún problema, pero cuando ejecuto el código utilizando el simulador de Proteaus, el código no funciona
Este es el código
#include <avr/io.h>
#include <util/delay.h>
#define LTHRES 500
// initialize adc
void adc_init()
{
// AREF = AVcc
ADMUX = (1<<REFS0);
// ADC Enable and prescaler of 128
// 16000000/128 = 125000
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}
// read adc value
uint16_t adc_read(uint8_t ch)
{
// select the corresponding channel 0~7
// ANDing with '7' will always keep the value
// of 'ch' between 0 and 7
ch &= 0b00000111; // AND operation with 7
ADMUX = (ADMUX & 0xF8)|ch; // clears the bottom 3 bits before ORing
// start single conversion
// write '1' to ADSC
ADCSRA |= (1<<ADSC);
// wait for conversion to complete
// ADSC becomes '0' again
// till then, run loop continuously
while(ADCSRA & (1<<ADSC));
return (ADC);
}
int main()
{
uint16_t adc_result0, adc_result1;
char int_buffer[10];
DDRC = 0x01; // to connect led to PC0
// initialize adc and lcd
adc_init();
_delay_ms(50);
while(1)
{
adc_result0 = adc_read(0); // read adc value at PA0
// condition for led to glow
if (adc_result0 < LTHRES)
PORTC = 0x01;
else
PORTC = 0x00;
}
}
Y esta es una captura de pantalla de la simulación de proteaus.
Recibí este error
[AVR AD CONVERTER] Valor de referencia = 0
Solo tengo conocimientos básicos de programación de microcontroladores y simulación con proteaus. ¿Alguien puede ayudarme? ¿Cómo debo configurar esto?