
A volte può ritenersi necessario, quando si è a corto di pin sul proprio microcontrollore, ricorrere a quei circuiti integrati chiamati IO Expander la cui funzione è palese: aumentare il numero di IO a disposizione. Un microcontrollore è dotato di un numero limitato di Input e output (GPIO) porte. Tuttavia, alcune applicazioni potrebbero richiedere più porte che sono disponibili sul microcontrollore. In tal caso, GPIO expander può essere utilizzato per aumentare la capacità I/O del microcontrollore.
Il vantaggio principale di questo componente è la sua capacità di risolvere i problemi di connettività senza aumentare il numero di pin fisici su una scheda madre. Ciò consente di ottimizzare sia lo spazio che le prestazioni nei progetti ad alta richiesta. Se stai cercando di ottimizzare il tuo sistema integrando più pin di ingresso e uscita senza dover modificare tutto l'hardware, MCP23017 è la soluzione ideale. L'MCP23017 è popolare in vari tipi di progetti elettronici e applicazioni industriali.
L'MCP23017 si distingue anche per la sua ampia compatibilità e supporto tecnico. Aziende come AZDelivery offrono guide complete ed esempi di applicazioni, garantendo che sia i principianti che gli utenti avanzati possano sfruttare al massimo le sue funzionalità. Inoltre, la disponibilità dell'MCP23017 in negozi specializzati come DigiKey, Farnell, Mouser e Kubii, nonché la sua documentazione completa sul sito ufficiale Microchip, ne facilita l'acquisizione e l'accesso a informazioni tecniche dettagliate.
Abbiamo visto come è possibile aumentare il numero di uscite (nota: sole uscite) ricorrendo agli shift register. Altri IO Expander, come il PCA9555 ad esempio, hanno invece un registro per impostare la direzione dei pin. Il PCF8574 viene pilotato in I2C ed il suo utilizzo, avendo a disposizione delle semplici librerie per gestire la comunicazione I2C è davvero molto semplice.
Il PCF8574 esiste in versione con o senza la lettera A finale: l’unica differenza tra i due è l’indirizzo I2C. Per cui, supponendo di impostare A0 e A1 a GND e A2 a +Vcc, l’indirizzo a 7 bit del PCF8574 sarà 0100100, al quale seguirà uno zero se vogliamo accedervi in modalità scrittura o un 1 se in modalità lettura.
Leggi anche: le evoluzioni dell'Espansore Dento-Alveolare di Swart
Gli IO sono i pin contrassegnati da P0 a P7. Il funzionamento del PCF8574 è abbastanza particolare dal momento che gli IO sono QUASI-bidirezionali. Cosa significa? Quando gli IO vengono utilizzati come uscite, basta inviare unicamente un 1 o uno zero sul bit relativo per impostare l’uscita a livello alto o basso. Quando invece uno o più IO devono essere utilizzati come ingressi è necessario impostare il relativo IO a livello logico alto; un utilizzatore esterno può poi forzare il pin a livello alto o basso e quindi possiamo leggerlo.
Il PCF8574 difatti non ha un registro di lettura/scrittura/impostazione dei pin. I pin vengono semplicemente impostati inviando un byte sul bus. Se inviamo, ad esempio, 00001111, impostiamo i pin P7-P4 come uscite a livello basso e i pin P3-P0 come uscite a livello alto ma anche come ingressi: sarà l’utilizzatore posto sui pin che se “legge” il pin, vedrà un livello logico alto mentre se “scrive” il pin lo può forzare a livello alto o basso inviandogli un segnale, senza pericolo di cortocircuiti se invia un livello basso.
The device features an 8-bit quasi-bidirectional I/O port (P0-P7), including latched outputs with high-current drive capability for directly driving LEDs. Each quasi-bidirectional I/O can be used as an input or output without the use of a data-direction control signal. At power on, the I/Os are high. In this mode, only a current source to VCC is active. An additional strong pullup to VCC allows fast rising edges into heavily loaded outputs. This device turns on when an output is written high and is switched off by the negative edge of SCL.
Il dispositivo PCF8575 estende il concetto a 16 bit: Il dispositivo è dotato di porte di ingresso/uscita (I/O) quasi bidirezionali a 16 bit (P07-P00, P17-P10), incluse uscite con capacità di azionamento ad alta tensione per il pilotaggio diretto dei LED. Ogni I/O può essere utilizzato come ingresso o uscita senza l’uso di un segnale di controllo della direzione dei dati. All’accensione, gli I/O sono in pull-up.
El MCP23017 è un espansore di porte 16 bit che utilizza un'interfaccia seriale I2C per facilitare la connessione di più dispositivi periferici. Questo interessante tutorial illustra come aggiungere un ulteriore porta I/O a 8-bit per PIC12683 microcontrollore (che ha solo 6 pin I/O) utilizzando MCP23008. Un segmento di sette display a LED e un interruttore al tatto sarà collegato alla porta estesa.
Leggi anche: come cambia la cefalometria con l'espansore palatale
Dal valore ottenuto dalla lettura dovremmo ovviamente scartare tutti i bit relativi gli IO che stiamo utilizzando come uscite. (IODIR): controlla la direzione dei dati I/O. Quando un bit è impostato, il pin corrispondente diventa un ingresso. Interrupt-on-change Control Register (GPINTEN) : controlla la funzione di interruzione per ogni pin. Default Comparison Value (DEFVAL) : Il valore di confronto predefinito è configurato nel registro DEFVAL.
Si può osservare come si sta utilizzando l’operazione di scrittura sequenziale attraverso registri IODIR. Successivamente la scrittura sequenziale è disabilitata e il registro GPPU è configurato separatamente. L’indirizzo di 7 bit, nel esempio qui in questo articolo, è configurato a 0100000.
Puoi trovare la mia libreria qui. Fare clic sul pulsante DOWNLOADS nell’angolo in alto a destra, rinominare la cartella non compressa PCF8575. Verificare che la cartella PCF8575 contenga PCF8575.cpp e PCF8575.h. Collocare la cartella della libreria PCF8575 come / librerie / cartella. Potrebbe essere necessario creare la sottocartella librerie se è la tua prima libreria.
Come diveco proma ho provato a semplificare l’uso di questo integrato con un set minimo di operazioni. Ricorda che non puoi usare comandi come Serial o Wire all’interno della funzione di interrupt. Nel tempo vari contributori mi hanno aiutato a creare nuove features ed esempi. Dal Giappone nopnop ha create un esempio per il Wemos che permette il blink sequenziale di 8 LED. Qui ho creato una variante dell’esempio sopra per mostrare l’utilizzo di un canale secondario i2c presente sugli esp32.
La prima funzione accetta come primo parametro l’indirizzo a 7 bit del PCF8574 e come secondo il valore da assegnare agli IO. La seconda funzione esegue la lettura degli IO e la restituisce in formato unsigned char. Nel caso in cui la scrittura potrebbe influenzare lo stato di altre uscite che non vogliamo toccare, è bene utilizzare una variabile che contenga lo stato degli IO ed una maschera. value &= 0b00000011; // azzero i bit P7-P2 per sicurezza.
Leggi anche: Benefici dell'espansione palatale in età pediatrica
Attenzione: queste routine fanno uso delle vecchie routine I2C presentate qui, e che oggi, su MPLAB X IDE e compilatore XC, non vanno più bene (a patto di piccole modifiche). PIC12F683 non ha modulo I2C e, quindi, la comunicazione I2C con MCP23008 è realizzata tramite software utilizzando pin I/O (GP0 per SCL e GP1 per SDA). Nel nostro esperimento, GP0 - GP6 pin di MCP23008, sono utilizzate come uscite e GP7 come input.
Un ingresso Interruttore tattile è collegato a GP7, mentre GP0 attraverso GP6 sono definiti come uscite e guidano i segmenti di un LED a 7 segmenti. L'interruttore di tatto non richiede una resistenza esterna di pull-up. L'uscita di interrupt del MCP23008 viene letto da GP2 pin del PIC12F683.
PIC è una famiglia di circuiti integrati a semiconduttore con funzioni di microcontrollore. Microchip Technology non usa il termine PIC come un acronimo; il suo nome aziendale è: "PICmicro". Anche se generalmente sta per "Programmable Interface Controller", il suo primo produttore la "General Instrument" usava l'acronimo per "Programmable Intelligent Computer".
| Parametro | PCF8574 | PCF8575 | MCP23008 / MCP23017 |
|---|---|---|---|
| Interfaccia | I2C | I2C | I2C |
| IO | 8 quasi-bidirezionali | 16 quasi-bidirezionali | 8 o 16 con registri direzione |
| Registro direzione | No (quasi-bidirezionale) | No (quasi-bidirezionale) | Sì (IODIR, GPINTEN, DEFVAL ...) |
| Uso tipico | Semplice espansione IO, LED | Maggiore numero di IO, LED | Progetti avanzati con interrupt e direzione |
Questo sito web utilizza i cookie per migliorare la tua esperienza di navigazione. Utilizzando il nostro sito web acconsenti a tutti i cookie in conformità con la nostra policy per i cookie.
tags: #espansore #pin #package #lga16 #caratteristiche #tecniche
