Quale microcontrollore dovrebbe essere master / slave?


8

Sto progettando un allarme per svegliarmi la mattina. Il sistema è composto da 3 sottosistemi:

  1. (S1) Gestione a sette segmenti RGB. Composto da 5µC, uno per ogni cifra e uno per ":". L'alto numero di µC è dovuto al fatto che non utilizzo IC per led RGB, ma solo transistor.
  2. (S2) Gestione sensore e ingresso. Un µC che gestisce il sensore di distanza per impostare la sveglia e l'ora corrente; e interruttori per la configurazione.
  3. (S3) Comunicazione e file audio. Un µC che comunica con un modulo bluetooth in UART per ulteriori progetti, ha ottenuto un cristallo RTC per avere un orologio preciso e gestire la riproduzione audio. (Non ho ancora lavorato sull'audio)

Durante la normale esecuzione, S2 legge l'input e lo invia a S3 per l'elaborazione. quindi S3 invia a S1 ciò che deve visualizzare.

Voglio far comunicare tutti questi sottosistemi, quindi scelgo di usare il bus I2C. Ma ecco la mia domanda:

  • Quale µC deve essere il maestro?

Nella prima mano, S3 è il centro del sistema ma, d'altra parte, S2 può inviare più messaggi di S3. Ecco perché sono indeciso su chi diventerà padrone / schiavo.

  • Esiste una regola per determinare chi sarà schiavo / padrone? Quale domanda dovrei farmi per fare la scelta giusta? (in generale, non per questo sistema specifico)

14
Perché stai usando 5 microcontrollori per un orologio / sveglia di base quando sicuramente uno farebbe il lavoro?
Andy aka il

2
Avere un altro uC per "orchestrator di sistema" che implementa il master I2C. Non è un'osservazione sarcastica, lo dico sul serio. Ti dà una bella separazione tra le periferiche e il controllo, poiché sembra che tu non abbia paura degli eccessi di UC.
Neil_UK,

1
@Andyaka Ogni cifra ha un colore diverso (3 * 5 PWM) e ogni segmento su GPIO deve essere acceso / spento. Sto usando MSP430 come µC con solo 20 pin e 4 PWM ciascuno. (Ne ho più di 100, quindi ho bisogno di usare lo stock ^^ ')
M.Ferru,

7
@Andyaka C'è in realtà un altro motivo. Sono un hobbista appena uscito dalla scuola EE. Voglio imparare come impostare una comunicazione decente tra un sistema con diversi µC perché non faccio mai cose del genere. Se scelgo solo un µC (che è ovviamente una scelta migliore) non imparerò "nulla di nuovo".
M.Ferru,

2
@ M.Ferru Molte cose influiscono su tali scelte. Una preoccupazione riguarda quanta incertezza e rischio per future "incognite" che posso tollerare prima di dover "rifare" completamente il progetto. Un altro è i processi di temporizzazione e quanto alcuni possano essere critici. Ad esempio, se ho bisogno di supportare trasferimenti lunghi con vincoli temporali rigidi, questo fatto da solo potrebbe complicare un'interfaccia utente ben funzionante. Ma si tratta di scrivere tutti i dettagli che conosci ora, oltre a tutto ciò che ti viene in mente che sta arrivando e decidere come organizzare al meglio quei dettagli.
Jon

Risposte:


7

Esiste una regola per determinare chi sarà [I 2 C] slave / master?

Sì. Solo un master I 2 C può avviare una trasmissione. Uno slave I 2 C non può parlarti di qualcosa, fino a quando non viene successivamente interrogato dal master (a meno che non si aggiungano segnali di interruzione extra, il che aumenta la complessità complessiva del sistema).

Ignorando la funzione (usata raramente) affinché un dispositivo passi dall'essere un master a uno slave, ciò significa che il master I 2 C deve avere una conoscenza sufficiente dell'intero sistema , per sapere come comunicare con tutti gli I 2 C schiavi su quell'autobus.

Quale domanda dovrei farmi per fare la scelta giusta? (in generale, non per questo sistema specifico)

Pensa a quale MCU nel tuo sistema conosce:

  • soprattutto sullo stato generale del sistema e può quindi decidere quando inviare i comandi I 2 C agli slave;
  • che i comandi I 2 C devono essere inviati ad ogni slave;
  • quali dati devono essere raccolti da ogni slave I 2 C;
  • che i dispositivi I 2 C rispondono puramente ai comandi in arrivo (questo si applica alle MCU "S1" - sembra chiaro che sono più adatti ad essere schiavi);

Indipendentemente da quale MCU diventerà il master I 2 C, è necessario progettare l'architettura generale del sistema e considerare quali comandi devono essere inviati a ciascun dispositivo e quanto velocemente devono essere ricevute le risposte. Prova a progettare un sistema che abbia un "master" ovvio e che conosca tutto lo stato del sistema, quindi probabilmente può essere anche il dispositivo master I 2 C.

Tu hai detto:

S3 è il centro del sistema ma, d'altra parte, S2 può inviare più messaggi di S3.

Non è chiaro che "S2" è l'invio di messaggi a . Deve inviare attivamente messaggi a chiunque ? Oppure "S2" può essere interrogato da "S3" come master I 2 C, per ricevere qualunque informazione sensore e interruttore "S2" raccoglie? Se "S2" può essere interrogato da "S3", allora, sulla base della descrizione, sembra chiaro che MCU "S3" potrebbe essere il master I 2 C.

Sono cauto nell'aggiungere ancora un altro MCU (chiamiamolo "S10") per essere il master I 2 C. Questo perché sembra che un MCU "S10" dovrebbe fare un sacco di polling, solo per raccogliere la conoscenza generale dello stato del sistema che è tutto (?) Già noto da "S3". Sembra una duplicazione non necessaria.

Pertanto, a meno che "S3" non sia in grado di eseguire il lavoro a causa del raggiungimento dei suoi limiti di spazio RAM, spazio Flash o cicli della CPU ecc., Potrebbe essere meno complicato avere "S3" che controlla il sistema rendendolo master I 2 C, anziché aggiungere un controller "S10" aggiuntivo.

D'altra parte, se non ti dispiace per la complessità aggiuntiva, l'aggiunta di un controller "S10" complessivo aumenta la modularità (segmentazione) del sistema, poiché "S3" non fa altro che Bluetooth e audio, nient'altro. Ciò potrebbe consentire una maggiore flessibilità per l'aggiunta di nuove funzionalità (impreviste) / MCU aggiuntive in futuro, senza la necessità di modificare il codice in "S3".


1

S1 dovrebbe essere uno slave I 2 C. O S2 o S3 sarebbe una scelta sensata per un master. Ma questo è solo ribadendo ciò che è stato menzionato nella domanda originale.

Spesso, l'MCU che si occupa della più grande varietà di input è un buon candidato per un master. Nel tuo caso, è l'S2 (una serie di pulsanti utente, RTC) o l'S3 (una varietà di comandi dal Bluetooth). Se non riesci a decidere quale, allora potresti ottenere un controller più grande e mettere entrambe le funzionalità S2 e S3 in un MCU. Questo approccio può darti maggiore flessibilità.


0

Ogni microcontrollore nel tuo sistema può essere il padrone. Tuttavia, alcuni di essi sono più adatti a questa funzione. Come detto da altre persone, il microcontrollore con più informazioni dovrebbe essere il Master.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.