jcxz 242 11 часов назад Опубликовано 11 часов назад · Жалоба 2 часа назад, iiv сказал: нет тоже нет. Если бы было бы, я бы попользовал. печалька... Если бы не выбранный вами ESP32, то можно было бы посоветовать ногодрыжную реализацию I2C, в которой на все ведомые подать общий SCL, а SDA - выделить каждому свой. И опрашивать тогда можно все (одинаковые) одновременно - одной транзакцией. Но как я понимаю - на ESP32 с количеством ног вообще проблема. 2 часа назад, iiv сказал: Вопрос, скажите, пожалуйста, правильно ли я понимаю, что если я их на две группы разобью, и esp32-s3 и OV05640-A71A будут как будут, но на 3.0В, а вот ICP-10101 через подтяжки на 1.8В, то можно не мудрить с этими уровнями? Т.е. - на две разные шины I2C? А почему не будет? Должен. Если конечно у ESP32 нет каких-то странностей в I2C.... 24 минуты назад, _pv сказал: конечно, питание дёргать, но если не очень быстро и часто, возможно прокатит. ТС как я понимаю хочет по текущему давлению определять высоту полёта дрона. Так что - не прокатит. Разве что для медленно взлетающего дирижабля. 🎈 24 минуты назад, _pv сказал: У 5640 адрес поменять вроде можно в регистре (SCCB_ID помечен как RW), и если все эти 5 штук при включении питания включать не сразу, (возможно ещё одним TCA6408A отпускать ресеты по очереди), адреса можно раздать индивидуальные. По количеству ног нет никакого выигрыша с вариантом индивидуального SDA для каждого ведомого. Даже проигрыш. Но при индивидуальном SDA и опрашивать можно одновременно. Правда - ногодрыжным I2C. Но тут весь вопрос в требуемой частоте опроса. Датчики давления вроде как и не нужно опрашивать несколько тысяч раз в секунду (если конечно не гиперзвуковую ракету проектируем ). А значит ногодрыг - вполне себе вариант. Скажем - при частоте SCL до пары кГц, не проблема на МК уровня среднего Cortex-M сделать ногодрыжный I2C на прерываниях таймера. Загрузка МК будет никакая. 20 часов назад, makc сказал: А что делать с клок-стретчингом и т.п.? По моему опыту - далеко не все I2C-ведомые его используют. Можно протестить свои и (если не используют) - сильно упростить себе жизнь. Хотя конечно метод несколько костыльный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 79 11 часов назад Опубликовано 11 часов назад · Жалоба 7 minutes ago, jcxz said: По количеству ног нет никакого выигрыша с вариантом индивидуального SDA для каждого ведомого. Даже проигрыш. i2c io expander для дергания ресетов на этой же единственной шине сидит и дополнительных ног не требует. да и камеру по i2c опрашивать вроде особо не надо, особенно омнивижены эти, так, один раз сконфигурировать на старте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 29 11 часов назад Опубликовано 11 часов назад · Жалоба 27 minutes ago, jcxz said: Правда - ногодрыжным I2C. Но тут весь вопрос в требуемой частоте опроса. Датчики давления вроде как и не нужно опрашивать несколько тысяч раз в секунду (если конечно не гиперзвуковую ракету проектируем ). А значит ногодрыг - вполне себе вариант. все датчики надо уметь быстро дергать. Конечно не гиперзвук, и скорости никакие (до 10м/с), но этот датчик видит разницу 1м/с ветра, поэтому по нему очень хорошо срыв потока с крыла стабилизатора дрона детектировать, особенно если по сотне раз в секунду опрашивать. Я как раз про параллельный ногодрыг уже думал, если скорости последовательного опроса не будет хватать. С камерой тоже не все так просто и, как я понимаю, i2c тоже часто (разы в секунду) дергать придется, так как у этой камеры можно поставить 120fps на маленькое окно 320х240, но это окно будет по всему полю пикселей передвигаться. Конечно не факт, что у меня до этого руки дойдут, но опцию быстрого изменения регистров в разных камерах хотелось бы иметь. 46 minutes ago, _pv said: 1.9В конечно больше чем половина от 3В, но к сожалению меньше чем 0.75 от 3 и тем более 3.3В. в даташит на esp загляните, что именно он за Vih считатет. Спасибо! Да, проморгал я, что esp32 гарантированно переключается на ноль до 0.25*VDD и на единицу от 0.75*VDD. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 29 11 часов назад Опубликовано 11 часов назад · Жалоба А если вот так: перевести МК на 3.0В, все камеры в параллель (общий scl, разные sda) - будет 6 пинов, а в барометрах сделать так: gnd - 6КОм - v1 - 1КОм - v2 - 3КОм - 3.0В где v1 - ноги на сенсорах, а v2 - ноги на МК. Вроде и 0.25-0.75 для МК получаются, и на сенсоре не больше 1.8В. Тогда все на МК и на нем только 12 ног задействовано будет, и в плиске танцев с бубном не будет что меня полностью будет устраивать Я вчера, когда тему открыл, еще думал, что в плиске есть что-то аналогичное txb10x. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 10 часов назад Опубликовано 10 часов назад · Жалоба 42 минуты назад, iiv сказал: все датчики надо уметь быстро дергать. Конечно не гиперзвук, и скорости никакие (до 10м/с), но этот датчик видит разницу 1м/с ветра, поэтому по нему очень хорошо срыв потока с крыла стабилизатора дрона детектировать, особенно если по сотне раз в секунду опрашивать. Я как раз про параллельный ногодрыг уже думал, если скорости последовательного опроса не будет хватать. Глянул даташит ICP-10101 по диагонали... Если грубо прикинуть: 1/(132*2/40e3 + 5.6e-3) = 82Гц - примерная достижимая частота опроса при ногодрыжном I2C в таймерном ISR=40кГц; где - 132 - примерная длина посылки(бит), два прерывания на бит; 5.6мсек - длительность преобразования в "Normal mode". Если опрашивать все в-параллель. Возможно что-то можно сократить и повысить частоту опроса. Например - подобрать задержку после старта преобразования и сократить биты 29...39. Или давать NACK в 103-м или даже в 85-м бите (если температура не нужна). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 79 10 часов назад Опубликовано 10 часов назад · Жалоба камерам RC цепочки на ресет на 0, 1, 2, 4, 8 мс, чтобы включались по очереди. После дергания ресетом начинать непрерывно писать по адресу сенсора в регистр sccb_id какой-нибудь другой адрес, например 0хА0, как ack в ответ придёт, начинать писать 0xA1, ... и так всем камерам индивидуальные адреса назначить. а потом можно совсем упороться и датчики давления повесить камерам на их gpio (там пара есть вроде), и сделать i2c ногодрыгом через i2c. Тогда ничего кроме единственного i2c от МК не надо. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 39 9 часов назад Опубликовано 9 часов назад · Жалоба В 03.11.2024 в 15:04, iiv сказал: имеется МК (на 3.3В) с I2C (SCL, SDA), который мне надо подключить к 5 различным сенсорам с одинаковым адресом, чтобы с ними общаться через I2C Возможно вам нужен I2C Bus Multiplexer. Их много кто выпускает. Например на 8 шин у NXP. Еще есть у TI. Они могут работать с разными напряжениями на шинах. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 8 7 часов назад Опубликовано 7 часов назад · Жалоба 4 hours ago, iiv said: в плиске танцев с бубном не будет inout sda_master; inout scl_slave; input [2:0] Pos; inout sda_slave[0:4]; // LSB / MSB - better to change endianess i.e. [4:0] inout scl_slave[0:4]; Не понимаю, какие бубны? Допустим, клок слэйвы тормозить не умеют (ну иначе так же как SDA) inout в плис -> out, oe (0-ena, 1-HiZ), in reg [4:0] sel; always_comb begin sel=`1; sel=sel^(1<<pos); sda_slave_oe={5{sda_master_in}}|sel; scl_slave_oe={5{scl_master_in}}|sel; sda_master_oe=&sda_slave_in; scl_master_oe=1; // only FPGA input, i2c slaves do not drive scl* {sda_slave_out, scl_slave_out, sda_master_out, scl_master_out}='0; end upd: sda_master_oe=&(sda_slave_in|sel); // так наверно надежнее будет, на случай если какойто слэйв заглючит наверно, я плохо подумал... сам так не делал. но ведь техасовские то ли TBA, то ли TBX буфера для согласования I2C-шных шин с разными питаниями приблизительно так устроены... - посмотрю их на досуге. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться