#define F_CPU 1000000UL
#include <avr/io.h>
volatile uint8_t adcvalue;
int main(void)
{
DDRA =0x00;
DDRC = 0xff;
// enable adc
ADCSRA |= (1<<ADEN);
// using division factor 8
ADCSRA |= (1<<ADPS0) | (1<<ADPS1);
// enable 8 bit conversion
ADMUX |= (1<<ADLAR);
// take input from PA0
ADMUX |= (1<<MUX0);
while (1)
{
// Start conversion
ADCSRA |= (1<<ADSC);
// wait until conversion is done
while (ADCSRA & (1<<ADSC));
// save result to adcvalue
adcvalue = ADCH;
// show result on 8 leds connected to PORT C
PORTC = adcvalue;
}
return 0;
}
Приведенный выше код должен принимать аналоговое значение от PA0 (с помощью потенциометра) и отображать цифровое значение на 8 светодиодах, подключенных к PORT C. Когда я моделирую схему на Proteus, светодиоды всегда горят, даже когда я изменяю значение потенциометра, и появляется сообщение о том, что «[AVR AD CONVERTER] Эталонное значение = 0».
Благодарю, если вы можете помочь мне узнать, что не так.