<?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>DAC Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/dac/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/dac/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Fri, 28 Dec 2018 17:46:46 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>DAC Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/dac/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Usare la porta DAC del PCF8591P</title>
		<link>https://logicaprogrammabile.it/arduino-usare-porta-dac-pcf8591p/</link>
					<comments>https://logicaprogrammabile.it/arduino-usare-porta-dac-pcf8591p/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 04 Nov 2013 10:17:55 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[DAC]]></category>
		<category><![CDATA[I2C]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3886</guid>

					<description><![CDATA[<p>Come generare una tensione analogica da un dato digitale Nel precedente articolo abbiamo imparato a gestire i quattro ingressi analogici del dispositivo PCF8591P. In questo tutorial impareremo a utilizzare la porta DAC (Digital to Analog Converter) per creare una tensione continua partendo da un dato...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-usare-porta-dac-pcf8591p/">Usare la porta DAC del PCF8591P</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come generare una tensione analogica da un dato digitale</h1>
<p>Nel<a title="Come usare l’integrato PCF8591" href="https://logicaprogrammabile.it/arduino-usare-integrato-pcf8591/"> precedente articolo</a> abbiamo imparato a gestire i quattro ingressi analogici del dispositivo <strong>PCF8591P</strong>. In questo tutorial impareremo a utilizzare la porta <strong><a href="http://it.wikipedia.org/wiki/Convertitore_digitale-analogico" target="_blank" rel="noopener">DAC</a></strong> (<strong>Digital to Analog Converter</strong>) per creare una tensione continua partendo da un dato digitale.</p>
<p>Lo schema elettrico rimane pressoché invariato. L&#8217;unica modifica riguarda l&#8217;eliminazione dei collegamenti sui pin analogici <strong>AIN</strong> ed il collegamento al <strong>pin AOUT</strong> di un diodo led rosso da 3mm e di una resistenza (R) da 100Ohm:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/10/SchemaElettricoPCF8591P_ANA.png"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-3889" src="https://logicaprogrammabile.it/wp-content/uploads/2013/10/SchemaElettricoPCF8591P_ANA.png" alt="Usare DAC pcd8591p" width="375" height="274" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/10/SchemaElettricoPCF8591P_ANA.png 375w, https://logicaprogrammabile.it/wp-content/uploads/2013/10/SchemaElettricoPCF8591P_ANA-300x219.png 300w" sizes="(max-width: 375px) 100vw, 375px" /></a><span id="more-3886"></span></p>
<p>L&#8217;indirizzo del <strong>PCF8591P</strong> sul bus I2C non viene modificato, rispetto <a title="Come usare l’integrato PCF8591" href="https://logicaprogrammabile.it/arduino-usare-integrato-pcf8591/">all&#8217;articolo precedente</a>, dato che i pin A0, A1 e A2 sono collegati a massa.<br />
Possiamo sempre gestire l&#8217;acquisizione dai pin ADC (AIN0, AIN1, AIN2, AIN3), una funzione non esclude l&#8217;altra.</p>
<p>La risoluzione del convertitore digitale analogico è di 8bit quindi i valori possibili possono essere espressi con 256 valori digitali (da 0 a 255). Il valore di tensione associato per ogni valore digitali dipende dalla tensione presente sul pinVref e sul pin AGnd secondo questo grafico:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/10/DAC_Graph.png"><img decoding="async" class="aligncenter size-full wp-image-3891" src="https://logicaprogrammabile.it/wp-content/uploads/2013/10/DAC_Graph.png" alt="DAC_Graph" width="381" height="294" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/10/DAC_Graph.png 381w, https://logicaprogrammabile.it/wp-content/uploads/2013/10/DAC_Graph-300x231.png 300w" sizes="(max-width: 381px) 100vw, 381px" /></a></p>
<p>Nel circuito precedente il pin14 VRef è collegato alla 5Vdc mentre il pin13 Agnd è collegato a massa. Quindi per conoscere il valore di tensione associato alla variazione di un singolo bit possiamo eseguire questo calcolo:</p>
<p style="text-align: center;"><strong>tensione_rif/bit_totali = (Vref-Agnd) / 256 =&gt; (5-0)/256 =&gt; 19,5 mVdc per variazione d bit<br />
</strong></p>
<p>ad esempio se caricassi sul <strong>DAC data register</strong> il valore decimale <strong>127</strong> otterrei in uscita dal <strong>pin15</strong> del PCF8591 la tensione di:</p>
<p style="text-align: center;"><strong>Vout = ValDAC * ValStep =&gt; 127 * 19.5mVdc =&gt; 2.47Vdc</strong></p>
<p>Cambiando il valore di Vref, ad esempio portandolo a 3.3Vdc otteniamo delle variazioni di tensione per bit più piccole. Questa scelta dipende dal tipo di progetto che vogliamo realizzare.</p>
<p>Per attivare la <strong>porta DAC</strong> del PCF8591P dobbiamo settare al livello alto il <strong>bit7</strong> (Analog Output Enable Flag) del registro <strong>Control Byte</strong>.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/10/ControlRegister_ANA.png"><img decoding="async" class="aligncenter size-full wp-image-3890" src="https://logicaprogrammabile.it/wp-content/uploads/2013/10/ControlRegister_ANA.png" alt="Grafico DAC" width="427" height="183" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/10/ControlRegister_ANA.png 427w, https://logicaprogrammabile.it/wp-content/uploads/2013/10/ControlRegister_ANA-300x128.png 300w" sizes="(max-width: 427px) 100vw, 427px" /></a></p>
<p>La sequenza di byte da inviare al <strong>PCF8591P</strong> segue lo schema rappresentato nella figura seguente:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/10/PCF8591P_DAC_Register.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3894" src="https://logicaprogrammabile.it/wp-content/uploads/2013/10/PCF8591P_DAC_Register.png" alt="PCF8591 DAC Register" width="557" height="150" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/10/PCF8591P_DAC_Register.png 557w, https://logicaprogrammabile.it/wp-content/uploads/2013/10/PCF8591P_DAC_Register-300x80.png 300w" sizes="auto, (max-width: 557px) 100vw, 557px" /></a></p>
<p>ovvero, dopo aver &#8216;selezionato&#8217; sul bus I2C il dispositivo tramite il suo indirizzo, inviamo il byte di configurazione e successivamente il byte contenente il valore digitale che verrà poi convertito in segnale analogico.</p>
<p>Passando al codice di esempio ho realizzato uno sketch che ha il compito di  far variare la tensione sul pin15 da 5Vdc sino a scendere gradualmente a 0Vdc per poi ritornare, sempre gradualmente, a 5Vdc, ottenendo un effetto fade sul diodo led collegato come da schema:</p>
<pre class="lang:arduino decode:true ">#include &lt;Wire.h&gt;
byte ciclo=0;

void setup()
{
 //inizializzo la libreria Wire come Master
 Wire.begin();
}

void loop()
{
 for(ciclo = 255; ciclo &gt; 0; ciclo--)
 {
  Wire.beginTransmission(0x48);
  //invio un byte
  Wire.write(byte(0x40));
  Wire.write(byte(ciclo));
  //fine trasmissione
  Wire.endTransmission();
  delay(10);
 }
 
 for(ciclo = 0; ciclo &lt; 255; ciclo++)
 {
  Wire.beginTransmission(0x48);
  //invio un byte
  Wire.write(byte(0x40));
  Wire.write(byte(ciclo));
  //fine trasmissione
  Wire.endTransmission();
  delay(10);
 }
}</pre>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-usare-porta-dac-pcf8591p/">Usare la porta DAC del PCF8591P</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-usare-porta-dac-pcf8591p/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
