Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Tiny26 АЦП проблема
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Roth
Доброго времени суток.

Имеется Т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, включал опрашивал выключал АЦП , снова включал порты на выход. Результат тот же.
Chameleon
ADCH наверно надо еще прочитать. Не только ADCL.
Rst7
Если бы Вы внимательно почитали даташит, то узнали бы о наличии специального механизма для безопасного чтения 16тиразрядных регистров. В Вашем случае необходимо сначала прочитать ADCL, а потом, обязательно, ADCH.
Roth
Да, Вы правы, проверю.
Внимательно надо читать шиты.
=GM=
Вам надо читать регистр ADCH тоже, даже если вы его не используете, иначе блокируется доступ к регистрам ADCH и ADCL.

Цитата из описания, с.98
Once ADCL is read, ADC access to data registers is blocked. This means that if ADCL has been read, and a conversion completes before ADCH is read, neither register is updated and the result from the conversion
is lost. When ADCH is read, ADC access to the ADCH and ADCL Registers is re-enabled.

Пока писал, уже опередили.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.