<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OutputPort Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/outputport/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/outputport/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Sat, 14 Jan 2017 21:32:26 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>OutputPort Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/outputport/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Netduino, utilizzare il PCF8574AP</title>
		<link>https://logicaprogrammabile.it/netduino-utilizzare-pcf8574ap-port-expander/</link>
					<comments>https://logicaprogrammabile.it/netduino-utilizzare-pcf8574ap-port-expander/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Thu, 23 Jan 2014 17:51:12 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[InputPort]]></category>
		<category><![CDATA[OutputPort]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=4049</guid>

					<description><![CDATA[<p>Come espandere le porte IO del Netduino tramite PCF8574AP Nel precedente articolo abbiamo visto come utilizzare l&#8217;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...</p>
<p>The post <a href="https://logicaprogrammabile.it/netduino-utilizzare-pcf8574ap-port-expander/">Netduino, utilizzare il PCF8574AP</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come espandere le porte IO del Netduino tramite PCF8574AP</h3>
<p>Nel <a title="PCF8574AP come espandere porte IO" href="https://logicaprogrammabile.it/2014/pcf8574ap-espandere-porte-io/">precedente articolo</a> abbiamo visto come utilizzare l&#8217;integrato <strong>PCF8574AP</strong> per espandere le <strong>porte IO</strong> di Arduino. Lo stesso circuito può essere adattato anche alla scheda Netduino. Dato che ho utilizzato Arduino Leonardo, i pin <strong>SCL</strong> e <strong>SDA</strong>, relativi al bus I2C, sono dedicati, mentre <strong>Netduino</strong> 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.</p>
<p>In definitiva, per far funzionare il circuito, dobbiamo collegare i pin secondo la tabella seguente</p>
<table align="center">
<tbody>
<tr>
<td style="text-align: center;"><strong>PCF8574AP</strong></td>
<td style="text-align: center;"><strong>Netduino</strong></td>
</tr>
<tr>
<td>PIN 14 SCL</td>
<td style="text-align: left;">Analog PIN 5 SCL</td>
</tr>
<tr>
<td>PIN 15 SDA</td>
<td>Analog PIN 4 SDA</td>
</tr>
</tbody>
</table>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2014/01/WP_20140123_11_21_31_Pro.jpg"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-4052" alt="Netduino e PCF8574AP" src="https://logicaprogrammabile.it/wp-content/uploads/2014/01/WP_20140123_11_21_31_Pro.jpg" width="444" height="250" srcset="https://logicaprogrammabile.it/wp-content/uploads/2014/01/WP_20140123_11_21_31_Pro.jpg 444w, https://logicaprogrammabile.it/wp-content/uploads/2014/01/WP_20140123_11_21_31_Pro-300x168.jpg 300w" sizes="(max-width: 444px) 100vw, 444px" /></a></p>
<p><span id="more-4049"></span></p>
<p>Per quanto riguarda il codice sorgente possiamo osservare il listato seguente che permette di accendere e spegnere i led collegati alle porte del <strong>PCF8574AP</strong></p>
<p>[csharp]<br />
//buffer per memoriaazare indirizzi<br />
//e dati<br />
Byte[] tx_write = new Byte[1];<br />
Byte[] tx_read = new Byte[1];</p>
<p>//Configurazione contenente l&#8217;indirizzo del PCF8574AP<br />
//e la frequenza del bus i2c<br />
I2CDevice.Configuration cnf = new I2CDevice.Configuration(0x38, 100);</p>
<p>//Creo un oggetto per eseguire le richieste di lettura e scrittura<br />
I2CDevice expanderPCF8574 = new I2CDevice(cnf);</p>
<p>//creo un oggetto I2CReadTransaction che viene associato al buffer tx_read<br />
//il buffer viene utilizzato per verificare lo stato delle porte del PCF8574AP<br />
I2CDevice.I2CReadTransaction[] rt_data = new<br />
I2CDevice.I2CReadTransaction[] { I2CDevice.CreateReadTransaction(tx_read) };</p>
<p>//creo un oggetto I2CWriteTransaction che viene associato al buffere tx_write<br />
//il buffer tx viene utilizzato per spedire lo stato delle porte del PCF8574AP<br />
I2CDevice.I2CWriteTransaction[] wt_write = new<br />
I2CDevice.I2CWriteTransaction[] { I2CDevice.CreateWriteTransaction(tx_write) };</p>
<p>while (true)<br />
{<br />
  //imposto tutte le porte a livello logico basso<br />
  tx_write[0] = (Byte)(0x00);<br />
  //eseguo il comando<br />
  expanderPCF8574.Execute(wt_write, 10);</p>
<p>  Thread.Sleep(1000);</p>
<p>  //imposto tutte le porte a livello logico alto<br />
  tx_write[0] = (Byte)(0xFF);<br />
  //eseguo il comando<br />
  expanderPCF8574.Execute(wt_write, 10);</p>
<p>  Thread.Sleep(1000);<br />
}<br />
[/csharp]</p>
<h3>Leggere lo stato delle porte</h3>
<p>la lettura dello stato delle porte del PCF8574AP avviene eseguendo il comando relativo all&#8217;oggetto i2creadtransaction:</p>
<p>[csharp]<br />
while (true)<br />
{<br />
  //eseguo il comando<br />
  expanderPCF8574.Execute(rt_data, 10);</p>
<p>  Debug.Print(tx_read[0].ToString());</p>
<p>  Thread.Sleep(1000);<br />
}<br />
[/csharp]</p>
<p>Anche utilizzando <strong>Netduino</strong> i comandi da eseguire per utilizzare il <strong>PCF8574AP</strong> sono molto semplici ed intuitivi.</p>
<p>The post <a href="https://logicaprogrammabile.it/netduino-utilizzare-pcf8574ap-port-expander/">Netduino, utilizzare il PCF8574AP</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/netduino-utilizzare-pcf8574ap-port-expander/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>PCF8574AP come espandere porte IO</title>
		<link>https://logicaprogrammabile.it/pcf8574ap-espandere-porte-io/</link>
					<comments>https://logicaprogrammabile.it/pcf8574ap-espandere-porte-io/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 22 Jan 2014 15:14:35 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[InputPort]]></category>
		<category><![CDATA[OutputPort]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=4020</guid>

					<description><![CDATA[<p>Utilizzare un PCF8574ap per espandere le porte IO di Arduino Capita di trovarci a realizzare applicazioni in cui il numero dei pin digitali richiesti, supera quelli disponibili sulla scheda Arduino UNO. In questi casi potremmo utilizzare una scheda con un numero maggiore di pin IO...</p>
<p>The post <a href="https://logicaprogrammabile.it/pcf8574ap-espandere-porte-io/">PCF8574AP come espandere porte IO</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Utilizzare un PCF8574ap per espandere le porte IO di Arduino</h3>
<p>Capita di trovarci a realizzare applicazioni in cui il numero dei <strong>pin digitali</strong> richiesti, supera quelli disponibili sulla scheda <strong>Arduino UNO</strong>. In questi casi potremmo utilizzare una scheda con un numero maggiore di <strong>pin IO</strong> (ad esempio la Arduino MEGA, la Arduino DUE &#8230;) o scegliere dei <strong>circuiti esterni</strong> che danno la possibilità di espandere le porte IO utilizzando una comunicazione seriale <strong>I2C</strong> o <strong>SPI</strong>.</p>
<p>L&#8217;integrato <strong>PCF8574AP</strong> permette di risolvere questo problema fornendo<strong> 8 porte IO</strong> che possono essere gestite utilizzando il collegamento <strong>seriale I2C</strong>. Lo schema elettrico seguente mostra come collegare il <strong>pcf8574ap</strong> alla scheda <strong>Arduino Leonardo</strong>. L&#8217;unica osservazione riguarda le uscite del <strong>PCF8574</strong>, infatti come potete osservare i led non sono collegati direttamente alle porte dell&#8217;integrato ma bensì sono collegati tramite una resistenza alla linea dei 5Vdc. Questo perché l&#8217;integrato non è in grado di fornire la corrente sufficiente per alimentare il led; è quindi necessaria una resistenza di<strong> pull-up</strong>.</p>
<p><span id="more-4020"></span></p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574ap.png"><img decoding="async" class="aligncenter size-full wp-image-4034" alt="Arduino Leonardo PCF8574AP" src="https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574ap.png" width="724" height="407" srcset="https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574ap.png 724w, https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574ap-300x168.png 300w" sizes="(max-width: 724px) 100vw, 724px" /></a></p>
<p>Quando impostiamo, per esempio, il pin <strong>P0</strong> al livello logico alto, otteniamo l&#8217;accensione del led perché la corrente che fluisce dall&#8217;alimentazione attraversa la resistenza e poi il led. Quando impostiamo il pin <strong>P0</strong> al livello logico basso il led si spegne perché la corrente viene &#8216;assorbita&#8217; dall&#8217;integrato. Nelle figure seguenti potete osservare quanto detto:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574_Led_ON.png"><img decoding="async" class="aligncenter size-full wp-image-4038" alt="PCF8574ap led on" src="https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574_Led_ON.png" width="331" height="374" srcset="https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574_Led_ON.png 331w, https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574_Led_ON-265x300.png 265w" sizes="(max-width: 331px) 100vw, 331px" /></a></p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574_Led_OFF.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-4037" alt="PCF8574 Led off" src="https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574_Led_OFF.png" width="313" height="384" srcset="https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574_Led_OFF.png 313w, https://logicaprogrammabile.it/wp-content/uploads/2014/01/PCF8574_Led_OFF-244x300.png 244w" sizes="auto, (max-width: 313px) 100vw, 313px" /></a></p>
<p>Il codice per testare il circuito è molto semplice e permette di accendere e spegnere i led collegati ai pin delle porte dell&#8217;integrato <strong>PCF8574AP</strong>:</p>
<p>[c]<br />
#include &lt;Wire.h&gt;</p>
<p>void setup()<br />
{<br />
  Wire.begin();<br />
  delay(1000);<br />
}</p>
<p>void loop()<br />
{<br />
  //imposto tutti i pin al livello<br />
  //logico alto<br />
  Wire.beginTransmission(0x38);<br />
  //invio un byte<br />
  Wire.write((byte)0b11111111);<br />
  //fine trasmissione<br />
  Wire.endTransmission();</p>
<p>  delay(1000);</p>
<p>  //imposto tutti i pin al livello<br />
  //logico basso<br />
  Wire.beginTransmission(0x38);<br />
  //invio un byte<br />
  Wire.write((byte)0b00000000);<br />
  //fine trasmissione<br />
  Wire.endTransmission();</p>
<p>  delay(1000);<br />
}<br />
[/c]</p>
<p>Avendo espresso il valore in forma binaria riusciamo facilmente ad accendere o spegnere ogni led cambiando il valore di ogni singolo bit. Ad esempio questo codice accende e spegne solo il led sulla porta <strong>P0</strong>:</p>
<p>[c]<br />
#include &lt;Wire.h&gt;</p>
<p>void setup()<br />
{<br />
  Wire.begin();<br />
  delay(1000);<br />
}</p>
<p>void loop()<br />
{<br />
  //imposto il pin P0 al livello<br />
  //logico alto<br />
  Wire.beginTransmission(0x38);<br />
  //invio un byte<br />
  Wire.write((byte)0b00000001);<br />
  //fine trasmissione<br />
  Wire.endTransmission();</p>
<p>  delay(1000);</p>
<p>  //imposto il pin P0 al livello<br />
  //logico basso<br />
  Wire.beginTransmission(0x38);<br />
  //invio un byte<br />
  Wire.write((byte)0b00000000);<br />
  //fine trasmissione<br />
  Wire.endTransmission();</p>
<p>  delay(1000);<br />
}<br />
[/c]</p>
<h3>Leggere i valori in ingresso</h3>
<p>La lettura degli ingressi avviene semplicemente effettuando una richiesta di un byte al <strong>PCF8574AP</strong>. L&#8217;integrato provvederà automaticamente, tramite la sua architettura interna, a fornire al master lo stato delle porte. Possiamo ad esempio collegare i pin da P0 a P7 a massa o alla +5Vdc e successivamente effettuare una lettura:</p>
<p>[c]<br />
#include &lt;Wire.h&gt;</p>
<p>void setup()<br />
{<br />
  Serial.begin(9600);<br />
  delay(6000);</p>
<p>  Wire.begin();<br />
  delay(1000);<br />
}</p>
<p>void loop()<br />
{<br />
  Wire.requestFrom(0x38,1);<br />
  if(Wire.available())<br />
  {<br />
    Serial.println(Wire.read(), BIN);<br />
  }</p>
<p>  delay(1000);<br />
}<br />
[/c]</p>
<p>il codice precedente printa in binario lo stato di ogni singola porta del <strong>PCF8574AP</strong>, ad esempio proviamo a mettere a massa i pin <strong>P0</strong>, <strong>P1</strong>, <strong>P2</strong> e <strong>P3</strong> e colleghiamo alla +5Vdc i pin <strong>P5</strong>, <strong>P6</strong>, <strong>P7</strong>, <strong>P8</strong>, sul serial monitor osserveremo la stringa <strong>11110000</strong>.</p>
<p>Per semplicità ho utilizzato delle variabili scrivendole in binario ma nulla ci vieta di utilizzare le <a href="https://logicaprogrammabile.it/2012/operatori-spostare-bit/" target="_blank">funzioni di bitwise</a> per creare codice più professionale.</p>
<p>The post <a href="https://logicaprogrammabile.it/pcf8574ap-espandere-porte-io/">PCF8574AP come espandere porte IO</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/pcf8574ap-espandere-porte-io/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Netduino far lampeggiare un led</title>
		<link>https://logicaprogrammabile.it/netduino-lampeggiare-led/</link>
					<comments>https://logicaprogrammabile.it/netduino-lampeggiare-led/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 02 Mar 2011 12:43:49 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[Led]]></category>
		<category><![CDATA[Onboard_led]]></category>
		<category><![CDATA[OutputPort]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=132</guid>

					<description><![CDATA[<p>Netduino usare il led onboard Il primo programma che possiamo creare, per iniziare a sperimentare con Netduino, è il classico esempio che permette di far lampeggiare il led di sistema, posto sulla scheda del dispositivo. Questo programma è ormai un classico che si può trovare...</p>
<p>The post <a href="https://logicaprogrammabile.it/netduino-lampeggiare-led/">Netduino far lampeggiare un led</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Netduino usare il led onboard</h1>
<p>Il primo programma che possiamo creare, per iniziare a sperimentare con <strong>Netduino</strong>, è il classico esempio che permette di far lampeggiare il <strong>led</strong> di sistema, posto sulla scheda del dispositivo.<br />
Questo programma è ormai un classico che si può trovare un po da per tutto in internet, ma nonostante ciò, anche io volevo proporvelo.</p>
<p>Dopo aver avviato <strong>Visual C#</strong> e creato un nuovo progetto, apriamo il file Program.cs e all&#8217;interno del blocco Main() inseriamo le seguenti righe di codice.</p>
<pre class="lang:c# decode:true ">OutputPort ledOnBoard = new OutputPort(Pins.ONBOARD_LED, false);

while(true) //Ciclo infinito
{
//accende il led
ledOnBoard.Write(true);
//attende 500 millisecondi
Thread.Sleep(500);
//Spegne il led
ledOnBoard.Write(false);
//attende 500 millisecondi
Thread.Sleep(500);
}</pre>
<p>&nbsp;</p>
<p>queste istruzioni accendono e spengono il led ad una frequenza di mezzo secondo.<br />
l&#8217;istruzione :</p>
<pre class="lang:c# decode:true ">OutputPort ledOnBoard = new OutputPort(Pins.ONBOARD_LED, false);</pre>
<p>&nbsp;</p>
<p>crea un oggetto che viene usato per controllare il led onboard; il costruttore della classe OutputPort richiede l&#8217;identificativo del pin e il relativo stato iniziale. <strong>Pins.ONBOARD_LED</strong> appunto, è il led fisico posto sul dispositivo e <strong>false</strong> indica lo stato iniziale, ovvero spento.</p>
<p>Il cico <strong>while</strong> è infinito ed esegue ciclicamente queste istruzioni:</p>
<pre class="lang:c# decode:true ">//accende il led
 ledOnBoard.Write(true);
//attende 500 millisecondi
Thread.Sleep(500);
//Spegne il led
ledOnBoard.Write(false);
//attende 500 millisecondi
 Thread.Sleep(500);</pre>
<p>&nbsp;</p>
<p>la funzione <strong>write()</strong> dell&#8217;oggetto non fa altro che accendere o spegnere il led a seconda del valore booleano passato come parametro.<br />
Thread.Sleep() serve per creare un ritardo tra le istruzioni Write() per creare l&#8217;effetto intermittente, il valore passato è espresso in millisecondi.</p>
<p>Non ci resta che avviare il debug per eseguire la compilazione e il caricamento dell&#8217;eseguibile nel Netduino.<br />
Il dispositivo deve essere collegato al pc tramite porta usb e Visual c# deve essere configurato per interaggire con il Netduino piuttosto che con l&#8217;emulatore.</p>
<p>The post <a href="https://logicaprogrammabile.it/netduino-lampeggiare-led/">Netduino far lampeggiare un led</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/netduino-lampeggiare-led/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
