|
Параллельная работа таймера и АЦП |
|
|
|
Apr 9 2007, 11:42
|
Группа: Новичок
Сообщений: 3
Регистрация: 1-09-06
Пользователь №: 20 007

|
Пробовал сделать прибор по "грубой" оценке АТХ блоков питания. Идея была такова: при нажатии кнопки прибор отслеживал напряжения и время прихода сигнала Power Good в mS (когда все напряжения установились в 5% коридоре). Время PG фиксировалось и прибор переходил в режим измерения, если напряжения выходили за коридор, то время не мерялось и выдавалось индикация отклонившегося параметра. Проблема возникла в невозможности параллельной работы таймера-счетчика и АЦП. Время неправильно показывает. Подскажите как выйти из такой ситуации или где почитать можно. В примере все файлы.
|
|
|
|
|
 |
Ответов
|
Apr 9 2007, 15:25
|
Группа: Новичок
Сообщений: 3
Регистрация: 1-09-06
Пользователь №: 20 007

|
Цитата(arttab @ Apr 9 2007, 14:36)  открыть проек оркада не смог. у меня в большинстве устройств на атмеле работают и ацп и таймер. Интервалы измерений привязанны к временным интервалам, Пример: наждые 2 мсек. запускаетися ацп. по окончанию преобразования идет обработка результата измерения. Время преобразования меньше 2 мсек. Проект не в оркаде, а в Протеусе. У меня шесть каналов АЦП и точность показаний времени до 1 mS, так что 2х6=12 mS это уже не то
|
|
|
|
|
Apr 9 2007, 21:55
|

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

|
Цитата(Igoreha027 @ Apr 9 2007, 12:25)  Проект не в оркаде, а в Протеусе. У меня шесть каналов АЦП и точность показаний времени до 1 mS, так что 2х6=12 mS это уже не то Действительно, стоит переделать прерывание от таймера. Поставьте в нём прежде всего запуск преобразования АЦП, потом подсчет вашего времени s, проверка и установка флага, что преобразование началось и никакой п/п show(). В основной программе надо подождать установленного флага, обработать соответствующий канал и сбросить флаг. Преимуществом такого подхода будет то, что вызов АЦП будет происходить на регулярной основе (2 мс или сколько вам там надо), не зависящей от времени выполнения подветвей вашей основной программы. Вместо конструкции for и if поставьте switch, будет ещё компактнее.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Apr 10 2007, 14:22
|

nofb
  
Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218

|
Цитата(=GM= @ Apr 9 2007, 22:55)  Действительно, стоит переделать прерывание от таймера. Поставьте в нём прежде всего запуск преобразования АЦП, потом подсчет вашего времени s, проверка и установка флага, что преобразование началось и никакой п/п show(). В основной программе надо подождать установленного флага, обработать соответствующий канал и сбросить флаг. Преимуществом такого подхода будет то, что вызов АЦП будет происходить на регулярной основе (2 мс или сколько вам там надо), не зависящей от времени выполнения подветвей вашей основной программы.
Вместо конструкции for и if поставьте switch, будет ещё компактнее. Если грамотно организовать ADCRun - никакой таймер не нужен впринципе. То, что много каналов ничего не решает - время переключения на канал и время оцифровки текущего канала постоянно, следовательно прерывания АЦП возникают через равные промежутки времени. Чем не таймер? Тем более, что в атмеге ниже определнной скорости оцифровки АЦП в режиме постоянного преобразования АЦП добится невозможно, и о медленности данного метода говорить не приходится. Не понятно вообще, зачем делать паралельные процессы там, где они не только не нужны, но и мешают. Таймер понятия не имеет о том, когда АЦП закончило преобразование (если конечно он его не запускает), прерывание АЦП же хорошо знает, когда закончилось преобразование и точнее его вам никто не измерит промежуток времени, как бы вы не старались.
--------------------
Это не то что вы подумали ...
|
|
|
|
Сообщений в этой теме
Igoreha027 Параллельная работа таймера и АЦП Apr 9 2007, 11:42    =GM= Цитата(gormih @ Apr 10 2007, 10:22) Если ... Apr 10 2007, 15:08     gormih Цитата(=GM= @ Apr 10 2007, 16:08) Так не ... Apr 10 2007, 21:24      singlskv Цитата(=GM= @ Apr 10 2007, 16:08) Так не ... Apr 10 2007, 22:23     Igoreha027 Цитата(=GM= @ Apr 10 2007, 17:08) Так не ... Apr 11 2007, 05:18      gormih Цитата(Igoreha027 @ Apr 11 2007, 06:18) В... Apr 11 2007, 13:07      =GM= Цитата(Igoreha027 @ Apr 11 2007, 01:18) В... Apr 11 2007, 13:13 KRS Цитата(Igoreha027 @ Apr 9 2007, 12:42) Пр... Apr 9 2007, 12:39 gormih Небольшой совет:
Счетчик времени привязывать не к... Apr 9 2007, 13:11 defunct Можно по такому алгоритму:
КодОбработчик прерыван... Apr 10 2007, 23:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|