<?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>MCP3201 Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/mcp3201/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/mcp3201/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Tue, 28 Jan 2020 14:17:29 +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>MCP3201 Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/mcp3201/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Convertitore A/D MCP3201</title>
		<link>https://logicaprogrammabile.it/convertitore-a-d-mcp3201/</link>
					<comments>https://logicaprogrammabile.it/convertitore-a-d-mcp3201/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 04 Feb 2019 07:00:13 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[ADC]]></category>
		<category><![CDATA[MCP3201]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=5958</guid>

					<description><![CDATA[<p>Aggiungere canali ADC ad Arduino UNO Arduino UNO dispone di 6 canali ADC che permettono di acquisire segnali analogici con una risoluzione di 10 bit. Questo significa che il dato analogico può essere espresso con un valore digitale compreso tra 0 e 1024 ( 2^10=1024)....</p>
<p>The post <a href="https://logicaprogrammabile.it/convertitore-a-d-mcp3201/">Convertitore A/D MCP3201</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Aggiungere canali ADC ad Arduino UNO</h1>
<p>Arduino UNO dispone di 6 canali ADC che permettono di acquisire segnali analogici con una risoluzione di 10 bit. Questo significa che il dato analogico può essere espresso con un valore digitale compreso tra 0 e 1024 ( 2^10=1024). Nella maggior parte dei tutorial che ho scritto la risoluzione di 10 bit è stata più che sufficiente per acquisire i segnali proveniente dai sensore analogici che usai.</p>
<p>Capita però che in particolari casi abbiamo bisogno di avere una risoluzione maggiore e piuttosto che cambiare scheda, è possibile utilizzare un convertitore analogico digitale esterno, impiegando un integrato apposito.</p>
<p>Gli ADC possono avere uno o più canali, risoluzioni e velocità di campionamento differenti. Quale scegliere dipende sostanzialmente dalle specifiche di progetto.<br />
In uno degli <a href="https://logicaprogrammabile.it/arduino-usare-integrato-pcf8591/">articoli precedenti</a> ho utilizzato l&#8217;integrato PCF8591. Questo integrato ha 4 porte ADC a 8 bit e 1 porta DAC.</p>
<p>In questo articolo invece andremmo ad utilizzare l&#8217;integrato MCP3201 che ha un canale con risoluzione di 12 bit.</p>
<p><span id="more-5958"></span>Il convertitore A/D MCP3201</p>
<p>Questo convertitore a singolo canale di tipo sample &amp; hold, viene interfacciato con il microcontrollore tramite bus SPI. Nella figura seguente viene illustrato lo schema a blocchi.</p>
<figure id="attachment_6018" aria-describedby="caption-attachment-6018" style="width: 442px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" class="wp-image-6018 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2019/01/mcp3201.png" alt="Convertitore analogico digitale MCP3201" width="442" height="396" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/01/mcp3201.png 442w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/mcp3201-300x269.png 300w" sizes="(max-width: 442px) 100vw, 442px" /><figcaption id="caption-attachment-6018" class="wp-caption-text">Convertitore analogico digitale MCP3201</figcaption></figure>
<p>L&#8217;integrato MCP3201 ha un range di tensioni di lavoro che vanno da 2.7 V a 5.5 Vdc, la corrente di lavoro è di circa 300uA mentre in standby assorbe circa 500nA, quindi si presta in molte applicazioni dove il risparmio energetico è fondamentale.</p>
<p>Nella figura seguente viene proposto lo schema elettrico del circuito di prova.</p>
<figure id="attachment_6022" aria-describedby="caption-attachment-6022" style="width: 603px" class="wp-caption aligncenter"><img decoding="async" class=" wp-image-6022" src="https://logicaprogrammabile.it/wp-content/uploads/2019/01/Arduino_mcp3201.png" alt="Collegamenti tra arduino uno e mcp3201" width="603" height="426" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/01/Arduino_mcp3201.png 747w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/Arduino_mcp3201-300x212.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/Arduino_mcp3201-585x413.png 585w" sizes="(max-width: 603px) 100vw, 603px" /><figcaption id="caption-attachment-6022" class="wp-caption-text">Collegamenti Arduino UNO MCP3201</figcaption></figure>
<p>La prima cosa da notare è che la linea MOSI (pin 11 di Arduino UNO) del bus SPI non viene utilizzata. Questo perchè per ricevere i dati dall&#8217;MCP3201 viene utilizzata la line CS e il segnale di clock del bus SPI. Nella figura seguente viene mostrato il grafico dei timing delle linee CS, CLK e Dout:</p>
<figure id="attachment_6026" aria-describedby="caption-attachment-6026" style="width: 590px" class="wp-caption aligncenter"><img decoding="async" class="size-full wp-image-6026" src="https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing.png" alt="MCP3201 timing" width="590" height="184" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing.png 590w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing-300x94.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing-585x182.png 585w" sizes="(max-width: 590px) 100vw, 590px" /><figcaption id="caption-attachment-6026" class="wp-caption-text">Andamento dei segnali MCP3201</figcaption></figure>
<p>Il microcontrollore pone a livello basso la linea CS per avviare la comunicazione con l&#8217;integrato MCP3201. A questo punto il segnale di clock generato dal microcontrollore viene utilizzato per avviare la conversione analogico digitale. Nella figura seguente viene illustrato dettagliatamente il ciclo di conversione e di trasferimento dei dati.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6028" src="https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing_Dettagliato.png" alt="ADC MCP 3201 timing dettagliato" width="724" height="280" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing_Dettagliato.png 724w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing_Dettagliato-300x116.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing_Dettagliato-585x226.png 585w" sizes="auto, (max-width: 724px) 100vw, 724px" /></p>
<p>Osserviamo il segnale di clock, dopo il terzo impulso è disponibile sulla linea Dout il bit più significativo (MSB) del dato analogico. Gli impulsi seguenti del segnale di clock permettono di avere i restanti bit del dato digitale. Da notare che il bit B1 viene ripetuto al sedicesimo clock e deve essere rimosso quando andiamo a ricostruire il dato digitale del segnale analogico. Questo può essere fatto shiftando a destra tutti i bit di una posizione.</p>
<p>Terminata la lettura dei due bute il microcontrollore mette al livello alto la line CS.</p>
<h3>Il codice di esempio</h3>
<p>Il seguente codice permette di leggere il valore della conversione analogico digitale dell&#8217;integrato MCP3201</p>
<pre class="EnlighterJSRAW" data-enlighter-language="avrasm">#define ADC_SELECT 10

int PrimoByte = 0;
int SecondoByte = 0;
int Lettura = 0;

void setup() {

pinMode (ADC_SELECT, OUTPUT);

//init del MCP3201
digitalWrite(ADC_SELECT, 0);
delay(100);
digitalWrite(ADC_SELECT, 1);

//init seriale
Serial.begin(9600);
delay(100);

// init SPI
SPI.begin();
delay(100);
}

void loop() {

digitalWrite(ADC_SELECT, 0);
PrimoByte = SPI.transfer(0);
SecondoByte = SPI.transfer(0);
digitalWrite(ADC_SELECT, 1);

SPI.endTransaction();

Lettura = ((PrimoByte &amp;amp;amp; 0x1F) &amp;amp;lt;&amp;amp;lt; 8) | SecondoByte;

//elimino il bit di ridondanza
Lettura = Lettura &amp;amp;gt;&amp;amp;gt; 1;

Serial.print("Dato analogico= ");
Serial.println(Lettura);

delay(500);

}</pre>
<p>&nbsp;</p>
<p>Il costo dell&#8217;integrato mcp3201 è di circa 2.5€.</p>
<p>The post <a href="https://logicaprogrammabile.it/convertitore-a-d-mcp3201/">Convertitore A/D MCP3201</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/convertitore-a-d-mcp3201/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
