АЦП в реальной выдает постоянно одно и тоже значение (0xFF) при любом напряжении на выводе ADC1.
В Протеусе все работает, а в реальной схеме нет.
Конфигурация вывода ADC1:
DDRA=0x00
PORTA=0x00
Инициализация АЦП:
Код:
ADCSRA |=(0<< ADATE); // Режим одиночного преобразования АЦП
ADCSRA |=(1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // Коэфф. деления предделителя АЦП =64
// частота преобраз.=62,5 кГц.
ADMUX |=(0<<REFS1) | (1<<REFS0)|(1<<ADLAR); // Внешний ИОН (1,23 В), подкл. к выводу
//AREF
DIDR0 |=(1<<ADC1D) |(1<<ADC2D)|(1<<AREFD); // Отключаем цифровые буферы на выводах
//считывания аналоговых сигналов (для уменьш. токопотребления)
Функция считывания данных с АЦП:
Код:
// Настройка входа для измерения напряжения
ADMUX &=~((1<<MUX5) | (1<<MUX4) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (1<<MUX0)); // Обнуляем предыдущие настройки
ADMUX |=((0<<MUX5) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0)); // подкл. вход ADC1
ADCSRA|=(1<<ADEN); //Вкл. АЦП
ADCSRA|=(1<<ADSC); //Начать преобразование
while (!(ADCSRA &(1<<ADIF))) //Дождатся окончания преобразования
{
}
_delay_ms(100);
v=ADCL;
v=ADCH;
ADCSRA &=~(1<<ADEN); //Выкл. АЦП