Qual microcontrolador deve ser mestre / escravo?

8

Estou projetando um alarme para me acordar de manhã. O sistema é composto por 3 subsistemas:

  1. (S1) Gerenciamento de sete segmentos RGB. Composto por 5µCs, um para cada dígito e outro para ":". O alto número de µC se deve ao fato de eu não usar o IC para led RGB, apenas transistores.
  2. (S2) Gerenciamento de sensor e entrada. Um µC que gerencia o sensor de distância para definir alarme e hora atual; e comutadores para configuração.
  3. (S3) Comunicação e arquivo de áudio. Um µC que se comunica com um módulo bluetooth no UART para mais projetos, conseguiu que um cristal RTC tivesse um relógio preciso e gerenciasse a reprodução de áudio. (Ainda não trabalhei no áudio)

Durante a execução normal, o S2 lê a entrada e a envia para o S3 para processamento. então S3 envia para S1 o que deve ser exibido.

Quero fazer com que todos esses subsistemas se comuniquem juntos e, em seguida, escolho usar o barramento I2C. Mas aqui vem minha pergunta:

  • Qual µC deve ser o mestre?

Na primeira mão, S3 é o centro do sistema, mas na outra mão, S2 pode enviar mais mensagens que S3. É por isso que estou indeciso sobre quem será o mestre / escravo.

  • Existe uma regra para determinar quem será escravo / mestre? Que pergunta devo me fazer para fazer a boa escolha? (em geral, não para este sistema específico)
M.Ferru
fonte
14
Por que você está usando 5 microcontroladores para um relógio / alarme básico quando certamente alguém faria o trabalho?
Andy aka
2
Tenha outro uC para o 'orquestrador do sistema' que implementa o mestre I2C. Isso não é uma observação sarcástica, eu realmente quero dizer isso. Ele oferece uma boa separação entre periféricos e controle, pois você parece não ter medo de excesso de UCs.
Neil_UK 5/06
1
@Andyaka Cada dígito tem uma cor diferente (3 * 5 PWMs) e cada segmento precisa no GPIO para ativar / desativar. Estou usando o MSP430 como µC com apenas 20 pinos e 4 PWM cada. (Eu tenho mais de 100 deles, então eu preciso usar o estoque ^^ ')
M.Ferru
7
@ Andyaka Na verdade, há outra razão. Eu sou um hobbyista apenas fora da escola de EE. Quero aprender a configurar uma comunicação decente entre um sistema com vários µC, porque nunca faço isso. Se eu optar por apenas um µC (o que é obviamente uma escolha melhor), não aprenderei "nada de novo".
M.Ferru
2
@ M.Ferru Muitas coisas afetam essas escolhas. Uma preocupação é com quanta incerteza e risco para futuras "incógnitas" posso tolerar antes de precisar "refazer" completamente o design. Outro são os processos de temporização e quão críticos alguns podem ser. Por exemplo, se eu precisar oferecer suporte a transferências longas com restrições de tempo apertadas, esse fato por si só pode complicar uma interface de usuário que funcione bem. Mas trata-se de escrever todos os detalhes que você conhece agora, além de tudo o que você pode pensar sobre isso e descobrir a melhor forma de organizar esses detalhes.
jonk

Respostas:

7

Existe uma regra para determinar quem será [I 2 C] escravo / mestre?

Sim. Somente um mestre I 2 C pode iniciar uma transmissão. Um escravo I 2 C não pode falar sobre algo até que ele seja pesquisado em seguida pelo mestre (a menos que você adicione sinais de interrupção extras, o que aumenta a complexidade geral do sistema).

Ignorando o recurso (raramente usado) para um dispositivo alternar entre ser mestre e escravo, isso significa que o mestre I 2 C deve ter conhecimento suficiente do sistema geral para saber como se comunicar com todos os I 2 C escravos naquele ônibus.

Que pergunta devo me fazer para fazer a boa escolha? (em geral, não para este sistema específico)

Pense em qual MCU do seu sistema sabe:

  • mais sobre o estado geral do sistema e, portanto, pode decidir quando enviar comandos I 2 C aos escravos;
  • quais comandos I 2 C precisam ser enviados para cada escravo;
  • que dados precisam ser coletados de cada escravo I 2 C;
  • quais dispositivos I 2 C respondem puramente aos comandos recebidos (isso se aplicará às suas MCUs "S1" - parece claro que elas são mais adequadas para serem escravas);

Independentemente de qual MCU será o mestre I 2 C, é necessário projetar a arquitetura geral do sistema e considerar quais comandos precisam ser enviados para cada dispositivo e com que rapidez todas as respostas precisam ser recebidas. Tente projetar um sistema que possua um "mestre" óbvio e conheça todo o estado do sistema e, provavelmente, também poderá ser o dispositivo mestre I 2 C.

Você disse:

S3 é o centro do sistema, mas, por outro lado, S2 pode enviar mais mensagens que S3.

Não está claro que "S2" é o envio de mensagens para . Precisa enviar mensagens ativamente para alguém ? Ou "S2" pode ser pesquisado por "S3" como mestre I 2 C, para receber qualquer informação de sensor e chave que "S2" coletar? Se "S2" puder ser pesquisado por "S3", então, com base na descrição, parece claro que "S3" MCU poderia ser o mestre I 2 C.

Sou cauteloso ao adicionar mais um MCU (vamos chamá-lo de "S10") para ser o mestre I 2 C. Isso ocorre porque parece que um MCU "S10" precisaria realizar muitas pesquisas, apenas para reunir o conhecimento geral do estado do sistema, que é tudo (?) Já conhecido por "S3". Isso parece duplicação desnecessária.

Portanto, a menos que "S3" não pode fazer o trabalho devido a atingir os seus limites de espaço RAM, espaço Flash, ou ciclos de CPU etc. pode ser menos complicado ter "S3" controlar o sistema, tornando-I 2 mestre C, em vez de adicionar um controlador "S10" adicional.

Por outro lado, se você não se importa com a complexidade adicional, adicionar um controlador "S10" geral aumenta a modularidade (segmentação) do sistema, uma vez que o "S3" faz Bluetooth e áudio - nada mais. Isso pode permitir flexibilidade extra para adicionar novos recursos (imprevistos) / MCUs adicionais no futuro, sem a necessidade de alterar o código em "S3".

SamGibson
fonte
1

S1 deve ser um escravo I 2 C. S2 ou S3 seria uma escolha sensata para um mestre. Mas isso apenas reafirma o que foi mencionado na pergunta original.

Freqüentemente, o MCU que lida com a maior variedade de insumos é um bom candidato a um mestre. No seu caso, é o S2 (uma variedade de botões de usuário, RTC) ou o S3 (uma variedade de comandos do Bluetooth). Se você não conseguir decidir qual, poderá obter um controlador maior e colocar as duas funcionalidades S2 e S3 em um MCU. Essa abordagem pode oferecer mais flexibilidade.

Nick Alexeev
fonte
0

Todo microcontrolador em seu sistema pode ser o mestre. No entanto, alguns deles são mais adequados para esta função. Como dito por outras pessoas, o microcontrolador com mais informações deve ser o Mestre.

Little Latch
fonte