как бы реализовать протокол?

Обсуждаем контроллеры компании Atmel.
Ответить
Nikitka
Прорезались зубы
Сообщения: 218
Зарегистрирован: Вс мар 18, 2012 09:31:23

как бы реализовать протокол?

Сообщение Nikitka »

Хочу придумать протокол. Но никак не могу найти решение.

Задача: Есть 8 датчиков, которые ловят вспышки. Каждый из датчиков основан на контроллере Atmega8. Т.е. там фото приёмник, ацп, который регистрирует яркость вспышки. Есть центральная "база" которая должна собирать информацию и передавать последовательно её в пункт управления. Все датчики и база, подключены между собой витой парой RJ-45 (4 пары) т.е. восемь проводов. По этим проводам должно посылаться питание +12 вольт, Земля, и остальные 6 проводов получается выделяются на передачу данных. Каждый датчик может послать 8+8+8 бит информации. Задача придумать протокол общения с базой. В плане. вспышки могут быть одновременно быть на датчиках. Тогда считанные доли микросекунд которые микроконтроллер успеет обработать информацию играют роль, т.е. первым по каналу данных должен послать тот датчик который и на доли миллисекунд зарегистрировал вспышку быстрее, а тот который опоздал, должен ждать пока канал связи не освободится, что бы не мешать передачи информации. Но что если вдруг датчиков которые зарегистрировали вспышку три, то получается один посылает, информацию два ждут пока линия связи освободится, и как только освободилась они моментально посылают информацию и получается мешают друг друга, ведь они не могут понять кто должен быть первым, а кто вторым. Максимальное количество датчиков которые могут практически одновременно принять световой сигнал, это четыре из восьми. Но надо именно порядок соблюдать. но как это сделать...(
Аватара пользователя
smacorp
Друг Кота
Сообщения: 3471
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Re: как бы реализовать протокол?

Сообщение smacorp »

Nikitka, как-то синхронизировать датчики между собой. И маловато вводных - хорошо бы знать насколько большое расстояние между датчиками, а также между датчиками и центральной базой. И периодичность самих вспышек, а также их характер - должны быть через равные промежутки времени или случайны?
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: как бы реализовать протокол?

Сообщение Андрей СШ »

Надо одну пару выделить под сигналы точного времени.

Другую под RS485.

Головной контроллер регулярно посылает импульсы точного времени.
Датчики по ним синхронизируются.

При появлении вспышки каждый датчик запоминает время.

Головной контроллер по кругу опрашивает датчики. Тут можно ModBus или похожий велосипед использовать.
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Re: как бы реализовать протокол?

Сообщение Vov123 »

Я может мало что понял, но ,вероятно, надо сделать типа modbus, чтобы периферийное устройство вместе с массивом данных, в первой переменной передавал адрес устройства. А "база" сама отсортирует.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: как бы реализовать протокол?

Сообщение Z_h_e »

Почитайте про шину CAN. Я сам ей не пользовался, но когда-то для ознакомления читал, сильно не углубляясь.

Помнится мне смысл протокола такой. Пускай сигнал передается по проводу. Тогда линия по умолчанию подтянута к питанию. У каждого устройства свой уникальный адрес. Приоритет адресов обратный, т.е. самое "блатное" устройство с номером 0. Когда устройство хочет что-то передать, слушает шину и начинает передавать когда шина свободна, выход типа открытый коллектор. Пакет начинается с адреса устройства. Передавая адрес, устройство одновременно проверяет что передается по факту и если вдруг вместо лог.1 адреса на шине по факту лог.0, то это означает что передача началась одновременно с другим устройством, с более приоритетным адресом. Устройство с "лошарским" адресом тут же затыкается на стадии передачи адреса.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
L.O.D
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Re: как бы реализовать протокол?

Сообщение L.O.D »

Или как в езернете - передающий (убедившись, что канал свободен) начинает передачу и одновременно слушает среду передачи, при обнаружении коллизии (данные в физике не соответствуют переданным) замолкает на случайное время. Алгоритм выбора случайной паузы должен обеспечивать разные паузы у разных передатчиков, например, рандомайзом с номером/идентификатором передатчика.
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
Аватара пользователя
НАПАЛМ
Это не хвост, это антенна
Сообщения: 1314
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Откуда: Казань

Re: как бы реализовать протокол?

Сообщение НАПАЛМ »

Очевидно, 1 провод земля, другой питание, 3 тактирование, все остальные - линия данных. Каждому устройству по имени. Высылаете номер устройства - ждете ответа, опрос по порядку.
Nikitka
Прорезались зубы
Сообщения: 218
Зарегистрирован: Вс мар 18, 2012 09:31:23

Re: как бы реализовать протокол?

Сообщение Nikitka »

вспышки хаотично, у них порядка, их регистрируют датчики, сразу регистрация и сразу посыл информации. Если делать опрос датчиков то это время. И опять же может случится так, опрашиваем по очерёдности, первый, второй, третий и т.д. вспышка произошла на первом и на шестом, но на первом раньше, а опрос идет на третьем, т.е. получается что пошлет информацию сначала шестой, а потом первый датчик, а это будет не верно ибо первый получил первый вспышку. Я тоже думал про опрос.

Расстояние между датчиками маленькое, едва метр накопится, даже меньше.
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: как бы реализовать протокол?

Сообщение Андрей СШ »

У вас какое то выборочное чтение чужих сообщений.

Если прочитать полностью, то ответ там есть. Если не читать, то зачем вообще было спрашивать.
Nikitka
Прорезались зубы
Сообщения: 218
Зарегистрирован: Вс мар 18, 2012 09:31:23

Re: как бы реализовать протокол?

Сообщение Nikitka »

я читал, буду пытаться реализовывать, просто я отвечаю тем, кто не совсем понял видимо задачу.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: как бы реализовать протокол?

Сообщение ARV »

если вы не ограничены в проводах, то предлагаю совсем иначе поступить, чем вам тут советуют. не критикуя чужие советы, вот что я скажу: каждый "датчик" соединяете с базой 4 проводами: 2 питание, один информационный, один сигнальный.
Датчик сработал - сразу же выдает на "сигнальный" провод импульс заданного уровня, например, 0.
База все сигнальные линии принимает на один порт, по изменению уровня на любом пине которого срабатывает прерывание. Т.е. любой датчик сработал - база тут же получает прерывание и узнает, какой первый, какой второй и т.д. Затем база на сигнальный провод того датчика, который ей нужен (первый сработавший или любой, как у вас надо по логике работы) выдает сама импульс, по которому датчик понимает, что ему пора передавать данные. Пока такой импульс он не получил - он молчит и не передает ничего. Ну а передача идет обычным USART-ом: линии TX всех датчиков соединены в один провод и попадают на RX базы.

Пока датчик не получил сигнал разрешения передачи, он держит TX в высокоимпедансном состоянии, т.е. никак не мешает другим датчикам. Когда передачу он провел, снова переводит в Z-состояние TX, а база к тому моменту даст разрешение другому.

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

Минусов у моей идеи два: много проводов и при длинных линиях придется чуток усложнять схему, чтобы застраховаться от всяких наводок и помех. Зато никаких мучений в программной реализации, и никакого CAN не надо, можно чуть ли не на attiny13 сделать датчик, а базу - на atmega88.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: как бы реализовать протокол?

Сообщение oleg110592 »

еще предложу идею - можно использовать базовый микроконтроллер с необходимым количеством UART. Раз раздел AVR, например ATxmega64A1 с 8 UART http://www.atmel.com/devices/ATXMEGA64A ... parameters
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: как бы реализовать протокол?

Сообщение Z_h_e »

Nikitka писал(а):Все датчики и база, подключены между собой витой парой RJ-45 (4 пары) т.е. восемь проводов.

================

6 проводов. Все подтянуты к плюсу.

1. Старт кадра от базы (провод 0). Все датчики в положение "нуль".
2. Строб от базы (провод 1) - запрос состояния датчиков.
3 Все датчики с наличием вспышки отвечают своим адресом(провод 2-4) плюс строб (провод 1). Если датчик увидел свой выставленный адрес, то передает данные (по проводу 5) и молчит до п.1. Если не увидел, то передаст его еще раз после п.2.
4 Если кто то ответил, то база в п.2.
5. в п1.

Если нет вспышек, то опрос будет происходить быстро.
Последний раз редактировалось Z_h_e Сб фев 27, 2016 20:38:06, всего редактировалось 1 раз.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: как бы реализовать протокол?

Сообщение oleg110592 »

не я первый предположил, что 8 проводов маловато будет - надо будет 4*8=32 провода, всего то 4 дешевых кабеля витая пара.
Z_h_e писал(а):6 проводов. Все подтянуты к плюсу...

вполне неплохо, а если помеха - может быть ложный старт кадра, ложный строб, ложный адрес, искаженные данные и т.д.. Имхо база должна подтверждать правильный прием - типа если CRC не сошлось, давай еще раз.
VAT
Встал на лапы
Сообщения: 90
Зарегистрирован: Вс дек 20, 2015 21:03:39

Re: как бы реализовать протокол?

Сообщение VAT »

синхронизировать периодически все датчики широковещательной командой и потом опрашивать их по кругу в спокойном режиме. Либо 8компортов на базе , либо каждому датчику уникальный адрес. и никаких конфликтов.
Либо опрашивать их по кругу четко повремени - тогда синхрокоманда не потребуется.
kaetzchen
Друг Кота
Сообщения: 11994
Зарегистрирован: Пн апр 19, 2010 00:04:18
Откуда: Малороссия

Re: как бы реализовать протокол?

Сообщение kaetzchen »

FIFO готовое решение
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: как бы реализовать протокол?

Сообщение Z_h_e »

Можно попробовать соединить датчики последовательно. Самый дальний датчик передает данные соседнему, который передает данные следующему и если надо добавляет свои и так до базы. А хотя лучше наверное не добавлять в один пакет доп.данные.

Есть существенный минус при простоте реализации, данные от дальнего датчика придут с наибольшим запаздыванием. Опять же все датчики можно тактировать от одного генератора, и в пакете указывать условное время возникновения вспышки.

Пропускная способность такого конвеера должна быть соответствовать максимальной частоте вспышек умножить на количество датчиков.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
OKF
Это не хвост, это антенна
Сообщения: 1383
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: как бы реализовать протокол?

Сообщение OKF »

Nikitka, вы скажите что нужно мастеру?
Собрать инфо со всех датчиков? Собрали.
Определить очерёдность срабатывания? Определили.
Дальше что?
Нормально опишите задачу.
OKF
Это не хвост, это антенна
Сообщения: 1383
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: как бы реализовать протокол?

Сообщение OKF »

Может логичнее так.
Датчики фиксируют время вспышки, которое выдают мастеру по запросу.
А тот уже сортирует как хочет. Не?
Ответить

Вернуться в «AVR»