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

 
 
> Вопрос по алгоритму
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
 
Start new topic
Ответов
bbill
сообщение Jun 2 2006, 21:18
Сообщение #2


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

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



Я перечитал текст своего вопроса: Формат передачи: старт-бит, 8 бит данных, 1 стоп. Скорость передачи 2400 или 4800 бод.
Фраза с разночтением. Скорость у всех датчиков одинакова или 2400, или 4800. Переключается.

Еще мне минус, в конфе fulcruma я указал на уточнение облегчающее мне жизнь: данные в посылке занимают 7 бит, старший бит нулевой, ВСЕГДА. Поэтому мне очень удобно измерять длительность старт-бита. Скорость дрейфует очень медленно, а разброс, читай скорость, фактически измеряется.

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

Мой путь как-то не очень отличается от приведенного выше.
Если скорости хватит, то можно проводить обработку во время приема.

С предполагаемого m8, принял m88 из-за наличия pin chang. До сих пор не применял. Из-за расположения адресов в пространстве во многих обращениях к портам используется по два такта. Скорость то падает вдвое, чем лучше новый m88 старого m8? Ну это так...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 3 2006, 16:08
Сообщение #3


Гуру
******

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



Цитата(bbill @ Jun 3 2006, 00:18) *
Я перечитал текст своего вопроса: Формат передачи: старт-бит, 8 бит данных, 1 стоп. Скорость передачи 2400 или 4800 бод.
Фраза с разночтением. Скорость у всех датчиков одинакова или 2400, или 4800. Переключается.

Еще мне минус, в конфе fulcruma я указал на уточнение облегчающее мне жизнь: данные в посылке занимают 7 бит, старший бит нулевой, ВСЕГДА. Поэтому мне очень удобно измерять длительность старт-бита. Скорость дрейфует очень медленно, а разброс, читай скорость, фактически измеряется.

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

Мой путь как-то не очень отличается от приведенного выше.


Это означаетодно из двух. Либо Вы не умеете читать, либо я не умею писать. smile.gif Давайте выберем второе. Итак в третий раз старик забросил свои сети ...

Разница в алгоритме СУЩЕСТВЕННАЯ. Я исходил из того что датчики независимы. Это значит, что даже если посылка происходит раз в несколько минут, то всё равно наступит момент когда прерывание от одного не закончится, а от второго поступит.
Т.о. может поступить посылка от двух и более датчиков. И если их обрабатывать по прерыванию, то те посылки которые предут "не вовремя" не будут обработаны должным образом.
Моему алгоритму - данное не страшно.

Итак ещё раз.
1) Инициализируем ОДНО прерывание от таймера с частотой 1/16 от максимальной частоты посылки.
2) В НАЧАЛЕ прерывания (до ветвлений) читаем все порты.
3) Если хотите определять старт бит, то пожалуйста определяйте примерно так.
(Данная работа выполняется не с портом, а со считанными данными по каждому порту)
3.1) Если посылки не было, то проверяем 0/1 и если 0, - то помечаем номер такта посылки как нулевой такт (начинаем отсчёт тактов по каждому каналу)
3.2) Если посылка идёт, то смотрим какой такт и какой бит сверяем бит и считаем длину бита если равна 16, то переходим к след биту.
(для более низкой скорости - 32)
3.3) Если прошло 10 бит, то формируем байт и выставляем признак готовности данных по данному каналу. (Или "загоняем" его в кольцевой буффер канала)
3.4) Сбрасываем признак того что идёт посылка.

При таком подходе Вы можете принимать данные от N каналов одновременно.

Данный подход не исключает возможность автоопределения частоты. Просто размеры битов Вы будете видеть в тактах прерывания.

Откуда у Вас данный расчёт по занятому ОЗУ - можно только гадать. Я со своим опытом работы предсказать не берусь.
Но я бы весь сигнал загонял в озу и работал бы в голове. Думаю что озу m8 Вам за глаза. Если не делать сжатие "на лету". smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- bbill   Вопрос по алгоритму   May 30 2006, 23:12
- - _Bill   Цитата(bbill @ May 31 2006, 02:12) День д...   May 31 2006, 07:40
- - bbill   Железо уже готово...   May 31 2006, 07:45
|- - _Bill   Цитата(bbill @ May 31 2006, 10:45) Железо...   May 31 2006, 07:56
- - beer_warrior   Наверное можно поступить следующим образом: Есть A...   May 31 2006, 08:48
- - SasaVitebsk   Я делал аналогичное и менее оптимистичен. 1) Надо ...   May 31 2006, 09:50
|- - prottoss   Привет! Делал (Создавал ПО) два варианта таких...   May 31 2006, 11:19
- - bodja74   Да,без фиксации скорости это не реально сделать.....   May 31 2006, 11:58
- - GetSmart   Я вас умаляю! При желании всё это можно сделат...   May 31 2006, 12:24
|- - ksv198   Цитата(GetSmart @ May 31 2006, 16:24) Я в...   May 31 2006, 13:21
|- - SasaVitebsk   Цитата(GetSmart @ May 31 2006, 15:24) Я в...   Jun 1 2006, 11:06
- - _4afc_   Цитата(bbill @ May 31 2006, 03:12) Вопрос...   May 31 2006, 14:20
|- - bodja74   Цитата(_4afc_ @ May 31 2006, 17:20) 2. Сч...   May 31 2006, 15:30
|- - defunct   Цитата(_4afc_ @ May 31 2006, 17:20) 2. Сч...   May 31 2006, 20:34
- - GetSmart   Да я бы сделал эту прогу баксов за 300-500. Думаю ...   May 31 2006, 15:31
- - bodja74   А я бы лучше отдал лишних 10$ за контроллер...   May 31 2006, 15:46
- - Laksus   для bbill Ну раз Вы перешли сюда с http://www.fu...   May 31 2006, 19:07
- - Laksus   И еще забыл спросить. -А какая нестабильность по в...   May 31 2006, 19:41
- - bbill   От датчика посылки поступают по одному байту, мини...   May 31 2006, 20:58
|- - defunct   Цитата(bbill @ May 31 2006, 23:58) И очен...   May 31 2006, 21:04
- - mse   ЦитатаЕсли решать задачу с помощью поллинга, то не...   Jun 1 2006, 07:40
|- - SasaVitebsk   Цитата(mse @ Jun 1 2006, 10:40) Цитата Ес...   Jun 1 2006, 11:16
|- - defunct   Цитата(SasaVitebsk @ Jun 1 2006, 14:16) А...   Jun 1 2006, 11:45
|- - SasaVitebsk   Цитата(defunct @ Jun 1 2006, 14:45) Помое...   Jun 1 2006, 12:29
- - bodja74   Три выборки на бит прекрасно подойдут для фиксиров...   Jun 1 2006, 12:45
|- - SasaVitebsk   Цитата(bodja74 @ Jun 1 2006, 15:45) Три в...   Jun 1 2006, 13:10
|- - defunct   Цитата(SasaVitebsk @ Jun 1 2006, 16:10) Т...   Jun 1 2006, 14:25
|- - bodja74   Цитата(SasaVitebsk @ Jun 1 2006, 16:10) И...   Jun 1 2006, 16:37
- - bzx   to bbill Я могу Вам сделать за определённый интере...   Jun 1 2006, 13:21
- - GetSmart   bbill Скажите, у вас скорость связи датчиков стаби...   Jun 1 2006, 13:22
- - bbill   GetSmart: Схемотехника датчика мне неизвестна, да ...   Jun 1 2006, 18:59
|- - SasaVitebsk   Цитата(bbill @ Jun 1 2006, 21:59) GetSmar...   Jun 2 2006, 10:02
|- - defunct   Цитата(bbill @ Jun 1 2006, 21:59) Алгорит...   Jun 2 2006, 19:07
- - dimka76   от каждого датчика посылки поступают довольно редк...   Jun 2 2006, 10:51
- - GetSmart   Оказывается я так и не написал важную мыслю. Хотя ...   Jun 2 2006, 20:28
|- - defunct   Цитата(GetSmart @ Jun 2 2006, 23:28) Чтоб...   Jun 2 2006, 20:49
- - GetSmart   Цитатаи с чем бы это дело было совместимо интересн...   Jun 2 2006, 21:02
|- - defunct   Цитата(GetSmart @ Jun 3 2006, 00:02) Цита...   Jun 2 2006, 21:23
- - GetSmart   Да, pin chang намного жизнь упростит. Именно он до...   Jun 2 2006, 21:31
- - bbill   Не знаю схемотехнику датчиков, залиты, есть разъем...   Jun 2 2006, 22:10
|- - defunct   Цитата(bbill @ Jun 3 2006, 01:10) Самое ...   Jun 2 2006, 22:36
- - GetSmart   10% ??? Это очень подозрительно. Обычно 2..5%, но ...   Jun 2 2006, 22:40
- - bbill   Это говорит о том, что я излагаю совсем не точно н...   Jun 3 2006, 20:16
- - dimka76   А что это за датчики такие интересные, передают да...   Jun 5 2006, 06:11
- - SasaVitebsk   Цитата(dimka76 @ Jun 5 2006, 09:11) А что...   Jun 5 2006, 13:51
- - dimka76   Цитата(SasaVitebsk @ Jun 5 2006, 17:51) Ц...   Jun 6 2006, 11:49
- - defunct   Цитата(dimka76 @ Jun 6 2006, 14:49) Вопро...   Jun 6 2006, 19:06


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

 


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


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