реклама на сайте
подробности

 
 
> Tiny26 АЦП проблема, Описана проблема с опросом АЦП.
Roth
сообщение Sep 8 2008, 11:35
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 8-09-08
Пользователь №: 40 054



Доброго времени суток.

Имеется Т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, включал опрашивал выключал АЦП , снова включал порты на выход. Результат тот же.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
=GM=
сообщение Sep 8 2008, 12:08
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Вам надо читать регистр 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.

Пока писал, уже опередили.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 09:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016