Какой микроконтроллер должен быть ведущим / ведомым?

8

Я создаю будильник, чтобы разбудить меня утром. Система состоит из 3 подсистем:

  1. (S1) RGB семь сегментов управления. Состоит из 5 мкКс, один для каждой цифры и один для ":". Большое количество µC связано с тем, что я не использую IC для RGB-светодиодов, только транзисторы.
  2. (S2) Управление датчиками и входами. Один микроконтроллер, который управляет датчиком расстояния для установки будильника и текущего времени; и переключатели для конфигурации.
  3. (S3) Связь и аудиофайл. Один микроконтроллер, который связывается с модулем Bluetooth в UART для дальнейшего проекта, получил кристалл RTC, чтобы иметь точные часы и управлять воспроизведением звука. (Я еще не работал над аудио)

Во время обычного выполнения S2 читает входные данные и отправляет их на S3 для обработки. затем S3 отправляет S1 то, что должно отображаться.

Я хочу, чтобы все эти подсистемы взаимодействовали друг с другом, затем я решил использовать шину I2C. Но вот и мой вопрос:

  • Какой микроконтроллер должен быть мастером?

С одной стороны, S3 является центром системы, но с другой стороны, S2 может отправлять больше сообщений, чем S3. Вот почему я не знаю, кто будет хозяином / рабом.

  • Есть ли правило, чтобы определить, кто будет рабом / хозяином? Какой вопрос я должен задать себе, чтобы сделать хороший выбор? (в общем, не для этой конкретной системы)
M.Ferru
источник
14
Почему вы используете 5 микроконтроллеров для основных часов / будильника, когда, конечно, кто-то будет делать эту работу?
Энди ака
2
Иметь другой ОК для «системного оркестратора», который реализует мастер I2C. Это не саркастическое замечание, я действительно это имею в виду. Это дает вам хорошее разделение между периферийными устройствами и контролем, так как вы, похоже, не боитесь избыточных УК.
Neil_UK
1
@Andyaka Каждая цифра имеет свой цвет (3 * 5 ШИМ), и каждый сегмент должен быть включен / выключен на GPIO. Я использую MSP430 в качестве микроконтроллера только с 20 контактами и 4 PWM каждый. (У меня их более 100, поэтому мне нужно использовать акции ^^ ')
M.Ferru
7
@ Andyaka На самом деле есть еще одна причина. Я хобби только что из школы EE. Я хочу узнать, как настроить приличную связь между системами с несколькими мкК, потому что я никогда не делаю таких вещей. Если я остановлюсь только на одном микроконтроллере (что, конечно, лучше), я не научусь «чему-то новому».
М.Ферру
2
@ M.Ferru Многое влияет на такой выбор. Беспокойство связано с тем, сколько неопределенности и риска для будущих «неизвестных» я могу вынести, прежде чем мне придется полностью «переделывать» дизайн. Другой - это процессы синхронизации и то, насколько важными могут быть некоторые из них. Например, если мне нужно поддерживать длительные передачи с жесткими временными ограничениями, один этот факт может усложнить хорошо работающий пользовательский интерфейс. Но речь идет о том, чтобы выписать все детали, которые вы знаете сейчас, плюс все, о чем вы можете подумать, и о том, как лучше организовать эти детали.
jonk

Ответы:

7

Есть ли правило, чтобы определить, кто будет [I 2 C] раб / хозяин?

Да. Только мастер I 2 C может начать передачу. Ведомый I 2 C не может рассказать вам о чем-либо, пока он не будет опрошен ведущим (если вы не добавите дополнительные сигналы прерывания, что увеличивает общую сложность системы).

Игнорирование (редко используемой) функции переключения устройства между ведущим и ведомым устройствами означает, что мастер I 2 C должен обладать достаточными знаниями об общей системе , чтобы знать, как взаимодействовать со всеми I 2 C рабы в этом автобусе.

Какой вопрос я должен задать себе, чтобы сделать правильный выбор? (в общем, не для этой конкретной системы)

Подумайте, какой MCU в вашей системе знает:

  • больше всего об общем состоянии системы, и поэтому может решить, когда отправлять команды I 2 C на ведомые устройства;
  • какие команды I 2 C необходимо отправить каждому ведомому устройству;
  • какие данные необходимо собрать от каждого ведомого I 2 C;
  • какие устройства I 2 C просто отвечают на входящие команды (это будет применяться к вашим MCU "S1" - кажется очевидным, что они наиболее подходят для того, чтобы быть подчиненными);

Независимо от того, какой MCU будет ведущим I 2 C, вам необходимо спроектировать общую архитектуру системы и определить, какие команды нужно отправлять на каждое устройство, и как быстро нужно получать ответы. Попытайтесь спроектировать систему, которая имеет очевидный «мастер» и знает все состояние системы, и тогда она, вероятно, также может быть ведущим устройством I 2 C.

Вы сказали:

S3 является центром системы, но, с другой стороны, S2 может отправлять больше сообщений, чем S3.

Не ясно , кто «S2» отправляет сообщения в . Нужно ли активно отправлять сообщения кому-либо ? Или «S2» может опрашиваться «S3» как ведущий I 2 C, чтобы получить информацию о датчике и переключателе, которую собирает «S2»? Если «S2» может опрашиваться «S3», то, исходя из описания, очевидно, что MCU «S3» может быть мастером I 2 C.

Я осторожно добавляю еще один MCU (назовем его «S10») в качестве мастера I 2 C. Это потому, что кажется, что MCU "S10" должен был бы сделать много опросов, просто чтобы собрать общие знания о состоянии системы, которые все (?) Уже известны "S3". Это кажется ненужным дублированием.

Поэтому, если «S3» не может выполнить эту работу из-за достижения своих пределов пространства ОЗУ, флэш-памяти или циклов ЦП и т. Д., Может быть менее сложным иметь «S3» для управления системой, сделав ее ведущим I 2 C, вместо добавления дополнительный контроллер "S10".

С другой стороны, если вы не возражаете против дополнительной сложности, добавление общего контроллера «S10» увеличивает модульность (сегментацию) системы, поскольку «S3» тогда выполняет только Bluetooth и аудио - больше ничего. Это может обеспечить дополнительную гибкость для добавления новых (непредвиденных) функций / дополнительных MCU в будущем без необходимости изменения кода в «S3».

SamGibson
источник
1

S1 должен быть ведомым I 2 C. Либо S2, либо S3 будет разумным выбором для мастера. Но это только повторение того, что было упомянуто в первоначальном вопросе.

Часто MCU, который имеет дело с самым большим разнообразием входов, является хорошим кандидатом в мастера. В вашем случае это либо S2 (множество пользовательских кнопок, RTC), либо S3 (множество команд от Bluetooth). Если вы не можете решить, какой из них, то вы можете получить больший контроллер и поместить обе функции S2 и S3 в один MCU. Такой подход может дать вам больше гибкости.

Ник Алексеев
источник
0

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

Маленькая защелка
источник