Доброго времени суток.
Имеется Тiny26L. Стабилизир питание 5В.
PA2 PA3 PA7 - используются как выходы.
ADC0 ADC1 как дифф вход АЦП.
Проблема заключается в том что, АЦП после инициализации и последующих попыток стартовать, не обновляет ADCL - только после RESET.
Код
void port_init(void)
{
PORTB = b10000000;
DDRB = b01111111;
PORTA = b00000000;
DDRA = b10001100;
}
//ADC initialize
// Conversion time: 26uS
void adc_init(void)
{
ADCSR = b00000000; // disable adc
ADMUX = b10001011; // select adc input : ref-int, xxx01011 diff(0-1),gain=20
ACSR = b10000000; // switch off analog comparator
ADCSR = b10000001; // enable, prescaler=2
}
.....................
while(1){
ADCSR = ADCSR | b01000000; // single conversion
// sbi 0x6,6 компил-р ICCAVR v7
while ( (ADCSR & b01000000) != 0 ) {;} // wait
// L14: sbic 0x6,6 rjmp L14
k=ADCL;
ShowNum ( (unsigned short int)(k) );
.......
}
Всё прекрасно работает, показывает некоторое значение ADCL (при каждом включении разное).
Но оно не обновляется до выключения\reset - ощущение что АЦП один раз снял и больше не "хочет". Хотя ожидание после преобразования удачно проходит.
Так вот хочу выяснить - это ошибка программирования или МК(заменить МК пока нет возможности), на Меге8 подобная схема работает без проблем.
Перепробовал многое - перед включением АЦП переводил порты в hi-Z, включал опрашивал выключал АЦП , снова включал порты на выход. Результат тот же.