Jump to content

pivasik

Members
  • Content Count

    20
  • Joined

  • Last visited

Community Reputation

0 Обычный

About pivasik

  • Rank
    Новенький
  1. DJ Dimon, видимо вы не досмотрели, что происходит дальше. Посылка FirstFreeId - это только начало раздачи. Посмотрите #161 - там это описано.
  2. 2Sergei_Kos: да как icq, например. Каждое устройство при производстве получает пару Идентификатор (00000000) + Символьное имя ("Устройство управления светом"). В управляющей программе после скнирования вновь подключенных устройств вы видите это имя и назначаете псевдоним (функция управляющей программы): "Управление светом в зале", а устройству взамен выдаете уникальный идентификатор, который оно сохраняет у себя в памяти вместо производственных нулей. В следующий раз при сканировании устройство ответит уже корректным идентификатором, а управляющая программа подставит псевдоним вместо имени). Кстати, без символьного имени в устройстве вообще можно обойтись - при обнаружении нулевого идентификатора просто УП спращивает какие имя назначить и выдает новый идентификатор. Преимущества: никуда не надо ходить, если устройство в пределах видимости (можно сделать функцию "поморгать") или если оно единственное новое при очередном сканировании - дружелюбность к пользователю, повышенная дуракоустойчивость (нет механических элементов, которые можно поломать или неправильно соединить) и безопасность (не надо ковыряться ни пинцетом, ни отверткой, а то током еще бабахнет). Недостатки: дополнительное программирование.
  3. 2Sergei_Kos: свет может загореться в туалете, если тупое управляющее ПО, в котором жестко пошиты все адреса. Вы когда идете на гугль, не попадаете ведь на яху? Точно так же и с динамической раздачей адресов. Сама по себе она решает ОДНУ четко определенную проблему, избавляя от рутинной работы оператора. За именование должен отвечать совсем другой протокол (Netbiod, DNS, etc), который легко укладывается в любой их предложенных транспортов. Добавьте пару команд в протокол для сбора информации об устройствах и получите интеллектуальную, а не чуть лучше чем тупая систему.
  4. Структурная схема (извините, парни, как смог): Питание ----|--------| Связь --- MCU - Регулятор - Лампочка
  5. Кстати, если посмотреть внимательно на пример, то можно заметить, что поля Получатель+Оправитель имеют фиксированный размер, причем ограничены с одной стороны краем пакета, с другой - маркером 00 (вторым). Так вот, если поле получатель, кроме 00 перевернуть побайтно, то проход промежуточного контроллера можно сделать всего как обмен двух байт, вместо смещения части байт в текущем варианте. Получится как-бы "бегающий маркер". Но немного усложняется определение на узле "своих" пакетов: узел должен дождаться первого нуля и посмотреть предыдущий байт - его ли адрес. Думаю, что это с лихвой компенсируется избавлением от длительных операций с памятью.
  6. Внесу в очередной раз немного смуты. Какая-то каша-малаша. Одни лепят детей, другие обсуждают о чем дети будут разговаривать, третьи - что они должны делать. Я так понимаю, что остановились на управлении светом? Для начала банально можно сделать чтоб по команде из сети устройство могло включить и выключить свет - накрутить логику пограммы намного проще чем пересобрать устройство. Но если кто-то таки возьмется за такое устройство, то предусмотрите, чтоб железяка позволяла расширение к плавному управлению освещенностью. Итого: из сети 1 байт в диаппазоне 0..100, задающий уровень освещенности. Касательно самой сети, вы обсуждаете что дети должны говорить (причем говорить правильно) не задав правила общения: не ясен ни арбитраж, ни методы адресации. С самими данными вроде договорились: [Length][Data][Checksum] Касательно арбитража: он может быть аппаратный (поддерживается адаптерами для 220?) или программный (по задержке?). Касатально адресации, на текущий момент видно было только два предложения: с фиксированным адресом для одноранговой сети, выставляемым вручную; с нефиксированной длиной для каскадной адресации. По первому мне не нравится малый диаппазон, плохая расширяемость. По второму кроме сложности пока ничего не получил - давайте что-ли в irc или icq обсудим детали и вынесем сюда заключение на суд. Черновой вариант второго прилагаю, чтоб если обсуждать - по теме (готовим вопросы и потом обсуждаем). Специальные адреса. 00 - адрес самого себя в подсети (не надсети) FF - адрес широкого вещания (в подсети) Раздача адресов. Раздача адресов при наличии контроллера (рассматриваю сразу обобщенный случай). - вновь подключенные устройства имеют идентификатор ID = 00 и первый, получивший доступ, бросает в надсеть широковещательное сообщение: [FF][00][Length][CmdRequestAddr][ChkSum] - "Прошу контроллер выдать адрес" - контроллер отвечает: [00][ControllerId][Length][CmdFirstFreeAddr][FirstFreeId][ChkSum] - "Первый доступный адрес FirstFreeId" - дальше первый кто снова достучиться до линии бросает: [ControllerId][FirstFreeId][Length][CmdConfirmAddr][ChkSum] - "Прошу контроллер подтвердить выдачу FirstFreeId" - все, кто участвует в этом дележе, кроме достучавшегося увеличивают у себя запомненное значение FirstFreeId на 1, а контроллер подтверждает получение адреса посылкой: [FirstFreeId][ControllerId][Length][CmdAddrConfirmed][ChkSum] или отвергает его посылкой [FirstFreeId][ControllerId][Length][CmdTryAgain][ChkSum] - процесс повторяется с пункта 3, пока все не получат адреса или не обнаружат, что адресов не осталось Внимание! В процессе раздачи адресов не участвует адрес, который имеет контроллер надсети. Это связано с тем, что адресация в надсеть не должна конфликтовать с адресацией внутри подсети. Если устройство выключить и включить, то его предыдущий адрес будет утерян (в пул адресов не попадет обратно ж). В конце концов периодическое вкл/выкл приведет к исчерпанию пула. В данном случае предлагается контроллеру дать команду на процесс обновления адресов, всеми активными устройствами: [FF][Controller_ID][Length][CMD_InvalidateAll][Chksum] Раздача адресов без контроллера аналогична с контроллером, но поскольку никто не отвечает на запрос - переходим в автономный режим работы до появления контроллера на линии При появлении контроллера, он выдает команду на переадресацию: "Расчитайсь" и управляет процессом. Поскольку при появлении контроллера происходит полная переадресация, то контроллер всегда может присваивать себе ID = 1. Методы адресации. Пусть 01 - контроллер надсети, 02 - контроллер данной подсети. 03.00 - устройство 03 в текущей подсети 02.03.00 - устройство 03 в текущей подсети 02.01.00 - контроллер надсети и так далее, представив себе сеть в виде дерева и пронумеровав его узлы И под конец посмотрим проход пакета от контроллера верхнего уровня (ID = 01) к устройству 02.01.02.05.00 (4 каскада) [02.01.02.05.00][01.00][LL][CmdPing][CC] - начальная посылка с контроллера с ID = 01 [01.02.05.00][02.01.00][LL][CmdPing][CC] - на первом контроллере с ID = 02 [02.05.00][01.02.01.00][LL][CmdPing][CC] - на втором контроллере с ID = 01 [05.00][02.01.02.01.00][LL][CmdPing][CC] - на третьем контроллере с ID = 02 [00][05.02.01.02.01.00][LL][CmdPing][CC] - на самом устройстве и обратно: [02.01.02.01.00][05.00][LL][CmdPingOk][CC] - на самом устройстве [01.02.01.00][02.05.00][LL][CmdPingOk][CC] - на третьем [02.01.00][01.02.05.00][LL][CmdPingOk][CC] - на втотром [01.00][02.01.02.05.00][LL][CmdPingOk][CC] - на первом [00][01.02.01.02.05.00][LL][CmdPingOk][CC] - на верхнем соответственно, об ошибке может сообщить любой контроллер. Формат ошибки уже будет индивидуален. p.s. Фигасе я тут наваял
  7. 2YurkaM: да кто бы был против. Я ж говорил, что без вас не разобраться. Ну раз динамического выделения адреса не будет, то - если адрес задается переключателями на плате - какой максимальный диаппазон может задать пользователь? Как это сделать удобно для конечного потребителя? - если адрес прошивается в мцу - как избежать конфликта адресов при использовании устройств от разных производителей. По поводу динамического назначения и адресации - ничего срашного в каскадировании нет. Попробую описать. 00 - это всегда loopback, тоесть адрес самого себя в текущей подсети. 01 - это всегда адрес родителя, который отвечает за подсеть, в которой находится устройство. FF - широковещательный адрес Возьмем промежуточный контроллер-отправитель (КО), который хочет забрать накопившуюся информацию из подсети 02.03 (это адрес контролера на два уровня ниже, контроллер-получатель - КП). Пакет может быть вида 02.03.00.01.01.00.LL.SS.CC LL - длина данных сразу после поля LL, LL = 2 SS - контрольная сумма - здесь на выбор CC - код команды отправки накопившегося лога Соотвественно, КО сформировав такой пакет отдает его на отправку. Контроллер 02, видя свой байт забирает данные, смотрит, что следующий байт не 00 (не ему) и отправляет дальше в подсеть. Контроллер 03 в след. подсети видит свой пакет и что он адресован ему (байт 00) обрабатывает команду и формирует пакет 01.01.00.02.03.00.LL.SS.DD DD - данные лога и отправляет его родителю (соединение 01). Ограничение по количетству устройств на каскад - 253 (чтоб маски не вводить). Вообще, конечно, может выглядеть страшно. Вобщем, это уже дело прошивки, а никак не железа - так что можно отложить p.s. Есть тут одна неточность в описании, но пока оставим. Не имея обзорного представления о системе в детали лезть не стоит.
  8. 1. В сети с несколькими каскадами как будет адресоваться узел? Например, это может быть 00.01.04.01.FF, где FF - маркер широковещательного пакета. 2. После подключения нового узла как контроллер зоны будет узнавать о новичке? Возможно это будет рассылка на адрес FF - широковещательная внутри текущей подзоны, с параметрами подключившегося устройства или запросом на выделение адреса. Соответственно, контроллер уведомляет верхний уровень о подключившемся и т.д. 3. Будет ли конечное устройство предоставлять сведения о себе по запросу? Например, после подключения корневой контроллер может запросить Human readable имя устройства ("Управлятор люстры на 5 секций") или назначить ему новое. 4. Будет ли, и если будет то как уведомляться контроллер верхнего уровня уведомляться об ошибках? Например, при посылке контроллером подсети 00.01 в подсеть 04.01 узлу 05, обнаружилось, что подсеть 01 недоступна - как уведомлять об ошибке? Это для начала... я щас в свободное время пытаюсь нарисовать картинку подобной схемы, но есть много вопросов, которые без вас не решить.
  9. 2Lexi: давай начнем с малого - спроектируй и разведи устройство по управлению светом. Заложись на возможность добавить туда какой-нибудь интерфейс для связи. Лучше, если можно будет доабвить произвольно выбранный через переходную схему может даже. Таже фигня и для питания, если такое возможно. Вот потом можно будет и собрать девайс. Может кто возьмет на себя ответственность по другим устройствам?
  10. А зачем именно 400 кГц? Это стандарт для i2c? Попутно вопрос, пока устройство не работает: если рассматривать устройсво как конвертер i2c - serial, то обратная конверсия тоже должна работать? (это про устройство на по схеме выше на базе max232acpe) - Хотелось бы оттестировать его, подключив туда что-нибудь пассивное. Будет ли оно работать как программатор i2c устройств? Кстати, вот на схеме обозначены выводы для serial. Они соответствуют подключению напрямую или через нуль-модем? Можно где-нибудь прочитать как локализовывать места ошибок в схеме? Совершенно непонятно чего делать, если схема не работает, кроме тривиальных: проверить сигналы от мастера, проверить сигналы на последовательном интерфейсе. Можно ли без расчта схемы "на глаз" прикинуть с тестером корректность параметров в узловых точках или их изменение при подаче сигналов? p.s. Похоже, что у мну на схеме нехватает внешнего питания. Я так понимаю, что нужно запитать микруху +5 на VCC линии? А на VEE ничего не надо? Или второй провод от БП должен на нее идти? А землю можно зацепить на GND на DE-9 разъеме? Нигде не коротнет? (что-то много вопросов для начинающих)
  11. Собрал на MAX232, осталось отладить и написать софт.
  12. Lexi Вот именно. Поэтому интересно было бы сделать максимально быструю и относительно дешевую поделку.
  13. Вобщем, надумалось тут мне обзавестись дома удобным инструментом. Вот хотелось бы что-нть типа ERSA iCon, но как-то дорого. Может кто посоветовать что-нибудь качественное? Нужен паяльник, желательно фен или термопинцет.
  14. IM700 вряд ли подойдет - работает только мастером, а вот второй - вполне. Исходная задача: хочу на PC сделать несколько виртуальных I2C устройств для тестов.
×
×
  • Create New...