I2C_anything от Ника Гэммона. Значение двух отправителей для получения и печати receiverslave

i2c

Следуя предложению Дьявольского опубликовать здесь: Привет

Ник, большое тебе спасибо за эту библиотеку I2C-anything, которая прекрасно работает с двумя ардуино (один отправитель, один приемник).

Есть ли какой-нибудь предложенный метод или, по крайней мере, примерный скетч того, как два разных arduino-отправителя посылают свои float приемнику, например, чередуя ведомые адреса в цикле приемника? При простой повторной вставке раздела (но с другим адресом) в приемник скетч перезапускается с помощью Wire.begin (), а затем Wire.begin(новый адрес) все идет наперекосяк.

Кроме того: если я определяю-float f в отправителе A - и-float e в отправителе B - получатель продолжает печатать значение float e в серийном номере.Print ("float value e"); serial.println(e); -позиция, независимо от того, меняюсь ли я от отправителя A к отправителю B-меняя соединения SCL/SDA и Serial.Print ("float value f");serial.println(f); печатает причудливые числа.

Если бы, по крайней мере, замена привела к тому, что float были напечатаны в правильном положении, я мог бы, возможно, переключать соответствующие отправители I2C вниз по очереди ...

Конечно, горячее подключение /горячее переключение SDA и SCL от отправителей иногда приводит к блокировке скетча отправителей.

Идея отправки данных от отправителя B к отправителю A и от отправителя A к получателю оставила меня разочарованным в последние несколько часов из-за того, что Im a total noob и/или что просто невозможно отправить два мастера одному slavereciver без конфликтов i2C. Если только не исполняется какая-нибудь неизвестная акробатика.

Конечная идея состоит в том, чтобы два отдельных megas (с датчиками i2c, прикрепленными к ним) выполняли обратные связи и все еще могли передавать эти значения и другие значения на дисплей через I2C. альтернативный способ может заключаться в том, что dac используется для преобразования значений I2C в напряжения, которые аппаратно....)

Любая помощь очень ценится Лучшие Даниэль

, 👍-1

Обсуждение

Пожалуйста, нарисуйте нам схему. Мне не очень понятно, как это делается и почему. Также, пожалуйста, покажите свой код. Без этих двух, ваше описание действительно трудно понять. В целом я бы не рекомендовал использовать режим multi-master в I2C. Я сам работаю над мульти-мастером для Аттиниса, и должен сказать, что это может быть настоящий беспорядок. Если вы опишете контекст, возможно, мы сможем указать вам на лучшую альтернативу., @chrisl

Пожалуйста, опишите, почему вы считаете, что вам нужно несколько хозяев для одного раба. Как писал Крисл, I2C multimaster typucally не очень весело, и могут быть более простые решения (one master/ 2slaves, I2C в сочетании с UART и т. Д.), @Sim Son


1 ответ


0

Дорогие Крисл и Мой Сын

Пожалуйста, примите мои извинения за то, что я не ответил раньше, я все еще восстанавливаюсь после аварии с опалубкой и имею ограниченный безболезненный доступ к своему ноутбуку.

мышление в коробках: КОРОБКА 1 = Arduino Mega номер один регулирует давление пропорциональных клапанов (через I2C подключенный quaddac MCP4728 до 0-10 В) на основе значений расхода 4 датчиков расхода, подключенных I2C.

КОРОБКА 2= Arduino Mega номер два делает то же самое со вторым набором из 4 датчиков расхода и 4 аналоговых пропорциональных клапанов.

Разделив это на два ардуино изначально, потому что а) я не смог выяснить, как получить 2 ЦАП на таком же I2C линии и обрабатывать поддерживает адресу возиться который оказался хороший подход, потому что количество требуемых выводов GPIO превышает доступное количество контактов одного мега (многие датчики вращения подключен, сигнал TTL откладывать на 8 каналов, горшки для установки значений, светодиодными индикаторами состояния.

Предполагается, что оба ардуино отправляют значения уставок расхода, фактические значения давления, фактические значения расхода, другие данные датчиков на третий arduino MEGA =BOX 3, который отображает все виды данных на большом TFT. (как бы то ни было, у этого третьего Мега есть несколько входов от другого набора других датчиков I2C, которые в основном обеспечивают выходы сигналов TTL, если были соблюдены критерии события. последние TTL передаются обратно на первые два arduino для предоставления критериев принятия решений в циклах if)

Итак, я узнал от вас, что многомастерный подход вряд ли будет веселым, особенно учитывая мои ограниченные знания и ненависть /невежество в обработке и отправке строк. Вы, по крайней мере, будете смеяться надо мной сейчас, но я сэкономил довольно много времени в тот день, когда написал вам, просто переведя все значения расхода и т. Д. из блока 1, блока 2-Ardinos (давления, уставки и фактические значения расхода) в напряжения с помощью дополнительных мультиплексированных ЦАП, затем я получаю напряжения с помощью I2C-АЦП, подключенных к Arduino с помощью SPI-дисплея (коробка 3), который, в свою очередь, преобразуется в истинные значения и выводится на TFT. Любая задержка и неточность на стороне дисплеев пока приемлемы, колебания аналогового значения сглажены, дополнительное оборудование не является проблемой на данном этапе проекта.

Я сожалею, что его первоначальная проблема, касающаяся I2C, сбила меня с пути старомодной обработки аналоговых данных

Но: если у вас есть какие-либо подсказки или указатели на библиотеки, как два ардуино, которые действуют уже как I2C мастера могут отправлять свои данные (комплект float) с помощью UART/RXTX, или любой другой автобус, чтобы приемник, который обрабатывает эти переменные в качестве печати: более чем приветствуются, постараюсь держать в курсе того, что вы предлагаете.

Лучший Даниэль

,