8 votos

¿Qué microcontrolador debería ser amo/esclavo?

Estoy diseñando una alarma para despertarme por la mañana. El sistema se compone de 3 subsistemas:

  1. (S1) Gestión de los siete segmentos del RGB. Compuesto por 5µCs, uno para cada dígito y uno para ":". El alto número de µC se debe al hecho de que no utilizo IC para los leds RGB, sólo transistores.
  2. (S2) Gestión de sensores y entradas. Un µC que gestiona el sensor de distancia para la alarma establecida y la hora actual; y los interruptores para la configuración.
  3. (S3) Comunicación y archivo de audio. Un µC que se comunican con un módulo bluetooth en UART para un proyecto posterior, consiguió un cristal RTC para tener un reloj preciso y gestionar la reproducción de audio. (No he trabajado en el audio todavía)

Durante la ejecución normal, S2 lee la entrada y la envía a S3 para ser procesada. Luego S3 envía a S1 lo que tiene que mostrar.

Quiero que todos estos subsistemas se comuniquen entre sí, entonces elijo usar el bus I2C. Pero aquí viene mi pregunta:

  • ¿Qué µC tiene que ser el maestro?

En la primera mano, S3 es el centro del sistema pero en la otra mano, S2 puede enviar más mensajes que S3. Por eso estoy indeciso sobre quién será amo/esclavo.

  • ¿Hay alguna regla para determinar quién será esclavo / amo? ¿Qué pregunta debo hacerme para tomar la buena decisión? (en general, no para este sistema específico)

7voto

Link Puntos 148

¿Existe una regla para determinar quién será [I 2 C] esclavo / amo?

Sí. Sólo una I 2 C maestro puede iniciar una transmisión. Una I 2 El esclavo C no puede hablarte de algo, hasta que el amo no lo haya encuestado de nuevo (a menos que añadas señales de interrupción adicionales, lo que aumenta la complejidad del sistema en general).

Ignorar la característica (raramente usada) de un dispositivo para cambiar entre ser un amo y un esclavo, significa que la I 2 C master debe tener suficiente conocimiento del sistema general para saber cómo comunicarse con todos los yo 2 C esclavos en ese autobús.

¿Qué pregunta debo hacerme para tomar una buena decisión? (en general, no para este sistema específico)

Piensa en qué MCU de tu sistema sabe:

  • más sobre el estado general del sistema, y por lo tanto puede decidir cuándo enviar a I 2 Comandos C a los esclavos;
  • que yo 2 Las órdenes C deben ser enviadas a cada esclavo;
  • qué datos deben recogerse de cada I 2 Esclavo C;
  • que yo 2 Los dispositivos C responden puramente a los comandos entrantes (esto se aplicará a sus MCU "S1" - parece claro que son los más adecuados para ser esclavos);

Independientemente de que MCU va a ser la I 2 C master, hay que diseñar la arquitectura general del sistema y considerar qué comandos hay que enviar a cada dispositivo, y con qué rapidez hay que recibir las respuestas. Intenta diseñar un sistema que tenga un "maestro" obvio y que sepa todos estado del sistema, y entonces es probable que sea el I 2 El dispositivo maestro C también.

Tú lo dijiste:

S3 es el centro del sistema, pero por otro lado, S2 puede enviar más mensajes que S3.

No está claro quién es el "S2" que está enviando mensajes a . ¿Necesita activamente envíe mensajes a cualquiera ? ¿O puede "S2" ser encuestado por "S3" como yo 2 C master, para recibir cualquier información del sensor y el interruptor que "S2" recoge? Si "S2" puede ser interrogado por "S3" entonces, en base a la descripción, parece claro que "S3" MCU podría ser el I 2 C master.

Soy cauteloso en cuanto a añadir otro MCU (llamémosle "S10") para ser el I 2 C master. Eso es porque parece que una MCU "S10" necesitaría hacer muchas encuestas, sólo para reunir el conocimiento del estado general del sistema que es todo (?) ya conocido por el "S3". Eso parece una duplicación innecesaria.

Por lo tanto, a menos que "S3" no pueda hacer el trabajo debido a que alcanza sus límites de espacio de RAM, espacio de Flash, o ciclos de CPU, etc., puede ser menos complicado hacer que "S3" controle el sistema haciéndolo I 2 C master, en lugar de añadir un controlador adicional "S10".

Por otro lado, si no te importa la complejidad adicional, añadir un controlador general "S10" aumenta la modularidad (segmentación) del sistema, ya que "S3" entonces sólo hace el Bluetooth y el audio, nada más. Esto podría permitir una flexibilidad extra para añadir nuevas (imprevistas) características / MCU adicionales en el futuro, sin necesidad de cambiar el código en "S3".

1voto

Nick Alexeev Puntos 20994

Puedes obtener un límite inferior de la siguiente manera: $$ | \sin (k\,x)| \ge | \sin (k\,x)|^2= \frac {1- \cos (2\,k\,x)}{2}. $$ A partir de esto es fácil de conseguir $$ \sum_ {k=1}^n \frac {| \sin (k\,x)|}{k} \ge\sum_ {k=1}^n \frac {1}{2\,k}- \sum_ {k=1}^n \frac { \cos (2\,k\,x)}{2\,k} \ge\frac12\log n-C(x), \quad x \ne0 , \pi , $$ para algunos $C(x)>0$ . Esto probará la desigualdad de los grandes valores de $n$ .

0voto

Little Latch Puntos 30

Cada microcontrolador de su sistema puede ser el maestro. Sin embargo, algunos de ellos se adaptan más a esta función. Como han dicho otras personas, el microcontrolador con más información debería ser el Maestro.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X