АЦП в реальной выдает постоянно одно и тоже значение (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); //Выкл. АЦП
|