Risolvere i problemi derivanti dall'espansione dell'I/O dei microcontroller applicando dispositivi esterni
Contributo di Editori nordamericani di DigiKey
2019-02-20
L'I/O dei microcontroller pone di solito i progettisti di fronte a due problemi. Il primo nasce quando il microcontroller più idoneo per un'applicazione non ha la giusta combinazione di capacità I/O. Il secondo quando una linea di prodotti che è già stata lanciata richiede una capacità I/O supplementare.
Nel primo caso gli sviluppatori spesso sono costretti ad acquistare un microcontroller più costoso e potente. Nel secondo caso, il costo di un nuovo microcontroller e il porting del relativo software possono essere proibitivi non solo in termini di costo, ma anche di tempo.
Una possibile soluzione a entrambi questi problemi consiste nell'usare dispositivi di espansione I/O esterni che spesso vengono connessi alla SPI o al bus I2C di un microcontroller. Con questa soluzione si evita di dover specificare un numero eccessivo di pin del microcontroller e di aumentare in modo esagerato prestazioni e ingombro. Allo stesso tempo, questo approccio mette il progetto al riparo da problemi in caso di espansione del mercato di destinazione, di richieste di nuove funzionalità da parte dei clienti e di scelta non ottimale del microcontroller, come talvolta accade.
Questo articolo prenderà in esame i tipici requisiti di I/O del microcontroller e presenterà alcuni dispositivi di espansione esterni idonei. Mostrerà poi come usare queste risorse non su chip che possono fornire ingresso e uscita supplementari per uso generale, maggiore capacità di memoria, modulazione della larghezza di impulso e anche funzione di temporizzazione watchdog.
Scelta dell'interfaccia di espansione
I microcontroller hanno diverse interfacce periferiche su chip che possono essere utilizzate per comunicare con dispositivi esterni. Dipendono dal microcontroller e, solo per citarne alcune, possono essere dei seguenti tipi:
- Interfaccia periferica seriale (SPI)
- Bus a circuito inter-integrato (I2C)
- Universal Serial Bus (USB)
- Ricetrasmettitore asincrono universale (UART)
- Controller Area Network (CAN)
- Wi-Fi
Le interfacce che funzionano meglio per comunicare con dispositivi di espansione esterni sono I2C e SPI.
I2C è un bus a due fili che di norma opera a 100 Kbit/s o a 400 Kbit/s, anche se esistono dei dispositivi ad alta velocità che supportano velocità di 1 Mbit/s o più. Un filo è un pin di clock dedicato, mentre l'altro è per la comunicazione bidirezionale tra master e slave. In genere il microcontroller funge da master e i dispositivi esterni da slave. Gli slave sono indirizzabili utilizzando uno schema di indirizzamento a 7 o a 10 bit.
SPI è un'interfaccia bus a tre fili che opera tra 1 e 12 Mbit/s. Il bus SPI ha una linea di dati dedicata che esce dal master, una che esce dagli slave e un clock. Anche in questo caso il microcontroller è configurato per essere il dispositivo master che comunica con gli slave utilizzando una linea "slave select". Ogni dispositivo slave collegato al microcontroller richiede un pin di uscita dedicato per selezionarlo per la comunicazione. È facile immaginare che uno sviluppatore che desidera connettere molti dispositivi esterni potrebbe rapidamente esaurire le linee di I/O per selezionare i dispositivi slave.
Ad esempio, se utilizzasse STM32L011D4P7 di STMicroelectronics, si troverebbe alle prese con undici linee di I/O (Figura 1). Solo per i dati SPI e il clock servirebbero tre linee di I/O e ne rimarrebbero otto per comunicare con i dispositivi slave ed eseguire qualsiasi altra funzionalità richiesta dal sistema. Per molte applicazione non ci sono problemi, ma prima o poi il progettista potrebbe aver bisogno di espandere l'I/O.
Figura 1: STM32L011D4P7 è un processore Arm® Cortex®-M0+ con una limitazione di pin per undici I/O. (Immagine per gentile concessione di STMicroelectronics)
In genere, la regola empirica è semplice e vuole che si usi il bus I2C quando si aggiungono le seguenti capacità:
- I/O
- PWM
- EEPROM
- Timer watchdog
Il bus SPI dovrebbe essere usato per aggiungere a una scheda SD capacità quali l'accesso alla memoria ad alta velocità.
Espandere l'I/O per uso generale
Esistono diversi CI che supportano l'espansione dell'ingresso e dell'uscita tramite un'interfaccia I2C. Fra gli esempi più interessanti ricordiamo:
PCA8574 è particolarmente interessante perché contiene un solo registro per eseguire sia l'ingresso che l'uscita. Avere un unico registro semplifica enormemente la quantità di software richiesto per configurare il dispositivo e leggere e scrivere i pin (Figura 2). Il microcontroller comunica con PCA8574 tramite I2C e indirizza il dispositivo in base alla configurazione dei pin da A0 ad A2. Il progetto risulta pertanto più flessibile e uno sviluppatore può scegliere l'indirizzo slave per PCA8574 e averne diversi in un unico progetto.
Figura 2: PCA8574 di NXP è un espansore I²C di I/O a 8 bit quasi bidirezionale. Ha un solo registro I2C per la lettura e la scrittura per eseguire le funzioni I/O sui suoi pin, cosa che lo rende un dispositivo estremamente semplice e snello. (Immagine per gentile concessione di NXP Semiconductors)
Per impostazione predefinita, all'accensione i pin da P0 a P7 sono configurati come ingressi. La lettura del singolo registro interno darà lo stato di ogni pin del dispositivo, tanto che sia configurato come ingresso che come uscita. PCA8574 consente ai pin di fungere contemporaneamente da ingresso e da uscita, quindi una scrittura sul registro imposterà anche l'uscita del bit corrispondente.
Il drive di uscita viene mandato su da un resistore interno debole che viene facilmente superato da un valore di ingresso. Se uno qualsiasi degli stati di ingresso cambia, il pin INT diventa basso per far sapere al microcontroller che vi è stata una modifica dello stato di ingresso. Il microcontroller può così effettuare una chiamata I2C per leggere i nuovi valori.
Espandere la PWM
Un dispositivo di espansione molto utile è l'espansore PWM, specie quando si pilotano i LED. Quando il microcontroller non sta facendo nulla, può essere messo in modalità di sospensione e l'espansore PWM può farsi carico di pilotare uno stato dei LED.
Un esempio perfetto di come viene utilizzato l'espansore PWM si presenta spesso nei circuiti che utilizzano un pulsante RGB PV6F240SSG di E-Switch o un pulsante SPST 3-101-399 di Schurter Electronic Components (Figura 3).
Figura 3: Il pulsante RGB di Schurter è circondato da un LED rosso verde e blu che permette a uno sviluppatore di creare un motivo di accensione a colori. Questi tipi di dispositivi sono perfetti per essere pilotati da un chip di espansione PWM. (Immagine per gentile concessione di Schurter)
Il pulsante RGB di Schurter è circondato da un LED rosso verde e blu e un pulsante SPST che permette a uno sviluppatore di creare un motivo di accensione a colori. Questi tipi di dispositivi sono perfetti per un chip di espansione PWM.
Un chip di espansione PWM idoneo per I2C è MAX7315 di Maxim Integrated. MAX7315 offre otto porte PWM e include una funzione di controllo dell'intensità dei LED. Questo copre facilmente i tre canali necessari per pilotare un interruttore RGB, consentendo a un singolo dispositivo di pilotare una coppia di interruttori e alcuni LED autonomi. Vi è anche una nona porta che può essere usata come interrupt di rilevamento della transizione o come uscita per uso generale.
L'interfaccia I2C MAX7315 è leggermente più complessa di PCA8574 di NXP perché contiene più di un solo registro. Gli sviluppatori devono quindi rivolgersi al dispositivo slave, fornire l'indirizzo di memoria interessato per la lettura o la scrittura ed eseguire poi la scrittura o la lettura. La mappa della memoria per MAX7315 è riportata nella Figura 4.
|
Figura 4: Il controller PWM MAX7315 ha otto porte di uscita che includono una funzione di intensità dei LED. La mappa del registro per il dispositivo è semplice e consente di accedere facilmente alle funzionalità PWM avanzate. (Immagine per gentile concessione di Maxim Integrated)
La mappa del registro per MAX7315 è semplice e consente di accedere facilmente alle funzionalità PWM avanzate.
Combinazione degli espansori con WDT, EEPROM e PWM
Come mostrato, gli espansori di I/O del bus I2C possono essere molto potenti quando vengono usati come dispositivi autonomi. Ovvero, contengono solo una funzione specifica come I/O o PWM. Gli espansori come quello I/O multiporta CY8C9520A di Cypress Semiconductor includono diverse espansioni periferiche all'interno di un unico contenitore CI. CY8C9520A è disponibile in tre varianti: espansione a 20, a 40 e a 60 bit. Questi pin possono pertanto essere configurati per essere usati come ingresso, uscita o PWM (Figura 5).
Figura 5: CY8C9520 di Cypress Semiconductor è un espansore I/O a 20, 40 o 60 bit con EEPROM. Consente di configurare i pin di espansione come ingresso, uscita o PWM. (Immagine per gentile concessione di Cypress Semiconductor)
Oltre all'espansione I/O, CY8C9520 include anche una EEPROM che può essere utilizzata per memorizzare impostazioni importanti dell'applicazione come un numero di serie e altri importanti parametri di configurazione.
Uno sguardo attento alla Figura 5 rivela il pin WD6 su GPort 2. Si tratta di un pin di uscita del timer watchdog che può essere usato per ripristinare il microcontroller se non riesce a comunicare e a "domare" il watchdog CY8C9529. Le impostazioni del watchdog sono completamente configurabili e possono essere utilizzate per aggiungere un livello di robustezza in più al codice dell'applicazione.
Suggerimenti e consigli per espandere le capacità del microcontroller
Esistono numerose tecniche per espandere più facilmente la capacità di un microcontroller. Di seguito sono riportati alcuni suggerimenti e consigli utili:
- Usare I2C per l'interfacciamento con i dispositivi esterni. L'interfaccia richiede solo due pin e può supportare più dispositivi slave.
- Prima di progettare una parte nell'hardware, acquistare una scheda di sviluppo o saldare il chip su una scheda di espansione per verificare se soddisfa tutti i requisiti del sistema.
- Usare un tool per bus I2C per interfacciarsi con il dispositivo di espansione e vedere come lavora. Questo accelererà notevolmente lo sviluppo del software.
- Utilizzare un analizzatore di bus per monitorare la comunicazione con il dispositivo esterno durante lo sviluppo del software per ridurre al minimo il tempo di debug.
- Quando possibile, scegliere un dispositivo con un timer watchdog esterno. Può essere uno strumento per aumentare la robustezza del progetto del sistema.
- Quando l'interfacciamento avviene con la memoria non su chip per dati diversi da quelli di configurazione, utilizzare un'interfaccia ad alta velocità come SPI.
- Assicurarsi che il driver I2C del microcontroller sia in grado di gestirlo se un dispositivo restituisce una conferma negativa (NAK) o se il bus viene mandato giù. Non è insolito che questi driver ignorino gli errori ed entrino in un anello infinito se ricevono una risposta inattesa.
Conclusione
Quando un progetto raggiunge un punto in cui il microcontroller non ha più nessun I/O, gli sviluppatori non devono più scartare il progetto e ricomincire da capo. Ora, per aggiungere altre funzionalità al proprio sistema possono infatti utilizzare chip periferici esterni.

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.