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

 
 
> Опрос АЦП внутри прерывания
AndreyVN
сообщение Dec 7 2013, 06:41
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Всем привет!
Перенес код опроса АЦП (ATmega16) внутрь обработчика прерываний от таймера, АЦП напрочь перестал работать, оба байта стабильно 00, 00.
Есть какие-то подводные камни при запуске однократного преобразования АЦП в теле обработчика прерывания? (Сам факт вызова процедуры обработчика прерывания вижу на осциллографе.)

Этим кодом пользовался много раз:
Код

//АЦП доступен, прерывания разрешены
//ADCSRA: 7-ADEEN 6-ADSC 5-ADATE 4-ADIF 3-ADIE 2-ADPS2 1-ADPS2 0-ADPS0
//           1      0       0      0      0      1       1       1
ADCSRA = 0x87;
...
ADCSRA |= 0x40; //Начать одиночное преобразование АЦП
while( (ADCSRA & 0x40)==0x40 ); //ждем завершения преобразования ADSC (13-14 тактов)
c1 = ADCL; //Читаем результат преобразования сначала младший
c2 = ADCH; //затем старший (иначе не работает!)
VADC = c1 + c2*256;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Abell
сообщение Dec 7 2013, 08:03
Сообщение #2


профессиональный дилетант
****

Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292



А Вы не обрабатывайте АЦП в прерывании, Вы обрабатывайте его в главном цикле, так-то оно правильней будет... за 13-14 тактов многое может произойти, да так, что и выйти корректно из прерывания может не получиться, или выйти не туда laughing.gif


--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...

Go to the top of the page
 
+Quote Post
AndreyVN
сообщение Dec 7 2013, 09:12
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата(Abell @ Dec 7 2013, 11:03) *
А Вы не обрабатывайте АЦП в прерывании, Вы обрабатывайте его в главном цикле, так-то оно правильней будет... за 13-14 тактов многое может произойти, да так, что и выйти корректно из прерывания может не получиться, или выйти не туда laughing.gif

Ну так оно и было, все работало. Мне нужно обеспечить гарантированное время в петле регулирования. Все что связано с регулированием (измерение и вычисление управляющего воздействия) засунул в прерывание от таймера, а интерфейсную часть (опрос клавиатуры и вывод на LCD) оставил в основном цикле. И... неожиданно обломался. Уже пару дней перечитываю даташит - ну не вижу я ни одной причины по которой нельзя опросить АЦП внутри обработчика прерывания!
Времена на стадии отладки сделал огромные (21 mS), при входе в прерывание выставляю на пин "1" на осциллографе вижу, что прерывание случилось, при выходе из прерывания сбрасываю пин в "0", то есть, все работает, но не измеряет. Опора как была так и есть. В общем, фигня какая-то. cranky.gif Клавиатура работает, LCD тоже, то есть структура программы не рушится, если случаются вложенные прерывания, они отрабатывают корректно.
Go to the top of the page
 
+Quote Post
Abell
сообщение Dec 7 2013, 09:41
Сообщение #4


профессиональный дилетант
****

Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292



Цитата(AndreyVN @ Dec 7 2013, 13:12) *
Ну так оно и было, все работало.

Ну пусть дальше и работает sm.gif А, случайно, прерывания АЦП запретили? Регистр состояния не меняется в процессе обработки? Может, проще в основном цикле запускать преобразование, а по прерыванию АЦП брать результат и синхронизировать с таймером?


--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AndreyVN   Опрос АЦП внутри прерывания   Dec 7 2013, 06:41
||- - AndreyVN   Цитата(Abell @ Dec 7 2013, 12:41) Ну пуст...   Dec 7 2013, 10:02
||- - stells   Цитата(AndreyVN @ Dec 7 2013, 14:02) А у ...   Dec 7 2013, 10:19
|- - Xenia   Цитата(AndreyVN @ Dec 7 2013, 13:12) Мне ...   Dec 7 2013, 17:15
|- - AndreyVN   Цитата(Xenia @ Dec 7 2013, 20:15) А вы ст...   Dec 7 2013, 18:59
- - stells   я сталкивался с неправильной обработкой АЦП в подп...   Dec 7 2013, 09:30
- - _Pasha   Мега8 недалеко ушла от 16-й, все работало и работа...   Dec 7 2013, 19:17
|- - AndreyVN   Цитата(_Pasha @ Dec 7 2013, 22:17) Мега8 ...   Dec 7 2013, 19:36
- - Сергей Борщ   Цитата(AndreyVN @ Dec 7 2013, 08:41) оба ...   Dec 8 2013, 00:31
|- - AndreyVN   ЦитатаА где вы их проверяете? В этом же прерывании...   Dec 8 2013, 06:22
|- - Сергей Борщ   Цитата(AndreyVN @ Dec 8 2013, 08:22) Выво...   Dec 8 2013, 08:57
|- - AndreyVN   Цитата(Сергей Борщ @ Dec 8 2013, 11:57) П...   Dec 8 2013, 09:17
|- - _Pasha   Цитата(AndreyVN @ Dec 8 2013, 12:17) Нет,...   Dec 8 2013, 11:52
|- - WHALE   Цитата(_Pasha @ Dec 8 2013, 15:52) Ну вот...   Dec 8 2013, 19:26
||- - AndreyVN   Цитата(WHALE @ Dec 8 2013, 23:26) ТС так ...   Dec 9 2013, 04:25
|- - demiurg_spb   Цитата(_Pasha @ Dec 8 2013, 15:52) Ну вот...   Dec 9 2013, 05:51
- - Сергей Борщ   Цитата(WHALE @ Dec 8 2013, 21:26) А он не...   Dec 9 2013, 14:38


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

 


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


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