Come espandere le porte IO del Netduino tramite PCF8574AP
Nel precedente articolo abbiamo visto come utilizzare l’integrato PCF8574AP per espandere le porte IO di Arduino. Lo stesso circuito può essere adattato anche alla scheda Netduino. Dato che ho utilizzato Arduino Leonardo, i pin SCL e SDA, relativi al bus I2C, sono dedicati, mentre Netduino rispecchia la pin function della Arduino UNO e quindi i pin SDA e SCL sono disponibili rispettivamente sui pin analogico 4 e pin analogico 5.
In definitiva, per far funzionare il circuito, dobbiamo collegare i pin secondo la tabella seguente
PCF8574AP | Netduino |
PIN 14 SCL | Analog PIN 5 SCL |
PIN 15 SDA | Analog PIN 4 SDA |
Per quanto riguarda il codice sorgente possiamo osservare il listato seguente che permette di accendere e spegnere i led collegati alle porte del PCF8574AP
[csharp]
//buffer per memoriaazare indirizzi
//e dati
Byte[] tx_write = new Byte[1];
Byte[] tx_read = new Byte[1];
//Configurazione contenente l’indirizzo del PCF8574AP
//e la frequenza del bus i2c
I2CDevice.Configuration cnf = new I2CDevice.Configuration(0x38, 100);
//Creo un oggetto per eseguire le richieste di lettura e scrittura
I2CDevice expanderPCF8574 = new I2CDevice(cnf);
//creo un oggetto I2CReadTransaction che viene associato al buffer tx_read
//il buffer viene utilizzato per verificare lo stato delle porte del PCF8574AP
I2CDevice.I2CReadTransaction[] rt_data = new
I2CDevice.I2CReadTransaction[] { I2CDevice.CreateReadTransaction(tx_read) };
//creo un oggetto I2CWriteTransaction che viene associato al buffere tx_write
//il buffer tx viene utilizzato per spedire lo stato delle porte del PCF8574AP
I2CDevice.I2CWriteTransaction[] wt_write = new
I2CDevice.I2CWriteTransaction[] { I2CDevice.CreateWriteTransaction(tx_write) };
while (true)
{
//imposto tutte le porte a livello logico basso
tx_write[0] = (Byte)(0x00);
//eseguo il comando
expanderPCF8574.Execute(wt_write, 10);
Thread.Sleep(1000);
//imposto tutte le porte a livello logico alto
tx_write[0] = (Byte)(0xFF);
//eseguo il comando
expanderPCF8574.Execute(wt_write, 10);
Thread.Sleep(1000);
}
[/csharp]
Leggere lo stato delle porte
la lettura dello stato delle porte del PCF8574AP avviene eseguendo il comando relativo all’oggetto i2creadtransaction:
[csharp]
while (true)
{
//eseguo il comando
expanderPCF8574.Execute(rt_data, 10);
Debug.Print(tx_read[0].ToString());
Thread.Sleep(1000);
}
[/csharp]
Anche utilizzando Netduino i comandi da eseguire per utilizzare il PCF8574AP sono molto semplici ed intuitivi.
Related posts
4 Comments
Lascia un commento Annulla risposta
Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.
Articoli popolari
Sorry. No data so far.
.Net micro framework Arduino Arduino Webserver Domotica Flyport I2C IOT Netduino OpenPicus raspberry RTC Speed Test
Ciao Marco,
è possibile usare questo chip per comandare un lcd grafico?
complimenti, come sempre, per gli articoli!
Ciao Francesco
per i display lcd ‘classici’ esiste una libreria la puoi trovare a questo indirizzo (http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/). Per quelli grafici (GLCD) non conosco librerie e non so se sia possibile utilizzare il pcf8574
Grazie dei complimenti!
Marco
Ciao Marco
vorrei contattarti in privato ma l’ indirizzo e-mail che hai messo sul tuo sito non risulta essere giusto.
Mi potresti dire come fare per contattarti?
Ciao Carlo,
l’indirizzo è corretto, naturalmente devi formarlo aggiungendo la @ e il .
a presto
Marco