3 Arduino по I2C

Тема в разделе "Arduino & Shields", создана пользователем Daemon2017, 26 май 2015.

  1. Daemon2017

    Daemon2017 Нерд

    Добрый день!

    Имеется 3 микрухи (UNO), которые соединены 4 проводами (SDA, SCL, GND и VCC). Также, главный МК соединен через цифровой разъем 7 с подчиненным МК #1 и через цифровой разъем 8 с подчиненным МК #2.

    Главный МК соединен с ПК и каждые полсекунды выставляет на разъемы 7 и 8 единичку, тем самым отправляя синхросигнал на подчиненные МК и те начинают опрос датчиков. Затем, они передают показания датчиков с помощью библиотеки EasyTransferI2C.h по I2C в главный МК, а тот обрабатывает показания и выводит на ПК.

    Но каждый второй раз происходит такая фигня, что в результате отправки синхросигнала на подчиненные МК те начинают одновременно дергать линию связи и одновременно пытаются отдать показания датчиков на главный МК. Что можно с этим сделать? Датчики должны опрашиваться одновременно на обеих МК!

    Я вижу это так:
    1) Синхросигнал обеим подчиненным МК
    2) Подчиненные МК опрашивают датчики
    3) Главный МК сообщает подчиненной МК1, что хочет от нее показания
    4) Подчиненная МК1 дергает линию I2C и посылает показания
    5) Главный МК сообщает подчиненной МК2, что хочет от нее показания
    6) Подчиненная МК2 дергает линию I2C и посылает показания
    7) Главный МК доволен

    Можно ли как-то реализовать такое требование передачи показаний датчиков?

    Пока что думаю попробовать использовать для этой цели линию синхросигналов.
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Пускай МК1 и МК2 по сигналу снимают показания датчиков, но МК1 пускай их сразу отправляет, а МК2 с задержкой.
    Либо можно делать опрос датчиков по сигналу, а данные пускай главный МК запрашивает сам по очереди.
    А зачем вообще 3 контроллера? Почему бы на одном все не сделать?
     
  3. Daemon2017

    Daemon2017 Нерд

    Сделал второй вариант :)
    Они довольно сильно разнесены друг от друга - если до одного бросать провода, то там шумов будет больше, чем данных)