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

 
 
> 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
Ответов (1 - 4)
Chameleon
сообщение Sep 8 2008, 11:48
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 5-07-08
Пользователь №: 38 757



ADCH наверно надо еще прочитать. Не только ADCL.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 8 2008, 11:49
Сообщение #3


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Если бы Вы внимательно почитали даташит, то узнали бы о наличии специального механизма для безопасного чтения 16тиразрядных регистров. В Вашем случае необходимо сначала прочитать ADCL, а потом, обязательно, ADCH.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Roth
сообщение Sep 8 2008, 11:52
Сообщение #4





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



Да, Вы правы, проверю.
Внимательно надо читать шиты.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Sep 8 2008, 12:08
Сообщение #5


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 Текстовая версия Сейчас: 21st July 2025 - 01:14
Рейтинг@Mail.ru


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