Страница 1 из 1
прерывание по ацп
Добавлено: Сб фев 22, 2014 18:31:57
rus084
возможно ли сделать так:
брать минимальное значение ацп за прошлый период , если текущее значение ацп меньше минимального прошлого значения ацп + х% , генерировать прерывание .
но как это сделать?
ведь контроллер вычисляет еще много чего

Re: прерывание по ацп
Добавлено: Вс фев 23, 2014 07:36:25
vem566
Сделать, как два пальца. Только чем еще занят МК? Как организовано считывание АЦП? Какое прерывание нужно?
Где исходник, куда это добавить нужно? И последнее: на хрена фотография непонятно чего, которая не влазит на экран?
Re: прерывание по ацп
Добавлено: Вс фев 23, 2014 08:21:45
КРАМ
vem566 писал(а):Сделать, как два пальца. Только чем еще занят МК? Как организовано считывание АЦП? Какое прерывание нужно?
Уж не знаю что там показывают два пальца, но мне видится ТРИ...
Прерывание - оно и в Африке...
Либо оно есть, а значит в обработчике можно что то там проанализировать, либо его нет и тогда контроллер продолжает исполнять код последовательно...
ТС не обозначил ОБЩУЮ задачу (картинка лишь дает смутные догадки о деревянном велосипеде с квадратными колесами), а его вопрос однозначно говорит о его непонимании архитектуры и принципов работы МК.
ЗЫ.
Тут возможно только два варианта.
1. Обработка после КАЖДОГО преобразования (по прерыванию АЦП по каждой выборке)
2. Обработка по прерыванию от ДМА. Тогда обработка происходит по всему периоду.
Латентность получения результата в первом варианте меньше, но загрузка МК по этой задаче ниже во втором.
Сформировать по заданному АВТОРОМ условию прерывание можно только ПРОГРАММНОЕ. Сиречь ни о каком реальном времени речи быть не может...
Re: прерывание по ацп
Добавлено: Вс фев 23, 2014 10:11:27
rus084
там используется chibi/os
как именно будет работать через дма?
Re: прерывание по ацп
Добавлено: Вс фев 23, 2014 11:55:28
КРАМ
Обычно.
1. Выбираете источник запуска преобразований АЦП (таймер или чего еще).
2. Программируете ДМА на предмет адресов, куда будут направлены транзакции, на предмет числа транзакций после которых будет сгенерировано прерывание от ДМА, определяете вектор этого прерывания (если требует архитектура), программируете источник данных для транзакций (в Вашем случае это АЦП).
3. Запускаете источник по п.1
4. В обработчике прерываний от ДМА в обозначенном участке ОЗУ получаете массив данных за время от сброса ДМА до прерывания от ДМА.
Весь этот процесс происходит невидимо для основного кода.
Единственное, при транзакциях происходит захват шины ОЗУ, поэтому основной код при конфликтах обращения к ОЗУ с ДМА будет приостановлен для варианта архитектуры с однопортовым ОЗУ, а в случае с двухпортовым ОЗУ произойдет арбитраж только при одновременной ЗАПИСИ в ОДНУ И ТУ ЖЕ ячейку ОЗУ, что крайне маловероятно и определяется программистом.
Re: прерывание по ацп
Добавлено: Пн фев 24, 2014 01:35:51
Myp3ik
Смотрите режим ADC Analog Watchdog.
Re: прерывание по ацп
Добавлено: Чт апр 24, 2014 20:34:45
rus084
а как запустить dma в chibi/os ?
можно обрабатывать каждые определенные промежутки времени , ос поддерживает многозадачность , но я не уверен что хватит вычислительной мощности.
хотя записывать семплы из ацп и отправлять по юсб вполне хватает