jcxz 242 10 часов назад Опубликовано 10 часов назад · Жалоба 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 9 часов назад Опубликовано 9 часов назад · Жалоба 7 minutes ago, jcxz said: По количеству ног нет никакого выигрыша с вариантом индивидуального SDA для каждого ведомого. Даже проигрыш. i2c io expander для дергания ресетов на этой же единственной шине сидит и дополнительных ног не требует. да и камеру по i2c опрашивать вроде особо не надо, особенно омнивижены эти, так, один раз сконфигурировать на старте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 29 9 часов назад Опубликовано 9 часов назад · Жалоба 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 9 часов назад Опубликовано 9 часов назад · Жалоба А если вот так: перевести МК на 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 8 часов назад Опубликовано 8 часов назад · Жалоба 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 8 часов назад Опубликовано 8 часов назад · Жалоба камерам RC цепочки на ресет на 0, 1, 2, 4, 8 мс, чтобы включались по очереди. После дергания ресетом начинать непрерывно писать по адресу сенсора в регистр sccb_id какой-нибудь другой адрес, например 0хА0, как ack в ответ придёт, начинать писать 0xA1, ... и так всем камерам индивидуальные адреса назначить. а потом можно совсем упороться и датчики давления повесить камерам на их gpio (там пара есть вроде), и сделать i2c ногодрыгом через i2c. Тогда ничего кроме единственного i2c от МК не надо. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 38 7 часов назад Опубликовано 7 часов назад · Жалоба В 03.11.2024 в 15:04, iiv сказал: имеется МК (на 3.3В) с I2C (SCL, SDA), который мне надо подключить к 5 различным сенсорам с одинаковым адресом, чтобы с ними общаться через I2C Возможно вам нужен I2C Bus Multiplexer. Их много кто выпускает. Например на 8 шин у NXP. Еще есть у TI. Они могут работать с разными напряжениями на шинах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 8 5 часов назад Опубликовано 5 часов назад · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться