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

 
 
> Параллельная работа таймера и АЦП
Igoreha027
сообщение Apr 9 2007, 11:42
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 1-09-06
Пользователь №: 20 007



Пробовал сделать прибор по "грубой" оценке АТХ блоков питания. Идея была такова: при нажатии кнопки прибор отслеживал напряжения и время прихода сигнала Power Good в mS (когда все напряжения установились в 5% коридоре). Время PG фиксировалось и прибор переходил в режим измерения, если напряжения выходили за коридор, то время не мерялось и выдавалось индикация отклонившегося параметра.
Проблема возникла в невозможности параллельной работы таймера-счетчика и АЦП. Время неправильно показывает.
Подскажите как выйти из такой ситуации или где почитать можно.
В примере все файлы.
Прикрепленные файлы
Прикрепленный файл  ADC_7110.zip ( 40.29 килобайт ) Кол-во скачиваний: 60
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
arttab
сообщение Apr 9 2007, 12:36
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



открыть проек оркада не смог.
у меня в большинстве устройств на атмеле работают и ацп и таймер. Интервалы измерений привязанны к временным интервалам,
Пример: наждые 2 мсек. запускаетися ацп. по окончанию преобразования идет обработка результата измерения. Время преобразования меньше 2 мсек.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Igoreha027
сообщение Apr 9 2007, 15:25
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 1-09-06
Пользователь №: 20 007



Цитата(arttab @ Apr 9 2007, 14:36) *
открыть проек оркада не смог.
у меня в большинстве устройств на атмеле работают и ацп и таймер. Интервалы измерений привязанны к временным интервалам,
Пример: наждые 2 мсек. запускаетися ацп. по окончанию преобразования идет обработка результата измерения. Время преобразования меньше 2 мсек.


Проект не в оркаде, а в Протеусе. У меня шесть каналов АЦП и точность показаний времени до 1 mS, так что 2х6=12 mS это уже не то
Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 9 2007, 21:55
Сообщение #4


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, будет ещё компактнее.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
gormih
сообщение Apr 10 2007, 14:22
Сообщение #5


nofb
***

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



Цитата(=GM= @ Apr 9 2007, 22:55) *
Действительно, стоит переделать прерывание от таймера. Поставьте в нём прежде всего запуск преобразования АЦП, потом подсчет вашего времени s, проверка и установка флага, что преобразование началось и никакой п/п show(). В основной программе надо подождать установленного флага, обработать соответствующий канал и сбросить флаг. Преимуществом такого подхода будет то, что вызов АЦП будет происходить на регулярной основе (2 мс или сколько вам там надо), не зависящей от времени выполнения подветвей вашей основной программы.

Вместо конструкции for и if поставьте switch, будет ещё компактнее.




Если грамотно организовать ADCRun - никакой таймер не нужен впринципе. То, что много каналов ничего не решает - время переключения на канал и время оцифровки текущего канала постоянно, следовательно прерывания АЦП возникают через равные промежутки времени. Чем не таймер? Тем более, что в атмеге ниже определнной скорости оцифровки АЦП в режиме постоянного преобразования АЦП добится невозможно, и о медленности данного метода говорить не приходится.

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


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 20:57
Рейтинг@Mail.ru


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