<?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>comunicazione tra circuiti Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/comunicazione-tra-circuiti/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/comunicazione-tra-circuiti/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Mon, 13 Feb 2017 19:16:08 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>comunicazione tra circuiti Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/comunicazione-tra-circuiti/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Arduino datalogger con pc</title>
		<link>https://logicaprogrammabile.it/arduino-datalogger-con-pc/</link>
					<comments>https://logicaprogrammabile.it/arduino-datalogger-con-pc/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Sun, 06 Oct 2013 14:35:23 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Comunicazione seriale]]></category>
		<category><![CDATA[comunicazione tra circuiti]]></category>
		<category><![CDATA[DataLogger]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3831</guid>

					<description><![CDATA[<p>Come realizzare un datalogger utilizzando Arduino e un pc Il datalogger è uno di circuiti che fanno parte del bagaglio tecnico di chi come noi smanetta con l&#8217;elettronica e l&#8217;informatica. Il suo funzionamento è in effetti semplice ma allo stesso tempo utile per realizzare tutte...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-datalogger-con-pc/">Arduino datalogger con pc</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come realizzare un datalogger utilizzando Arduino e un pc</h3>
<p>Il <strong>datalogger</strong> è uno di circuiti che fanno parte del bagaglio tecnico di chi come noi smanetta con l&#8217;elettronica e l&#8217;informatica. Il suo <strong>funzionamento</strong> è in effetti <strong>semplice</strong> ma allo stesso tempo <strong>utile</strong> per realizzare tutte quelle <strong>applicazioni</strong> in cui è necessario acquisire e <strong>registrare dati</strong> (digitali o analogici), pensiamo a tutti i sistemi di <strong>monitoring</strong> (energia, gas, acqua &#8230;) alle stazioni meteo o a sistemi di controllo. Esistono circuiti dedicati che eseguono funzioni di <strong>datalogging</strong> locale e remote, persino cloud, dai costi variabili da poche decine di euro a centinaia di euro a seconda della robustezza e della precisione dei circuiti.<br />
Per impadronirci anche di questo aspetto possiamo <strong>realizzare</strong> il nostro <strong>datalogger</strong> usando il nostro caro <strong>Arduino</strong>. Il logging può avvenire sia sui pin analogici che su quelli digitali a seconda dei segnali e dei sensori collegati alla scheda.</p>
<p>In questo <strong>tutorial</strong> utilizzerò i sei<strong> pin analogici</strong> della scheda per <strong>acquisire</strong> dei segnali analogici ed inviarli al <strong>pc</strong>, tramite la porta seriale, dove avverrà la memorizzazione dei dati. Ho deciso di non memorizzare i dati sulla scheda per far capire come inviare i dati e come sincronizzazione la comunicazione tra i due dispositivi.Come scheda ho impiegato la <strong>Arduino Ethernet</strong> e lato pc ho utilizzato <strong>Microsoft Visual C# 2012 (su Windows 8)</strong> per scrivere il programma di logging.</p>
<p><span id="more-3831"></span></p>
<p>Per mancanza di tempo non ho collegato alla scheda dei sensori o delle fonti analogiche ma ho lasciato i pin analogici &#8216;appesi&#8217;, questo perchè i dispositivi da collegare sono infiniti e quindi lascio a voi il compito di collegarne a piacimento.</p>
<p>Passiamo quindi direttamente al codice caricato sulla Arduino Ethernet:</p>
<p>[c]<br />
//questo arrai contiene i valori provenienti<br />
//dall&#8217;acquisizione analogica<br />
byte ana[12];<br />
//avalore intero per memorizzare il dato analogico<br />
int valAn = 0;<br />
//variabile per selezionare il canale analogico<br />
byte in_ana = 0;</p>
<p>void setup()<br />
{<br />
  //init seriale<br />
  Serial.begin(9600);<br />
}</p>
<p>void loop()<br />
{<br />
  //verifico la presenza di un dato sulla<br />
  //porta seriale<br />
  if(Serial.available() &gt; 0)<br />
  {<br />
    //se arriva un byte dal pc leggilo<br />
    byte data = Serial.read();<br />
    //controllo se il dato in arrivo dal pc corrisponde<br />
    //al carattere di avvio acquisizione<br />
    if(data == &#8216;#&#8217;)<br />
    {<br />
      //inizializzo la variabile per la selezione del<br />
      //primo canale analogico<br />
      in_ana = 0;<br />
      //eseguo un ciclo for per acquisire ciclicamente tutti i<br />
      //canali analogici da A0 a A5<br />
      for(int Ciclo = 0; Ciclo &lt;12; Ciclo += 2)<br />
      {<br />
        //leggo il canale analogico<br />
        valAn = analogRead(in_ana);<br />
        //il valore intero viene diviso in due byte e caricato<br />
        //nell&#8217;array dichiarato precedentemente<br />
        ana[Ciclo] = highByte(valAn);<br />
        ana[Ciclo + 1] = lowByte(valAn);<br />
        //piccolo delay tra una acquisizione e l&#8217;altra<br />
        delay(1);<br />
        //incremento il canale di acquisizione<br />
        in_ana++;<br />
      }<br />
      //dopo 6 cicli spedisco tutti e 12 i byte al pc<br />
      Serial.write(ana,12);<br />
    }<br />
  }<br />
}<br />
[/c]</p>
<p>Le parti più importanti di questo codice sono il secondo blocco <strong>if</strong> che ha il compito di verificare quando il byte ricevuto è uguale al carattere <strong>#</strong>, in questo modo l&#8217;invio dei dati è subordinato alle richieste del pc. Questo permette di avere una trasmissione concordata che evita l&#8217;utilizzo di sincronismi per poter leggere coerentemente i dati acquisiti.<br />
L&#8217;altro blocco è quello <strong>for</strong>, che ha il compito di acquisire il dato analogico e di caricarlo sull&#8217;array che verrà inviato al pc. Per farlo vengono utilizzate le istruzioni <strong>highByte()</strong> e <strong>lowByte()</strong> che hanno il compito di suddividere la variabile <strong>int valAn</strong>(composta da due byte) in due byte contenenti gli 8 bit più significativi e gli 8 bit meno significativi, questo infatti giustifica l&#8217;array da 12 byte.</p>
<p>La figura seguente mostra quanto detto:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/10/da_int_a_byte.png"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-3839" alt="Conertire int a byte" src="https://logicaprogrammabile.it/wp-content/uploads/2013/10/da_int_a_byte.png" width="609" height="343" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/10/da_int_a_byte.png 609w, https://logicaprogrammabile.it/wp-content/uploads/2013/10/da_int_a_byte-300x168.png 300w" sizes="(max-width: 609px) 100vw, 609px" /></a></p>
<p>volendo si potrebbe spedire direttamente il valore intero ma credo che questo approccio semplifica meglio la stesura e la comprensione dei programmi lato Arduino e lato pc.</p>
<h3>Il datalogger sul pc</h3>
<p>La finestra del programma che acquisisce e registra i dati è mostrata di seguito:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/10/Cattura.png"><img decoding="async" class="aligncenter size-full wp-image-3842" alt="Arduino datalogger" src="https://logicaprogrammabile.it/wp-content/uploads/2013/10/Cattura.png" width="480" height="325" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/10/Cattura.png 480w, https://logicaprogrammabile.it/wp-content/uploads/2013/10/Cattura-300x203.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></a></p>
<p>La parte principale del <strong>software di acquisizione</strong> dei dati da Arduino è la seguente:</p>
<p>[csharp]</p>
<p>//avvia l&#8217;acquisizione dei dati<br />
//inviando ad arduino il carattere #<br />
rs232.Write(&quot;#&quot;);</p>
<p>//entro nel ciclo<br />
while (Continua)<br />
{<br />
  //attendo che arduino invii i 12 byte<br />
  //contenenti i dati dalla conversione<br />
  //analogico digitale<br />
  if (rs232.BytesToRead == 12)<br />
  {<br />
    //leggo tutti i 12 byte e le assegno<br />
    //ad un array di byte<br />
    rs232.Read(dataRX, 0, 12);</p>
<p>    //prendo il primo ed il secondo byte e li unico per<br />
    //formare yn valore intero a 16 bit<br />
    myShort = (short)(dataRX[0] &lt;&lt; 8 | dataRX[1]);<br />
    txtValAn01.Text = myShort.ToString();</p>
<p>    myShort = (short)(dataRX[2] &lt;&lt; 8 | dataRX[3]);<br />
    txtValAn02.Text = myShort.ToString();</p>
<p>    myShort = (short)(dataRX[4] &lt;&lt; 8 | dataRX[5]);<br />
    txtValAn03.Text = myShort.ToString();</p>
<p>    myShort = (short)(dataRX[6] &lt;&lt; 8 | dataRX[7]);<br />
    txtValAn04.Text = myShort.ToString();</p>
<p>    myShort = (short)(dataRX[8] &lt;&lt; 8 | dataRX[9]);<br />
    txtValAn05.Text = myShort.ToString();</p>
<p>    myShort = (short)(dataRX[10] &lt;&lt; 8 | dataRX[11]);<br />
    txtValAn06.Text = myShort.ToString();</p>
<p>    //dopo aver acquisito i dati esco dal ciclo<br />
    break;<br />
  }<br />
}<br />
[/csharp]</p>
<p>Il programma acquisisce i dati provenienti dalla scheda e li visualizza nelle apposite caselle di testo, in contemporanea viene creato un file di testo, nella stessa cartella dove viene posto il fil eseguibile, dove verranno memorizzati i dati.</p>
<p>Per eseguire l&#8217;applicazione è necessario <strong>installare</strong> nel proprio pc il <strong>Microsoft .Net Framework 4.5</strong></p>
<p>In allegato trovate sia il file eseguibile sia il codice dell&#8217;applicazione.</p>
<p><strong>Download File eseguibile: <a href="https://logicaprogrammabile.it/wp-content/uploads/2013/10/ArduinoDataLogger.zip">ArduinoDataLogger (~7KB)</a></strong></p>
<p><strong>Download File sorgente: <a href="https://logicaprogrammabile.it/wp-content/uploads/2013/10/ArduinoDataLogger_Source.zip">ArduinoDataLogger_Source (~82KB)</a></strong></p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-datalogger-con-pc/">Arduino datalogger con pc</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-datalogger-con-pc/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Comunicazione tra Arduino tramite I2C</title>
		<link>https://logicaprogrammabile.it/comunicazione-tra-arduino-tramite-i2c/</link>
					<comments>https://logicaprogrammabile.it/comunicazione-tra-arduino-tramite-i2c/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 10 Oct 2012 12:49:36 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Bus I2C]]></category>
		<category><![CDATA[comunicazione tra circuiti]]></category>
		<category><![CDATA[I2C]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3081</guid>

					<description><![CDATA[<p>Come collegare due Arduino usando il bus I2C. Una caratteristica che reputo molto interessante è la possibilità di espandere Arduino tramite l&#8217;uso di shield. La maggior parte di queste schede aggiuntive sono però progettate per compiere una funzione specifica, non programmabile. Esistono alcuni metodi che...</p>
<p>The post <a href="https://logicaprogrammabile.it/comunicazione-tra-arduino-tramite-i2c/">Comunicazione tra Arduino tramite I2C</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come collegare due Arduino usando il bus I2C.</h3>
<p>Una caratteristica che reputo molto interessante è la possibilità di espandere Arduino tramite l&#8217;uso di shield. La maggior parte di queste schede aggiuntive sono però progettate per compiere una funzione specifica, non programmabile.<br />
Esistono alcuni metodi che permettono di comunicare con altri dispositivi utilizzando come canale di trasmissione dati i protocolli seriali (I2C, SPI o RS232). Questo rende possibile demandare ad una scheda slave funzioni di elaborazione gravose, che non vogliamo far eseguire alla scheda master. Ho realizzato questo piccolo tutorial usando il bus I2C per creare uno scambio dati tra un Arduino ed un chip ATmega328 standalone.</p>
<p><img decoding="async" class="aligncenter size-full wp-image-3088" title="Bus_i2c" src="https://logicaprogrammabile.it/wp-content/uploads/2012/10/Bus_i2c.png" alt="Bus i2c" width="630" height="255" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/10/Bus_i2c.png 630w, https://logicaprogrammabile.it/wp-content/uploads/2012/10/Bus_i2c-300x121.png 300w" sizes="(max-width: 630px) 100vw, 630px" /></p>
<p>Il bus I2C, basandosi su due fili, non permette la comunicazione contemporanea tra Master e Slave. Lo scambio dati deve essere gestito dal Master tramite gli indirizzi (univoci) degli slave. Il flusso può essere sintetizzato in questo modo</p>
<ol>
<li>Il Master invia sul bus un bit di start</li>
<li>Il Master invia sul bus l&#8217;indirizzo dello slave con cui vuole comunicare</li>
<li>Il Master decide se scrivere o leggere dal dispositivo</li>
<li>Lo Slave legge o scrive in base alla richiesta del Master</li>
</ol>
<p><span id="more-3081"></span></p>
<p>La <a href="http://arduino.cc/en/Reference/Wire" target="_blank">libreria Wire</a> dispone di tutte le funzioni necessarie alla realizzazione Master-Slave tra due schede Arduino. Lo schema del circuito che ho realizzato è visibile nella figura seguente.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3094" title="I2C_Master_Slave" src="https://logicaprogrammabile.it/wp-content/uploads/2012/10/I2C_Master_Slave.png" alt="Collegamento Master Slave tra due Arduino UNO" width="423" height="391" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/10/I2C_Master_Slave.png 423w, https://logicaprogrammabile.it/wp-content/uploads/2012/10/I2C_Master_Slave-300x277.png 300w" sizes="auto, (max-width: 423px) 100vw, 423px" /></p>
<p>Come detto precedentemente lo schema si basa su Arduino Uno impiegato come Master e con un ATmega328 impiegato come slave.</p>
<p>Il codice permette di inviare un dato numerico allo slave, che provvederà ad incrementarlo per poi rispedirlo al Master.</p>
<p>[c]<br />
//MASTER<br />
#include &lt;Wire.h&gt;</p>
<p>byte x = 0;<br />
byte num = 0;</p>
<p>void setup()<br />
{<br />
  //inizializzo la libreria Wire come Master<br />
  Wire.begin();</p>
<p>  //init seiale<br />
  Serial.begin(9600);<br />
  //avviso che il programma è avviato<br />
  Serial.println(&quot;START&quot;);</p>
<p>}</p>
<p>void loop()<br />
{<br />
  //invio sul bus I2C un byte al device<br />
  //che ha come indirizzo il valore 0x04<br />
  //start trasmissione<br />
  Wire.beginTransmission(0x04);<br />
  //invio un byte<br />
  Wire.write(x);<br />
  //fine trasmissione<br />
  Wire.endTransmission();</p>
<p>  delayMicroseconds(500);</p>
<p>  //richiedo un byte allo slave che ha indirizzo 0x04<br />
  Wire.requestFrom(0x04, 1);</p>
<p>  //attendo la disponibilità di dati sul bus i2c<br />
  while(Wire.available())<br />
  {<br />
    //quando è presente un dato avvia<br />
    //la lettura<br />
    num = Wire.read();<br />
  }</p>
<p>  //incrementa il valore del byte<br />
  x++;</p>
<p>  //verifico che il byte letto dallo slave sia stato<br />
  //incrementato<br />
  if(num != x)<br />
    Serial.println(&quot;ERRORE&quot;);</p>
<p>  delay(5);</p>
<p>}</p>
<p>[/c]</p>
<p>Il codice seguente è relativo allo Slave</p>
<p>[c]<br />
//SLAVE<br />
#include &lt;Wire.h&gt;</p>
<p>byte x = 0;</p>
<p>void setup()<br />
{<br />
  //inizializzo la libreria<br />
  //imposto l&#8217;indirizzo dello slave<br />
  Wire.begin(0x04);</p>
<p>  //eventi per la ricezione del dato<br />
  //e per la richiesta del dato<br />
  Wire.onReceive(receiveEvent);<br />
  Wire.onRequest(requestEvent);<br />
}</p>
<p>void loop()<br />
{<br />
  //esegui qualcosa<br />
  delay(1000);<br />
}</p>
<p>void receiveEvent(int data)<br />
{<br />
 //questo evento viene generato quando sul bus<br />
 //è presente un dato da leggere</p>
<p> //eseguo la lettura<br />
  x = Wire.read();</p>
<p>  //elaboro il dato letto<br />
  x++;<br />
}</p>
<p>void requestEvent()<br />
{<br />
  //questo evento viene generato quando il master<br />
  //richiede ad uno specifico slave<br />
  //una richiesta di dati</p>
<p>  //spedisco il dato al Master<br />
  Wire.write(x);</p>
<p>}</p>
<p>[/c]</p>
<p>I commenti presenti nel codice permettono di capire ciò che avviene tra i due dispositivi.</p>
<p>Di seguito uno screenshot dei dati scambiati sul bus</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3107" title="TEK00004" src="https://logicaprogrammabile.it/wp-content/uploads/2012/10/TEK00004.png" alt="Scambio dati master slave su bus i2c" width="640" height="480" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/10/TEK00004.png 640w, https://logicaprogrammabile.it/wp-content/uploads/2012/10/TEK00004-300x225.png 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></p>
<p>Di seguito invece la trasmissione del Master</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3108" title="TEK00005" src="https://logicaprogrammabile.it/wp-content/uploads/2012/10/TEK00005.png" alt="Trasmissione i2c Master" width="640" height="480" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/10/TEK00005.png 640w, https://logicaprogrammabile.it/wp-content/uploads/2012/10/TEK00005-300x225.png 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></p>
<p>The post <a href="https://logicaprogrammabile.it/comunicazione-tra-arduino-tramite-i2c/">Comunicazione tra Arduino tramite I2C</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/comunicazione-tra-arduino-tramite-i2c/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title>RS422 comunicazione seriale utilizzando Arduino</title>
		<link>https://logicaprogrammabile.it/rs422-arduino-comunicazione-seriale-ttl/</link>
					<comments>https://logicaprogrammabile.it/rs422-arduino-comunicazione-seriale-ttl/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Thu, 22 Dec 2011 07:56:14 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Comunicazione seriale]]></category>
		<category><![CDATA[comunicazione tra circuiti]]></category>
		<category><![CDATA[RS422]]></category>
		<category><![CDATA[TTL]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2343</guid>

					<description><![CDATA[<p>Come utilizzare dei convertitori TTL/RS422 La comunicazione seriale RS422 è uno standard che prevede l&#8217;utilizzo di due fili per trasmettere i dati. Questo standard permette di realizzare una comunicazione con dispositivi che si trovano a distanze considerevoli (1000-1500 mt) grazie all&#8217;alta immunità ai disturbi e...</p>
<p>The post <a href="https://logicaprogrammabile.it/rs422-arduino-comunicazione-seriale-ttl/">RS422 comunicazione seriale utilizzando Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come utilizzare dei convertitori TTL/RS422</h1>
<p>La <a href="http://it.wikipedia.org/wiki/EIA_RS-422" target="_blank">comunicazione seriale</a> <strong>RS422</strong> è uno standard che prevede l&#8217;utilizzo di due fili per trasmettere i dati. Questo standard permette di realizzare una comunicazione con dispositivi che si trovano a distanze considerevoli (1000-1500 mt) grazie all&#8217;alta immunità ai disturbi e alla sensibilità dei circuiti di ricezione. Le velocità di trasmissione possono raggiungere su brevi distanza (circa 1mt) i <strong>10Mb/s</strong> mentre si scende a circa <strong>100Kb/s</strong> per distanze intorno ai 1000 mt. La <strong>RS422</strong> è tipicamente impiegata in ambito industriale.</p>
<p>Nella figura seguente viene illustrato lo schema a blocchi composto da due driver che codificano e decodificano il segnale in ingresso.<br />
Questo segnale viene messo in uscita, dal primo driver, con opposizione di fase,  e tramite una coppia di fili viene inviato al driver ricevente che ha il compito di ricostruirlo come in ingresso.<br />
<span id="more-2343"></span>Nel grafico dei segnali possiamo osservare che :</p>
<ul>
<li>Quando il segnale in <strong>A</strong> è <strong>ALTO</strong> rispetto al segnale presente in <strong>B</strong>, otteniamo in uscita un livello <strong>ALTO</strong> (Uno digitale)</li>
<li>Quando il segnale in <strong>A</strong> è <strong>BASSO</strong> rispetto al segnale presente in <strong>B</strong>, otteniamo in uscita un livello <strong>BASSO</strong> (Zero digitale)</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2347" title="RS422" src="https://logicaprogrammabile.it/wp-content/uploads/2011/12/RS422.gif" alt="Diagramma Segnali Rs422 e TTL" width="533" height="586" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/12/RS422.gif 533w, https://logicaprogrammabile.it/wp-content/uploads/2011/12/RS422-272x300.gif 272w" sizes="auto, (max-width: 533px) 100vw, 533px" /></p>
<p><strong>Arduino</strong> dispone di una porta seriale (pin0 e pin1) capace di pilotare un driver TTL/RS422 utile per provare a lavorare con questo tipo di comunicazione. Questi convertitori sono di facile reperibilità, con costi contenuti e di semplice impiego. Quelli che ho usato sono l&#8217;integrato <strong>sn75174</strong> (QUADRUPLE DIFFERENTIAL LINE DRIVER) e l&#8217;integrato <strong>sn75175</strong> (QUADRUPLE DIFFERENTIAL LINE RECEIVERS).</p>
<p>Di seguito trovate  lo schema del circuito che converte il segnale TTL in RS422 e viceversa:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2352" title="TTL to 422" src="https://logicaprogrammabile.it/wp-content/uploads/2011/12/TtlTo422.gif" alt="Convertitore ttl rs422 e da rs422 a ttl" width="480" height="254" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/12/TtlTo422.gif 480w, https://logicaprogrammabile.it/wp-content/uploads/2011/12/TtlTo422-300x158.gif 300w" sizes="auto, (max-width: 480px) 100vw, 480px" /></p>
<p>L&#8217;integrato <strong>75174</strong> convertirà il segnale TTL in RS422, mentre l&#8217;integrato <strong>75175</strong> convertirà il segnale rs422, proveniente dalla linea, in segnale TTL. Di fatto per noi, con Arduino, diventa trasparente trasmettere in RS232 piuttosto che RS422 poiché via codice utilizzeremo sempre la classe <strong>Serial</strong> e le relative istruzioni per la trasmissione e per la ricezione.</p>
<p>Per testare il circuito possiamo immaginare di posizionare Arduino ad una certa distanza dal PC, poi tramite un convertitore TTL-422-TTL abbinato ad un convertitore TTL-232 possiamo instaurare una comunicazione seriale utilizzando le istruzioni che mette a disposizione il linguaggio di sviluppo. Lo schema a blocchi è il seguente</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2366" title="TTL-422-232" src="https://logicaprogrammabile.it/wp-content/uploads/2011/12/TTL-422-232.gif" alt="Conversione TTL RS422 RS232 con Arduino" width="592" height="94" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/12/TTL-422-232.gif 592w, https://logicaprogrammabile.it/wp-content/uploads/2011/12/TTL-422-232-300x47.gif 300w" sizes="auto, (max-width: 592px) 100vw, 592px" /></p>
<p>mentre questo è lo schema elettrico</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2367" title="TTL_422_TTL_232" src="https://logicaprogrammabile.it/wp-content/uploads/2011/12/TTL_422_TTL_232.gif" alt="Convertet uart to rs422 to rs232" width="651" height="362" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/12/TTL_422_TTL_232.gif 651w, https://logicaprogrammabile.it/wp-content/uploads/2011/12/TTL_422_TTL_232-300x166.gif 300w" sizes="auto, (max-width: 651px) 100vw, 651px" /></p>
<p>Il codice di esempio invia un carattere al PC.</p>
<pre class="lang:arduino decode:true ">void setup()
{
  Serial.begin(9600);
}

void loop()
{

  Serial.print("A");

  delay(500);

}</pre>
<p>Viste le potenzialità della rs422 questo sistema può essere una scelta valida per i progetti dove la distanza tra Arduino e pc inizia a diventare considerevole.</p>
<p>The post <a href="https://logicaprogrammabile.it/rs422-arduino-comunicazione-seriale-ttl/">RS422 comunicazione seriale utilizzando Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/rs422-arduino-comunicazione-seriale-ttl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
