Простой микроконтроллер I2C
- Войдите на сайт для отправки комментариев
Привет друзья. Полтора года назад я, в том числе с помощью этого форума, сделал вот такой ж.д. макет. Внутри сидят две ардуины, на макете три сервопривода, перед тупиками стоят датчики Холла. Подсветка макета тоже управляется программно.
Управляется это все вместе с поездами с android телефона или ПК, через вот такую схемотехнику.
Однако нет предела совершенству (точнее выплыли новые проблемы). И выплыли они там, где их не ждали :(
В текущей версии локомотивы управляются аналогово через ШИМ ардуины посредством L298 по двум каналам, соответственно верх и низ макета (он двухуровневый). Беда в том, что из за достаточно плохого контакта L298 -> БЛОК РЕЛЕ -> РЕЛЬСЫ, РЕЛЬСЫ, РЕЛЬСЫ -> КОНТАКТЫ КОЛЕСНОЙ ПАРЫ тяга моторов непостоянна. Самое противное режимы старта локомотива и медленное движение происходят рывками.
Эта проблема известна и решается DDC управлением - на рельсах постоянное напряжение и по ним же цифровой сигнал, а на локомотиве декодер и драйвер двигателя. Но это не наш метод, не так ли?
Вторая проблема сам Bluetooth. Всем хорош, его подключение к телефону или компу стандартными драйверами работает, но... весьма странно иногда.
ESP8266 достаточно мал по размерам и влезает вместе с обвязкой в локомотив. Это дает мне возможность управлять каждым локомотивом по отдельности и засунуть туда еще и датчики Холла. а на рельсы ставить магниты (сейчас все наоборот, и это геморрой - так как поезд действительно останавливается перед тупиком, но при этом останавливаются и все остальные). Как это у меня получится, я, если будут вопросы напишу.
А вот теперь собственно вопрос. Заодно я решил переделать управление самим макетом. Оставить одну Ардуину, она будет крутить сервы привода стрелок, а вот включать/выключать свет в домах, уличное освещение и светофоры хочется вот так:
Вопрос какой контроллер лучше использовать. У Attiny13 насколько я начитался есть сложности с реализацией I2C. Можно вообще взять EEPROM AT24C256 и расставить их к каждому светофору, дому, сети дорожных светильников (и можно ли так сделать?). А может кто знает готовую м/с с обвязкой которая держит около 60mA и висит на I2C. В общем что-либо дешевое, сердитое и универсальное. Буду очен благодарен за идеи и советы
Эта проблема известна и решается DDC управлением - на рельсах постоянное напряжение и по ним же цифровой сигнал, а на локомотиве декодер и драйвер двигателя. Но это не наш метод, не так ли?
Не так! Стандарт DCC весьма не плох. Делать в его рамках чего хочется, и на ардуине тоже, можно, нужно и даже рассово верно.
У Attiny13 насколько я начитался есть сложности с реализацией I2C. Можно вообще взять EEPROM AT24C256 и расставить их к каждому светофору, дому, сети дорожных светильников (и можно ли так сделать?).
Сложностей особых нет. Аппаратной поддержки, правда тоже нет. Потому ногодрыг и вперед. Но i2c изначально не для таких вещей. Он для внутриплатной, на крайняк внутриприборной, передачи. Строить на нем длинный разветвленный канал, да еще и рядом с силовой искрящей цепю неосмотрительно. Не то чтоб категорически нельзя, а именно не рекомендуется при наличии лучшего, шоб Вы понимали. Ежели DCC не нравится, то можна 485-й сделать, но уже не по рельсам а отдельно проводами, как i2c. У него и проводов менше и помехостойкость віше.
Причем тут EEPROM AT24C256 я так и не понял. Вам по идее нужны датчики и исполнительные устройства на i2c.
А макет симпатишный! Уважаю красивые и аккуратные поделки. Жаль мне никогда на такое не хватает времени из-за этого программирования.
а радиомодули не вариант поставить?
ну тогда уж можно вспомнить и стандатрную PCF8574 - I2c port expander, в дешевом исполнении для 1602
ну тогда уж можно вспомнить и стандатрную PCF8574 - I2c port expander, в дешевом исполнении для 1602
В принципе да. Только в макете наверно не везде готовую плату сунуть удобно.
Лично я в подобных случаях использую гибрид из CAN (аппаратная часть) и UART (программная часть). Если UART нет в контроллере, то можно реализовать его программно. Под аппаратной частью CAN я подразумеваю драйвер приемопередатчика CAN, например, PCA82C250, MCP2551 и так далее, который подключается к выводам UART микроконтроллера (или выводам программно выполняющим эти функции).
Лично я в подобных случаях использую гибрид из CAN (аппаратная часть) и UART (программная часть). Если UART нет в контроллере, то можно реализовать его программно. Под аппаратной частью CAN я подразумеваю драйвер приемопередатчика CAN, например, PCA82C250, MCP2551 и так далее, который подключается к выводам UART микроконтроллера (или выводам программно выполняющим эти функции).
Если я правильно понял - ты используешь общение между МК по сериал-протоколу, соеденив МК через CAN трансиверы?
Всем ответившим большое спасибо!
Наверное я плохо донес свои мысли. Ардуина работает в режиме мастер - остальные только слэйвы. Слэйвов, по моим прикидкам не больше 8-ми. С мультимастером я уже набаловался в текущей конфигурации макета. Вопрос в ДЕШЕВОМ "управлятеле" светодиодами. Очень интересная идея с Iic / I2C / интерфейс LCD1602 2004 ЖК, вопрос как ее применять, если можно с примером.
По поводу AT24C256 - а почему я не могу на логическую единицу, она же высокий уровень, она же +5v повесить светодиод? Ну с ключевым транзистором? На J1-J4? Это же четыре канала!
Что касается физической реализации шины I2C, то она выглядит ка 10-проводый шлейф:
и я его, где мне нужно протыкаю разъемом и получаю все что мне нужно - и питание и сигналы SDA и SCL. Еще раз, значимых (замеченных мною) помех по I2C у меня на макете в течении года нет. Скорость срабатывания привода стрелки - полсекунды, то есть мне достаточно 8 бит/с...
Радиомодули - ну это весьмая дорогая идея.
Отдельно про 485 серию - это PIC, не так-ли. Я с ним не знаком, в качестве программатора у меня только UNO - так что только attiny, или я чего-то не знаю - просветите пожалуйста.
Лично я в подобных случаях использую гибрид из CAN (аппаратная часть) и UART (программная часть). Если UART нет в контроллере, то можно реализовать его программно. Под аппаратной частью CAN я подразумеваю драйвер приемопередатчика CAN, например, PCA82C250, MCP2551 и так далее, который подключается к выводам UART микроконтроллера (или выводам программно выполняющим эти функции).
Если я правильно понял - ты используешь общение между МК по сериал-протоколу, соеденив МК через CAN трансиверы?
Совершенно верно. RS485 в этом плане мне кажется не очень надежным в плане возникновения коротких замыканий в случае начала передачи 2 устройствами на линии одновременно (да, я знаю что сейчас есть драйвера устойчивые к коротким замыканиям, но все же), второй момент связан с требованием к смещению.
По поводу арбитража (на "CAN" шине), он нужен в многомастерных системах (в одномастерных я обычно ввожу поочередный опрос мастером всех устройств на шине) и в принципе его несложно организовать программно. В плане надежности передачи данных, на небольшой скорости повреждений данных не происходит, для большей надежности можно ввести передачу контрольной суммы или передачи одного сообщения, команды или пакета несколько раз подряд.
И еще раз, чтобы не запутаться (с радиомодулями). От макета остается только:
ЛОКОМОТИВЫ НЕ СВЯЗАНЫ ТЕПЕРЬ С МАКЕТОМ!!! Если интересно то планируется сделать вот так:
Спасибо за внимательность :)
Вопрос прежний про варианты применения ДЕШЕВЕЙШИХ м/с для вот таких целей:
Наверное я некорректно поставил вопрос. Какую шину использовать? И, кстати, еще вопрос - на макете я планирую поставить ESP8266 amica. Может вообще отказаться от Arduino на макете? Поясню картинкой:
И был неправ с EEPROM, признаю, спасибо Yarik.Yar. И MCP23008 интересная штука, правда дорогая. Но скорее мое решение надо искать по поисковому запросу: led-driver with i2c-bus interface... Всем спасибо!
J1...J4 - перемычки на плате. Ими управлять только вручную можно:)
Iic / I2C / интерфейс LCD1602 2004 ЖК, вопрос как ее применять, если можно с примером.
Вот тут есть описание со схемой и datasheet-ом (хоть по внешнему виду плата чуть другая). А тут на русском с примерами. Выходы: Р0...Р7. Правда на одном (Р3) уже транзистор с открытым коллектором. Как для вкл/выкл светодиодов пойдет. ШИМ через это не реализовать.
Вариант показанный Вами на #12 - ага, вполне можно и без ардуинки обойтись.
T.Rook. То, что надо - большой респект!
T.Rook. То, что надо - большой респект!
Обратите внимание, что PCF8574 именно расширитель портов, а не просто I2C регистр вывода - т.е. Р0...Р7 можно использовать и как выходы и как входы.
Совершенно верно. RS485 в этом плане мне кажется не очень надежным в плане возникновения коротких замыканий в случае начала передачи 2 устройствами на линии одновременно (да, я знаю что сейчас есть драйвера устойчивые к коротким замыканиям, но все же), второй момент связан с требованием к смещению.
Лбой драйвер 485 это легко выдержует. Главное чтоб програмная часть все это и учитывала колизию. Но если мастер один - то и проблемы нет.
По поводу арбитража (на "CAN" шине), он нужен в многомастерных системах (в одномастерных я обычно ввожу поочередный опрос мастером всех устройств на шине)
Открылся мой сайт arduinorailmaket.ru, там подробное описание постороения ж.д. макетов с использованием Ардуино. Сначала просто загрузите с него в смартфон программку с сайта и покатайтесь на поезде. Затем, на том же сайте есть и полноценное решение для любого макета. Заходите!.