<?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>gDEV &#187; lcd</title>
	<atom:link href="http://www.gdevnet.it/tag/lcd/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gdevnet.it</link>
	<description>Le tue idee in movimento...</description>
	<lastBuildDate>Fri, 07 Aug 2009 11:24:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Semplice ma preciso periodimetro con 16F84</title>
		<link>http://www.gdevnet.it/2009/01/17/semplice-ma-preciso-periodimetro-con-16f84/</link>
		<comments>http://www.gdevnet.it/2009/01/17/semplice-ma-preciso-periodimetro-con-16f84/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 08:59:39 +0000</pubDate>
		<dc:creator>f.mira</dc:creator>
				<category><![CDATA[Elettronica]]></category>
		<category><![CDATA[Schemi e Progetti]]></category>
		<category><![CDATA[16f84]]></category>
		<category><![CDATA[it9dpx]]></category>
		<category><![CDATA[lcd]]></category>
		<category><![CDATA[periodimetro]]></category>

		<guid isPermaLink="false">http://www.gdevnet.it/?p=319</guid>
		<description><![CDATA[Periodimetro. Con questo progetto di semplice realizzazione, potrete effettuare misure di periodo molto accurate e se siete interessati imparare a gestire gli interrupt.


Related posts:<ol><li><a href='http://www.gdevnet.it/2009/01/31/frequenzimetro-programmabile-per-ts-830m/' rel='bookmark' title='Permanent Link: Frequenzimetro programmabile per TS-830M'>Frequenzimetro programmabile per TS-830M</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><span style="color: #ff0000;">PERIODIMETRO</span></p>
<p style="text-align: justify;"><span style="text-decoration: underline;">Introduzione.</span></p>
<p style="text-align: justify;">In diverse occasioni ho dovuto rinunciare a realizzare dei progetti di mio interesse, solo perché non disponevo di strumentazione adeguata per misurare frequenze subsoniche . Per valori così bassi infatti  il frequenzimetro consente in genere risoluzioni di +/- 1Hz. Per spingersi oltre occorre utilizzare il periodimetro che come dice la stessa parola, effettuando la misura del periodo di un segnale, ci restituisce dei valori più precisi con risoluzioni di frazioni di Hz. <span id="more-319"></span><a href="http://digilander.libero.it/francodpx/filefoto/Periodfoto.jpg" rel="lightbox[319]" target="_blank"><span style="color: #ff0000;">VEDI  FOTO</span></a></p>
<p style="text-align: justify;">Come é noto  conoscendo il valore del periodo di un segnale, possiamo subito risalire alla frequenza con l&#8217;altrettanto nota formula F = 1 / T , dove F é la frequenza espressa in Hz. e T é il periodo espresso in secondi. Non volendo andare incontro a grosse spese ho pensato di  realizzare un periodimetro, avvalendomi delle potenzialità offerte da uno dei più diffusi microcontrollori, il PIC-16F84A  prodotto dalla Microchip. Attorno a tale chip che costituisce il cuore di tutto il sistema, gravitano pochi altri componenti; questo grazie al fatto che al suo interno possiamo sfruttare vari registri di controllo e di configurazione, nonché due banchi di memoria EEPROM e RAM di piccole capacità ma sufficienti al nostro scopo. <a href="http://digilander.libero.it/francodpx/filefoto/Periodsch.gif" rel="lightbox[319]" target="_blank"><span style="color: #ff0000;">VEDI  SCHEMA</span></a><span style="color: #ff0000;"> .</span></p>
<p style="text-align: justify;">Non lasciatevi impressionare quindi dalla ridotta complessità circuitale. Infatti dal confronto effettuato  con apparati di tipo professionale ho accertato le ottime caratteristiche finali del progetto. Prima fra tutte ho riscontrato una elevata precisione, soprattutto per valori superiori a 1 mS. ovvero per frequenze minori di 1000 Hz, con una risoluzione di 1 uS; poi abbiamo buona sensibilità, basso costo, basso assorbimento di corrente e complessità circuitale ridotta al minimo. E’ per questi motivi che desidero proporlo a tutti coloro che hanno avuto la mia stessa esigenza o che vogliono fare questa esperienza .</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><span style="text-decoration: underline;">Principio di funzionamento.</span></p>
<p style="text-align: justify;">In pratica per ottenere misure attendibili , il segnale da misurare in ingresso non deve scendere sotto il livello di 70 mV. Il transistor T1 ad accoppiamento in continua , provvede ad amplificare tale segnale rendendolo idoneo a pilotare la porta d&#8217; ingresso PB0 del PIC, che essendo del tipo triggerato accetta anche segnali sinusoidali. Di tutto il resto, e cioé dalla elaborazione del segnale fino alla visualizzazione del dato, se ne occupa la logica di funzionamento implementata dal software che é molto semplice. Al sopraggiungere di un fronte di salita del segnale in ingresso, scatta un interrupt interno che istantaneamente obbliga il PIC ad abbandonare l’ esecuzione del programma principale, passando ad  eseguire una subroutine che avvia un preciso contatore interno incrementato da un clock da 1 Mhz.</p>
<p style="text-align: justify;">Tale clock è derivato dal quarzo Q1 da 8 Mhz, conferendo al sistema una risoluzione sul display di 1uS. Al successivo fronte di salita, viene visualizzato sul display il valore conteggiato dal contatore interno che subito dopo viene azzerato ed avviato al conteggio successivo. Come si evince anche dalla <a href="http://digilander.libero.it/francodpx/filefoto/Periodim.jpg" rel="lightbox[319]" target="_blank"><span style="color: #ff0000;">FIG.1</span></a>, in questo modo il display viene continuamente aggiornato col valore conteggiato che si riferisce al tempo intercorso tra due fronti di salita, cioé al periodo.</p>
<p style="text-align: center;">
<p style="text-align: justify;">In definitiva ogni fronte di salita funge allo stesso tempo da stop per il conteggio precedente e da start per il conteggio successivo. Tenete presente che non ho ritenuto opportuno predisporre lo strumento per misure superiori a 16 Sec., per cui dopo tale valore il registro di conteggio interno viene automaticamente azzerato e fatto ripartire daccapo. Inoltre per misure di periodo minori di 1 mS. ovvero per frequenze superiori a 1000 Hz. lo strumento in questione non é più tanto preciso, per cui  per tali valori é preferibile usare il frequenzimetro. Va da se che maggiore sarà il valore del periodo misurato,  minore sarà l&#8217; errore in cui possiamo incappare.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><span style="text-decoration: underline;">Collaudo. </span></p>
<p style="text-align: justify;">Nel circuito non ci sono punti di taratura, per cui dopo aver attentamente controllato che non vi siano errori di montaggio, date pure alimentazione ed iniettate all&#8217; ingresso un segnale di 50 Hz. misurato anche da un frequenzimetro. A questo punto dovreste leggere sul display il valore del periodo pari a 20.00 mS. Se leggerete invece 19.99 mS. oppure 20.01 mS. , non preoccupatevi é il vostro frequenzimetro che non riesce a discriminare la differenza. Per tali valori infatti  la frequenza esatta , nel primo caso sarà pari a : F=1/19.99*10^-3 = 1000/19.99 = 50.025 Hz. e nel secondo caso sarà pari a :   F=1/20.01*10^-3 = 1000/20.01 = 49.975 Hz. per cui ritoccate la sintonia del vostro generatore fino a leggere 20.00 mS.  e sarete veramente sicuri che il segnale da voi misurato é di 50 Hz. precisi . Volutamente per i calcoli appena effettuati, non ho tenuto conto delle unità, cosa che invece sarebbe opportuno fare per valori di lettura più bassi.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><span style="text-decoration: underline;">Conclusioni.</span></p>
<p style="text-align: justify;">Per il visualizzatore, ovviamente andrà bene qualunque tipo di display intelligente, purché gestito da HD44780, che come si vede dallo schema elettrico, viene pilotato solo in scrittura e solo coi quattro bit più significativi.</p>
<p style="text-align: justify;">Questo strumento vi consentirà di misurare con estrema precisione, la velocità di rotazione di un alternatore, la frequenza di rete, la frequenza dei toni subaudio ed altro ancora. Se ad esempio prelevate il segnale da un sensore ottico, potrete agevolmente misurare la velocità di rotazione di una ruota, di un albero motore,  oppure le oscillazioni di un pendolo .</p>
<p style="text-align: justify;">Il software da me prodotto é a disposizione di tutti, per averlo basta contattarmi direttamente al mio indirizzo e-mail; dove mi farebbe piacere ricevere anche le vostre osservazioni, valutazioni, richieste, suggerimenti, critiche e quant&#8217;altro riterrete opportuno, al fine di migliorare il progetto. Salutandovi,  auguro a tutti buon lavoro e buon divertimento.</p>
<p style="text-align: right;">IT9DPX &#8211; #135  (Francesco M.)</p>


<p>Related posts:<ol><li><a href='http://www.gdevnet.it/2009/01/31/frequenzimetro-programmabile-per-ts-830m/' rel='bookmark' title='Permanent Link: Frequenzimetro programmabile per TS-830M'>Frequenzimetro programmabile per TS-830M</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.gdevnet.it/2009/01/17/semplice-ma-preciso-periodimetro-con-16f84/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Timer ciclico programmabile 24h.</title>
		<link>http://www.gdevnet.it/2009/01/17/timer-ciclico-programmabile-24h/</link>
		<comments>http://www.gdevnet.it/2009/01/17/timer-ciclico-programmabile-24h/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 07:37:39 +0000</pubDate>
		<dc:creator>f.mira</dc:creator>
				<category><![CDATA[Elettronica]]></category>
		<category><![CDATA[Schemi e Progetti]]></category>
		<category><![CDATA[16f628]]></category>
		<category><![CDATA[ciclico]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[it9dpx]]></category>
		<category><![CDATA[lcd]]></category>
		<category><![CDATA[timer]]></category>

		<guid isPermaLink="false">http://www.gdevnet.it/?p=292</guid>
		<description><![CDATA[Il circuito che vi propongo può alimentare giornalmente e con cadenza regolare fino a quattro dispositivi diversi, con la possibilità di prefissarne anche più volte al giorno indipendentemente l’ora d’accensione e di spegnimento. IT9DPX


Related posts:<ol><li><a href='http://www.gdevnet.it/2009/01/31/frequenzimetro-programmabile-per-ts-830m/' rel='bookmark' title='Permanent Link: Frequenzimetro programmabile per TS-830M'>Frequenzimetro programmabile per TS-830M</a></li>
<li><a href='http://www.gdevnet.it/2009/01/11/impariamo-ad-usare-il-protocollo-hd44780/' rel='bookmark' title='Permanent Link: Impariamo ad usare il protocollo HD44780'>Impariamo ad usare il protocollo HD44780</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><span style="color: #ff0000;">Timer ciclico programmabile</span></p>
<p style="text-align: justify;"><span style="text-decoration: underline;">Introduzione</span><br />
Salve, il circuito che vi presento è nato dall’esigenza di alimentare giornalmente e con cadenza regolare quattro dispositivi diversi, con la possibilità di prefissarne indipendentemente l’ora d’accensione e di spegnimento, anche più volte al giorno. Essendo svariati i campi di possibile applicazione del circuito in oggetto, ho voluto renderlo disponibile a tutti tramite le pagine di questo sito. Io lo sto impiegando nel mio acquario soprattutto durante i miei allontanamenti da casa, dove ad intervalli regolari viene distribuito il mangime per i pescetti ed accesa la luce interna per l’illuminazione delle piantine. Ma tornerebbe utile anche nei negozi per cambiare tipo d’illuminazione automaticamente o per accendere l’insegna luminosa esterna ad orari prefissati. Negli ambienti di lavoro potremmo attivare luci, sirene, motori etc.etc.<span id="more-292"></span> <span style="text-decoration: underline;"><span style="color: #ff0000;"><a href="http://digilander.libero.it/francodpx/filefoto/Schtimer.gif" rel="lightbox[292]" target="_blank"><span style="color: #ff0000;">VEDI SCHEMA</span></a></span></span></p>
<p style="text-align: center;">
<p style="text-align: justify;"><span style="text-decoration: underline;">Funzionamento</span></p>
<p style="text-align: justify;">Il timer dispone di 32 posti di memoria per la programmazione giornaliera residenti in EEPROM, quindi i dati conservati in tale zona di memoria non andranno persi dopo lo spegnimento del timer e saranno sempre presenti ad ogni riaccensione. Possiamo visionare il contenuto di ogni posto programma, esercitando una breve <span style="color: #000000;">pressione sui tasti “freccia-alto­” per andare indietro e “freccia-basso” pe</span>r andare avanti, visualizzando tali dati sulla riga in basso del display. I primi due numeri indicano il numero della memoria sotto esame ed assumeranno valori compresi tra 1 e 32. A destra di questi ultimi intervallato da uno spazio, troviamo un numero compreso tra zero e quattro indicante l’uscita da impegnare; a seguire a destra troviamo l’ora di accensione e subito dopo l’ora di spegnimento.</p>
<p>Per modificare i dati di una qualsiasi memoria visualizzata, basta premere brevemente il tasto indicato con “M”; immediatamente su ognuno dei dati visualizzati comparirà un’indicazione per ricordarne la funzione. <span style="text-decoration: underline;"><a href="http://digilander.libero.it/francodpx/filefoto/24h_lcd.jpg" rel="lightbox[292]" target="_blank"><span style="color: #ff0000;">VEDI DISPLAY</span></a></span></p>
<p style="text-align: justify;">“ME” indica il numero di memoria programma sotto esame; “U” indica l’uscita da impegnare; “ACC” l’ora di accensione ed infine “SPEGN” l’ora di spegnimento; inoltre il cursore sarà visualizzato sotto al numero indicante l’uscita. In questa fase di programmazione possiamo proseguire in quattro modi diversi:</p>
<p style="text-align: justify;">1)      Confermare o cambiare l’uscita digitando il numero appropriato;</p>
<p style="text-align: justify;">2)      Disattivare la memoria digitando uno zero, in questo caso i dati successivi relativi all’accensione ed allo spegnimento, saranno ignorati dalla routine di gestione delle uscite e non presi in considerazione;</p>
<p style="text-align: justify;">3)      Premere il tasto “freccia-destra” per saltare alla fase successiva, ovvero all’inserimento dell’ora di accensione, senza modificare il dato relativo all’uscita da impegnare;</p>
<p style="text-align: justify;">4)      Premere il tasto “ freccia-sinistra” per uscire dalla fase di programmazione in corso, lasciando invariati tutti i dati della memoria selezionata in quel momento.</p>
<p style="text-align: justify;">Se in questa fase tenterete di inserire un numero maggiore di quattro, il cursore non si muoverà finché non sarà digitato un numero valido. Se avremo optato per l’ultima delle opzioni precedenti, il software di gestione tornerà a visualizzare l’orologio interno scandendo lo scorrere del tempo. Se invece opteremo per una delle prime tre opzioni precedenti, il cursore si troverà adesso sotto l’ora di accensione, da cui potremo procedere in tre modi diversi:</p>
<p style="text-align: justify;">1)      Inserire i dati relativi alle ore ed ai minuti che andranno a sostituire i precedenti;</p>
<p style="text-align: justify;">2)      Premere il tasto “freccia-destra” per saltare alla fase successiva, ovvero all’inserimento dell’ora di spegnimento, senza modificare il dato relativo all’ora di accensione;</p>
<p style="text-align: justify;">3)      Premere il tasto “ freccia-sinistra” per uscire dalla fase di programmazione in corso.</p>
<p style="text-align: justify;">Superata questa prima parte, saremo giunti alla fase d’inserimento dei dati per lo spegnimento, dove saranno valide le stesse modalità viste per l’inserimento dei dati di accensione. Anche in questi ultimi due inserimenti, se i dati digitati non saranno validi il cursore tornerà all’inizio, finché il dato inserito non sarà corretto. Per la precisione, è considerato non valido l’inserimento di un numero maggiore di 23 per le ore, oppure di un numero maggiore di 59 per i minuti.</p>
<p style="text-align: justify;">Volevo inoltre precisare che il tasto “ freccia-sinistra” è attivo sempre, per cui se premuto ad esempio tra l’inserimento delle ore e dei minuti, sarà abbandonata la fase di programmazione in corso ed i dati in quel momento inseriti saranno ignorati e sostituiti coi precedenti. Di ciò, ci si rende conto subito, in quanto il display sarà aggiornato dopo ogni  abbandono della fase di programmazione.</p>
<p style="text-align: justify;">A questo punto se vogliamo programmare un’altra memoria, dobbiamo scegliere un altro posto programma coi tasti “­freccia-alto” e “freccia-basso” , premere il tasto “M” e continuare con l’inserimento dei dati.</p>
<p style="text-align: justify;">Come avrete notato al flessibilità del software è tale che i 32 posti programma possono essere impegnati come si desidera. Possiamo ad esempio assegnarli tutti ad una sola uscita, oppure suddividerli alle quattro uscite anche in misura diversa.</p>
<p style="text-align: justify;">Infine, non dobbiamo dimenticare di aggiornare l’orologio interno premendo il tasto ”H” . In questo caso il cursore si porterà sotto l’indicazione delle ore, da cui potremo proseguire digitando i dati da inserire. Se i dati non saranno validi il cursore tornerà indietro per un reinserimento corretto.</p>
<p style="text-align: justify;">Anche da questa fase si può uscire premendo il tasto “ freccia-sinistra” e l’orologio non sarà aggiornato.</p>
<p style="text-align: justify;">Da notare che dopo ogni aggiornamento dell’orologio interno, il conteggio dei secondi riparte da zero, per cui per effettuare la sincronizzazione del timer con un altro orologio, basta digitare l’ultimo numero relativo ai minuti, allo scadere del 60° secondo dell’orologio di riferimento.</p>
<p style="text-align: justify;">Da questo momento in poi e fintanto che il timer sarà alimentato, ogni giorno alle ore prefissate, le uscite saranno attivate o disattivate con regolarità.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><span style="text-decoration: underline;">Circuito elettrico</span></p>
<p style="text-align: justify;">Il circuito elettrico è visibile in Fig.1. Oltre al PIC troviamo una tastiera a matrice di righe e colonne ed un display a due righe per sedici caratteri funzionante con logica HD44780. La parte di circuito visibile all’interno del rettangolo rosso, si riferisce al circuito di pilotaggio dei relè; anche se sullo schema è rappresentato una sola volta, in realtà bisogna realizzarne quattro, una per ogni uscita disponibile, da collegare oltre che al piedino 13 del PIC, anche ai piedini 12; 11 e 10.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><span style="text-decoration: underline;">Montaggio</span></p>
<p style="text-align: justify;">Vista la semplicità circuitale, il timer può anche essere realizzato su basetta mille fori. A montaggio ultimato, dato che non ci sono punti di taratura, il timer se alimentato dovrà funzionare immediatamente. Naturalmente dovrete prima programmare il PIC col file HEX che potrete richiedere al mio indirizzo, dove potrete anche inoltrare eventuali richieste di chiarimenti. Sperando di non aver dimenticato nulla, salutandovi auguro a tutti buon lavoro e buon divertimento.</p>
<p style="text-align: right;">IT9DPX &#8211; #135  (Francesco M.)</p>


<p>Related posts:<ol><li><a href='http://www.gdevnet.it/2009/01/31/frequenzimetro-programmabile-per-ts-830m/' rel='bookmark' title='Permanent Link: Frequenzimetro programmabile per TS-830M'>Frequenzimetro programmabile per TS-830M</a></li>
<li><a href='http://www.gdevnet.it/2009/01/11/impariamo-ad-usare-il-protocollo-hd44780/' rel='bookmark' title='Permanent Link: Impariamo ad usare il protocollo HD44780'>Impariamo ad usare il protocollo HD44780</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.gdevnet.it/2009/01/17/timer-ciclico-programmabile-24h/feed/</wfw:commentRss>
		<slash:comments>71</slash:comments>
		</item>
		<item>
		<title>Impariamo ad usare il protocollo HD44780</title>
		<link>http://www.gdevnet.it/2009/01/11/impariamo-ad-usare-il-protocollo-hd44780/</link>
		<comments>http://www.gdevnet.it/2009/01/11/impariamo-ad-usare-il-protocollo-hd44780/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 10:42:40 +0000</pubDate>
		<dc:creator>f.mira</dc:creator>
				<category><![CDATA[Elettronica]]></category>
		<category><![CDATA[Schemi e Progetti]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[hd44780]]></category>
		<category><![CDATA[it9dpx]]></category>
		<category><![CDATA[lcd]]></category>

		<guid isPermaLink="false">http://www.gdevnet.it/?p=225</guid>
		<description><![CDATA[Semplicissimo circuito dimostrativo che vi consentirà di verificare sperimentalmente e con poca difficoltà, tutte le possibilità operative di un display intelligente a cristalli liquidi da due righe per sedici caratteri, col solo ausilio della porta parallela del vostro P.C.


Related posts:<ol><li><a href='http://www.gdevnet.it/2009/01/11/impariamo-ad-usare-il-protocollo-i2c/' rel='bookmark' title='Permanent Link: Impariamo ad usare il protocollo I2C.'>Impariamo ad usare il protocollo I2C.</a></li>
<li><a href='http://www.gdevnet.it/2009/01/17/timer-ciclico-programmabile-24h/' rel='bookmark' title='Permanent Link: Timer ciclico programmabile 24h.'>Timer ciclico programmabile 24h.</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p class="MsoBodyText" style="TEXT-ALIGN: left"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;"><span style="color: #ff0000;">Usiamo il protocollo “HD44780”</span><strong> </strong></span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Salve, vorrei descrivervi in questa occasione il funzionamento ed i comandi necessari a pilotare in modo corretto un display a cristalli liquidi. Ormai se ne trovano tanti in giro nei negozi e nelle bancarelle a prezzi veramente allettanti che vanno da circa cinque Euro e oltre per i tipi più sofisticati. Per la precisione analizzeremo tutti i codici di controllo per attivare un display a due righe da sedici caratteri ciascuna, funzionante con logica “HD44780” della Hitachi. Vorrei subito chiarire che quando parliamo di sedici caratteri per riga, ci riferiamo ai caratteri visualizzati, perché in realtà ve ne sono altri ventiquattro fuori schermo per un totale di quaranta caratteri per riga.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Per esplicitare meglio le idee mi avvarrò anche di un semplice programmino che ho preparato in “visual basic”, col quale potremo attraverso la porta parallela di un personal computer, inviare i vari codici di controllo al display e verificarne subito gli effetti. Il circuito elettrico da me utilizzato e che vi propongo, raffigura solo i collegamenti tra la porta parallela di un P.C. ed il display, infatti, per le prove dimostrative che faremo noi, non occorrono altri componenti. Per ragioni di sicurezza e di protezione dei circuiti interessati è consigliabile l’uso di una batteria di pile con una tensione complessiva compresa tra 4 e 5 volt. Nel mio caso ho utilizzato tre pile stilo, per un totale di circa 4,5 volt.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: center;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;"><a rel="”lightbox”" href="http://www.gdevnet.it/wp-content/uploads/2009/01/sch_hd.gif" rel="lightbox[225]"><img class="aligncenter size-medium wp-image-354" style="border: 1px solid black;" src="http://www.gdevnet.it/wp-content/uploads/2009/01/sch_hd-300x243.gif" alt="sch_hd" width="300" height="243" /></a><span id="more-225"></span><br />
</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;"><span style="color: #ff0000;">M</span><span style="color: #ff0000;">i raccomando per i collegamenti attenetevi scrupolosamente allo schema elettrico visibile in fig.1, procedendo con la massima cautela. Vi ricordo inoltre che un uso improprio della porta parallela potrebbe comportarne la sua immediata ed irreversibile distruzione; perciò qualora decideste di mettere in pratica i suggerimenti dati in questo articolo, lo farete solo a vostro rischio e pericolo. </span></span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Dopo aver effettuato i collegamenti, avviate il programma ed alimentate il circuito, a questo punto compariranno sul display una serie di rettangolini al posto dei caratteri che spariranno dopo che col mouse farete click sul pulsante inizializza. L’inizializzazione si rende necessaria ogni volta che si da alimentazione al display, serve ad impartire innanzi tutto i primi comandi relativi al tipo di comunicazione, se deve avvenire su quattro oppure su otto fili e se si sta lavorando con un display ad una o a due righe. </span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Tali codici espressi in esadecimale, sono dati col seguente ordine: 30-01-02-06-0F-14-28-01. Se clickate adesso sul pulasante invia testo, sul display comparirà la scritta text2 visibile nella finestra sopra al pulsante in questione. Se cambierete il contenuto di tale finestra, sostituendo text2 con qualsiasi altro testo e premendo “invia testo”, quest’ultimo contenuto sarà inviato al display e comparirà sullo schermo LCD.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Dopo questo breve collaudo, passiamo adesso ad analizzare tutti i possibili codici binari che possiamo inviare al display, essi sono rappresentati nella <a class="aligncenter" href="http://digilander.libero.it/francodpx/filefoto/ISTR_HD.gif" rel="lightbox[225]" target="_blank"><span style="color: #ff0000;">TABELLA N°1</span></a> con una breve descrizione relativa ad ogni singolo bit.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: center;">
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">1) Analizzando la prima riga ci rendiamo subito conto che abbiamo la possibilità di inviare un solo codice e cioè 0000.0001; tale codice sarà inviato ogni qual volta clickeremo sul pulsante “cancella display” e ciò comporterà la cancellazione di tutti i caratteri, anche di quelli fuori schermo ed il posizionamento del cursore all’inizio della prima riga.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">2) Anche per la seconda riga possiamo inviare un solo codice utile e cioè “0000.0010” semplicemente clickando sul pulsante “curs. e sch. all’inizio”, ciò comporterà il posizionamento del cursore e dello schermo all&#8217;inizio della prima riga, lasciando inalterato il contenuto dello schermo.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">3) Esaminando adesso la terza riga, ci accorgiamo che il terzo bit e sempre a livello logico uno, quindi i possibili codici potranno essere soltanto quattro e cioè: </span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0000.0110&#8243; per spostare il cursore a destra dopo la stampa di un carattere;</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0000.0100&#8243; per spostare il cursore a sinistra dopo la stampa di un carattere;</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0000.0101&#8243; per spostare lo schermo a destra dopo la stampa di un carattere;</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0000.0111&#8243; per spostare lo schermo a sinistra dopo la stampa di un carattere.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Provate ad abilitare a turno le quattro modalità e ad inviare il testo al display per verificarne gli effetti.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">4) Anche nella quarta riga notiamo che un bit è sempre ad uno logico, in questo caso il quarto bit. Il terzo bit serve a determinare se lo schermo è attivo cioè visibile oppure spento cioè invisibile. Tale funzione si può facilmente verificare premendo sul pulsante &#8220;schermo off&#8221;. Gli altri due bits in combinazione tra loro, daranno origine a quattro possibili codici come segue: </span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0000.1110&#8243; per accendere il cursore;</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0000.1100&#8243; per spegnere il cursore;</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0000.1111&#8243; per rendere il carattere sotto cursore lampeggiante;</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0000.1101&#8243; per rendere il carattere ed il cursore lampeggiante.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Anche in questo caso abilitando a turno le quattro modalità intervenendo sui quattro relativi pulsanti, sarà possibile verificarne immediatamente gli effetti.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">5) La quinta riga ormai siamo perfettamente in grado di individuarla, perché il quinto bit è sempre ad uno logico, mentre con gli altri due bits in combinazione tra loro, sarà possibile ottenere quattro possibili codici come segue: </span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0001.0100&#8243; per spostare il cursore a destra;</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0001.0000&#8243; per spostare il cursore a sinistra;</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0001.1100&#8243; per spostare lo schermo a destra;</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">&#8220;0001.1000&#8243; per spostare lo schermo a sinistra.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Anche in questo caso clickando a turno sui quattro pulsanti, sarà possibile verificare subito l’effetto prodotto.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">6) La sesta riga la riconosciamo dal suo sesto bit sempre a livello logico uno.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Il quinto bit indicato con &#8220;DL&#8221; se posto a LL1, attiverà la comunicazione del display col mondo esterno attraverso un buffer ad otto fili; mentre se posto a LL0 attiverà la comunicazione con un buffer a quattro fili come nel nostro caso.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Il quarto bit indicato con &#8220;N&#8221; se posto a LL1, attiverà la comunicazione con un display a due righe come nel nostro caso; mentre se posto a LL0 attiverà la comunicazione con un display ad una riga. Il terzo bit indicato con &#8220;F&#8221; se posto a LL1, attiverà la visualizzazione dei caratteri da 5*10 pixel; mentre se posto a LL0 attiverà la visualizzazione dei caratteri da 5*7 pixel come nel nostro caso.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">7) La settima riga riconoscibile per il suo settimo bit sempre a LL1, ci permette di individuare ogni riga di ognuno degli otto caratteri grafici modificabili dall’utente. Dobbiamo prima ricordare che ogni carattere è costituito da otto righe, ed ogni riga è costituita da cinque pixel, come rappresentato nella Tabella n° 2. Ebbene determineremo il numero del carattere inserendo dei bits al posto delle lettere &#8220;C&#8221; in modo da ottenere un codice binario da zero a sette; e determineremo il numero di riga inserendo dei bits al posto delle lettere &#8220;R&#8221; in modo da ottenere un codice binario da zero a sette. In questo modo potremo scrivere e quindi modificare una qualsiasi delle otto righe costituenti uno degli otto caratteri definibili dall’utente. Il contenuto della riga e quindi lo stato dei relativi pixel va inviato come dato normale, come vedremo più avanti nella decima riga.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Per semplicità nell’esempio riportato nel programma dimostrativo, ho preferito dare le coordinate iniziali del primo carattere e della prima riga, cioè il codice &#8220;0100.0000&#8243;; e successivamente uno dietro l’altro il contenuto di tutte le righe, per un totale di sessantaquattro dati (righe). Nell’esempio riportato nella <a href="http://digilander.libero.it/francodpx/filefoto/PERS_CHR.gif" rel="lightbox[225]" target="_blank"><span style="color: #ff0000;">TABELLA n° 2</span></a> , si può vedere come dopo aver realizzato una griglia di 5*7, e dopo aver inserito degli uno in corrispondenza dei bits da accendere, si possa facilmente ottenere un carattere grafico che riproduce un diodo zener, ed a destra si possono ricavare i valori decimali da andare ad inserire in memoria per la personalizzazione dei caratteri. Nella <a href="http://digilander.libero.it/francodpx/filefoto/PERS_CHR.gif" rel="lightbox[225]" target="_blank"><span style="color: #ff0000;">TABELLA n° 3</span></a> invece, è visibile la griglia per definire il simbolo elettrico del condensatore. A tal proposito provate a clickare sui pulsanti &#8220;AGGIORNA (1) &#8221; o &#8220;AGGIORNA (2) &#8221; seguiti dal pulsante &#8220;EFFETTO&#8221;, vedrete dei caratteri in rapida successione sullo schermo, tale da dare un effetto di animazione.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: center;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;"><br />
</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: center;">
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;"> <img src='http://www.gdevnet.it/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> L’ottava riga riconoscibile per il suo ottavo bit sempre a LL1, ci permette di posizionare il </span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">cursore su una delle quaranta locazioni della prima o della seconda riga del display, senza modificare il carattere contenuto nella locazione stessa. Ciò è possibile modificando in modo opportuno gli altri sette bits dell’ottava riga; che complessivamente dovrà contenere un codice esadecimale compreso tra 80h e A7h per indirizzare la prima riga del display; e tra C0h e E7h per indirizzare la seconda riga del display.Fin qui abbiamo visto che ogni riga è facilmente individuabile dal suo bit più a sinistra sempre a LL1, lo stesso criterio di riconoscimento è adottato ed implementato nella logica di controllo interna del display. </span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">9) La nona riga non rappresenta un dato da inviare al display, ma un dato proveniente dal display che possiamo quindi leggere come se si trattasse di una memoria. Tale valore se letto, ci consente di conoscere in qualsiasi momento la posizione occupata dal cursore in quell’istante; tenendo presente che nella lettura viene ignorato l’ottavo bit che è di controllo. Inoltre leggendo il bit &#8220;BF&#8221; possiamo sapere se il display è occupato con operazioni sue interne, cioè quando tale bit è a LL1; nel qual caso dobbiamo attendere che il bit torni a LL0 prima di inviare altri dati al display. <a href="http://digilander.libero.it/francodpx/filefoto/FLUS_LETT.gif" rel="lightbox[225]" target="_blank"><span style="color: #ff0000;">FLOW-CHART LETTURA</span></a></span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: center;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;"><br />
</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: center;">
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">10) La decima riga serve ad inviare i codici di controllo al display, oppure un carattere da scrivere sul display (DDRAM) o sui caratteri definibili dall’utente (CGRAM). Tenete presente che dopo ogni operazione di scrittura, il contatore della posizione del cursore (Address Counter) sarà incrementato automaticamente di una unità. <a href="http://digilander.libero.it/francodpx/filefoto/FLUS_SCRI.gif" rel="lightbox[225]" target="_blank"><span style="color: #ff0000;">FLOW-CHART SCRITTURA</span></a></span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: center;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;"> </span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: center;">
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">11) L’undicesima ed ultima riga, come la nona riga serve a leggere un dato proveniente dal display (DDRAM), relativo al codice del carattere sotto al cursore in quel momento, oppure a leggere il valore binario della riga di uno dei caratteri definiti dall’utente (CGRAM). Anche in questo caso, tenete presente che dopo ogni operazione di lettura, il contatore della posizione del cursore (Address Counter) sarà incrementato automaticamente di una unità. </span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Quanto fin qui descritto per grandi linee, oltre che verificato col programmino dimostrativo, può essere supportato dai diagrammi di flusso che ci aiuteranno a stilare eventuali software di pilotaggio del display; nel linguaggio da noi scelto.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Prima di concludere ritengo opportuno spendere due paroline anche riguardo ai collegamenti fisici effettuati tra P.C. e display. Iniziamo col ricordare che le linee che si dipartono dai pins della porta parallela, indicati coi numeri 6; 7; 8 e 9; sono solo quattro degli otto fili di input/output, facenti capo al registro 0378h della porta parallela. A stabilire quando le linee sono d’uscita o d’ingresso, provvede il quinto bit del registro 037Ah che se posto a uno impone che linee siano d’input, se posto a zero impone che le linee siano d’output. Sempre al registro 037Ah fanno capo le linee di output dei pins 1; 14 e 17; con le quali come visto precedentemente, si comanda il display in scrittura, lettura od indirizzamento. Per finire il pin n° 20 è il collegamento di riferimento a massa per tutti i fili di input/output della porta parallela.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: justify;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">Spero di non aver tralasciato nulla d’importante e di essere riuscito a rendere più familiare un oggetto molto utile, che per la sua versatilità è presente in molti progetti elettronici. Con questo vi saluto e vi auguro buon divertimento e naturalmente non esitate a contattarmi per eventuali suggerimenti o chiarimenti.</span></span></span></p>
<p class="MsoNormal" style="margin: 5pt 0cm; text-align: right;"><span style="mso-bidi-font-size: 14.0pt;"><span style="font-family: Times New Roman;"><span style="font-size: small;">IT9DPX &#8211; #135 (Francesco M.)</span></span></span></p>


<p>Related posts:<ol><li><a href='http://www.gdevnet.it/2009/01/11/impariamo-ad-usare-il-protocollo-i2c/' rel='bookmark' title='Permanent Link: Impariamo ad usare il protocollo I2C.'>Impariamo ad usare il protocollo I2C.</a></li>
<li><a href='http://www.gdevnet.it/2009/01/17/timer-ciclico-programmabile-24h/' rel='bookmark' title='Permanent Link: Timer ciclico programmabile 24h.'>Timer ciclico programmabile 24h.</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.gdevnet.it/2009/01/11/impariamo-ad-usare-il-protocollo-hd44780/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

