|
|
  |
Вопрос по алгоритму |
|
|
|
May 30 2006, 23:12
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
May 31 2006, 07:40
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(bbill @ May 31 2006, 02:12)  День добрый. Поставлена задача: прием последовательного кода от семи датчиков, для каждого своя линия порта. Формат передачи: старт-бит, 8 бит данных, 1 стоп. Скорость передачи 2400 или 4800 бод. Передача от датчиков НЕ синхронизирована. Сдвиг между каналами от 0 до ∞ (минуты). Старт-бит необходимо использовать для определения точной скорости передачи от датчиков (по длительности бита), т.к. разброс/временной уход? частоты различных каналов составляет до ±10%. Процессор m8 или m88, частота 8МГц. Датчики однонаправленные, не адресные, из-за расстояния (50-100м), сигнал развязывается через оптроны и на свой пин.
Вопрос: как организовать алгоритм приема посылок от датчиков, при одновременном их поступлении и сдвиге между ними менее длины посылки. Ну, так это... Есть специальны схемы многоканальных UART. Можно прицепить одну-две таких к МК без особых проблем.
|
|
|
|
|
May 31 2006, 07:56
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(bbill @ May 31 2006, 10:45)  Железо уже готово... Ну, тогда только программно. Посмотрите на сайте Atmel AN на эту тему. Должны быть.
|
|
|
|
|
May 31 2006, 11:58
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Да,без фиксации скорости это не реально сделать....,да и с фиксацией тоже  Тут же получается произвольный сдвиг между посылками ,который естественно будет не кратен скорости RS. Вам банально не хватит оперативки  Для того чтобы считать порт на приличной скорости,а потом все это пережевать. Делайте мультипроцессорный блок ,как советовали и не парьте головы. Я делал на три канала,контроллеры соединял по TWI (двумя мастерами и одним слейвом) и головной боли не знал
|
|
|
|
|
May 31 2006, 13:21
|
Частый гость
 
Группа: Участник
Сообщений: 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 мкс (или чаще  ). Даже для Меги на 8 МГц маловато времени остается. Так что по-моему одного желания сделать такую задачу почти на любом АВРе маловато.
|
|
|
|
|
May 31 2006, 14:20
|

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

|
Цитата(bbill @ May 31 2006, 03:12)  Вопрос: как организовать алгоритм приема посылок от датчиков, при одновременном их поступлении и сдвиге между ними менее длины посылки. 1. Писать на асм. 2. Считывать весь порт сразу с частотой в 3 раза выше скорости передачи. 3. Логическими функциями отслеживать можеритарность. 4. По полученному числу выполнять от 0 до 7 обработок на соотв каналы. Получается макс - 100000 обработок в секунду или 80 команд на обработку. Должно хватить. Побольше пользуйтесь таблицами и не жалейте флеш.
|
|
|
|
|
May 31 2006, 19:07
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069

|
для bbill Ну раз Вы перешли сюда с http://www.fulcrum.ru/cgi-bin/bbs/mess_sel...TID=4501&page=1мне тоже тут удобнее. Пока нет мыслей. Еще хочу уточнить. А как идут байты от одного датчика? -Есть ли гарантированные паузы между байтами? Какой длины? -Если между паузами идут группы бит, то по сколько штук в группе максимум? -Какие прерывания еще используются в программе? ______________ Александр 2006 05 31
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|