<?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>Programmazione Archives</title>
	<atom:link href="https://logicaprogrammabile.it/category/programmazione-sviluppo-software/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/category/programmazione-sviluppo-software/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Mon, 11 Jan 2021 18:48:26 +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>Programmazione Archives</title>
	<link>https://logicaprogrammabile.it/category/programmazione-sviluppo-software/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>MQTT, installare Mosquitto sul Raspberry PI</title>
		<link>https://logicaprogrammabile.it/mqtt-installare-mosquitto-raspberry-pi-progetti-iot/</link>
					<comments>https://logicaprogrammabile.it/mqtt-installare-mosquitto-raspberry-pi-progetti-iot/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 11 Jan 2021 07:00:45 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[MQTT]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6442</guid>

					<description><![CDATA[<p>Utilizzare MQTT nei progetti iot MQTT (Message Queue Telemetry Transport) è un protocollo di comunicazione progettato per trasferire messaggi occupando una banda molto ridotta. Per questo viene spesso impiegato in ambito IoT. Il metodo di trasmissione e ricezione dei messaggi è asincrono e si basa...</p>
<p>The post <a href="https://logicaprogrammabile.it/mqtt-installare-mosquitto-raspberry-pi-progetti-iot/">MQTT, installare Mosquitto sul Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Utilizzare MQTT nei progetti iot</h1>
<p>MQTT (Message Queue Telemetry Transport) è un protocollo di comunicazione progettato per trasferire messaggi occupando una banda molto ridotta. Per questo viene spesso impiegato in ambito IoT. Il metodo di trasmissione e ricezione dei messaggi è asincrono e si basa su una architettura publish/subscribe (mittente/destinatario).</p>
<p>Il mittente ed il destinatario non possono però scambiarsi messaggi direttamente tra loro ma necessitano di un intermediario chiamato dispatcher o broker.</p>
<p>Lo scambio di dati avviene in questo modo: il mittente (publisher) invia un messaggio al dispatcher. I destinatari, a loro volta, scelgono quali messaggi ricevere comunicandolo al dispatcher. Il dispatcher quindi invia il messaggio solo ai dispositivi che si nono iscritti (subscribe) per la ricezione dei messaggi.</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-6446" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/pub_sub_mqtt.jpg" alt="" width="603" height="228" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/pub_sub_mqtt.jpg 603w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/pub_sub_mqtt-300x113.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/pub_sub_mqtt-150x57.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/pub_sub_mqtt-585x221.jpg 585w" sizes="(max-width: 603px) 100vw, 603px" /></p>
<p><span id="more-6442"></span></p>
<p>Se al dispatcher sono collegati diversi mittenti e destinatari come è possibile scegliere a chi mandare il messaggio o da chi riceverlo?</p>
<h2>MQTT utilizza i Topics</h2>
<p>Il meccanismo di scambio dati si basa utilizzando i topics, una struttura gerarchica simile a quella per la gestione delle directory in un files system.</p>
<p>Quindi il mittente decide un topic sul quale pubblica un messaggio, ad esempio</p>
<pre>/sensore1</pre>
<p>il destinatario può leggere il messaggio abbonandosi al topics:</p>
<pre>/sensore1</pre>
<p>La figura illustra quanto detto:</p>
<p><img decoding="async" class="aligncenter size-full wp-image-6447" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt.jpg" alt="" width="834" height="436" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt.jpg 834w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt-300x157.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt-150x78.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt-768x401.jpg 768w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt-585x306.jpg 585w" sizes="(max-width: 834px) 100vw, 834px" /></p>
<p>Riepiloghiamo i concetti in questi pochi punti:</p>
<ul>
<li>I messaggi non sono inviati direttamente ai destinatari;</li>
<li>Viene utilizzato un dispatcher o broker che permette lo scambio dei messaggi tra mittenti(publisher) e destinatari(subscriber)</li>
<li>Il dispatcher organizza i messaggi in topics e gli ridistribuisce ai destinatari che si sono abbonati al topic.</li>
<li>Tutti i dispositivi collegati al dispatcher possono inviare o ricevere messaggi.</li>
<li>Solitamente il dispatcher non memorizza i messaggi.</li>
</ul>
<h2>Installare MOSQUITTO</h2>
<p>L&#8217;elemento fondamentale in una architettura <strong>MQTT</strong> è il dispatcher o <strong>broker</strong>. Se i nostri dispositivi sono collegati ad internet possiamo utilizzare un servizio web oppure nei casi di un sistema stand alone, utilizziamo un nostro broker da installare su una scheda Raspberry PI.</p>
<p>Un software open source che potrebbe essere utilizzato per i nostri lavori è <a href="https://mosquitto.org/">Eclipse Mosquitto</a>, un broker molto leggero installabile su single board computer come il Raspberry PI.</p>
<p>Apriamo un terminale sul nostro Raspberry, o colleghiamoci con un client ssh, digitiamo il seguente commando:</p>
<pre>sudo apt-get install mosquitto</pre>
<p>premiamo invio e attendiamo il download e l&#8217;installazione del software.</p>
<p>Testiamo l&#8217;installazione verificando che il broker MQTT sia in esecuzione:</p>
<pre>sudo service mosquitto status</pre>
<p><img decoding="async" class="aligncenter size-full wp-image-6451" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mosquitto_status.jpg" alt="" width="757" height="402" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mosquitto_status.jpg 757w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mosquitto_status-300x159.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mosquitto_status-150x80.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mosquitto_status-585x311.jpg 585w" sizes="(max-width: 757px) 100vw, 757px" /></p>
<p>in particolare bisogna notare la presenza della stringa Active: active (running).</p>
<p>Per fermare il servizio utilizziamo il seguente comando:</p>
<pre>sudo service mosquitto stop</pre>
<p>mentre per avviarlo digitiamo:</p>
<pre>sudo service mosquitto start</pre>
<p>oppure stoppare e riavviare il servizio con un singolo comando:</p>
<pre>sudo service mosquitto restart</pre>
<h2>Installare client MQTT</h2>
<p>Una volta installato il broker sul Raspberry PI eseguiamo delle prove utilizzando un programma per pubblicare un topic e un programma per abbonarsi.</p>
<p>Digitando il seguente comando installeremo quanto richiesto:</p>
<pre>sudo apt-get install mosquitto-clients</pre>
<p>Attendiamo il completamento dell&#8217;installazione e se non si sono verificati errori dovremmo avere disponibili i seguenti programmi</p>
<pre>mosquitto_sub
mosquitto_pub</pre>
<p>come si intuisce dal nome il primo è il programma che funge da <strong>subscriber</strong> mentre il secondo è il programma che funge da <strong>publisher</strong>.</p>
<p>Per poter eseguire un semplice test apriamo due finestre terminale o, se ci colleghiamo al Raspberry da un altro host, due sessioni ssh.</p>
<p>Sul primo terminale abboniamoci a un topic eseguendo questo commando:</p>
<pre>mosquitto_sub -h localhost -t "mio_topic"</pre>
<p>(ci stiamo abbonando al topic denominato <strong>mio_topic</strong> che viene gestito dal broker che gira sulla macchina <strong>localhost</strong>)</p>
<p>Nella seconda finestra terminale lanciamo il publisher per inviare un messaggio al broker sul topic <strong>mio_topic</strong>:</p>
<pre>mosquitto_pub -h localhost -t "mio_topic" -m "ciamo mondo"</pre>
<p>Nelle immagini seguenti potete osservare lo scambio dei messaggi</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6454" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic.jpg" alt="" width="757" height="402" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic.jpg 757w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic-300x159.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic-150x80.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic-585x311.jpg 585w" sizes="auto, (max-width: 757px) 100vw, 757px" /></p>
<p>Nel primo terminale mi metto in ascolto sul topic chiamato <strong>mio_topic</strong></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6455" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>sul secondo terminale invio il messaggio &#8220;ciao mondo&#8221; al topic <strong>mio_topic</strong></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6456" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_2.jpg" alt="" width="757" height="402" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_2.jpg 757w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_2-300x159.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_2-150x80.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_2-585x311.jpg 585w" sizes="auto, (max-width: 757px) 100vw, 757px" /></p>
<p>Nel primo terminale osservo la ricezione del messaggio<strong> &#8220;ciao mondo&#8221;</strong>.</p>
<p>Questi due programmi sono molto utili per esercitarci e capire meglio come funziona il protocollo <strong>MQTT</strong>.</p>
<p>The post <a href="https://logicaprogrammabile.it/mqtt-installare-mosquitto-raspberry-pi-progetti-iot/">MQTT, installare Mosquitto sul Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/mqtt-installare-mosquitto-raspberry-pi-progetti-iot/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Micropython come ripristinare la PyBoard</title>
		<link>https://logicaprogrammabile.it/micropython-come-ripristinare-la-pyboard/</link>
					<comments>https://logicaprogrammabile.it/micropython-come-ripristinare-la-pyboard/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Thu, 06 Sep 2018 17:16:00 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Python]]></category>
		<category><![CDATA[micropython]]></category>
		<category><![CDATA[pyboard]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=5821</guid>

					<description><![CDATA[<p>Factory restore della PyBoard versione 1.1 Quando iniziamo a sperimentare con una scheda elettronica spesso e volentieri ci ritroviamo, involontariamente, a freezzare la scheda o a eliminare file necessari al corretto funzionamento della stessa.Per esempio se andate a cancellare i file contenuti nella flash (PyBFlash)della...</p>
<p>The post <a href="https://logicaprogrammabile.it/micropython-come-ripristinare-la-pyboard/">Micropython come ripristinare la PyBoard</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Factory restore della PyBoard versione 1.1</h1>



<p>Quando iniziamo a sperimentare con una scheda elettronica spesso e volentieri ci ritroviamo, involontariamente, a freezzare la scheda o a eliminare file necessari al corretto funzionamento della stessa.<br />Per esempio se andate a cancellare i file contenuti nella flash (PyBFlash)della scheda PyBoard, questi file potranno essere ripristinati solamente eseguendo un <strong><a href="https://en.wikipedia.org/wiki/Factory_reset">Factory Reset</a></strong>. Fortunatamente con la scheda PyBoard basata su Micropython è impossibile commettere errori software che potrebbero comprometterne permanentemente la funzionalità.</p>



<div class="wp-block-image">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="600" height="450" class="wp-image-5840 aligncenter" src="https://logicaprogrammabile.it/wp-content/uploads/2018/09/PYBv11.jpg" alt="schema della scheda pyboard basata su Micropython" srcset="https://logicaprogrammabile.it/wp-content/uploads/2018/09/PYBv11.jpg 600w, https://logicaprogrammabile.it/wp-content/uploads/2018/09/PYBv11-300x225.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2018/09/PYBv11-585x439.jpg 585w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>
</div>



<p>Per testare questa procedura andremmo a cancellare tutti i file presenti nella PyBFlash della scheda, ovvero:</p>



<ul class="wp-block-list">
<li>pybcdc.inf</li>
<li>README.txt</li>
<li>boot.py</li>
<li>main.py</li>
</ul>



<p>Cancellati questi file se eseguiamo il reset della scheda, l&#8217;unico file che verrà automaticamente rigenerato sarà il file boot.py</p>



<p><span id="more-5821"></span></p>



<h4 class="wp-block-heading">Come eseguire il factory reset</h4>



<p>Per poter ripristinare la nostra scheda <strong>PyBoard</strong> è necessario eseguire una semplice procedura utilizzando i pulsanti onboard.</p>



<ol class="wp-block-list">
<li>Alimentare la scheda utilizzando la porta usb.</li>
<li>Tenere premuto il pulsante USR.</li>
<li>Tenendo sempre premuto il pulsante USR, premiamo e rilasciamo il pulsante di Reset.</li>
<li>Il led Verde e Arancio inizieranno a lampeggiare, alternativamente e contemporaneamente.</li>
<li>Nell&#8217;istante in cui entrambi i led risultano accesi dobbiamo rilasciare il pulsante USR.</li>
<li>Il led Verde e Arancio lampeggeranno in contemporanea per alcuni istanti, in maniera molto veloce.</li>
<li>Il Led Verde e Arancio resteranno accesi e in contemporanea verrà acceso anche il led Rosso.</li>
<li>Questi tre led resteranno accesi per 4 secondi e successivamente si spegneranno.</li>
<li>La scheda è ora ripristinata alle condizioni iniziali.</li>
</ol>



<h4 class="wp-block-heading">Verifica della PyBoard</h4>



<p>Se la procedura è andata a buon fine dovremmo ritrovare nella PyBFlash i file originali che abbiamo precedentemente cancellato.</p>



<p>Verifichiamo che collegandoci via seriale otterremo una risposta dalla scheda.<br />Avviamo Putty e inseriamo i parametri corretti per il collegamento seriale alla PyBoard</p>



<div class="wp-block-image" style="text-align: center;">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="457" height="437" class="wp-image-5829 aligncenter" src="https://logicaprogrammabile.it/wp-content/uploads/2018/09/PromptRepl.png" alt="" srcset="https://logicaprogrammabile.it/wp-content/uploads/2018/09/PromptRepl.png 457w, https://logicaprogrammabile.it/wp-content/uploads/2018/09/PromptRepl-300x287.png 300w" sizes="auto, (max-width: 457px) 100vw, 457px" />
<figcaption>Configurazione di Putty</figcaption>
</figure>
</div>



<p>Cliccando sul pulsante Open potremmo osservare il caricamento della sessione seriale e l&#8217;avvio del prompt <a href="https://en.wikipedia.org/wiki/Read–eval–print_loop">REPL</a>, come mostrato in figura:</p>



<div class="wp-block-image" style="text-align: center;">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="618" height="312" class="wp-image-5830 aligncenter" src="https://logicaprogrammabile.it/wp-content/uploads/2018/09/PromptRepl1.png" alt="" srcset="https://logicaprogrammabile.it/wp-content/uploads/2018/09/PromptRepl1.png 618w, https://logicaprogrammabile.it/wp-content/uploads/2018/09/PromptRepl1-300x151.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2018/09/PromptRepl1-585x295.png 585w" sizes="auto, (max-width: 618px) 100vw, 618px" />
<figcaption>Prompt REPL</figcaption>
</figure>
</div>



<p>Con queste istruzioni abbiamo imparato ad eseguire il factory restore utile in tutti quei casi in cui abbiamo bisogno di ripristinare alle impostazioni di fabbrica la nostra PyBoard.</p>
<p>The post <a href="https://logicaprogrammabile.it/micropython-come-ripristinare-la-pyboard/">Micropython come ripristinare la PyBoard</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/micropython-come-ripristinare-la-pyboard/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino UNO vs GHI G30 TH</title>
		<link>https://logicaprogrammabile.it/arduino-uno-vs-ghi-g30-th/</link>
					<comments>https://logicaprogrammabile.it/arduino-uno-vs-ghi-g30-th/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Fri, 08 Jul 2016 09:31:54 +0000</pubDate>
				<category><![CDATA[Notizie]]></category>
		<category><![CDATA[Programmazione]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=5181</guid>

					<description><![CDATA[<p>Comparazione tra modulo G30 TH e Arduino UNO Arduino con la sua scheda UNO ha rivoluzionato il mondo dei makers dando la possibilità di realizzare numerosi progetti sia in ambito hobbistico che professionale. La diffusione delle schede Arduino ha influenzato numerosi produttori che hanno messo...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-uno-vs-ghi-g30-th/">Arduino UNO vs GHI G30 TH</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Comparazione tra modulo G30 TH e Arduino UNO</h1>
<p>Arduino con la sua scheda UNO ha rivoluzionato il mondo dei makers dando la possibilità di realizzare numerosi progetti sia in ambito hobbistico che professionale. La diffusione delle schede Arduino ha influenzato numerosi produttori che hanno messo in campo risorse per la realizzazione di nuovi dispositivi facili da programmare (il modulo G30 TH è un esempio), dal costo contenuto e open.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-5191 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2016/05/GHI_G30_vs_Arduino_UNO.png" alt="Modulo G30 TH contro Arduino UNO Genuino UNO" width="585" height="276" srcset="https://logicaprogrammabile.it/wp-content/uploads/2016/05/GHI_G30_vs_Arduino_UNO.png 585w, https://logicaprogrammabile.it/wp-content/uploads/2016/05/GHI_G30_vs_Arduino_UNO-300x142.png 300w" sizes="auto, (max-width: 585px) 100vw, 585px" /></p>
<p>Oggi sono disponibili molte tipologie di schede che possono essere utilizzate in sostituzione della UNO o comunque essere impiegate in concomitanza. Tra le schede che personalmente reputo molto valide ci sono quelle basate sul .Net Micro framework ed in particolare quelle prodotte da <a href="https://www.ghielectronics.com/">GHI Electronics</a>.</p>
<p>E&#8217; chiaro che non esiste una scheda migliore o peggiore poiché ognuna possiede pregi e difetti. La scelta principale dipende sicuramente dalla tipologia di progetto che intendiamo realizzare e soprattutto dalla propria esperienza in campo elettronico ed informatico.</p>
<p><span id="more-5181"></span></p>
<p>E&#8217; difficile fare una comparazione diretta tra due schede con una architettura completamente differente ma è anche vero che quando andiamo ad acquistare un dispositivo effettuiamo delle scelte mettendo a confronto alcuni parametri.</p>
<p>Tuttavia non è sempre vero che una comparazione tra grandezze dello stesso tipo porti a valutare quale sia la scheda migliore, ad esempio il modulo G30 TH ha una cpu a 32bit con frequenza di 84MHz mentre la UNO una cpu a 8bit e frequenza di 16MHz, ma questo non significa assolutamente che la G30 TH sia più veloce e performante.</p>
<p>Tenterò di fare questa comparativa soprattutto per farvi conoscere la scheda G30 TH (sfortunatamente GHI Electonics non mi paga per fargli pubblicità!!)</p>
<p>La scelta del confronto tra la G30 TH e la UNO è dipesa principalmente per il fatto che sono posizionate nella stessa fascia di prezzo, infatti la UNO ha un costo di circa 24€ e la G30 TH un costo di circa 23€.</p>
<p>La tabella seguente mette in evidenza quali siano le differenze hardware tra i due prodotti:</p>
<div align="center">
<table>
<tbody>
<tr>
<td></td>
<td><strong>GENUINO UNO</strong></td>
<td> <strong>GHI G30 TH</strong></td>
</tr>
<tr>
<td>Microcontrollore</td>
<td>ATMEGA328PU 8bit</td>
<td>ARM Cortex M4 32bit</td>
</tr>
<tr>
<td>Clock Speed</td>
<td>16MHz</td>
<td>84MHz</td>
</tr>
<tr>
<td>Tensione di lavoro</td>
<td>5Vdc</td>
<td>3.3Vdc</td>
</tr>
<tr>
<td>Input /Output Digitali GPIO</td>
<td>14</td>
<td>32</td>
</tr>
<tr>
<td>Input Analogici (ADC)</td>
<td>6</td>
<td>10</td>
</tr>
<tr>
<td>PWM</td>
<td>6</td>
<td>13</td>
</tr>
<tr>
<td>Memoria Flash</td>
<td>32 KB</td>
<td>128 KB</td>
</tr>
<tr>
<td>Memoria SRAM</td>
<td>2 KB</td>
<td>68 KB</td>
</tr>
<tr>
<td>Memoria EEPROM</td>
<td>1 KB</td>
<td>&#8211;</td>
</tr>
<tr>
<td>UART</td>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>SPI</td>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>I2C</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>One Wire</td>
<td>&#8211;</td>
<td>1</td>
</tr>
<tr>
<td>RTC</td>
<td>Con shield aggiuntiva</td>
<td>Integrato</td>
</tr>
<tr>
<td>Peso</td>
<td>25g</td>
<td>4g</td>
</tr>
<tr>
<td>Dimensioni (LxH)</td>
<td>68.6 x 53.4mm</td>
<td>50.5 x 17.5 mm</td>
</tr>
</tbody>
</table>
</div>
<p>Analizzando la tabella sembrerebbe che la G30 TH esca vincitrice nel confronto delle singole voci. Ma è davvero cosi?</p>
<p>Realizziamo una prima semplice prova pratica per testare quale delle due schede ha una velocità di commutazione di un pin IO più elevata. Di seguito il codice caricato sulla UNO e sulla G30 TH</p>
<pre class="lang:arduino decode:true">//codice eseguito dalla Genuino UNO
void setup()
{
    pinMode(2, OUTPUT);
}

void loop()
{
    while()
    {
      digitalWrite(2, HIGH);
      digitalWrite(2, LOW);
    }
}</pre>
<pre class="lang:c# decode:true">//codice eseguito dal modulo G30 TH
public class Program
    {

        static OutputPort dLED = new OutputPort(GHI.Pins.G30.Gpio.PA1, false);

        public static void Main()
        {
            while (true)
            {
                dLED.Write(true);
                dLED.Write(false);
            }
        }
    }</pre>
<p>Stando alle informazioni della tabella precedente sembra scontato che il modulo G30 TH possa garantire una velocità superiore ma invece otteniamo dati controversi, infatti la UNO ha un toggle di 114KHz mentre la G30TH di soli 29.48KHz.</p>
<p>Ora proviamo a eseguire il GPIO speed test impiegando questa volta tre pin digitali, il codice sulla UNO è il seguente:</p>
<pre class="lang:arduino decode:true">void setup()
{
    //definisco i pin 2, 3 e 4 in uscita
    pinMode(2, OUTPUT);
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
}

void loop()
{
    //eseguo un ciclo infinito 
    while(true)
    {
      //commuto continuamente le uscite 2, 3 e 4
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
    }
}</pre>
<p>Misurando la frequenza di commutazione dei pin della UNO otteniamo un valore di circa 29,5KHz, questo perché viene impiegato un certo tempo per eseguire le istruzioni:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5205" src="https://logicaprogrammabile.it/wp-content/uploads/2016/06/Speed_Test_UNO.png" alt="Spedd test Arduino UNO" width="800" height="480" srcset="https://logicaprogrammabile.it/wp-content/uploads/2016/06/Speed_Test_UNO.png 800w, https://logicaprogrammabile.it/wp-content/uploads/2016/06/Speed_Test_UNO-300x180.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2016/06/Speed_Test_UNO-768x461.png 768w, https://logicaprogrammabile.it/wp-content/uploads/2016/06/Speed_Test_UNO-600x360.png 600w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p>
<p>&nbsp;</p>
<p>Di seguito il listato di codice caricato sul modulo G30 TH:</p>
<pre class="lang:c# decode:true">using System;
using System.Text;
using System.IO.Ports;
using System.Threading;
using Microsoft.SPOT.Hardware;
using GHI.Processor;

namespace MFConsoleApplication2
{
    public class Program
    {
        static OutputPort dLED2 = new OutputPort(GHI.Pins.G30.Gpio.PA2, false);
        static OutputPort dLED3 = new OutputPort(GHI.Pins.G30.Gpio.PA3, false);
        static OutputPort dLED4 = new OutputPort(GHI.Pins.G30.Gpio.PA4, false);

        private static void test()
        {
            while (true)
            {
                dLED2.Write(true);
                dLED2.Write(false);
            }
        }

        private static void test1()
        {
            while (true)
            {
                dLED3.Write(true);
                dLED3.Write(false);
            }
        }

        private static void test2()
        {
            while (true)
            {
                dLED4.Write(true);
                dLED4.Write(false);
            }
        }

        public static void Main()
        {
            Thread th = new Thread(test);
            th.Start();

            Thread th1 = new Thread(test1);
            th1.Start();

            Thread th2 = new Thread(test2);
            th2.Start();
        }
    }
}</pre>
<p>Il codice esegue la commutazione da livello logico alto a quello basso utilizzando tre thread. Misurando con un oscilloscopio il valore di frequenza sui pin del modulo G30 TH osserviamo che la frequenza di commutazione è rimasta invariata sui 29.48KHz:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5219" src="https://logicaprogrammabile.it/wp-content/uploads/2016/07/G30TH.gif" alt="gpio speed test with thread" width="800" height="480" /><br />
Quindi sulla scheda UNO, inserendo più istruzioni,  otteniamo un rallentamento dovuto all&#8217;uso contemporaneo di più risorse. Nel modulo G30 TH questo non si è verificato infatti utilizzando dei thread il dispositivo ha prodotto la stessa frequenza di commutazione sui tre pin.</p>
<p>Gli esempi precedenti mostrano che le schede possono avere performance differenti e quindi alla domanda “quale è la scheda più veloce?” non possiamo dare una risposta assoluta ma probabilmente convincerci che la domanda più corretta sia “quale è la scheda più adatta al mio progetto?”.</p>
<h2>Differenze principali tra G30 TH e UNO</h2>
<p>La differenza sostanziale tra la UNO e la G30TH è che in quest&#8217;ultima il programma viene gestito da un piccolo framework (TinyCLR) che ha il compito di gestire le istruzioni per poi farle eseguire al microprocessore. Questa soluzione ha lo svantaggio di una leggera latenza poiché il codice deve essere interpretato e gestito dal micro framework prima di poter essere eseguito dalla cpu, questa soluzione avvantaggia lo sviluppatore che non si deve preoccupare di cosa avviene al livello hardware (gestione timer e registri gestione della memoria e puntatori) ma deve solo preoccuparsi di scrivere ed ottimizzare il suo programma.</p>
<p>La UNO invece esegue immediatamente le istruzioni del programma, abbiamo accesso diretto ai registri e ai timers del microcontrollore permettendo di manipolarli a nostro piacimento (se sapiamo dove mettere le mani!).<br />
Il microcontrollore della UNO, l&#8217;ATMEGA328, può essere impiegato in progetti stand alone senza grosse difficoltà visto che è in formato THT dip28, mentre il SoC G30 è in package tfq99, rendendo la progettazione homemade più difficoltosa.</p>
<h2>Ambiente di sviluppo:</h2>
<p>La UNO può essere programmata con l&#8217;Arduino IDE, un software molto spartano ma che mette a disposizione tutto il necessario per programmare e caricare i programmi sul microcontrollore. L&#8217;IDE è multi piattaforma è può essere utilizzato con sistemi Windows, Mac e Linux.</p>
<p>Per scrivere i programmi per il modulo G30 TH abbiamo bisogno di Microsoft Visual Studio, un eccellente ambiente di sviluppo che ci permette di scrivere, caricare e debbuggare in tempo reale i programmi che girano sul dispositivo. Visual Studio è disponibile solo per Windows.</p>
<h2>Supporto e community</h2>
<p>Quando acquisto un dispositivo verifico quale siano le risorse di supporto del produttore o di eventuali community. Per quanto riguarda Arduino possiamo far affidamento all&#8217;ottimo forum che solitamente assolve a qualsiasi tipologia di richiesta, inoltre potete trovare numerosissimi tutorial su blog e siti web.</p>
<p>Anche GHI Electronics ha un forum, molto meno frequentato di quello Arduino, ma che vi permetterà comunque di mettervi in contato con persone esperte che potranno darvi una risposta. Inoltre GHI offre un supporto ufficiale per la realizzazione di hardware specifico che impiega i suoi moduli.</p>
<h2>Conclusione:</h2>
<p>Penso che definire una scheda migliore di un&#8217;altra sia difficile se non si specifica il campo di impiego della scheda stessa. In generale quando devo scegliere il dispositivo ideale per la realizzare un progetto valuto il rapporto prezzo/prestazioni e la quantità di tempo necessario a scrivere il codice (questo dipende anche dalla disponibilità di supporto on line).</p>
<p>Penso anche che sia importante non fossilizzarsi solamente su una piattaforma ma provare a sperimentare usando nuovi dispositivi aumentando cosi il nostro bagaglio tecnico dandoci una visione più ampia nella scelta del dispositivo ideale al proprio progetto.</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-uno-vs-ghi-g30-th/">Arduino UNO vs GHI G30 TH</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-uno-vs-ghi-g30-th/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Webduino Based Authentication. Accedere ad una pagina privata</title>
		<link>https://logicaprogrammabile.it/based-authentication-webduino-accedere-pagina-protetta/</link>
					<comments>https://logicaprogrammabile.it/based-authentication-webduino-accedere-pagina-protetta/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 25 Mar 2013 10:13:11 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[autenticazione]]></category>
		<category><![CDATA[Base64]]></category>
		<category><![CDATA[webduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3417</guid>

					<description><![CDATA[<p>Come utilizzare la Based Authentication per accedere a una pagina protetta La libreria Webduino implementa una semplice autenticazione basata sul protocollo http. Certamente non offre un livello di sicurezza impenetrabile ma può comunque essere utile utilizzare questa funzione per le nostre applicazioni. Nell&#8217;esempio, viene caricata...</p>
<p>The post <a href="https://logicaprogrammabile.it/based-authentication-webduino-accedere-pagina-protetta/">Webduino Based Authentication. Accedere ad una pagina privata</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come utilizzare la Based Authentication per accedere a una pagina protetta</h3>
<p>La libreria <strong>Webduino</strong> implementa una semplice autenticazione basata sul protocollo http. Certamente non offre un livello di sicurezza impenetrabile ma può comunque essere utile utilizzare questa funzione per le nostre applicazioni.</p>
<p>Nell&#8217;esempio, viene caricata la pagina index.htm dove è presente un link che punta a una pagina protetta. per poter visualizzarne il contenuto è necessario inserire nome utente e password.</p>
<p>La <strong>based authentication</strong> si basa sulla codifica <strong>Base64</strong>. Il nume utente e la password, nella forma <strong>numeutente:password</strong>, vengono convertiti in un unica stringa  di caratteri.  Per la conversione<strong></strong>, potete utilizzare diversi servizi online oppure scaricare la mia app <a href="https://logicaprogrammabile.it/wp-content/uploads/2011/11/ConvertBase64.zip">ConvertBase64</a>.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/03/Base64Conv.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3430" alt="based authentication" src="https://logicaprogrammabile.it/wp-content/uploads/2013/03/Base64Conv.png" width="330" height="237" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/03/Base64Conv.png 330w, https://logicaprogrammabile.it/wp-content/uploads/2013/03/Base64Conv-300x215.png 300w" sizes="auto, (max-width: 330px) 100vw, 330px" /></a></p>
<p><span id="more-3417"></span></p>
<p>Il codice seguente è pronto all&#8217;uso, dovete cambiare solamente l&#8217;indirizzo ip, adattando lo alla vostra rete locale.</p>
<p>[c]<br />
#include &quot;SPI.h&quot;<br />
#include &quot;Ethernet.h&quot;<br />
#include &quot;WebServer.h&quot;</p>
<p>//definisco mac address e indirizzo ip<br />
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };<br />
static uint8_t ip[] = { 192, 168, 1, 10};</p>
<p>//creo un oggetto webduino<br />
WebServer webserver(&quot;&quot;, 80);</p>
<p>//funzione che crea la pagina principale del sito<br />
void defaultCmd(WebServer &amp;server, WebServer::ConnectionType type, char *, bool)<br />
{<br />
  server.httpSuccess();<br />
  if (type != WebServer::HEAD)<br />
  {<br />
    //invio al browser la pagina principale<br />
    P(helloMsg) = &quot;&lt;h4&gt;Accedi:&lt;/h4&gt;&lt;a href=\&quot;private.html\&quot;&gt;Pagina Privata&lt;/a&gt;&quot;;<br />
    server.printP(helloMsg);<br />
  }<br />
}</p>
<p>//questa funzione permette di verificare il nome utente e la password<br />
//e in caso di successo di visualizzare la pagina privata<br />
void privateCmd(WebServer &amp;server, WebServer::ConnectionType type, char *, bool)<br />
{<br />
  //user= admin<br />
  //password= admin</p>
<p>  //verifico nome utente e password<br />
  if (server.checkCredentials(&quot;YWRtaW46YWRtaW4=&quot;))<br />
  {<br />
    //in caso affermativo&#8230;<br />
    server.httpSuccess();<br />
    if (type != WebServer::HEAD)<br />
    {<br />
      //invio al browser la pagina privata<br />
      P(helloMsg) = &quot;&lt;h3&gt;Buongiorno Admin!&lt;/h3&gt;&quot;;<br />
      server.printP(helloMsg);<br />
    }<br />
  }<br />
  else<br />
  {<br />
    //creo una risposta http<br />
    //nel caso in cui si tenta un accesso<br />
    //no autorizzato<br />
    server.httpUnauthorized();<br />
  }<br />
}</p>
<p>void setup()<br />
{<br />
  //inizializzo la ethernet shield<br />
  Ethernet.begin(mac, ip);<br />
  //definisco funzione che gestisce<br />
  //la pagina principale del sito<br />
  webserver.setDefaultCommand(&amp;defaultCmd);<br />
  webserver.addCommand(&quot;index.html&quot;, &amp;defaultCmd);<br />
  //definisco la funzione che gestisce la pagina privata<br />
  webserver.addCommand(&quot;private.html&quot;, &amp;privateCmd);</p>
<p>  //inizializzo la libreria webduino<br />
  webserver.begin();<br />
}</p>
<p>void loop()<br />
{<br />
  char buff[64];<br />
  int len = 64;</p>
<p>  webserver.processConnection(buff, &amp;len);<br />
}<br />
[/c]</p>
<p>La libreria Webduino è molto flessibile e permette di realizzare applicazioni interessanti in modo molto veloce.</p>
<p>The post <a href="https://logicaprogrammabile.it/based-authentication-webduino-accedere-pagina-protetta/">Webduino Based Authentication. Accedere ad una pagina privata</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/based-authentication-webduino-accedere-pagina-protetta/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Utilizzare lo Spectrum Shield con Arduino</title>
		<link>https://logicaprogrammabile.it/utilizzare-spectrum-shield-arduino/</link>
					<comments>https://logicaprogrammabile.it/utilizzare-spectrum-shield-arduino/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 11 Feb 2013 11:17:10 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Led]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3294</guid>

					<description><![CDATA[<p>Spectrum shield come accendere diversi led a ritmo di musica Un progetto che ha sempre attirato molta attenzione è il circuito VU meter sincronizzato con il ritmo della musica (il mitico luci psichedeliche ). Anche io quando ero alle superiori mi sono cimentato costruendone uno....</p>
<p>The post <a href="https://logicaprogrammabile.it/utilizzare-spectrum-shield-arduino/">Utilizzare lo Spectrum Shield con Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Spectrum shield come accendere diversi led a ritmo di musica</h3>
<p>Un progetto che ha sempre attirato molta attenzione è il circuito VU meter sincronizzato con il ritmo della musica (il mitico <strong>luci psichedeliche</strong> ). Anche io quando ero alle superiori mi sono cimentato costruendone uno. Il circuito era <strong>formato da tre filtri analogici</strong>, uno <strong>passa basso</strong> uno <strong>passa banda</strong> e uno <strong>passa alto</strong>, che lavoravano rispettivamente alle frequenze 0-500Hz, 500Hz 4000Hz e 4000Hz-16000Hz. All&#8217;uscita dei filtri c&#8217;era un<strong> rilevatore di picco</strong> costruito con un operazionale che andava a pilotare dei driver che <strong>accendevano delle lampadine colorate</strong>.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/02/LuciPsichedelicheOLD.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3298" alt="Luci Psichedeliche" src="https://logicaprogrammabile.it/wp-content/uploads/2013/02/LuciPsichedelicheOLD.png" width="591" height="331" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/02/LuciPsichedelicheOLD.png 591w, https://logicaprogrammabile.it/wp-content/uploads/2013/02/LuciPsichedelicheOLD-300x168.png 300w" sizes="auto, (max-width: 591px) 100vw, 591px" /></a></p>
<p><span id="more-3294"></span></p>
<p>Oggi la tecnologia offre prodotti integrati a basso costo, specializzati in una vasta gamma di compiti che rendono più semplice la realizzazione dei nostri circuiti. Per quanto riguarda le nostre luci psichedeliche possiamo fa affidamento allo <a href="https://www.sparkfun.com/products/10306" target="_blank">Spectrum shield</a> per <strong>Arduino</strong>. Lo shield è molto semplice ed è composto principalmente da due integrati <a href="https://www.sparkfun.com/datasheets/Components/General/MSGEQ7.pdf" target="_blank">MSGEQ7 </a>(Equalizzatore grafico a 7 bande). Lo schema a blocchi dell&#8217;integrato è il seguente:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/02/MSGEQ7_Diagramma_Blocchi.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3302" alt="MSGEQ7 Diagramma a blocchi" src="https://logicaprogrammabile.it/wp-content/uploads/2013/02/MSGEQ7_Diagramma_Blocchi.png" width="647" height="437" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/02/MSGEQ7_Diagramma_Blocchi.png 647w, https://logicaprogrammabile.it/wp-content/uploads/2013/02/MSGEQ7_Diagramma_Blocchi-300x202.png 300w" sizes="auto, (max-width: 647px) 100vw, 647px" /></a></p>
<p>si osserva che in effetti il principio di funzionamento è molto simile a quello che si usava nei primi circuiti a luci psichedeliche, ma i filtri a disposizione sono ben 7 e le uscite dei filtri vengono multiplexate, in questo modo invece di avere 7 pin di output ne abbiamo solamente uno.<br />
Inviando un primo impulso positivo al pin strobe avremmo in uscita il valore analogico proveniente dal filtro a 63Hz, inviandone un altro impulso avremmo in uscita il valore analogico del filtro a 160Hz e così via fino a tornare dopo 8 impulsi al filtro a 63Hz.</p>
<p>I due integrati MSGEQ7 presenti nello <strong>spectrum shield</strong> analizzano il segnale audio proveniente dal canale destro e dal canale sinistro. Per brevità utilizzerò un solo integrato (canale) visto che il codice è interscambiabile.<br />
Le uscite analogiche dei due integrati sono collegate ai pin <strong>A0</strong> e <strong>A1</strong> mentre i pin <strong>Strobe</strong> e <strong>Reset</strong> sono collegati ai pin digitali <strong>D4</strong> e <strong>D5</strong>.</p>
<p>Questo è il codice:</p>
<p>[c]<br />
//Specifica i pin Reset, Strobe<br />
int spectrumReset=5;<br />
int spectrumStrobe=4;</p>
<p>//Specifico il canale di ingresso<br />
//pin A0 per canale destro<br />
//pin A1 per canale sinistro<br />
int spectrumAnalog = 1; //canale sinistro</p>
<p>//creo un vettore per contenere i valori analogici<br />
//delle 7 bande<br />
int Spectrum[7];</p>
<p>void setup()<br />
{<br />
  //pin reset e strobe in output<br />
  pinMode(spectrumReset, OUTPUT);<br />
  pinMode(spectrumStrobe, OUTPUT);</p>
<p>  //inizializzo lo spectrum shield<br />
  //Strobe<br />
  digitalWrite(spectrumStrobe,HIGH);<br />
  delay(1);<br />
  digitalWrite(spectrumStrobe,LOW);<br />
  delay(1)</p>
<p>  //Reset dei due chip<br />
  digitalWrite(spectrumReset,HIGH);<br />
  delay(1);<br />
  digitalWrite(spectrumReset,LOW);<br />
  delay(5);</p>
<p>  //definisco 7 uscite digitali per pilotare altrettanti led<br />
  pinMode(6, OUTPUT);<br />
  pinMode(7, OUTPUT);<br />
  pinMode(8, OUTPUT);<br />
  pinMode(9, OUTPUT);<br />
  pinMode(10, OUTPUT);<br />
  pinMode(11, OUTPUT);<br />
  pinMode(12, OUTPUT);</p>
<p>}</p>
<p>void loop()<br />
{<br />
  //esegui la lettura ogni 10mS<br />
  readSpectrum();<br />
  delay(10);<br />
}</p>
<p>void readSpectrum()<br />
{<br />
  //Questa funzione legge il valore analogico per ogni banda<br />
  //e ne rappresenta il valore tramite dei led</p>
<p>  byte Band;<br />
  //questo ciclo for viene eseguito 7 volte<br />
  for(Band = 0; Band &lt; 7; Band++)<br />
  {<br />
    //eseguo due letture per poi dividerle per due tramite<br />
    //spostamento di bit. Il valore ottenuto viene memorizzato<br />
    //nel vettore<br />
    Spectrum[Band] = (analogRead(spectrumAnalog) + analogRead(spectrumAnalog) ) &gt;&gt;1;</p>
<p>    //invio un impulso al pin strobe per passare al filtro successivo<br />
    digitalWrite(spectrumStrobe,HIGH);<br />
    digitalWrite(spectrumStrobe,LOW);<br />
  }</p>
<p>  //una volta effettuata la memorizzazione dei dati<br />
  //nel vettore, creo un altro ciclo for<br />
  //per rappresentare gli stessi tramite led<br />
  for (byte Ciclo = 0; Ciclo &lt; 7; Ciclo++)<br />
  {<br />
    //recupero il valore memorizzato nel vettore<br />
    //traslo il valore intero in un byte<br />
    byte x = map(Spectrum[Ciclo], 0, 1023, 1, 254);</p>
<p>    //se il valore supera una soglia accendi il led<br />
    //altrimenti spegnilo<br />
    if( x &gt; 120)<br />
      digitalWrite(Ciclo + 6 , HIGH);<br />
    else<br />
      digitalWrite(Ciclo + 6, LOW);<br />
  }<br />
}<br />
[/c]</p>
<p>Mentre questo è il circuito elettrico</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/02/SpectrumShield.gif"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3337" alt="Luci psichedeliche con lo spectrum shield" src="https://logicaprogrammabile.it/wp-content/uploads/2013/02/SpectrumShield.gif" width="245" height="220" /></a></p>
<p>Per poter collegare delle lampade a 220Vac è necessario usare dei triac con relativo stadio pilota fotoisolato.</p>
<p>The post <a href="https://logicaprogrammabile.it/utilizzare-spectrum-shield-arduino/">Utilizzare lo Spectrum Shield con Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/utilizzare-spectrum-shield-arduino/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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>Lampada di cortesia a batteria con ATtiny85</title>
		<link>https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/</link>
					<comments>https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 12 Nov 2012 08:45:18 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[ATtiny85]]></category>
		<category><![CDATA[Domotica]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3135</guid>

					<description><![CDATA[<p>Usare un ATtiny85 per controllare una lampada led a batteria Mi piace realizzare progetti che impiegano dispositivi esistenti che, magari messi da parte per lungo tempo, si rivelano ottimi per costruire nuovi dispositivi. La lampada led a batteria è un oggetto molto comune che si...</p>
<p>The post <a href="https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/">Lampada di cortesia a batteria con ATtiny85</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Usare un ATtiny85 per controllare una lampada led a batteria</h3>
<p>Mi piace realizzare progetti che impiegano dispositivi esistenti che, magari messi da parte per lungo tempo, si rivelano ottimi per costruire nuovi dispositivi.<br />
La lampada led a batteria è un oggetto molto comune che si compra a basso costo nelle bancarelle delle fiere di elettronica. Date le sue dimensioni ridotte è possibile utilizzarla per illuminare tutte quelle piccole aree dove non abbiamo previsto una fonte di illuminazione fissa e dove non abbiamo la possibilità di portare dei cavi elettrici se non tramite opere murarie.</p>
<p><figure id="attachment_3139" aria-describedby="caption-attachment-3139" style="width: 450px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-3139" title="Arduino ATTiny85" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/IMAG0437.jpg" alt="Usare un attiny85 per pilotare lampada led" width="450" height="285" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/IMAG0437.jpg 450w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/IMAG0437-300x190.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /><figcaption id="caption-attachment-3139" class="wp-caption-text">Usare un attiny85 per pilotare lampada led</figcaption></figure></p>
<p><span id="more-3135"></span></p>
<p>Non potendo tenere accesa la lampada per ore, causa scaricamento repentino della batteria, ho realizzato un piccolo circuito che tramite <a title="Come creare un sistema di allarme con Arduino" href="https://logicaprogrammabile.it/come-creare-sistema-di-allarme-arduino/">un sensore PIR</a> e un relè permetta l&#8217;accensione della lampada solo al passaggio di una persona (o comunque qualsiasi cosa che si muove![tranne mosche e zanzare!]). Adoperando anche una fotoresistenza riesco a gestire l&#8217;accensione solo nelle ore notturne.<br />
Tutto il sistemino è gestito da un parsimonioso <strong>ATtiny85</strong>.</p>
<p>Lo schema del circuito è il seguente:</p>
<p><figure id="attachment_3145" aria-describedby="caption-attachment-3145" style="width: 541px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-3145" title="ATtiny85_LuciAutom" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_LuciAutom.png" alt="Luce cortesia lampada led attiny85" width="541" height="372" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_LuciAutom.png 541w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_LuciAutom-300x206.png 300w" sizes="auto, (max-width: 541px) 100vw, 541px" /><figcaption id="caption-attachment-3145" class="wp-caption-text">Schema elettrico</figcaption></figure></p>
<p>Le batterie della lampada (che forniscono nel mio caso circa 7Vdc) hanno anche il compito di alimentare il circuito. Il regolatore di tensione <strong>7805</strong> stabilizza e fornisce alimentazione al circuito. L&#8217;<strong>ATtiny85</strong> acquisisce il segnale analogico proveniente dalla <strong>fotoresistenza</strong> e il segnale digitale proveniente dal sensore <strong>PIR</strong>. Tramite il transistor comando un micro relè che cortocircuita l&#8217;interruttore meccanico posto sulla lampada, provocandone l&#8217;accensione.</p>
<p>Il codice che governa l&#8217;<strong>ATtiny85</strong> è il seguente:</p>
<pre class="lang:arduino decode:true">void setup()
{
  //uscita per comandare il rele
  pinMode(0, OUTPUT);
  //ingresso per sensore pir
  pinMode(4, INPUT);
}

void loop()
{
  //leggo il valore analogico proveniente dalla fotoresistenza
  int FotoR = analogRead(3);
  //leggo lo stato del segnale pir
  byte inp = digitalRead(4);

  //se il sensore pi rileva un movimento...
  if (inp == HIGH)
  {
    //controlla se la luce ambiente è insufficiente
    if (FotoR &lt;= 150)
    {
      //attiva il relè pe accendere la lampada led
      digitalWrite(0, HIGH);
      //tieni la lampada accesa per 30 secondi
      Ritardo();
    }
  }
else
  //altrimenti tieni il relè disattivato
  digitalWrite(0, LOW);
}

void Ritardo()
{
  //ritardo di 30 secondi

  for(byte Ciclo = 0; Ciclo &lt;= 30; Ciclo++)
  {
    delay(1000);
  }
}</pre>
<p>Per programmare l&#8217;<strong>ATtiny85</strong> potete usare un <strong>Arduino UNO</strong> come <a href="https://logicaprogrammabile.it/programmare-attiny85-attiny45/">spiegato in questo tutorial</a>. Per chi possiede un programmatore dedicato come quello descritto <a href="https://logicaprogrammabile.it/caricare-sketch-atmega328-programmatore-av/">nel precedente articolo</a> potete usare lo schema seguente per caricare lo sketch nel microcontrollore.</p>
<p><figure id="attachment_3156" aria-describedby="caption-attachment-3156" style="width: 423px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-3156" title="ATtiny85_Programmer" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_Programmer.png" alt="Programmatore usbAsp per attiny85" width="423" height="214" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_Programmer.png 423w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/ATtiny85_Programmer-300x151.png 300w" sizes="auto, (max-width: 423px) 100vw, 423px" /><figcaption id="caption-attachment-3156" class="wp-caption-text">Programmate l&#8217;ATtiny85 con L&#8217;USBasp</figcaption></figure></p>
<p><span style="text-decoration: underline;">Attenzione il connettore da utilizzare dellUSBasp è il J5</span></p>
<p>La lampada del led è costata circa 15€ mentre per i componenti del circuito o speso circa 10-12€.</p>
<p>Per usare il circuito all&#8217;esterno consiglio di utilizzare un buon contenitore, per evitare che umidità o pioggia possano causare rotture o cortocircuiti.</p>
<p>The post <a href="https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/">Lampada di cortesia a batteria con ATtiny85</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/attiny85-costruire-lampada-led-batteria/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Scheda relè remota con Arduino e Webduino</title>
		<link>https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/</link>
					<comments>https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 07 Nov 2012 16:43:39 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[Domotica]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[webduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3117</guid>

					<description><![CDATA[<p>Come costruirsi una scheda relè e comandarla tramite Arduino ethernet e Webduino Tra le applicazioni che trovo molto richieste è la scheda relè da gestire tramite smartphone. Utilizzando la libreria Webduino riusciamo a realizzare un dispositivo semplice e funzionale basato su pochi componenti quali Arduino...</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/">Scheda relè remota con Arduino e Webduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come costruirsi una scheda relè e comandarla tramite Arduino ethernet e Webduino</h3>
<p>Tra le applicazioni che trovo molto richieste è la scheda relè da gestire tramite smartphone. Utilizzando la libreria Webduino riusciamo a realizzare un dispositivo semplice e funzionale basato su pochi componenti quali <a href="http://arduino.cc/en/Main/ArduinoBoardEthernet" target="_blank">Arduino Ethernet</a>, dei classici relè, un router wifi (presente ormai nelle nostre abitazioni) e uno smartphone.</p>
<p>La figura seguente illustra il progetto di questo articolo:</p>
<p style="text-align: center;"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3123" title="LogicaSchedaRele" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/LogicaSchedaRele.png" alt="Webduino ed Arduino Ethernet Gestione scheda rele" width="620" height="445" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/LogicaSchedaRele.png 620w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/LogicaSchedaRele-300x215.png 300w" sizes="auto, (max-width: 620px) 100vw, 620px" /></p>
<p><span id="more-3117"></span></p>
<p><strong>Arduino Ethernet</strong> è collegato tramite cavo lan al router e permette di gestire i relè collegati ai pin digitali tramite una applicazione web basata sulla libreria <strong>Webduino</strong>. Tramite lo smarthphone o un pc collegato alla rete locale possiamo gestire i relè semplicemente usando un browser web.</p>
<p>Per la parte software ho deciso di usare la libreria <strong>webduino</strong> perché fornisce tutto il necessario per la gestione delle richieste http.</p>
<p>Lo schema elettrico del prototipo che ho realizzato è il seguente:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3124" title="SchedaRele" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaRele.png" alt="Arduino ethernet scheda rele" width="694" height="342" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaRele.png 694w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaRele-300x147.png 300w" sizes="auto, (max-width: 694px) 100vw, 694px" /></p>
<p>Il codice caricato sul dispositivo è disponibile nel seguente listato:</p>
<p>[c]</p>
<p>#include &lt;Ethernet.h&gt;<br />
#include &lt;SPI.h&gt;<br />
#include &lt;WebServer.h&gt; //libreria webduino</p>
<p>//variabili statiche per il mac address e lìip address<br />
static byte mac_Add[] = {<br />
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };<br />
//cambiare l&#8217;ip in funzione della propria rete<br />
static byte ip_Add[] = {<br />
  192, 168, 0, 220 };<br />
//creazione oggetto Webduino<br />
WebServer webserver(&quot;&quot;, 80);</p>
<p>//Variabili booleane che memorizzano<br />
//lo stato delle uscite collegate ai relè<br />
boolean Rele1 = false;<br />
boolean Rele2 = false;<br />
boolean Rele3 = false;</p>
<p>//=============================================================================<br />
//funzione pagina Start<br />
void Start(WebServer &amp;server, WebServer::ConnectionType type,<br />
           char *url_param, bool param_complete)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();</p>
<p>  //gestisco il tipo di richiesta HEAD<br />
  if (type != WebServer::HEAD)<br />
  {<br />
    String s = &quot;&quot;;</p>
<p>     if (param_complete == true)<br />
    {<br />
      s = url_param;</p>
<p>      if ( s == &quot;R1=ON&quot;)<br />
      {<br />
        Rele1 = true;<br />
        digitalWrite(2, HIGH);<br />
      }<br />
      else if ( s == &quot;R1=OFF&quot;)<br />
      {<br />
        Rele1 = false;<br />
        digitalWrite(2, LOW);<br />
      }</p>
<p>      if ( s == &quot;R2=ON&quot;)<br />
      {<br />
        Rele2 = true;<br />
        digitalWrite(3, HIGH);<br />
      }<br />
      else if ( s == &quot;R2=OFF&quot;)<br />
      {<br />
        Rele2 = false;<br />
        digitalWrite(3, LOW);<br />
      }</p>
<p>      if ( s == &quot;R3=ON&quot;)<br />
      {<br />
        Rele3 = true;<br />
        digitalWrite(4, HIGH);<br />
      }<br />
      else if ( s == &quot;R3=OFF&quot;)<br />
      {<br />
        Rele3 = false;<br />
        digitalWrite(4, LOW);<br />
      }<br />
    }</p>
<p>    //gestisco la pagina html in base allo stato delle uscite di Arduino<br />
    P(htmlHead) =<br />
    &quot;&lt;html&gt;&quot;<br />
    &quot;&lt;head&gt;&quot;<br />
    &quot;&lt;title&gt;Arduino Scheda Rele&lt;/title&gt;&quot;<br />
    &quot;&lt;/head&gt;&quot;<br />
    &quot;&lt;body&gt;&quot;;</p>
<p>    server.printP(htmlHead);</p>
<p>    server.print(&quot;&lt;table border=\&quot;1\&quot;&gt;&quot;);<br />
    server.print(&quot;&lt;tr&gt;&lt;td&gt;Stato Rele&lt;/td&gt;&lt;td&gt;Comandi&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    if(Rele1 == true)<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: red;\&quot;&gt;RELE 1 ON&lt;/td&gt;&lt;td&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: black;\&quot;&gt;RELE 1 OFF&lt;/td&gt;&lt;td&gt;&quot;);</p>
<p>    if(Rele1 == false)<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R1=ON&#8217;\&quot;&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R1=OFF&#8217;\&quot;&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    if(Rele2 == true)<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: red;\&quot;&gt;RELE 2 ON&lt;/td&gt;&lt;td&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: black;\&quot;&gt;RELE 2 OFF&lt;/td&gt;&lt;td&gt;&quot;);</p>
<p>    if(Rele2 == false)<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R2=ON&#8217;\&quot;&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R2=OFF&#8217;\&quot;&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    if(Rele3 == true)<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: red;\&quot;&gt;RELE 3 ON&lt;/td&gt;&lt;td&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: black;\&quot;&gt;RELE 3 OFF&lt;/td&gt;&lt;td&gt;&quot;);</p>
<p>    if(Rele3 == false)<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R3=ON&#8217;\&quot;&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R3=OFF&#8217;\&quot;&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;&quot;);</p>
<p>  }<br />
}<br />
//=============================================================================</p>
<p>void setup()<br />
{<br />
  //inizializzo l&#8217;ethernet shield con il mac e il address<br />
  Ethernet.begin(mac_Add, ip_Add);</p>
<p>  //definisci l&#8217;azione di default che verrà eseguita quando l&#8217;utente<br />
  //naviga nella root del sito<br />
  webserver.setDefaultCommand(&amp;Start);<br />
  webserver.addCommand(&quot;index.htm&quot;, &amp;Start);</p>
<p>  //avvia il web server<br />
  webserver.begin();</p>
<p>  delay(100);</p>
<p>  //definisci i pin 2 3 4 in uscita<br />
  pinMode(2, OUTPUT);<br />
  pinMode(3, OUTPUT);<br />
  pinMode(4, OUTPUT);</p>
<p>  //inizializza i le uscite<br />
  digitalWrite(2, LOW);<br />
  digitalWrite(3, LOW);<br />
  digitalWrite(4, LOW);</p>
<p>}</p>
<p>void loop()<br />
{<br />
  //elabora costantemente tutte le richieste provenienti dal browser<br />
  webserver.processConnection();<br />
}</p>
<p>[/c]</p>
<p>Nonostante le numerose righe di codice potete capirne il funzionamento semplicemente leggendo i commenti che lo accompagnano.<br />
L&#8217;interfaccia web per gestire i relè è la seguente:</p>
<p>Cliccando il bottone con la label &#8220;clicca qui&#8221; si ottiene una commutazione dello stato dei pin di uscita di Arduino e l&#8217;aggiornamento della label Stato Rele.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3127" title="SchedaReleWeb" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaReleWeb.png" alt="Interfaccia scheda rele web" width="190" height="131" /></p>
<p>Anche in questo caso con poco si ottengono dispositivi interessanti e utili.</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/">Scheda relè remota con Arduino e Webduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/feed/</wfw:commentRss>
			<slash:comments>41</slash:comments>
		
		
			</item>
		<item>
		<title>Comunicazione tra Arduino tramite I2C</title>
		<link>https://logicaprogrammabile.it/comunicazione-tra-arduino-tramite-i2c/</link>
					<comments>https://logicaprogrammabile.it/comunicazione-tra-arduino-tramite-i2c/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 10 Oct 2012 12:49:36 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Bus I2C]]></category>
		<category><![CDATA[comunicazione tra circuiti]]></category>
		<category><![CDATA[I2C]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3081</guid>

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

					<description><![CDATA[<p>Come usare un programmatore avr per caricare sketch Ho acquistato un semplice programmatore AVR dal costo molto contenuto per poter programmare gli ATMega328 senza passare per una scheda Arduino. Questo metodo risulta interessante quando si creano dei propri dispositivi stand alone senza perdere la semplicità...</p>
<p>The post <a href="https://logicaprogrammabile.it/caricare-sketch-atmega328-programmatore-av/">Caricare sketch su AtMega328 tramite programmatore esterno</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come usare un programmatore avr per caricare sketch</h3>
<p>Ho acquistato un semplice programmatore AVR dal costo molto contenuto per poter programmare gli ATMega328 senza passare per una scheda Arduino. Questo metodo risulta interessante quando si creano dei propri dispositivi stand alone senza perdere la semplicità di programmazione tipica dei dispositivi Arduino.<br />
Il modello in questione è l&#8217;<strong>AVR Programmer</strong> prodotto da<strong> JYE Tech</strong> (<a href="http://www.jyetech.com" target="_blank">http://www.jyetech.com</a>) che ho comprato da <strong>Cooking Hacks</strong> (<a href="http://www.cooking-hacks.com/index.php/avr-usb-programmer.html" target="_blank">http://www.cooking-hacks.com/index.php/avr-usb-programmer.html</a>) per poco più di 10€.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-3065" title="USB_ASP" alt="Programmatore AVR usb ASP" src="https://logicaprogrammabile.it/wp-content/uploads/2012/10/USB_ASP-300x300.png" width="300" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/10/USB_ASP-300x300.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/10/USB_ASP-150x150.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2012/10/USB_ASP.png 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Il programmatore è basato sul chip Atmega48 ed è programmato per essere compatibile con l&#8217;<a href="http://www.fischl.de/usbasp/" target="_blank">USBasp</a>.</p>
<p><span id="more-3063"></span></p>
<p>La prima operazione è installare i driver del programmatore. Scaricate l&#8217;ultima versione dei driver dal sito fischl.de (attualmente <a href="http://www.fischl.de/usbasp/usbasp.2011-05-28.tar.gz" target="_blank">usbasp.2011-05-28.tar.gz</a>) e scompatateli in una cartella sul vostro pc. Ora collegate il programmatore tramite cavo mini usb e annullate la ricerca automatica dei driver. Da <strong>gestione dispositivi</strong> selezionate la voce USBasp e avviate la procedura per aggiornare i driver selezionando la ricerca automatica e specificando come percorso la cartella che avete scompatato precedentemente. Attendete la fine della procedura che porterà all&#8217;installazione del programmatore sul vostro computer.</p>
<p>Passiamo ai collegamenti seguendo lo schema elettrico seguente:</p>
<p><figure id="attachment_3070" aria-describedby="caption-attachment-3070" style="width: 611px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-3070" title="AVR_Programmer" alt="Programmatore AVR USBasp Arduino" src="https://logicaprogrammabile.it/wp-content/uploads/2012/10/AVR_Programmer.gif" width="611" height="299" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/10/AVR_Programmer.gif 611w, https://logicaprogrammabile.it/wp-content/uploads/2012/10/AVR_Programmer-300x146.gif 300w" sizes="auto, (max-width: 611px) 100vw, 611px" /><figcaption id="caption-attachment-3070" class="wp-caption-text">Attenzione il connettore da utilizzare è il J5</figcaption></figure></p>
<p>la tabella riepiloga i collegamenti da effettuare:</p>
<table border="0" cellspacing="3" cellpadding="3">
<tbody>
<tr>
<td style="text-align: center;"><strong>JTAG AVR Programmer (J5)</strong></td>
<td style="text-align: center;"><strong>ATMega328P-PU</strong></td>
</tr>
<tr>
<td> PIN 1 (MOSI)</td>
<td> PIN 17 (MOSI)</td>
</tr>
<tr>
<td> PIN 5 (RESET)</td>
<td> PIN 1 (RESET)</td>
</tr>
<tr>
<td> PIN 7 (SCK)</td>
<td> PIN 19 (SCK)</td>
</tr>
<tr>
<td> PIN 9 (MISO)</td>
<td> PIN 18 (MISO)</td>
</tr>
<tr>
<td> PIN 2 (VCC)</td>
<td> PIN 7 e PIN 20 (VCC)</td>
</tr>
<tr>
<td> PIN 10 (GND)</td>
<td> PIN 8 e PIN 22 (GND)</td>
</tr>
</tbody>
</table>
<p>(Ricordiamoci anche di collegare il quarzo da 16MHz ed i due condensatori ceramici da 18pF ai pin 9 e pin 10 come da schema).</p>
<p>Ora tutto è pronto per provare a caricare il nostro sketch tramite il programmatore utilizzando semplicemente il classico <strong>Arduino IDE</strong>. Una volta aperto l&#8217;IDE (nel mio caso versione  1.0.1) andiamo a settare il tipo di programmatore da utilizzare per il deployment. Clicchiamo sul seguente percorso<strong> Strumenti-&gt;Programmatore</strong> e  selezioniamo la voce <strong>USBasp</strong>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-3073" title="USBaspProg" alt="" src="https://logicaprogrammabile.it/wp-content/uploads/2012/10/USBaspProg-300x236.png" width="300" height="236" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/10/USBaspProg-300x236.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/10/USBaspProg.png 574w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Carichiamo il classico sketch di esempio Blink (<strong>File-&gt;Esempi-&gt;01.Basics-&gt;Blink</strong>) avviamo la programmazione tramite il menu <strong>File-&gt;Carica con un programmatore</strong></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-3075" title="USBaspProgLoad" alt="" src="https://logicaprogrammabile.it/wp-content/uploads/2012/10/USBaspProgLoad-268x300.png" width="268" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/10/USBaspProgLoad-268x300.png 268w, https://logicaprogrammabile.it/wp-content/uploads/2012/10/USBaspProgLoad.png 429w" sizes="auto, (max-width: 268px) 100vw, 268px" /></p>
<p>Penso che i vantaggi di questo metodo siano notevoli perché oltre alla possibilità di creare sistemi stand alone con un costo contenuto abbiamo anche il vantaggio di non dover caricare il bootloader e quindi avere un po più di spazio per i nostri programmi.</p>
<p>The post <a href="https://logicaprogrammabile.it/caricare-sketch-atmega328-programmatore-av/">Caricare sketch su AtMega328 tramite programmatore esterno</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/caricare-sketch-atmega328-programmatore-av/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
