Как правильно изолировать модуль, с которым контроллер общается по SPI или I2C?
- Войдите на сайт для отправки комментариев
Пнд, 25/03/2019 - 22:01
Вопрос имею - в своем проекте использую модули, с которыми основной контроллер (arduinio mega) общается по SPI и I2C. Есть необходимость включать и выключать модули по команде основного контроллера. С управлением подачей питания вопросов нет, pvn012 решает. Беда в том, что мало резать только питание, надо резать и SPI и I2C. Потом как как минимум по SPI паразитное питание прет в полный рост.
И вот тут вопрос, как именно резать? Пока смотрю в сторону коммутаторов типа 74HC4066 или скажем ADG712BR, но подойдут ли они под такие задачи? Или есть более правильный вариант? Компактность решения важна, места на плате не бог весть сколько.
Заранее спасибо за помощь.
нули от проца подавать на шины не пробовали?
Вариантов куча.
Например hc4067, но в вашем случае как то расточительно будет.
А еще есть копеечные платы, которые называются левелшифтерами их очень даже можно приспособить под включение-отключение шины. Думаю сами легко поймете как.
https://ru.aliexpress.com/item/10PCS-IIC-I2C-Logic-Level-Converter-Bi-Directional-Module-5V-to-3-3V-For-Arduino/1972789887.html?spm=a2g0v.search0604.3.57.6cae48fbUsuSDw&ws_ab_test=searchweb0_0,searchweb201602_3_10065_10068_319_317_10696_453_10084_454_10083_10618_10307_10301_537_536_10902_10059_10884_10889_10887_321_322_10915_10103_10914_10911_10910,searchweb201603_58,ppcSwitch_0&algo_expid=ae6a6ebb-e514-419b-9030-63ce8970ea5e-8&algo_pvid=ae6a6ebb-e514-419b-9030-63ce8970ea5e
нули от проца подавать на шины не пробовали?
Это в смысле к земле по умолчанию притянуть или что? Потому как программно вырубить шины на камне я не могу, мне нужно изолировать один конкретный модуль, а остальные должны при этом работать.
А еще есть копеечные платы, которые называются левелшифтерами их очень даже можно приспособить под включение-отключение шины. Думаю сами легко поймете как.
Я решение в разводку платы добавляю, поэтому смысла внешний модуль использовать нет. Разве что на основе такой платы провести испытание транзисторного решения. :) Но один мелкий чип на четыре линии компактнее, imho.
hc4067 посмотрел, но тогда уж проще делать на изначально рассматриваемом 4066. Ибо мне там ровно 4 линии и надо резать, три spi и одну на светодиоды адресные. Я просто на практике не пробовал, нюансов не знаю. :(
Делал MOSI с ОК (через диод), что бы вытекающий ток не поступал на выключенную часть схемы. Но там был однонаправленный SPI.
Делал MOSI с ОК (через диод), что бы вытекающий ток не поступал на выключенную часть схемы. Но там был однонаправленный SPI.
У меня тоже однонаправленный. Но я туплю видимо - а что тут даст диод? Мне надо исключить паразитное питание по линиям SPI удаленного модуля, а не контрлллера от модуля.
Чечако, обычно достаточно супервизором притянуть ресет к земле, мк получается фактически отключен. Если по каким-то странным причинам нужно мк совсем обесточить, то можно подавать питание на Vcc пин-драйвером,тогда в отключенном виде Vcc будет закорочено на Gnd
У меня тоже однонаправленный. Но я туплю видимо - а что тут даст диод? Мне надо исключить паразитное питание по линиям SPI удаленного модуля, а не контрлллера от модуля.
Вот и мне нужно было исключить паразитное питание по линиям SPI удалённого модуля. Диод делает "ОК".
MOSI --|<-- вход модуля, подтянутый резистором к VCC модуля.
Чечако, обычно достаточно супервизором притянуть ресет к земле, мк получается фактически отключен. Если по каким-то странным причинам нужно мк совсем обесточить, то можно подавать питание на Vcc пин-драйвером,тогда в отключенном виде Vcc будет закорочено на Gnd
Обесточить мне нужно не МК, а наоборот - то, что к нему подключается, и с ним по SPI общается. МК как раз должен работать, и когда надо - удаленку включать и по SPI ей управлять.
Может проще следить за отключением питания модуля, и выставлять нули на сигнальных линиях, как уже советовали?
Может проще следить за отключением питания модуля, и выставлять нули на сигнальных линиях, как уже советовали?
Можно, я процитирую первый пост этой темы? :)
Вопрос имею - в своем проекте использую модули, с которыми основной контроллер (arduinio mega) общается по SPI и I2C. Есть необходимость включать и выключать модули по команде основного контроллера. С управлением подачей питания вопросов нет, pvn012 решает. Беда в том, что мало резать только питание, надо резать и SPI и I2C. Потом как как минимум по SPI паразитное питание прет в полный рост.
Питанием модуля я и так управляю с контроллера. Вопрос именно в линиях SPI к нему. При этом по SPI работают и другие модули, т.е. тупо вырубать SPI на контроллере я не могу.
Чечако, нарисуйте уже блок-схему с шинами и конкретными названиями модулей.
Тогда попробуйте диод-резистор.) По SCK тоже, как я понимаю. Это самый простой вариант.
Чечако, нарисуйте уже блок-схему с шинами и конкретными названиями модулей.
Именно блок схему рисовать вероятно нет смысла. Все просто.
Есть контроллер arduino mega, который управляет блоком индикации. Блок индикации представляет собой цепочку из MAX7219 (три линии SPI) и цепочку адресуемых светодиодов PL9823-F5 - четвертая линия.
Специфика задачи такова, что устройство довольно часто включается и выключается. В том числе и в темноте. Загрузка контроллера при этом всегда занимает некоторое время - секунда, пол секунды - не суть важно.
Беда в том, что если все запитывается одномоментно, как сейчас - во время загрузки контроллера мы имеем яркую цветомузыку. 7219 врубают диагностику, светодиоды светят голубым. Я перенес в самое начало setup строки инициализации и вырубания как MAX7219, так и светодиодов, но это проблему не решает.
И когда оно в темноте садит по глазам - это мягко говоря неприятно.
Самым логичным мне видится НЕ подавать питание на блок индикации, пока контроллер не сделает это сознательно. С самим питанием вопросов нет - реле решает. Осталось понять, как резать четыре линии SPI и диодов. Потому как паразитного питания по ним тем же диодам вполне хватает для цветомузыки, да и MAX'ы моргают.
Плюс у этому - я хочу до момента загрузки контроллера физически изолировать входы внешних АЦП (ADS1015) от внешнего мира, ибо возможны ситуации, что мое устройство выключено, а с внешнего мира на вход АЦП идет питание.
Так что интересно решение не только резки именно SPI и линии DIN диодов, а резки каких-либо цепей вообще, по принципу "Нормально разомкнуто".
Пока, как уже говорил, смотрю в сторону коммутаторов типа 74HC4066 или ADG712BR. Нр это все голимая теория. Они интересны тем, что способны резать по 4 независимых канала. А это и вопрос с блоком индикации решает, и используемые мною АЦП имеют по 4 входящих канала.
Ап. :) Может кто-нить что-то посоветует. Вопрос с конвертером уровней на BSS138 изучил, частичная изоляция возможна, да. Сильно интересует вопрос с обрезкой входов АЦП. Ибо по гуглу, при использорвании скажем 74HC4066 утечки таки идут при том, что ключи без питания открыты. :(
Ап. :) Может кто-нить что-то посоветует. Вопрос с конвертером уровней на BSS138 изучил, частичная изоляция возможна, да. Сильно интересует вопрос с обрезкой входов АЦП. Ибо по гуглу, при использорвании скажем 74HC4066 утечки таки идут при том, что ключи без питания открыты. :(
А что это такое "ОБРЕЗКА ВЫХОДОВ АЦП" ? К обрезанию крайней плоти имеет отношение ?
А что это такое "ОБРЕЗКА ВЫХОДОВ АЦП" ? К обрезанию крайней плоти имеет отношение ?
Пост #14, цитата:
Плюс у этому - я хочу до момента загрузки контроллера физически изолировать входы внешних АЦП (ADS1015) от внешнего мира, ибо возможны ситуации, что мое устройство выключено, а с внешнего мира на вход АЦП идет питание.
А что это такое "ОБРЕЗКА ВЫХОДОВ АЦП" ? К обрезанию крайней плоти имеет отношение ?
Пост #14, цитата:
Плюс у этому - я хочу до момента загрузки контроллера физически изолировать входы внешних АЦП (ADS1015) от внешнего мира, ибо возможны ситуации, что мое устройство выключено, а с внешнего мира на вход АЦП идет питание.
реле герконовые.
реле герконовые.
Очень много места занимают. Плюс цена. Если взять скажем двухканальные EDR202A0500, то по сути это DIP14 на два канала. Итого две таких на один АЦП. Черт с ней, с ценой, но размер... :( Одноканальные варианты - SIP 7 получаются.
Хотя, конечно, соблазнительно. Потому как нормальный механический контакт.
реле герконовые.
Очень много места занимают. Плюс цена. Если взять скажем двухканальные EDR202A0500, то по сути это DIP14 на два канала. Итого две таких на один АЦП. Черт с ней, с ценой, но размер... :( Одноканальные варианты - SIP 7 получаются.
Хотя, конечно, соблазнительно. Потому как нормальный механический контакт.
у открытых электронных ключей далеко не нулевое сопротивление, которое, возможно, придется как-то учитывать/компенсировать.
Это решаемо, но доверия реле в этом вопросе безусловно больше. Тем более, что я уже придумал как их разместить в имеющемся пространстве. Как минимум EDR202A0500. На выходных куплю и погоняю на макетке, спасибо за мысль. Классические реле я использую, твердотельные тоже изучал, а вот герконовые как-то мимо меня прошли.
Осталось определится с красивым и недорогим решением по изоляции I2C и SPI, и вопросы темы можно считать закрытыми. Ставить герконы еще и на них жаба точно не позволит. :)