Pull to refresh

Comments 19

Штука отличная как по исполнению, так и по назначению. А стоимость мастер-модуля и каждого подчинённого какая?
В мастер-модуле основная стоимость — это контроллер ATMEGA8/ATMEGA48(примерно 9..11грн), стабилизатор(можно применить слаботочный 78l05) — 1.2грн и переходник USB-UART который можно найти на E-Bay за 4-5$

В слейвах — это контроллер ATTINY13A — 6 грн, стабилизатор 78l05ACD — 1.2грн, транзистор BC846 — 0.3 грн и 4-ре светодиода «пиранья» примерно по 0.7 грн за каждый. Ну и по мелочи — два чип-конденсатора, резисторы…
Отлично решена проблема синхронизации в условиях, когда оконечные устройства необходимо сделать максимально дешевыми. И наличие технологического режима при старте с постоянной 1 на линии данных — прямо промобразец! Еще бы вообще избавиться от необходимости прошивать константы индивидуально — можно было бы изготавливать массово. Кстати, для большей стабильности можно использовать манчестерское кодирование — там допустимая ошибка — 25%, т.к. бит гарантированно имеет либо 1 переход в течение времени своей передачи.
Можно избавиться от необходимости прошивки адреса, добавив один провод последовательно через все slave-модули. Тогда они будут взаимозаменяемыми, но усложнится монтаж и снизится надежность.
С адресом можно решить, добавив специальные команды — установить адрес, сбросить адрес (эту можно сделать широковещательной), прочитать адрес. Чтобы выполнялось последнее, городить полноценный двусторониий обмен даже не нужно, достаточно, добавив транзисторный ключ, шунтировать линию на определенное время при поступлении этой команды. Мастер-устройство, слушая линию, узнает, есть ли для определенного адреса отклик. Перебрав по очереди все адреса, мастер устройство таким образом узнает, устройства с какими id есть на шине. Можно сделать и команду — отзовись, кто без номера — тогда, пока на шине есть хоть один такой слейв, мастеру придет ответ.
Чтобы эффективнее работать с лининей (и проще шунтировать на слейвах), я бы перешел на аткивный низкий уровень, подтягивая на мастере к +12 резистором, а коммутируя транзистором к земле. На слейвах входной транзисторный каскад можно было бы вообще убрать, ограничив напряжение например стабилитроном и высокоомным резистором, а в конце линии прицепить согласующий резистор того же номинала, что и резистор подтяжки в мастере. Тогда подключенные модули не привносили бы сопротивления в линию, являясь высокоомными, а не токовыми входами. Сейчас 254 входных резистора по 30 кОм дают практически 120 Ом нагрузки
Такая команда есть — сменить адрес. Сброс адреса операция опасная, ведь когда все настроено и все модули распаяны и висят где-то там одна неосторожная команда и процесс по разборке сети и индивидуальной настройке каждого модуля — обеспечен.

Я тоже думал насчет обратной связи, но… это мне показалось лишней сложностью. Не нужна по сути исполнительным модулям эта обратная связь, в ней нет необходимости.

Высокоомный вход имеет один недостаток — излишняя чувствительность к наводкам, даже если подпереть с одной стороны. Оставив связку модулей неподключенными во время грозы можно с некоторой долей вероятности получить трупик, несмотря на защитные стабилитроны — они горят только так, а супрессоры громоздки и довольно дороги. Как альтернатива, при большом количестве модулей можно увеличивать сопротивление входного делителя, хоть и можно адресовать до 254 модулей но я решил что врятли кто будет заниматься таким фанатизмом и соединять столько модулей в одну сеть — там возникнет другая проблема, с суммарным потребляемым током — усложнится разводка этого всего хозяйства и т.д. примерно по 50мА на каждый модуль, в сумме каких-то 12А… подумаешь, мелочь. И еще ко всему все это может резко менять величину тока с нуля до максимума, страшно представить.
При последовательном подключении дополнительного провода свой адрес каждый модуль сможет определить при старте, в зависимости от положения в цепочке. Ничего индивидуально прошивать не надо, модули полностью взаимозаменяемые. Можно даже обойтись тремя проводами — два питания и один управления последовательно через все модули, но тогда надо будет сильно с протоколом мудрить.
Теоретически да, но с ростом числа модулей будет расти время передачи до крайнего, кроме того модуль должен будет одновременно заниматься как приемом так и передачей, даже на этом этапе начинаются сложности — без аппаратной поддержки приема-передачи будет туго.
Есть еще один ньюанс электрического плана. Даже если взять провод из витой пары(хотя он уже достаточно жесткий) его сопротивление составляет 0.18 ом/метр — при длине цепочки в 5 метров имеем сопротивление общего провода почти в 1Ом, при рабочем токе в 50мА на модуль, даже будучи он единственный между источником напряжения и модулем на этом отрезке получаем уже 50мВ «шума», а если провод 10 метров, и если модулей будет уже 10 штук? Потом, защита входа-выхода от статики и вероятных грозовых разрядов(у меня так компьютер во время грозы умер будучи полностью отключенным от сети — только провод длиной в 30см торчал из COM-порта, гроза убила драйвер а при последующем включении из компа дым 4 секунды БИОСа и материнка померла) и т.д. именно по этой причине у меня на входе стоит транзисторный каскад рассчитанный на порог переключения в 7 вольт при сигнальном напряжении 12В — огромный запас на «падение» напряжения вдоль всей линии. Впрочем, его можно конечно слегка и понизить.
В трехпроводном варианте можно обойтись [почти] без задержки и одновременного приема и передачи. Достаточно управляемого от МК репитера входного управляющего сигнала. В нормальном режиме он передает на выход ровно то же, что имеет на входе, задержка минимальна. Если приходит команда «установить адрес», то сам код команды он штатно пропускает по всей цепочке, а затем, если модуль еще не знает своего адреса, то дальнейшую передачу адреса он блокирует, а полученный адрес запоминает в качестве своего. Если приходит команда установить адрес, а самого адреса нет, то команда отменяется по таймауту.

При инициализации master передает множество команд установки адреса. Саму команду получают все устройства, а адрес — в первый раз только первый slave, во второй — первый slave свой адрес уже знает и пропускает его дальше, ко второму; и так далее.
Забавно, это в точности то, что я хотел написать сегодня, но вы меня опередили ) Добавлю, что репитер можно сделать чисто программно, сконфигурировав прерывание по изменению входных портов, и устанавливая выходную линию соответственно. Будет накапливаться некоторая задержка, но визуально она все равно неразличима, а джиттер времени обработки прерывания ничтожен по сравнению с длительностью бита на данной скорости передачи, поэтому все должно работать. И еще один плюс последовательного включения — уровень сигнала для каждого следующего модуля отсчитывается от земли предыдущего, поэтому падение на проводах питания становится некритичным — только бы 12 вольт в начале не упали в конце ниже минимального порога стабилизации для 78L05.
будет накапливаться так же ошибка в скорости передачи. Так же в таком случае будет трудно реализовать защиту входов, пострадает помехозащищенность и усложнится алгоритм работы модуля. Кроме того, это все еще не отменяет необходимости извлечения и записи калибровочной константы, хотя некоторые соображения по этому поводу есть — в технологическом режиме подать на все модули частоту в 1кГц, и пусть они вычисляют калибровочную константу и записывают в EEPROM, но это же можно устроить в рамках подготовки модуля — вставляешь его в устройство — по нажатии кнопки производится его калибровка и присваивание нового адреса по счетчику, в конце процедуры зажечь зеленый светодиод. Итого, без усложнения программы и схемотехники процедура подготовки занимает не такое уж и большое время, чтобы ломать голову над тем как этого избежать.
В принципе, таких проблем могло и вовсе не быть — некоторые программаторы умеют записывать при прошивке серийный номер в EEPROM, достаточно этой функцией воспользоваться и получим сразу ряд уникальных адресов без особых проблем.
Да, и еще одна маленькая мелочь — чтобы высвободить выход для этих целей, придется отказаться от 4-го канала. а тогда… тогда смысла в этом деле уже мало становится, проще взять готовые RGB-светодиоды с чипом на борту, работающих по более простому принципу.
Ошибка в скорости не будет накапливаться, т.к. среднее время реакции на передний и задний фронты входного сигнала одинаковое — будет накапливаться только временное смещение — а оно ничтожно.

Далее, имхо защита от статики у вас слегка параноидальная — грозовое поле равно выбъет внутренности через эти 30 кОм на шлейфе гирлянды в несколько метров на ура, если уж оно выбило защищенный порт в компе через шлейф 30 сантиметров. Я бы от таких экстремальных полей даже и не пытался защищать, а оставил бы просто защиту от бытовой статики. Т.к. в контроллере входы внутри уже подвязаны защитными диодами к земле и Vcc, что я бы просто включил последовательно с висящим входом резистор килоом 10 или делитель 10 — 100 и/или стабилитрон спокойствия.

Насчет 4-го канала — в tiny13 фьюзами можно запрограммировать вывод reset как порт — это, конечно, создаст проблемы в последующем перепрограммировании (придется использовать high-voltage ISP), но в готовых устройствах
все же позволит впихнуть весь функционал в 8-выводный корпус

Но это все просто *возможные* варианты — то есть журавли в небесах, которые нисколько не умаляют достоинств очень ладненько скроенной синицы в руке.
Защитные диоды в контроллере сгорают очень легко, и с другой стороны ничто не держит шину питания от роста напряжения на ней через эти защитные диоды — только конденсатор задерживает скорость роста.
В данном случае, через резистор сгорит только транзистор — его переход расплавится и замкнет путь высокого напряжения на себе.
Но в такой ситуации, возможно сгорит и стабилизатор(линия питания ведь так же открыта). Жалко эксперимент ставить… если б как-то на более дешевой логике проверить.
Так выходной конденсатор стабилизатора и возьмет на себя весь статический заряд. Емкость тела человека 200 пФ, статика накапливается допустим 10 кВ, значит заряд = 2 мкКл. На выходной емкости 10 мкФ соответственно, он прибавит всего 0.2 вольта. На практике в быту статикой входы современных ИС не так-то легко выбить — для этого постараться надо. Другое дело древние МОП-серии
Так ладно там человек… бывают вещи похуже, когда гроза попадает в дом… заземление-то спасает, а вот наведенные токи от заземляющих шин, близкий ЭМИ…

Да и сам иногда зимой молнии пускаю по сантиметру(есть один стул пластиковый).

ESD-защита в микросхемах реализована из расчета около 100В и проводимости кожи 1кОм а не 10кВ. Думаю такая искра в 10кВ просто током вышибет защитные диоды.
Частично проблему можно решить применив более стабильный контроллер со встроенной термостабилизацией RC-генератора, но стоимость сразу возрастет в двое а то и больше.

А адрес можно сменить при подключении в сеть. Достаточно сделать это один раз в жизни модуля — например в специальной панельке — плата сделана таким образом что её можно вставить в разъем от флопика или разъем выпаянный со старой материнки ISA-шины с шагом выводов 2.54.
Так же, можно перейти на работу от 9.6Мгц — в таком случае калибровочная константа загружается автоматически, и часть кода по загрузке этой константы можно попросту убрать. Заодно повысится скорость передачи данных.
Для тех кому хочется гирлянду, но хочется потратить меньше усилий, или недостаточно сил/знаний/времени: в последнее время появилась целая куча решений для управления индивидуальными светодиодами, от многоканальных драйверов с spi или 1 wire интерфейсом (например www.deskontrol.net/descargas/datasheets/TM1809.pdf ) до ргб светодиодов со встроенным драйвером и 1wire контроллером ( www.mikrocontroller.net/attachment/180459/WS2812B_preliminary.pdf ).
Мало того, даже в россии в продаже уже есть ргб ленты и пикслеи на этих железках, лента с плотностью 30 диодов на метр стоит около 500 руб/м.
Тоже замечательные вещи, но как быть если нужна плотность 5 пикселей на метр, многоканальные драйвера — хорошо, но при низкой плотности диодов слишком много проводов выходит.
Ну а как задумаешь целиком дом украсить с плотностью 1 RGB на метр? Вот был бы 4-х канальный ШИМ-драйвер для светодиодов по цене меньше 10грн/шт — тогда можно было бы жить.
Кстати, а где можно на Украине купить RGB-ленты с индивидуальным управлением? Да так чтобы цену не ломили? А то я смотрю, у нас даже обычные ленты продают по ценам в 5 раз больше чем китай.
на ибее есть WS2812B по 20 центов за штуку, соединяются последовательно, нужно всего 3 проводника от диода к диоду
Sign up to leave a comment.

Articles