Прошу помощи, не могу получить корректный результат преобразования из АЦП модуля.
Написал простейшую прогу:
Код
#include <ioavr.h>
#define ADMUX_VALUE 0x81 //Выбираем внутренний источник опорного напряжения и канал ADC1
#define ADCSRA_VALUE 0x85 //Выбираем предделитель частоты для задания опорной частоты АЦП; так же задаем режим одиночного АЦ преобразования
#define ADCSRB_VALUE 0x00
int main(void){
unsigned char v;
PRR_PRADC = 0; //Выключаем режим пониженного потребления, то есть разрешаем работу АЦП
ADCSRA_ADEN = 1; //Включаем модуль АЦП, до включения все попытки доступа к битовым полям регистров АЦП будут некорректными
//Инициализируем АЦП регистры
ADCSRA = ADCSRA_VALUE;
ADMUX = ADMUX_VALUE;
ADCSRB = ADCSRB_VALUE;
//В порт Б будем выводить младший ниббл результата АЦ преобразования
DDRB = 0x0F;
PORTB = 0x00;
for (;;){
ADCSRA_ADSC = 1; //Запускаем преобразование
while (ADCSRA_ADIF == 0){}; //Дожидаемся окончания преобразования
v = ADCMn; //Вычитываем младшие разряды результата преобразования
PORTB = v;
}
return 0;
}
#define ADMUX_VALUE 0x81 //Выбираем внутренний источник опорного напряжения и канал ADC1
#define ADCSRA_VALUE 0x85 //Выбираем предделитель частоты для задания опорной частоты АЦП; так же задаем режим одиночного АЦ преобразования
#define ADCSRB_VALUE 0x00
int main(void){
unsigned char v;
PRR_PRADC = 0; //Выключаем режим пониженного потребления, то есть разрешаем работу АЦП
ADCSRA_ADEN = 1; //Включаем модуль АЦП, до включения все попытки доступа к битовым полям регистров АЦП будут некорректными
//Инициализируем АЦП регистры
ADCSRA = ADCSRA_VALUE;
ADMUX = ADMUX_VALUE;
ADCSRB = ADCSRB_VALUE;
//В порт Б будем выводить младший ниббл результата АЦ преобразования
DDRB = 0x0F;
PORTB = 0x00;
for (;;){
ADCSRA_ADSC = 1; //Запускаем преобразование
while (ADCSRA_ADIF == 0){}; //Дожидаемся окончания преобразования
v = ADCMn; //Вычитываем младшие разряды результата преобразования
PORTB = v;
}
return 0;
}
В итоге на выходах порта B имею постоянно одно и тоже значение. То есть АЦП не работает.
Подобный исходник легко запускается на ATmega16 и выдает нормальные значения.
Подскажите какие есть особенности у АЦП ATtiny44A.
IDE: IAR 5.51.0
Заранее спасибо за ответы.