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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Измеритель, как организовать программу?
Zelepuk
сообщение Jun 28 2012, 20:00
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Требуется разработать измеритель.
Аппаратная база: МК + внешний АЦП + дисплей
Задачи, которые нужно обрабатывать в программе:
1) принимать данные с АЦП через SPI по внешнему прерыванию и записывать в кольцевой буфер (частота дискретизации порядка 25кГц)
2) каждые 10 мс. производить обработку блока данных с АЦП по некоторому алгоритму;
3) усреднять данные полученные в п.2 каждые 3 секунды
4) записывать данные, полученные в п.3 на SD-карту (история)
5) обрабатывать запросы через Ethernet (задать время внутренних часов, считать данные с SD-карты, задать калибровочные коэффициенты для АЦП и пр.)
6) обновлять данные на дисплее каждые 3 секунды

Встал вопрос: как организовать программу?
вариант, который приходит на ум:
1)Суперлуп. В основном цикле которого производится опрос флагов( таких как "накопился буфер с АЦП" и пр.). Здесь так же работают прерывания: от АЦП - ложим отсчёт в буфер; от порта Ethernet - обрабатываем сообщения; от таймера - прошло 3 секунды и пора делать усреднение результатов.
2) По прерываниям от таймера делать переключение задач (каруселька)
Что лучше в данном случае и что ещё можно применить?

просто я "панически" боюсь таких терминов как "синхронизация потоков", "мьютексы", "семафоры" и прочее...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 28 2012, 20:26
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Zelepuk @ Jun 28 2012, 23:00) *
Что лучше в данном случае и что ещё можно применить?

Ответ на этот вопрос зависит от МК, который будет в изделии, так как допустим АВР на 8 МГц это одно, а какой-нибудь CortexM на 80 МГц - это совсем другое.

Цитата(Zelepuk @ Jun 28 2012, 23:00) *
2) По прерываниям от таймера делать переключение задач (каруселька)

Зачем такое вообще применять? Или есть готовое-освоенное?

Сложность скорее представляет Ethernet и SD-карта, если оно не использовалось ранее.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jun 28 2012, 20:40
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(_Артём_ @ Jun 29 2012, 00:26) *
Ответ на этот вопрос зависит от МК, который будет в изделии, так как допустим АВР на 8 МГц это одно, а какой-нибудь CortexM на 80 МГц - это совсем другое.


Зачем такое вообще применять? Или есть готовое-освоенное?

Сложность скорее представляет Ethernet и SD-карта, если оно не использовалось ранее.

планирую использовать что-нибудь из AT91 серии. Для Ethernet есть проект uip для sd-карты тоже есть библиотека.
Для AT91 есть большой соблазн использовать Linux, но я ума не приложу как сделать обработку каждые 10мс. Есть драйвера под Linux для АЦП c с реализоваными кольцевыми буферами(та же подсистема IIO от AD). Но какой механизм применить под Linux, чтобы каждые 10мс обрабатывался блок накопленных отсчётов, и каждый раз это происходило непрерывно во времени.

Но, возможно, Linux тут совсем не подходит.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 28 2012, 20:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Zelepuk @ Jun 28 2012, 23:40) *
Но, возможно, Linux тут совсем не подходит.

Может линукс и неподходит, но есть куча вытесняющих ОСей под AT91 - выбрать есть из чего. И с 10 мс проблем наверняка не возникнет. И если Ethernet и SD реализованы, то дело за малым - начать да кончить.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 29 2012, 04:36
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Zelepuk @ Jun 29 2012, 00:00) *
просто я "панически" боюсь таких терминов как "синхронизация потоков", "мьютексы", "семафоры" и прочее...

А это в любом случае придется делать, как ни назови.
Просто в осях это уже реализовано и документировано, а при изобретении собственного велосипеда придется колхозить вручную.
И не факт, что получится лучше.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jun 29 2012, 09:50
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



А сработает ли суперлуп как я писал выше?
Опыта работы с ОС кроме Linux нет. Но в Linux не знаю как осуществить обработку данных с АЦП каждые 10 мс? поиожет бюольшой кольцевой буфер?

Цитата(MrYuran @ Jun 29 2012, 07:36) *
А это в любом случае придется делать, как ни назови.


Я дкмал суперлуп с опросом флагов избавлен от таких сложностей.

Сообщение отредактировал Zelepuk - Jun 29 2012, 09:49
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jun 29 2012, 09:56
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Zelepuk @ Jun 29 2012, 00:00) *
Встал вопрос: как организовать программу?

Если не хотите стандартную rtos, то можете сделать в виде суперлупа, в котором будут поочередно вызываться функции(конечные автоматы) из кольцевого буфера "задач". Это очень полезно, т.к. в конце пути осознаете целесообразность делать следующий проект на какой-нибудь ртос.

Цитата(Zelepuk @ Jun 29 2012, 00:00) *
просто я "панически" боюсь таких терминов как "синхронизация потоков", "мьютексы", "семафоры" и прочее...

А все эти слова придуманы, чтобы разделять общие данные. Например в Вашем случаи история на sd-карте может запрашиваться по эзернету, когда вы в неё пишите. Кстати синхронизацию потоков Вы делаете постоянно, когда есть данные, которые используются и в прерывание, и в основной программе.



--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jun 29 2012, 16:21
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Lotor @ Jun 29 2012, 13:56) *
Если не хотите стандартную rtos, то можете сделать в виде суперлупа, в котором будут поочередно вызываться функции(конечные автоматы) из кольцевого буфера "задач". Это очень полезно, т.к. в конце пути осознаете целесообразность делать следующий проект на какой-нибудь ртос.


А все эти слова придуманы, чтобы разделять общие данные. Например в Вашем случаи история на sd-карте может запрашиваться по эзернету, когда вы в неё пишите. Кстати синхронизацию потоков Вы делаете постоянно, когда есть данные, которые используются и в прерывание, и в основной программе.


А если реализация будет в виде суперлупа, в котором будут поочерёдно вызываться функции(конечные автоматы) как вы рекомендовали, что будет когда в момент записи на SD-карту происходит запрос по Ethernet? запрос будет просто ждать своей очереди?
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jun 29 2012, 16:26
Сообщение #9


Знающий
****

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



Цитата(Zelepuk @ Jun 29 2012, 13:50) *
Но в Linux не знаю как осуществить обработку данных с АЦП каждые 10 мс?


Цитата
Each ring buffer typically has an event chrdev (similar to the more general ones above) to pass on
events such as buffer 50% full and an access chrdev via which the raw data it self may be read back.


можно использовать poll в юзерспейс, при известной частоте дискретизации заранее известно сколько измерений нужно для 10 мс, задать буфер на 20 мс - процесс автоматически будет активирован когда данные готовы для обработки.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 30 2012, 09:26
Сообщение #10


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Zelepuk @ Jun 28 2012, 23:40) *
планирую использовать что-нибудь из AT91 серии. Для Ethernet есть проект uip для sd-карты тоже есть библиотека.
Для AT91 есть большой соблазн использовать Linux, но я ума не приложу как сделать обработку каждые 10мс. Есть драйвера под Linux для АЦП c с реализоваными кольцевыми буферами(та же подсистема IIO от AD). Но какой механизм применить под Linux, чтобы каждые 10мс обрабатывался блок накопленных отсчётов, и каждый раз это происходило непрерывно во времени.

Но, возможно, Linux тут совсем не подходит.


Linux тут явно не конкурентное решение. Да и AT91 прошлый век.

Специально для таких задач разработаны двух-ядерные микроконтроллеры вроде: LPC4350

На основном ядре работают стеки TCP/IP, GUI, файловая система, отладочные мониторы и т.д.
На вспомогательном ведется цифровая пред-обработка данных, например фильтрация, поиск экстремумов, интегрирование и т.д.

Тогда применив такие недоделанные стеки как uip можно получить вполне надежный дивайс, даже оставив в софте кучу багов.
Быстрый пересброс основного ядра без потери данных никто не заметит.

Кстати о RTOS, перечисленными вами вещами как: "синхронизация потоков", "мьютексы", "семафоры" практически не пользуюсь.
Это знаете ли, пережитки больших осей, где каждая задача как черный ящик для программиста.
В малых осях можно напрямую читать и писать переменные разных задач не применяя никаких объектов синхронизации, просто зная кто еще, как и когда к ним обращается.
А сделать это в обозримых сорсах не представляет проблем. И надежность в целом повысится, так как чем меньше сервисов используете тем меньше проблем оси получаете в виде инверсии приоритетов и взаимных блокировок.
Единственно что действительно понадобится это сервисы очередей и событий. И практически все!

Вообщем берите vxWorks и не пожалеете. Там будет все : мультихостовый TCP/IP, FTP клиент/сервер, клиент NTP, реентерабельную FS и т.д.
Или RL ARM. Сразу готовое на LPC4350 получите.
Найдете на ftp.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Jun 30 2012, 13:29
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(AlexandrY @ Jun 30 2012, 13:26) *
Linux тут явно не конкурентное решение. Да и AT91 прошлый век.


Ну почему не конкурентное? Вот это девайс http://mirmsk.ru/uake_analizator_kachestva_elektroen (как раз обрабатывает данные на частоте сотен кГц) работает под управлением Linux.
Среди AT91 сейчас есть камни с 400мГц частотой ядра и DDR-памятью.

А vxWorks всё-таки не бесплатное решение.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 30 2012, 14:29
Сообщение #12


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(TigerSHARC @ Jun 30 2012, 16:29) *
Ну почему не конкурентное? Вот это девайс http://mirmsk.ru/uake_analizator_kachestva_elektroen (как раз обрабатывает данные на частоте сотен кГц) работает под управлением Linux.
Среди AT91 сейчас есть камни с 400мГц частотой ядра и DDR-памятью.

А vxWorks всё-таки не бесплатное решение.


Функции этого дивайса может выполнить чип за 10$ -
http://www.analog.com/en/analog-to-digital...roducts/product.

О какой тут конкурентоспособности вообще речь???
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Jun 30 2012, 15:42
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(AlexandrY @ Jun 30 2012, 18:29) *
Функции этого дивайса может выполнить чип за 10$ -
http://www.analog.com/en/analog-to-digital...roducts/product.

О какой тут конкурентоспособности вообще речь???

Я рекомендую повнимательнее взглянуть на функционал девайса(анализатор качества) и микросхемы, ссылку на описание которой вы дали. ADE7880 - всего лишь счётчик электроэнергии.
Анализатор же позволяет записать сигнал (функция самописца). Позволяет анализировать сигнал в течении одного периода, что даёт возможность оперативно зафиксировать провал или перенапряжение, а не просто посчитать действующее значение и мощность.
Сравните цены к примеру на Satec PM175 и простой счётчик (на базе ADE).

Прошу не относится к вопросу поверхностно.

Сообщение отредактировал TigerSHARC - Jun 30 2012, 15:43
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jun 30 2012, 16:00
Сообщение #14


Знающий
****

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



Цитата(TigerSHARC @ Jun 30 2012, 19:42) *
Я рекомендую повнимательнее взглянуть на функционал девайса(анализатор качества) и микросхемы, ссылку на описание которой вы дали. ADE7880 - всего лишь счётчик электроэнергии.


Человек просто далекий от энергетики - для него счетчик ЭЭ это предел мечтаний sm.gif

Цитата
Вообщем берите vxWorks и не пожалеете. Там будет все : мультихостовый TCP/IP, FTP клиент/сервер, клиент NTP, реентерабельную FS и т.д.


в общем немного из того что есть в Linux но похуже и за деньги.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 30 2012, 16:48
Сообщение #15


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(TigerSHARC @ Jun 30 2012, 18:42) *
Я рекомендую повнимательнее взглянуть на функционал девайса(анализатор качества) и микросхемы, ссылку на описание которой вы дали. ADE7880 - всего лишь счётчик электроэнергии.
Анализатор же позволяет записать сигнал (функция самописца). Позволяет анализировать сигнал в течении одного периода, что даёт возможность оперативно зафиксировать провал или перенапряжение, а не просто посчитать действующее значение и мощность.
Сравните цены к примеру на Satec PM175 и простой счётчик (на базе ADE).

Прошу не относится к вопросу поверхностно.


Как раз такой Satec я разбирал. Там внутри стоял довольно убогий по сегодняшним меркам 16-и битный микроконтроллер. Естественно там линукс рядом не лежал.
Да, одна микросхема от AD еще не все делает, к ней достаточно прикрутить STM32 за пару баксов и тогда будет полное удовольствие. biggrin.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 7th June 2024 - 03:31
Рейтинг@Mail.ru


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