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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Вопрос по алгоритму
bbill
сообщение May 30 2006, 23:12
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 21-10-05
Пользователь №: 9 941



День добрый.
Поставлена задача: прием последовательного кода от семи датчиков, для каждого своя линия порта. Формат передачи: старт-бит, 8 бит данных, 1 стоп. Скорость передачи 2400 или 4800 бод. Передача от датчиков НЕ синхронизирована. Сдвиг между каналами от 0 до ∞ (минуты). Старт-бит необходимо использовать для определения точной скорости передачи от датчиков (по длительности бита), т.к. разброс/временной уход? частоты различных каналов составляет до ±10%. Процессор m8 или m88, частота 8МГц. Датчики однонаправленные, не адресные, из-за расстояния (50-100м), сигнал развязывается через оптроны и на свой пин.

Вопрос: как организовать алгоритм приема посылок от датчиков, при одновременном их поступлении и сдвиге между ними менее длины посылки.

Принимаем, что первым начинается прием канала 1.

..... _________
___|..10бит.....|_____________________ - канал 1
...................__________
__________|..10бит......|_____________ - канал 2
………
......................... _________
______________|..10бит....|_________ -канал 6
............___________
______|..10бит........|_______________ - канал 7
Go to the top of the page
 
+Quote Post
_Bill
сообщение May 31 2006, 07:40
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(bbill @ May 31 2006, 02:12) *
День добрый.
Поставлена задача: прием последовательного кода от семи датчиков, для каждого своя линия порта. Формат передачи: старт-бит, 8 бит данных, 1 стоп. Скорость передачи 2400 или 4800 бод. Передача от датчиков НЕ синхронизирована. Сдвиг между каналами от 0 до ∞ (минуты). Старт-бит необходимо использовать для определения точной скорости передачи от датчиков (по длительности бита), т.к. разброс/временной уход? частоты различных каналов составляет до ±10%. Процессор m8 или m88, частота 8МГц. Датчики однонаправленные, не адресные, из-за расстояния (50-100м), сигнал развязывается через оптроны и на свой пин.

Вопрос: как организовать алгоритм приема посылок от датчиков, при одновременном их поступлении и сдвиге между ними менее длины посылки.

Ну, так это... Есть специальны схемы многоканальных UART. Можно прицепить одну-две таких к МК без особых проблем.
Go to the top of the page
 
+Quote Post
bbill
сообщение May 31 2006, 07:45
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 21-10-05
Пользователь №: 9 941



Железо уже готово...
Go to the top of the page
 
+Quote Post
_Bill
сообщение May 31 2006, 07:56
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(bbill @ May 31 2006, 10:45) *
Железо уже готово...

Ну, тогда только программно. Посмотрите на сайте Atmel AN на эту тему. Должны быть.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение May 31 2006, 08:48
Сообщение #5


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Наверное можно поступить следующим образом:
Есть Application Software UART - если не ошибаюсь там используеться внешнее прерывание и таймер.
Внешние прерывания можно брать от PIN_CHANGE.
Таймер придеться делать софтовый
запустить один из аппаратных в режиме CTC и в прерывании инкрементировать несколько программных счетиков.
Думаю для таких скоростей хватит.

Вот в таком ключе, взяв М88 на скорости поболее, с обильным использованием асма, можно попробовать.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение May 31 2006, 09:50
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Я делал аналогичное и менее оптимистичен.
1) Надо зафиксировать скорости по каналам. Иначе - не верю в успех.
2) Я бы делал на ASMе
3) Я бы делал так, как это делает аппаратный контролер на уровне железа, а именно:
a) Обрабатывал бы прерывание от таймера с частотой, как минимум в три раза выше максимальной частоты передачи. Лучше в пять!
б) в прерывании читал бы ВСЕ каналы.
в) Если 2 из 3 или 4 из 5 засвечено - единица.
г) Т.о. в прерывании формировал бы последовательность типа 1001001001 по каждому каналу.
д) Частота проца должна быть кратна rs232 и такой чтобы успеть обработать прерывание и оставался запас на голову (14372800 или 18432000)
е) В голове по входной последовательности битов формировал бы байты.

Сообщение отредактировал SasaVitebsk - May 31 2006, 09:52
Go to the top of the page
 
+Quote Post
prottoss
сообщение May 31 2006, 11:19
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Привет! Делал (Создавал ПО) два варианта таких устройств, в производство пошел второй вариант:



1. Наиболее дорогое. К кадому датчику цепляется мелкая Тинька, которая обеспечивает адресацию между хостом и датчиком. Тини считывает данные с определенным периодом и ждет запроса хоста. В Тиньке создается программный буфер FIFO с последними данными измерений. Если хост не успевает забрать данные, то они пропадают. Протокол обена данными наподобие MODBUS но немного более упрощенный.



2. Мене дорогое. Датчики опрашивает один МК программно в основном цикле. Все датчики сидят на одном порту МК (Датчиков 8) и опрашиваются программно с частотой, более частоты приема раз в 10 -16. Так же сохраняет данные в общем FIFO буфере. Связь с хостом по одной линии RS485 протокол - чистый MODBUS. Кроме опроса датчиков (программный асинхронный приемник) и связи с хостом (аппаратный USART) МК больше ничем не занимается.



К сожалению, исходники выложить и переслать кому-то не могу, по известным причинам...Но главное идея)))


--------------------
Go to the top of the page
 
+Quote Post
bodja74
сообщение May 31 2006, 11:58
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Да,без фиксации скорости это не реально сделать....,да и с фиксацией тоже smile.gif
Тут же получается произвольный сдвиг между посылками ,который естественно будет не кратен скорости RS.
Вам банально не хватит оперативки smile.gif
Для того чтобы считать порт на приличной скорости,а потом все это пережевать.

Делайте мультипроцессорный блок ,как советовали и не парьте головы.

Я делал на три канала,контроллеры соединял по TWI (двумя мастерами и одним слейвом) и головной боли не знал smile.gif
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 31 2006, 12:24
Сообщение #9


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Я вас умаляю!
При желании всё это можно сделать на асме. И почти на любом АВРе. Было бы желание.
Но тут похоже одни нытики и пессимисты.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
ksv198
сообщение May 31 2006, 13:21
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Цитата(GetSmart @ May 31 2006, 16:24) *
Я вас умаляю!
При желании всё это можно сделать на асме. И почти на любом АВРе. Было бы желание.
Но тут похоже одни нытики и пессимисты.

Нет, почему же, хорошо информированные оптимисты. Делал подобное в 1998 на PIC16F84 на 2 канала при скорости 100 бод (всего то!). Основной проблемой было непредсказуемость начала посылки. В этом случае помочь может только увеличение числа выборок на 1 бит. Чтобы уложиться в стандартное отклонение по скорости RS232 (не более 10%) надо делать 16 выборок или больше (число взято не с потолка, посмотрите сколько выборок делают аппаратные UART- чаще всего 16, некоторые 64). Таким образом на скорости 4800 бит/с надо дергать прерывания через 13 мкс (или чаще smile.gif ). Даже для Меги на 8 МГц маловато времени остается. Так что по-моему одного желания сделать такую задачу почти на любом АВРе маловато.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение May 31 2006, 14:20
Сообщение #11


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(bbill @ May 31 2006, 03:12) *
Вопрос: как организовать алгоритм приема посылок от датчиков, при одновременном их поступлении и сдвиге между ними менее длины посылки.


1. Писать на асм.
2. Считывать весь порт сразу с частотой в 3 раза выше скорости передачи.
3. Логическими функциями отслеживать можеритарность.
4. По полученному числу выполнять от 0 до 7 обработок на соотв каналы.
Получается макс - 100000 обработок в секунду или 80 команд на обработку.
Должно хватить.
Побольше пользуйтесь таблицами и не жалейте флеш.
Go to the top of the page
 
+Quote Post
bodja74
сообщение May 31 2006, 15:30
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(_4afc_ @ May 31 2006, 17:20) *
2. Считывать весь порт сразу с частотой в 3 раза выше скорости передачи.


И будем иметь погрешность в 33%.
Тут вообще то хотели меньше 10% иметь ,да и еще и настраиваться на скорость. smile.gif

Правильно сказал ksv198,чтобы хоть что то путное вышло нужно не меньше 16,вот и посчитайте. smile.gif
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 31 2006, 15:31
Сообщение #13


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Да я бы сделал эту прогу баксов за 300-500.
Думаю с лёгкостью на Mege8 @ 8MHz от внутреннего RC.

В данной задаче я бы забыл о мажоритарности. Когда случайный сдвиг внутри бита будет увеличиваться, мажоритарность только помешает качеству. Измерять состояние бит данных только один раз. Однако приход стартового бита нужно анализировать часто. Не менее 16-20 раз выше скорости обмена. В идеале раз в 40. Разумеется это будет компромисс. Для возможности подстройки скорости придётся сделать хотя бы качественный электрический сигнал. А остальное не проблема.

Сообщение отредактировал GetSmart - May 31 2006, 15:57


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
bodja74
сообщение May 31 2006, 15:46
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



А я бы лучше отдал лишних 10$ за контроллеры.И никому бы ничего не платил smile.gif
Хотя, смотря какие обьемы производства нужны. smile.gif
Go to the top of the page
 
+Quote Post
Laksus
сообщение May 31 2006, 19:07
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



для bbill
Ну раз Вы перешли сюда с
http://www.fulcrum.ru/cgi-bin/bbs/mess_sel...TID=4501&page=1
мне тоже тут удобнее.
Пока нет мыслей. Еще хочу уточнить.

А как идут байты от одного датчика?
-Есть ли гарантированные паузы между байтами? Какой длины?
-Если между паузами идут группы бит, то по сколько штук в группе максимум?
-Какие прерывания еще используются в программе?
______________
Александр
2006 05 31
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:04
Рейтинг@Mail.ru


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