<?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>display Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/display/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/display/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Sat, 14 Jan 2017 22:28:15 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>display Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/display/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Arduino gestire display a matrice 20&#215;4</title>
		<link>https://logicaprogrammabile.it/gestire-display-lcd-20x4-matrice/</link>
					<comments>https://logicaprogrammabile.it/gestire-display-lcd-20x4-matrice/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Thu, 29 Nov 2012 15:02:35 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[lcd]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3186</guid>

					<description><![CDATA[<p>Come impiegare la libreria LiquidCrystal per scrivere su un display a matrice 20&#215;4 Utilizzare un display risulta utile per una miriade di applicazioni dove è necessario una maggiore interazione con l&#8217;utente. Effettuare i collegamenti tra display e Arduino ed utilizzare la libreria LiquidCrystal per gestire...</p>
<p>The post <a href="https://logicaprogrammabile.it/gestire-display-lcd-20x4-matrice/">Arduino gestire display a matrice 20&#215;4</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come impiegare la libreria LiquidCrystal per scrivere su un display a matrice 20&#215;4</h3>
<p>Utilizzare un display risulta utile per una miriade di applicazioni dove è necessario una maggiore interazione con l&#8217;utente. Effettuare i collegamenti tra display e Arduino ed utilizzare la libreria <strong>LiquidCrystal</strong> per gestire il display è una operazione tutto sommato semplice ma nonostante molti utenti alle prime armi trovano alcune difficoltà.</p>
<p>I display a matrice di punti, utilizzano un protocollo comune basato sul chip <a href="http://it.wikipedia.org/wiki/HD44780" target="_blank">HD44780 prodotto dalla Hitachi</a>. Sono formati da diverse colonne e righe ed i valori tipici vengono espresso nella forma <strong>Colonne</strong>x<strong>Righe</strong>, nel nostro caso il display è un <strong>20&#215;4</strong>, quindi composto da 20 colonne per ognuna delle 4 righe (altri tipi possono essere 16&#215;1, 16&#215;2, 128&#215;64, ecc&#8230;).</p>
<p><img decoding="async" class="aligncenter size-medium wp-image-3191" title="Display20x4" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/Display20x4-300x81.png" alt="Display a matrice 20 colonne x 4 righe 20x4" width="300" height="81" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/Display20x4-300x81.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/Display20x4.png 711w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p><span id="more-3186"></span></p>
<p>L&#8217;interfaccia per poter inviare i comandi ed i dati è di tipo parallelo, composta da 16 pin. Nella tabella seguente viene illustrata la pin function:</p>
<table>
<tbody>
<tr>
<td style="text-align: center;"><strong>Numero Pin</strong></td>
<td style="text-align: center;"><strong>Descrizione</strong></td>
</tr>
<tr>
<td style="text-align: center;">1</td>
<td><strong>GND</strong> collegamento a massa dell&#8217;alimentazione del display</td>
</tr>
<tr>
<td style="text-align: center;">2</td>
<td><strong>VCC</strong> Alimentazione del display tipicamente 5Vdc</td>
</tr>
<tr>
<td style="text-align: center;">3</td>
<td><strong>Vo</strong> Gestisce la luminosita dei pixel del display</td>
</tr>
<tr>
<td style="text-align: center;">4</td>
<td><strong>RS</strong> Specifica se vogliamo caricare un dato(Livello Alto) o un comando (Livello basso)</td>
</tr>
<tr>
<td style="text-align: center;">5</td>
<td><strong>R/W</strong> Specifica se vogliamo scrivere o leggere dal display</td>
</tr>
<tr>
<td style="text-align: center;">6</td>
<td><strong>E</strong> Necessario per far leggere al display il comando o il dato presente sulle linee DB</td>
</tr>
<tr>
<td style="text-align: center;">7</td>
<td>Data bit 0</td>
</tr>
<tr>
<td style="text-align: center;">8</td>
<td>Data bit 1</td>
</tr>
<tr>
<td style="text-align: center;">9</td>
<td>Data bit 2</td>
</tr>
<tr>
<td style="text-align: center;">10</td>
<td>Data bit 3</td>
</tr>
<tr>
<td style="text-align: center;">11</td>
<td>Data bit 4</td>
</tr>
<tr>
<td style="text-align: center;">12</td>
<td>Data bit 5</td>
</tr>
<tr>
<td style="text-align: center;">13</td>
<td>Data bit 6</td>
</tr>
<tr>
<td style="text-align: center;">14</td>
<td>Data bit 7</td>
</tr>
<tr>
<td style="text-align: center;">15</td>
<td><strong>Vcc</strong> Alimentazione per la retroilluminazione del display</td>
</tr>
<tr>
<td style="text-align: center;">16</td>
<td><strong>Gnd</strong> Massa per la retroilluminazione del display</td>
</tr>
</tbody>
</table>
<p>I pin <strong>Data</strong> servono per inviare un byte al chip del display. Il valore inviato può essere interpretato sia come un comando (ad esempio per spostare il cursore, per posizionarsi su una riga specifica, per pulire il display) sia un valore ASCII da scrivere sulla matrice. La scelta tra comando e carattere ASCII viene gestita dal livello logico posto sul pin <strong>RS</strong>.<br />
Il pin <strong>E</strong> abilita l&#8217;esecuzione del comando o la scrittura sulla matrice.</p>
<p>Il circuito seguente è quello che ho realizzato per il tutorial:</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-3194" title="Display20x4_Arduino_bb" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/Display20x4_Arduino_bb.png" alt="Gestione Arduino display 20x4" width="550" height="455" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/Display20x4_Arduino_bb.png 550w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/Display20x4_Arduino_bb-300x248.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></p>
<p>Nello schema potete notare che i <strong>Data Pin</strong> non sono collegati completamente ma vengono utilizzati solo i bit più significativi (bit 4, 5, 6, 7). Questa peculiarità è possibile poichè il display supporta la modalità a 4-bit, che essendo implementata anche dalla libreria <strong>LiquidCrystal, </strong>fa in modo di usare solo 4 file piuttosto che 8.</p>
<p>Il pin6 di Arduino è collegato al pin4 del display per gestire la funzione di<strong> RS</strong> (Comando/Dato) mentre il pin7 è collegato al pin6 del display <strong>E</strong>, per far processare al chip del display il Comando o il Dato.</p>
<p>Una volta effettuati i collegamenti, possiamo iniziare con un piccolo sketch di esempio:</p>
<p>[c]<br />
//inserisco la libreria per<br />
//gestire i display a matrice di punti<br />
#include &lt;LiquidCrystal.h&gt;</p>
<p>//creo un oggetto specificando i pin RS il pin E e<br />
//i 4-bit di dati (bit 4, 5, 6, 7)<br />
//collegati rispettivamente ai pin 6, 7, 4, 3, 2<br />
//di arduino come da schema<br />
LiquidCrystal Display20x4(6, 7, 5, 4, 3, 2);</p>
<p>void setup()<br />
{<br />
  //il metodo begin permette di impostare il numero di<br />
  //colonne e di righe che compongono il display<br />
  //nel mio caso il modello è un 20&#215;4<br />
  Display20x4.begin(20, 4);</p>
<p>  //pulisci il display e posiziona il cursore sulla prima<br />
  //riga e sulla prima colonna<br />
  Display20x4.clear();</p>
<p>  //visualizza il cursore sul display<br />
  //per verificare la posizione iniziale<br />
  Display20x4.cursor();</p>
<p>  //attendi 2 secondi<br />
  delay(2000);</p>
<p>  //disattivo il cursore<br />
  Display20x4.noCursor();</p>
<p>}</p>
<p>void loop()<br />
{<br />
  //sposta il cursore alla prima riga e prima colonna<br />
  //questa operazione è necessaria se vogliamo<br />
  //scrivere il testo sempre nella stessa posizione<br />
  //omettendo questa istruzione il testo verrà scritto continuamente<br />
  //sul display andando a coprire tutte le righe<br />
  Display20x4.home();<br />
  //scrivi nella prima riga un testo<br />
  Display20x4.print(&quot;Logicaprogrammabile&quot;);</p>
<p>  //ritardo<br />
  delay(500);<br />
}</p>
<p>[/c]</p>
<p>La scrittura deve essere composta da una istruzione che gestisce la posizione del cursore e una successiva che effettua la scrittura del testo sul display.</p>
<p>Per scrivere su ogni riga dobbiamo quindi comporre le istruzioni in questo modo:</p>
<p>[c]<br />
void loop()<br />
{<br />
  //posiziono il cursore all&#8217;inizio della prima riga<br />
  Display20x4.setCursor(0,0);<br />
  //scrivi nella prima riga un testo<br />
  Display20x4.print(&quot;ABCDEFGHILMNOPQRSTUV&quot;);</p>
<p>  Display20x4.setCursor(0,1);<br />
  //scrivi nella seconda riga un testo<br />
  Display20x4.print(&quot;ABCDEFGHILMNOPQRSTUV&quot;);</p>
<p>  Display20x4.setCursor(0,2);<br />
  //scrivi nella terza riga un testo<br />
  Display20x4.print(&quot;ABCDEFGHILMNOPQRSTUV&quot;);</p>
<p>  Display20x4.setCursor(0,3);<br />
  //scrivi nella quarta riga un testo<br />
  Display20x4.print(&quot;ABCDEFGHILMNOPQRSTUV&quot;);</p>
<p>  //ritardo<br />
  delay(500);<br />
}<br />
[/c]</p>
<p>Se il testo che printiamo sul display supera i 20 caratteri avremmo una situazione di riscrittura del testo sulla stessa riga, in pratica se abbiamo un testo di 25 caratteri, verranno prima printati 20 caratteri e i rimanenti 5, saranno riscritti nella stessa riga occupando le prime 5 colonne,compromettendo il testo scritto precedentemente.</p>
<p>Se ad esempio scrivessi questo teso (25 caratteri)</p>
<p style="text-align: center;">ABCDEFGHILMNOPQRSTUV12345</p>
<p>otterrei sul display questa visualizzazione (20 caratteri)</p>
<p style="text-align: center;">12345FGHILMNOPQRSTUV</p>
<p>L&#8217;uso del display risulta quindi molto semplice, la libreria è composta da altri metodi che permettono di effettuare altre operazioni. Nel link seguente potete trovare ulteriori informazioni a riguardo.</p>
<p><a href="http://arduino.cc/en/Reference/LiquidCrystal" target="_blank">Riferimento libreria LyquidCrystal su Arduino.cc</a></p>
<p>The post <a href="https://logicaprogrammabile.it/gestire-display-lcd-20x4-matrice/">Arduino gestire display a matrice 20&#215;4</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/gestire-display-lcd-20x4-matrice/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Netduino, controllare display lcd 16&#215;2</title>
		<link>https://logicaprogrammabile.it/netduino-controllare-display-16x2/</link>
					<comments>https://logicaprogrammabile.it/netduino-controllare-display-16x2/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 27 Apr 2011 08:43:12 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[display]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=906</guid>

					<description><![CDATA[<p>Come utilizzare un display lcd con Netduino I display lcd a matrice permettono di realizzare circuiti che non hanno bisogno della presenza del pc per rappresentare i dati elaborati dal Netduino. Se pensiamo ad esempio al classico sensore di temperatura, possiamo rappresentare il valore letto...</p>
<p>The post <a href="https://logicaprogrammabile.it/netduino-controllare-display-16x2/">Netduino, controllare display lcd 16&#215;2</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come utilizzare un display lcd con Netduino</h1>
<p>I display lcd a matrice permettono di realizzare circuiti che non hanno bisogno della presenza del pc per rappresentare i dati elaborati dal Netduino. Se pensiamo ad esempio al classico sensore di temperatura, possiamo rappresentare il valore letto dalla sonda direttamente sul display piuttosto che inviarlo al pc, rendendo il sistema indipendente.</p>
<p>Essi sono diventati dispositivi evoluti che utilizzano un microcontrollore capace di eseguire diverse operazioni come l&#8217;attivazione o meno del cursore, la possibilità di shiftare i caratteri del display a destra o sinistra e addirittura leggere i dati presenti sul display (permettendo l&#8217;interazione con l&#8217;utente).</p>
<p style="text-align: center;"><img decoding="async" class="aligncenter wp-image-908 size-full" title="Display_16x2" src="https://logicaprogrammabile.it/wp-content/uploads/2011/04/Display_16x2.jpg" alt="Display 16x2 20x2 20x4" width="447" height="205" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/04/Display_16x2.jpg 447w, https://logicaprogrammabile.it/wp-content/uploads/2011/04/Display_16x2-300x137.jpg 300w" sizes="(max-width: 447px) 100vw, 447px" /></p>
<p>Lo schema elettrico per questo esperimento è il seguente:</p>
<p style="text-align: left;"><img loading="lazy" decoding="async" class="aligncenter wp-image-916 size-full" title="NetduinoDisplay_bb" src="https://logicaprogrammabile.it/wp-content/uploads/2011/04/NetduinoDisplay_bb.jpg" alt="Collegare Netduino a diplay LCD 16x2" width="583" height="378" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/04/NetduinoDisplay_bb.jpg 583w, https://logicaprogrammabile.it/wp-content/uploads/2011/04/NetduinoDisplay_bb-300x194.jpg 300w" sizes="auto, (max-width: 583px) 100vw, 583px" /><span id="more-906"></span>I pin da 0 a 7 del Netduino sono collegati ai pin data (dal pin7 al pin 14) del display, il pin 8 del Netduino è collegato al pin 4 (RS) del Display, il pin9  del Netduino è collegato al pin6 (E) del display. I pin 1 e 16(Gnd) del display sono collegati a massa mentre i pin 2 e 15(Vcc) sono collegati alla +5Vdc del Netduino. Il pin 3(Vo) del display è collegato al potenziometro da 10Kohm che viene impiegato per gestire la luminosità dei caratteri del display. Il pin 5(R/W) del display è collegato a massa perchè le operazioni che eseguo sul display, in questo esperimento, sono di scrittura.</p>
<p>La tabella illustra le funzioni dei pin che compongono l&#8217;interfaccia di collegamento:</p>
<table>
<tbody>
<tr>
<td style="text-align: center;"><strong>Numero Pin</strong></td>
<td style="text-align: center;"><strong>Descrizione</strong></td>
</tr>
<tr>
<td style="text-align: center;">1</td>
<td><strong>GND</strong> collegamento a massa dell&#8217;alimentazione del display</td>
</tr>
<tr>
<td style="text-align: center;">2</td>
<td><strong>VCC</strong> Alimentazione del display tipicamente 5Vdc</td>
</tr>
<tr>
<td style="text-align: center;">3</td>
<td><strong>Vo</strong> Gestisce la luminosita dei pixel del display</td>
</tr>
<tr>
<td style="text-align: center;">4</td>
<td><strong>RS</strong> Specifica se vogliamo caricare un dato(Livello Alto) o un comando (Livello basso)</td>
</tr>
<tr>
<td style="text-align: center;">5</td>
<td><strong>R/W</strong> Specifica se vogliamo scrivere o leggere dal display</td>
</tr>
<tr>
<td style="text-align: center;">6</td>
<td><strong>E</strong> Necessario per far leggere al display il comando o il dato presente sulle linee DB</td>
</tr>
<tr>
<td style="text-align: center;">7</td>
<td>Data bit 0</td>
</tr>
<tr>
<td style="text-align: center;">8</td>
<td>Data bit 1</td>
</tr>
<tr>
<td style="text-align: center;">9</td>
<td>Data bit 2</td>
</tr>
<tr>
<td style="text-align: center;">10</td>
<td>Data bit 3</td>
</tr>
<tr>
<td style="text-align: center;">11</td>
<td>Data bit 4</td>
</tr>
<tr>
<td style="text-align: center;">12</td>
<td>Data bit 5</td>
</tr>
<tr>
<td style="text-align: center;">13</td>
<td>Data bit 6</td>
</tr>
<tr>
<td style="text-align: center;">14</td>
<td>Data bit 7</td>
</tr>
<tr>
<td style="text-align: center;">15</td>
<td><strong>Vcc</strong> Alimentazione per la retroilluminazione del display</td>
</tr>
<tr>
<td style="text-align: center;">16</td>
<td><strong>Gnd</strong> Massa per la retroilluminazione del display</td>
</tr>
</tbody>
</table>
<p>Come sempre la prima cosa utile è leggere il datasheet del display. In generale il principio di funzionamento è standardizzato, quindi è possibile utilizzare diversi display nello stesso modo.</p>
<p>La parte che ci interessa è quella relativa al diagramma dei segnali che permettono di lavorare con l&#8217;lcd, la figura seguente mostra come inviare un dato o un comando al dispositivo:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-969 size-full" title="WriteDataLcd" src="https://logicaprogrammabile.it/wp-content/uploads/2011/04/WriteDataLcd.gif" alt="Diagramma flusso scritura bye lcd" width="570" height="333" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/04/WriteDataLcd.gif 570w, https://logicaprogrammabile.it/wp-content/uploads/2011/04/WriteDataLcd-300x175.gif 300w" sizes="auto, (max-width: 570px) 100vw, 570px" /></p>
<p>Nel mio caso il pin5(R/W) del display è tenuto sempre a livello logico basso (scrittura). Il segnale <strong>RS</strong> può cambiare a seconda se vogliamo inviare un comando (Livello Basso) oppure un dato (Livello Alto). Il segnale <strong>E</strong> serve ad abilitare il display alla lettura del dato/comando presente sui pin data.</p>
<p>Il flusso di lavoro viene semplificato da questo diagramma:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-972 size-full" title="DiagrammaFlusso" src="https://logicaprogrammabile.it/wp-content/uploads/2011/04/DiagrammaFlusso.gif" alt="Diagramma di flusso di lavoro" width="233" height="332" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/04/DiagrammaFlusso.gif 233w, https://logicaprogrammabile.it/wp-content/uploads/2011/04/DiagrammaFlusso-210x300.gif 210w" sizes="auto, (max-width: 233px) 100vw, 233px" /></p>
<p>La prima fase consiste nella inizializzazione del display, altrimenti non potremmo visualizzare nessun carattere; questa fase specifica diversi parametri e funzionalità, di seguito l&#8217;elenco dei comandi:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-976 size-full" title="ComandiDisplay" src="https://logicaprogrammabile.it/wp-content/uploads/2011/04/ComandiDisplay.gif" alt="Comandi display" width="593" height="763" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/04/ComandiDisplay.gif 593w, https://logicaprogrammabile.it/wp-content/uploads/2011/04/ComandiDisplay-233x300.gif 233w" sizes="auto, (max-width: 593px) 100vw, 593px" /></p>
<p>Notiamo che per inviare i comandi la linea RS deve sempre essere Bassa, essa diventa alta solo per leggere e scrivere dati.</p>
<p>Dopo aver realizzato il circuito passiamo al codice C# definendo i pin digitali come uscite:</p>
<pre class="lang:c# decode:true ">OutputPort Data0 = new OutputPort(Pins.GPIO_PIN_D0, false);
OutputPort Data1 = new OutputPort(Pins.GPIO_PIN_D1, false);
OutputPort Data2 = new OutputPort(Pins.GPIO_PIN_D2, false);
OutputPort Data3 = new OutputPort(Pins.GPIO_PIN_D3, false);
OutputPort Data4 = new OutputPort(Pins.GPIO_PIN_D4, false);
OutputPort Data5 = new OutputPort(Pins.GPIO_PIN_D5, false);
OutputPort Data6 = new OutputPort(Pins.GPIO_PIN_D6, false);
OutputPort Data7 = new OutputPort(Pins.GPIO_PIN_D7, false);

OutputPort RS = new OutputPort(Pins.GPIO_PIN_D8, false);
OutputPort E = new OutputPort(Pins.GPIO_PIN_D9, false);</pre>
<p>&nbsp;</p>
<p>Il primo comando d&#8217;inizializzazione attiva il display (Display ON), il cursore(Cursor ON) e il blinking(Blinking ON),</p>
<pre class="lang:c# decode:true ">//mette il pin4 del display a livello basso per inviare
//un comando
RS.Write(false);

Data0.Write(true); //Blink ON
Data1.Write(true); //Cursor ON
Data2.Write(true); //Display ON
Data3.Write(true); //Flag Display ON/OFF
Data4.Write(false);
Data5.Write(false);
Data6.Write(false);
Data7.Write(false);

//Esegui il comando sul display
E.Write(true);
Thread.Sleep(1);
E.Write(false);</pre>
<p>&nbsp;</p>
<p>ora impostiamo il numero di righe da utilizzare, il tipo di interfaccia e la risoluzione della matrice:</p>
<pre class="lang:c# decode:true ">//mette il pin4 del display a livello basso per inviare
//un comando
RS.Write(false);

//Data0.Write(true); //Non usato
//Data1.Write(true); //Non usato
Data2.Write(true); //5x10 Dots ON
Data3.Write(true); //2 Lines ON
Data4.Write(true); //8bit interface ON
Data5.Write(true); //Flag Set Function
Data6.Write(false);
Data7.Write(false);

//Esegui il comando sul display
E.Write(true);
Thread.Sleep(1);
E.Write(false);</pre>
<p>&nbsp;</p>
<p>gli ultimi comandi che possiamo inviare sono un Return Home per posizionare il cursore nella prima riga e colonna e un CLearDisplay per pulire l&#8217;lcd da altri caratteri precedentemente inviati</p>
<pre class="lang:c# decode:true ">//mette il pin4 del display a livello basso per inviare
//un comando
RS.Write(false);

//Posiziona il cursore nella prima linea e colonna
//Data0.Write(true); //Non usato
Data1.Write(true); //Flag Retun Home
Data2.Write(false);
Data3.Write(false);
Data4.Write(false);
Data5.Write(false);
Data6.Write(false);
Data7.Write(false);

//Esegui il comando sul display
E.Write(true);
Thread.Sleep(1);
E.Write(false);

//Pulisci lo schermo
Data0.Write(true); //Flag Clear Display
Data1.Write(false);
Data2.Write(false);
Data3.Write(false);
Data4.Write(false);
Data5.Write(false);
Data6.Write(false);
Data7.Write(false);

//Esegui il comando sul display
E.Write(true);
Thread.Sleep(1);
E.Write(false);</pre>
<p>&nbsp;</p>
<p>Questi comandi di inizializzazione sono sufficienti per permettere al display di accettare dati da visualizzare. Proviamo subito a scrivere la lettere A. La procedura è identica all&#8217;invio di un comando, l&#8217;unica modifica al codice riguarda il l&#8217;oggetto <strong>RS</strong> che ora pone il pin8 del Netduino (pin4 del display) a livello Alto:</p>
<pre class="lang:c# decode:true ">//mette il pin4 del display a livello ALTO per inviare
//un dato (carattere ascii) al display
RS.Write(true);

//Scrive sul display nella prima riga e nella prima
//colonna il carattere A (00110001 in binario)
//Ulteriori caratteri possono essere recuperati dalla
//tabella Ascii
Data0.Write(true);
Data1.Write(false);
Data2.Write(false);
Data3.Write(false);
Data4.Write(false);
Data5.Write(false);
Data6.Write(true);
Data7.Write(false);

//Carica il dato sul display
E.Write(true);
Thread.Sleep(1);
E.Write(false);</pre>
<p>&nbsp;</p>
<p>Il display visualizza la lettera A e sposta il cursore a destra. Ogni volta che carichiamo un dato, il cursore viene spostato a destra.</p>
<p>Con il comando <strong>Set Function</strong> ho abilitato tutte e due le righe disponibili, per scrivere sulla seconda riga dobbiamo impostare l&#8217;indirizzo della riga in base alla tabella seguente:</p>
<p><a href="https://logicaprogrammabile.it/netduino-controllare-display-16x2/indirizzicelledisplay/" rel="attachment wp-att-995"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-995" title="IndirizziCelleDisplay" src="https://logicaprogrammabile.it/wp-content/uploads/2011/04/IndirizziCelleDisplay.gif" alt="" width="544" height="57" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/04/IndirizziCelleDisplay.gif 544w, https://logicaprogrammabile.it/wp-content/uploads/2011/04/IndirizziCelleDisplay-300x31.gif 300w" sizes="auto, (max-width: 544px) 100vw, 544px" /></a></p>
<p>Questa tabella mostra gli indirizzi di tutte le celle del display, per spostare il cursore dove vogliamo iniziare a (seconda linea, prima colonna), dobbiamo inviare al display il comando <strong>SET DD RAM ADDRESS</strong>.</p>
<p>Ho realizzato una funzione apposita che permette di posizionare il cursore nella cella voluta, passandogli come parametro l&#8217;indirizzo della cella.<br />
La funzione è la seguente:</p>
<pre class="lang:c# decode:true ">public void SettaRigaColonna(Byte NumRiga)
{
Byte Bit = 0;

//Seleziona comando
RS.Write(false);

Bit = (Byte)((NumRiga &gt;&gt; 0) &amp; 0x01);
if (Bit == 1)
Data0.Write(true);
else
Data0.Write(false);

Bit = (Byte)((NumRiga &gt;&gt; 1) &amp; 0x01);
if (Bit == 1)
Data1.Write(true);
else
Data1.Write(false);

Bit = (Byte)((NumRiga &gt;&gt; 2) &amp; 0x01);
if (Bit == 1)
Data2.Write(true);
else
Data2.Write(false);

Bit = (Byte)((NumRiga &gt;&gt; 3) &amp; 0x01);
if (Bit == 1)
Data3.Write(true);
else
Data3.Write(false);

Bit = (Byte)((NumRiga &gt;&gt; 4) &amp; 0x01);
if (Bit == 1)
Data4.Write(true);
else
Data4.Write(false);

Bit = (Byte)((NumRiga &gt;&gt; 5) &amp; 0x01);
if (Bit == 1)
Data5.Write(true);
else
Data5.Write(false);

Bit = (Byte)((NumRiga &gt;&gt; 6) &amp; 0x01);
if (Bit == 1)
Data6.Write(true);
else
Data6.Write(false);

Data7.Write(true);

//Esegui il comando sul display
E.Write(true);
Thread.Sleep(1);
E.Write(false);
}</pre>
<p>&nbsp;</p>
<p>Per scrivere nella seconda riga dobbiamo passare alla funzione l&#8217;indirizzo 0x40</p>
<pre class="lang:c# decode:true ">//Posiziona il cursore nella seconda riga prima colonna
SettaRigaColonna(0x40);

 //mette il pin4 del display a livello ALTO per inviare
 //un dato (carattere ascii) al display

RS.Write(true);
//Scrive sul display nella prima riga e nella prima
//colonna il carattere A (00110001 in binario)
 //Ulteriori caratteri possono essere recuperati dalla
 //tabella Ascii
Data0.Write(true);
 Data1.Write(false);
 Data2.Write(false);
 Data3.Write(false);
 Data4.Write(false);
 Data5.Write(false);
 Data6.Write(true);
 Data7.Write(false);

 //Carica il dato sul display
 E.Write(true);
 Thread.Sleep(1);
 E.Write(false);</pre>
<p>&nbsp;</p>
<p>In questo caso il carattere A viene caricato nella seconda riga, prima colonna.</p>
<p>Per approfondire tutte le funzionalità del display è consigliabile continuare a fare delle prove sperimentando con il codice C#. Nel file allegato è presente il progetto C# che ho scritto per questo esperimento che permette di sperimentare con il display.</p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/netduino-controllare-display-16x2/">Netduino, controllare display lcd 16&#215;2</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/netduino-controllare-display-16x2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
