<?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>GPIO Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/gpio/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/gpio/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Sun, 14 Feb 2021 15:04:01 +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>GPIO Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/gpio/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Come usare pin IO digitali della Pico</title>
		<link>https://logicaprogrammabile.it/come-usare-pin-gpio-digitali-raspberry-pico/</link>
					<comments>https://logicaprogrammabile.it/come-usare-pin-gpio-digitali-raspberry-pico/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 15 Feb 2021 07:00:43 +0000</pubDate>
				<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[Pi Pico]]></category>
		<category><![CDATA[Speed Test]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6562</guid>

					<description><![CDATA[<p>Gestire linee IO della Pico La Pi Pico possiede 26 linee GPIO. Per poterle utilizzarle dobbiamo definirle come linee di ingresso o come linee di uscita, come avviene con Arduino con l&#8217;istruzione pinMode(). Realizziamo un semplice circuito come il seguente: In questo caso le istruzioni...</p>
<p>The post <a href="https://logicaprogrammabile.it/come-usare-pin-gpio-digitali-raspberry-pico/">Come usare pin IO digitali della Pico</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p></p>
<h1>Gestire linee IO della Pico</h1>
<p>La Pi Pico possiede 26 linee GPIO. Per poterle utilizzarle dobbiamo definirle come linee di ingresso o come linee di uscita, come avviene con Arduino con l&#8217;istruzione pinMode().</p>
<figure id="attachment_6577" aria-describedby="caption-attachment-6577" style="width: 592px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" class="wp-image-6577 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout.jpg" alt="pico pinout" width="592" height="599" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout.jpg 592w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout-296x300.jpg 296w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout-148x150.jpg 148w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout-80x80.jpg 80w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout-585x592.jpg 585w" sizes="(max-width: 592px) 100vw, 592px" /><figcaption id="caption-attachment-6577" class="wp-caption-text">pinout della raspberry pi pico</figcaption></figure>
<p>Realizziamo un semplice circuito come il seguente:</p>
<figure id="attachment_6579" aria-describedby="caption-attachment-6579" style="width: 395px" class="wp-caption aligncenter"><img decoding="async" class="wp-image-6579 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/blink_test_led.jpg" alt="led test gpio" width="395" height="415" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/blink_test_led.jpg 395w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/blink_test_led-286x300.jpg 286w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/blink_test_led-143x150.jpg 143w" sizes="(max-width: 395px) 100vw, 395px" /><figcaption id="caption-attachment-6579" class="wp-caption-text">led collegato al GPIO 15 (pin 20 della scheda)</figcaption></figure>
<p><span id="more-6562"></span></p>
<p>In questo caso le istruzioni da utilizzare fanno parte del modulo machine, quindi la prima istruzione da usare e l&#8217;importazione del modulo:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import machine</pre>
<p>per definire un pin come uscita digitale utilizzeremo questa istruzione:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">led = machine.Pin(15, machine.Pin.OUT)</pre>
<p>L&#8217;oggetto led possiede il metodo value che permette di portare a livello alto o basso lo stato del pin:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">led.value(1) # mette alto il pin 15
led.value(0) # mette basso il pin 15</pre>
<p>Il classico blink del led si esegue con il seguente codice:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import machine
import utime

#definisco il pin gpio 15 come uscita
led = machine.Pin(15, machine.Pin.OUT)

while(1):
    led.value(1) # uscita a livello logico alto
    utime.sleep(1) # pausa di 1 secondo
    led.value(0) # uscita a livello logico basso
    utime.sleep(1) # pausa di 1 secondo
    
</pre>
<h2>GPIO Speed Test</h2>
<p>Dal codice precedente, eliminando l&#8217;istruzione sleep() possiamo misurare la velocita massima di commutazione del pin</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">import machine
import utime

#definisco il pin gpio 15 come uscita
led = machine.Pin(15, machine.Pin.OUT)

while(1):
    led.toggle() # mette l'uscita alta e poi bassa </pre>
<p>ottenendo una frequenza di commutazione di circa 60,5 KHz ma che presenta una continua variazione del livello alto dell&#8217;onda di circa  +- 1.3uS</p>
<p><img decoding="async" class="aligncenter size-full wp-image-6581" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/flutuazione.jpg" alt="flutuazione" width="416" height="451" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/flutuazione.jpg 416w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/flutuazione-277x300.jpg 277w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/flutuazione-138x150.jpg 138w" sizes="(max-width: 416px) 100vw, 416px" /></p>
<p>Questo fenomeno e tipico in tutti i microcontrollori che eseguono codice interpretato, queste latenze sono intrinseche e tipicamente tollerate in questi sistemi. Per avere tempistiche certe nell&#8217;esecuzione dei programmi dobbiamo usare codici compilati e ottimizzati per l&#8217;architettura del microcontrollore.</p>
<h2>Configurare un ingresso digitale</h2>
<figure id="attachment_6582" aria-describedby="caption-attachment-6582" style="width: 440px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6582 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/test_button.jpg" alt="button pin in" width="440" height="498" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/test_button.jpg 440w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/test_button-265x300.jpg 265w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/test_button-133x150.jpg 133w" sizes="auto, (max-width: 440px) 100vw, 440px" /><figcaption id="caption-attachment-6582" class="wp-caption-text">pulsante sul pin 16 con resistenza di pull-up</figcaption></figure>
<p>allo stesso modo delle istruzioni viste in precedenza possiamo definire un pin in ingresso con il seguente codice:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import machine
import utime

#definisco il pin gpio 15 come uscita
led = machine.Pin(15, machine.Pin.OUT)
#definisco il pin gpio 16 come ingresso
pulsante = machine.Pin(16, machine.Pin.IN)

while(1):
    if pulsante.value() == 0:
        print("pulsante premuto!")

        utime.sleep(0.2)
    <br />    # continuo a commutare il pin 15<br />    #la frequenza ora è di circa 26KHz
    led.toggle()

</pre>
<h2>Utilizzare un thread</h2>
<p>Lo svantaggio di avere delle latenze dovute alla presenza dell&#8217;interprete MicroPython può essere in parte compensato da un linguaggio ad alto livello che permette di scrivere il codice con un approccio moderno come quello dell&#8217;uso dei Thread.</p>
<p>Un thread è un processo che può essere eseguito in contemporanea (o quasi) con l&#8217;esecuzione di altro codice. Nell&#8217;esempio seguente il codice del thread controllerà quando premiamo il pulsante. Mentre il resto del programma continuerà a eseguirà le altre istruzioni.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import machine
import utime
import _thread

#creo una variabile globale che verrà usata in tutte le funzioni
global stato_pulsante
stato_pulsante = False

#definisco il pin gpio 15 come uscita
led = machine.Pin(15, machine.Pin.OUT)
#definisco il pin gpio 16 come ingresso
pulsante = machine.Pin(16, machine.Pin.IN)
<br />#creo una funzione che verrà gestita dal thread
def leggi_stato_pulsante():
    global stato_pulsante
    while True:<br />        # se premo il pulsante cambio il valore della <br />        # variabile globale
        if pulsante.value() == 0:
            stato_pulsante = True
            utime.sleep(0.2)
<br />#creo un thread e lo associo alla funzione precedentemente creata
_thread.start_new_thread(leggi_stato_pulsante, ())
<br />#questo è il codice del thread principale
while True:<br />    #controllo il valore della variabile globale
    if (stato_pulsante == True):
        print("pulsante premuto!")
        #reimposto la variabile globale a False
        global stato_pulsante
        stato_pulsante = False
    <br />    #continuo a eseguire la commutazione del pin 15
    led.toggle()</pre>
<p>L&#8217;effetto di questo codice è uguale al precedente ma la scrittura del codice rimane qualitativamente migliore.</p>
<p>&nbsp;</p><p>The post <a href="https://logicaprogrammabile.it/come-usare-pin-gpio-digitali-raspberry-pico/">Come usare pin IO digitali della Pico</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/come-usare-pin-gpio-digitali-raspberry-pico/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Uno WiFi Rev2 GPIO speed test</title>
		<link>https://logicaprogrammabile.it/atmega4809-arduino-uno-wifi-rev2-speed-test/</link>
					<comments>https://logicaprogrammabile.it/atmega4809-arduino-uno-wifi-rev2-speed-test/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 24 Dec 2018 07:00:24 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino UNO]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[wireless]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=5971</guid>

					<description><![CDATA[<p>GPIO Speed test e considerazioni sulla UNO WiFi r2 Nonostante la presenza di alcune schede della serie MKR che hanno a bordo il modulo WiFi è da qualche tempo disponibile la scheda UNO WiFi r2. Questa nuova scheda ha numerose funzionalità rispetto alla UNO (basata...</p>
<p>The post <a href="https://logicaprogrammabile.it/atmega4809-arduino-uno-wifi-rev2-speed-test/">Arduino Uno WiFi Rev2 GPIO speed test</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>GPIO Speed test e considerazioni sulla UNO WiFi r2</h1>
<p>Nonostante la presenza di alcune schede della serie <strong>MKR</strong> che hanno a bordo il modulo WiFi è da qualche tempo disponibile la scheda <strong>UNO WiFi r2</strong>. Questa nuova scheda ha numerose funzionalità rispetto alla UNO (basata sul micro ATMEGA328) e personalmente credo che la caratteristica maggiore sia la presenza del <a href="https://www.microchip.com/wwwproducts/en/ATMEGA4809">microcontrollore ATMEGA4809.</a> Nonostante la maggior parte dei progetti basati su Arduino impieghi il micro <strong>ATMEGA328</strong> probabilmente è ora il momento di guardare avanti utilizzando un nuovo microcontrollore.</p>
<p><img loading="lazy" decoding="async" class="wp-image-5992 size-medium aligncenter" src="https://logicaprogrammabile.it/wp-content/uploads/2018/12/atmega4809-243x300.png" alt="ATMEGA4809" width="243" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2018/12/atmega4809-243x300.png 243w, https://logicaprogrammabile.it/wp-content/uploads/2018/12/atmega4809.png 319w" sizes="auto, (max-width: 243px) 100vw, 243px" /></p>
<p><span id="more-5971"></span>ATMEGA4809 Arduino UNO WiFi r2Per capire cosa c&#8217;è di nuovo nell&#8217;ATMEGA4809, di seguito una tabella comparativa tra i vari micro delle schede Arduino <strong>UNO</strong>, <strong>Leonardo</strong> e <strong>UNO WiFi</strong></p>
<table align="center">
<tbody>
<tr>
<td></td>
<td>UNO</td>
<td>LEONARDO</td>
<td>UNO WiFi R2</td>
</tr>
<tr>
<td>FLASH Memory</td>
<td>32KB</td>
<td>32KB</td>
<td>48KB</td>
</tr>
<tr>
<td>SRAM</td>
<td>2KB</td>
<td>2.5KB</td>
<td>6KB</td>
</tr>
<tr>
<td>EEPROM</td>
<td>1KB</td>
<td>1KB</td>
<td>256B</td>
</tr>
<tr>
<td>EEPROM</td>
<td>1KB</td>
<td>1KB</td>
<td>256B</td>
</tr>
<tr>
<td>CPU Clock</td>
<td>16MHz</td>
<td>16MHz</td>
<td>16MHz</td>
</tr>
<tr>
<td>Operating Voltage</td>
<td>5V</td>
<td>5V</td>
<td>5V</td>
</tr>
<tr>
<td>PIN IO</td>
<td>14</td>
<td>20</td>
<td>14 (disponibili 41)</td>
</tr>
<tr>
<td>Seriale</td>
<td>1</td>
<td>2</td>
<td>4</td>
</tr>
<tr>
<td>I2C</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>SPI</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>Timer</td>
<td>2 a 8 bit ,1 a 16 bit</td>
<td>2 a 8bit, 2 a 16bit</td>
<td>5 a 16 bit</td>
</tr>
<tr>
<td>ADC</td>
<td>6 ch a 10bit</td>
<td>12ch a 10 bit</td>
<td>16ch a 10bit</td>
</tr>
</tbody>
</table>
<p>Si può notare subito una maggiore quantità di memoria programma, una maggiore quantità di memoria SRAM e la presenza di ben 4 seriali UART.<br />
Il package  può essere un limite, sono disponibili infatti il TQFP48 e il UQFN, e questo significa che per utilizzarlo in progetti custom è necessario utilizzare un pcb o un supporto adattatore (TQFP to DIP).</p>
<p>Probabilmente avrebbe più senso avere una versione delle schede serie MKR con questo microcontrollore. In questo modo verrebbe semplificata la prototipazione di schede custom.</p>
<p>Sulla carta l&#8217;ATMEGA4809 ha molte caratteristiche che potrebbero permettere una evoluzione della piattaforma Arduino basata sui microcontrollori a 8 bit. La presenza di 5 timers, il gran numero di line GPIO (41), 11 linee PWM e altre funzionalità, che potete leggere sul <a href="http://ww1.microchip.com/downloads/en/DeviceDoc/40002016A.pdf">datasheet</a>, lo candidano (forse) ad essere il dispositivo ideale per essere utilizzato nelle future schede.</p>
<h3>ATMEGA4809 Speed Test</h3>
<p>Come negli <a href="https://logicaprogrammabile.it/mkr1000-gpio-speed-test/">articoli precedenti</a> ho eseguito una commutazione continua di una linea <strong>GPIO</strong> per misurare la frequenza di commutazione. Eseguendo il codice sottostante e misurando e misurando con un oscilloscopio la frequenza di commutazione presente sulla linea GPIO 0 ho ottenuto un valore di circa <strong>138.3KHz</strong>.</p>
<pre class="lang:arduino decode:true">void setup()
{
  //pin0 in uscita
  pinMode(0, OUTPUT);
}
 
void loop()
{
  //ciclo infinito
  while(true)
  {
    //metto il pin0 alto
    digitalWrite(0, HIGH);
    //metto il pin0 basso
    digitalWrite(0, LOW);
  }
}
</pre>
<p>Di seguito la tabella riepilogativa aggiornata:</p>
<table align="center">
<tbody>
<tr>
<td><strong>Tipo Scheda</strong></td>
<td><strong>Frequenza di commutazione</strong></td>
</tr>
<tr>
<td>Genuino 101</td>
<td>320 KHz</td>
</tr>
<tr>
<td>Genuino MKR1000</td>
<td>316.3 KHz *</td>
</tr>
<tr>
<td>Arduino UNO</td>
<td>147.5 KHz *</td>
</tr>
<tr>
<td>Arduino LEONARDO / MICRO</td>
<td>143.8 KHz *</td>
</tr>
<tr>
<td>Arduino UNO WiFi r2</td>
<td>138.3 KHz</td>
</tr>
<tr>
<td>Flyport Ethernet</td>
<td>134.5 KHz</td>
</tr>
<tr>
<td>Netduino Plus 2</td>
<td>44.27 KHz</td>
</tr>
<tr>
<td>FEZ Panda II</td>
<td>12.7 KHz</td>
</tr>
<tr>
<td>Netduino</td>
<td>8.4 KHz</td>
</tr>
</tbody>
</table>
<p>Le voci dove è presente l&#8217;asterisco (*) sono i nuovi valori ottenuti utilizzando gli ultimi aggiornamenti (Arduino avr Boards versione 1.6.23)</p>
<p>The post <a href="https://logicaprogrammabile.it/atmega4809-arduino-uno-wifi-rev2-speed-test/">Arduino Uno WiFi Rev2 GPIO speed test</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/atmega4809-arduino-uno-wifi-rev2-speed-test/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Raspberry Pi come usare linee GPIO</title>
		<link>https://logicaprogrammabile.it/raspberry-pi-come-usare-linee-gpio/</link>
					<comments>https://logicaprogrammabile.it/raspberry-pi-come-usare-linee-gpio/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Fri, 05 Oct 2018 05:00:13 +0000</pubDate>
				<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[raspberry]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=5850</guid>

					<description><![CDATA[<p>Gestire linee gpio sul Raspberry pi Sapiamo che le schede Raspberry Pi offrono un panorama di impiego molto ampio, grazie anche alla presenza di un connettore maschio a 40 pin (Raspberry Pi 1, 2, 3, Zero) che interfaccia la scheda a diverse tipologie di circuiti...</p>
<p>The post <a href="https://logicaprogrammabile.it/raspberry-pi-come-usare-linee-gpio/">Raspberry Pi come usare linee GPIO</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Gestire linee gpio sul Raspberry pi</h1>



<p>Sapiamo che le schede <a href="https://www.raspberrypi.org/">Raspberry Pi</a> offrono un panorama di impiego molto ampio, grazie anche alla presenza di un connettore maschio a <strong>40 pin</strong> (<strong>Raspberry Pi</strong> <a href="https://www.raspberrypi.org/products/raspberry-pi-1-model-b-plus/">1</a>, <a href="https://www.raspberrypi.org/products/raspberry-pi-2-model-b/">2</a>, <a href="https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/">3</a>, <a href="https://www.raspberrypi.org/products/raspberry-pi-zero-w/">Zero</a>) che interfaccia la scheda a diverse tipologie di circuiti elettronici. Questa possibilità è data da una serie di linee <strong>GPIO</strong> che possono essere programmate anche con <a href="https://www.python.org/">Python</a>.</p>



<h3 class="wp-block-heading">Cosa sono le linee GPIO</h3>



<p>Le linee GPIO (<a href="https://it.wikipedia.org/wiki/General_Purpose_Input/Output">general purpose input output</a>) sono dei collegamenti tra il processore e i pin del connettore della scheda. Queste linee possono essere programmate sia per funzionare come porte di ingresso sia come porte di uscita. Alcune di queste linee hanno delle funzionalità aggiuntive infatti possono essere configurate come linee UART, SPI o I2C.</p>



<h3 class="wp-block-heading">Pin function</h3>



<p>Per conoscere la posizione e la denominazione delle linee <strong>GPIO</strong> nel connettore a 40 pin del Raspberry Pi utilizzo il comando pinout. Apriamo il terminale LxTerminal e digitiamo il seguente comando:</p>



<pre class="wp-block-code"><code>$ pinout</code></pre>



<p>premiamo invio e dopo qualche istante avremo sul terminale la rappresentazione delle periferiche della scheda ed in particolare del connettore a 40 pin:</p>



<div class="wp-block-image">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="521" height="818" class="wp-image-5855 aligncenter" src="https://logicaprogrammabile.it/wp-content/uploads/2018/09/2018-09-25-135928_1280x1024_scrot.png" alt="" srcset="https://logicaprogrammabile.it/wp-content/uploads/2018/09/2018-09-25-135928_1280x1024_scrot.png 521w, https://logicaprogrammabile.it/wp-content/uploads/2018/09/2018-09-25-135928_1280x1024_scrot-191x300.png 191w" sizes="auto, (max-width: 521px) 100vw, 521px" /></figure>
</div>



<p>In verde sono elencate le linee GPIO, in grigio i pin collegati a GND, in rosso le linee di alimentazione a 5Vdc ed in celeste le linee di alimentazione a 3,3V</p>



<p>La programmazione delle porte IO può avvenire utilizzando diversi linguaggi di programmazione, ma naturalmente andremo ad utilizzare il linguaggio Python perché è quello che viene maggiormente usato su questa piattaforma (almeno credo!).</p>



<h3 class="wp-block-heading">Gestire le linee GPIO con Python</h3>



<h4 class="wp-block-heading">Configurare pin Gpio in uscita</h4>



<p>Per utilizzare le porte IO abbiamo a disposizione l&#8217;attributo <strong>GPIO</strong> del modulo <strong>RPi</strong>. Questo attributo mette a disposizione i metodi per definire una linea come ingresso o come uscita e ne permette di controllarne lo stato. Se è una linea di uscita è possibile porla a livello logico alto oppure basso, se è una linea di ingresso è possibile leggere il valore logico disponibile sul pin.</p>



<p>Per scrivere il programma <strong>Python</strong> usiamo <a href="https://thonny.org/">Thonny</a>, disponibile come software preinstallato nelle ultime versioni di <a href="https://www.raspberrypi.org/downloads/raspbian/">Raspbian</a>.</p>



<p>scriviamo la prima istruzione che definisce l&#8217;attributo GPIO</p>



<pre class="wp-block-code"><code>from RPi import GPIO</code></pre>



<p>L&#8217;istruzione seguente, invece, è necessaria per definire il modo di riferimento del pin. In pratica possiamo riferirci ad un pin tramite la numerazione del connettore (da 1 a 40) o tramite la numerazione del processore (ad esempio gpioxx). Usando l&#8217;istruzione seguente utilizzeremo la numerazione gpio del processore</p>



<pre class="wp-block-code"><code>GPIO.setmode(GPIO.BCM)</code></pre>



<p>quindi per definire il pin 40 (gpio21) come linea di uscita dovremmo scrivere la seguente istruzione:</p>



<pre class="wp-block-code"><code>GPIO.setup(21, GPIO.OUT)</code></pre>



<p>il metodo <strong>setup</strong> accetta come primo argomento il numero della linea <strong>gpio</strong>, in questo caso la 21, che corrisponde al pin 40. Se avessi usato questa istruzione per definire il riferimento ai pin:</p>



<pre class="wp-block-code"><code>GPIO.setmode(GPIO.BOARD)</code></pre>



<p>nel metodo setup avrei dovuto scrivere:</p>



<pre class="wp-block-code"><code>GPIO.setup(40, GPIO.OUT)</code></pre>



<p>le due istruzioni precedenti producono lo stesso risultato, ovvero definire il pin 40 (gpio21) come una uscita.</p>



<p>Una volta definito il pin come linea digitale di output possiamo gestirne lo stato con la seguente istruzione:</p>



<pre class="wp-block-code"><code>#uscita a livello logico alto
GPIO.output(21, GPIO.HIGH)
#uscita a livello logico basso
GPIO.output(21, GPIO.LOW)</code></pre>



<p>di seguito il codice completo:</p>



<pre class="wp-block-code"><code>from RPi import GPIO
import time

#tipo di riferimento, numerazione della cpu
GPIO.setmode(GPIO.BCM)

#imposto linea 21, pin 40, come uscita
GPIO.setup(21, GPIO.OUT)

#ciclo infinito
while (True):
    #metto la linea 21 alta
    GPIO.output(21, GPIO.HIGH)
    #attendo 1 secondo
    time.sleep(1)
    #metto la linea 21 bassa
    GPIO.output(21, GPIO.LOW)
    #attendo 1 secondo
    time.sleep(1)</code></pre>



<p>Di seguito il circuito uttizzato per verificare la corretta esecuzione del codice</p>



<div class="wp-block-image">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="611" height="419" class="wp-image-5890 aligncenter" src="https://logicaprogrammabile.it/wp-content/uploads/2018/10/RaspberrypiLed.png" alt="linee gpio configurate come uscita" srcset="https://logicaprogrammabile.it/wp-content/uploads/2018/10/RaspberrypiLed.png 611w, https://logicaprogrammabile.it/wp-content/uploads/2018/10/RaspberrypiLed-300x206.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2018/10/RaspberrypiLed-585x401.png 585w" sizes="auto, (max-width: 611px) 100vw, 611px" /></figure>
</div>



<h4 class="wp-block-heading">Configurare pin Gpio in ingresso</h4>



<p>Allo stesso modo di come abbiamo configurato un pin in uscita possiamo utilizzare alcune semplici istruzioni per impostare un pin in ingresso. L&#8217;istruzione seguente configura la linea Gpio 20 (pin 38) come ingresso:</p>



<pre class="wp-block-code"><code>GPIO.setup(20, GPIO.IN)</code></pre>



<p>Per leggere il livello logico presente sul pin dobbiamo utilizzare la seguente istruzione</p>



<pre class="wp-block-code"><code>GPIO.input(20)</code></pre>



<p>Il seguente circuito permette di avere sul pin 38 (gpio20) un livello logico alto (+3.3Vdc) e premendo il pulsante un livello logico basso (0Vdc).</p>



<div class="wp-block-image">
<figure class="aligncenter"><img loading="lazy" decoding="async" width="500" height="360" class="wp-image-5892 aligncenter" src="https://logicaprogrammabile.it/wp-content/uploads/2018/10/RaspberryPi_Read_Button.png" alt="linee gpio configurate come ingresso" srcset="https://logicaprogrammabile.it/wp-content/uploads/2018/10/RaspberryPi_Read_Button.png 500w, https://logicaprogrammabile.it/wp-content/uploads/2018/10/RaspberryPi_Read_Button-300x216.png 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></figure>
</div>



<p>Il codice per verificare lo stato del pin è il seguente:</p>



<pre class="wp-block-code"><code>from RPi import GPIO
GPIO.setmode(GPIO.BCM)

GPIO.setup(20, GPIO.IN)

while (True):
    if GPIO.input(20)== False:
        print ("Pulsante premuto")</code></pre>



<p>Ogni volta che premeremmo il pulsante verrà printata la stringa &#8220;Pulsante premuto&#8221;.</p>



<p>Queste che abbiamo visto sono le istruzioni basilari che ci permettono di interfacciare il <strong>Raspberry Pi</strong> al mondo esterno utilizzando le linee <strong>GPIO</strong> come ingressi e uscite digitali.</p>
<p>The post <a href="https://logicaprogrammabile.it/raspberry-pi-come-usare-linee-gpio/">Raspberry Pi come usare linee GPIO</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/raspberry-pi-come-usare-linee-gpio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Flyport Ethernet Speed Test</title>
		<link>https://logicaprogrammabile.it/flyport-ethernet-speed-test/</link>
					<comments>https://logicaprogrammabile.it/flyport-ethernet-speed-test/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Fri, 28 Jun 2013 10:36:13 +0000</pubDate>
				<category><![CDATA[OpenPicus]]></category>
		<category><![CDATA[Flyport]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[Speed Test]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3701</guid>

					<description><![CDATA[<p>Risultati velocità di commutazione pin digitale Anche per il modulo Flyporyt Ethernet ho realizzato lo speed test come quello per le schede Netduino, Arduino e GHI. Il test consiste nella commutazione continua di un singolo pin digitale, misurando con un oscilloscopio, la frequenza risultante. Il...</p>
<p>The post <a href="https://logicaprogrammabile.it/flyport-ethernet-speed-test/">Flyport Ethernet Speed Test</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Risultati velocità di commutazione pin digitale</h3>
<p>Anche per il modulo <strong>Flyporyt Ethernet</strong> ho realizzato lo <strong>speed test</strong> come quello per le schede <strong>Netduino</strong>, <strong>Arduino</strong> e <strong>GHI</strong>. Il test consiste nella commutazione continua di un singolo pin digitale, misurando con un oscilloscopio, la frequenza risultante.</p>
<p>Il circuito elettrico dei collegamenti è il seguente:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/06/FlyportSpeedTestOsc.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3705" src="https://logicaprogrammabile.it/wp-content/uploads/2013/06/FlyportSpeedTestOsc.png" alt="Circuito Speed Test Flyport" width="574" height="350" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/06/FlyportSpeedTestOsc.png 574w, https://logicaprogrammabile.it/wp-content/uploads/2013/06/FlyportSpeedTestOsc-300x182.png 300w" sizes="auto, (max-width: 574px) 100vw, 574px" /></a></p>
<p><span id="more-3701"></span></p>
<p>mentre questo è il risultato della misura:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/06/FlyportSpeedTest.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3703" src="https://logicaprogrammabile.it/wp-content/uploads/2013/06/FlyportSpeedTest.png" alt="Flyport Ethernet Speed Test" width="629" height="449" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/06/FlyportSpeedTest.png 629w, https://logicaprogrammabile.it/wp-content/uploads/2013/06/FlyportSpeedTest-300x214.png 300w" sizes="auto, (max-width: 629px) 100vw, 629px" /></a></p>
<p>Come si può osservare la frequenza e di ben<strong> 134.5KHz</strong>, un risultato che reputo molto soddisfacente, paragonato ai precedenti speed test.</p>
<p>La tabella seguente riepiloga i risultati misurati con le varie schede</p>
<table>
<tbody>
<tr>
<td><strong>Tipo Scheda</strong></td>
<td><strong>Frequenza di commutazione</strong></td>
</tr>
<tr>
<td>Flyport Ethernet</td>
<td>134.5 KHz</td>
</tr>
<tr>
<td>Arduino UNO</td>
<td>125 KHz</td>
</tr>
<tr>
<td>Arduino LEONARDO / MICRO</td>
<td>106 KHz</td>
</tr>
<tr>
<td>FEZ Panda II</td>
<td>12.7 KHz</td>
</tr>
<tr>
<td>Netduino Plus 2</td>
<td>44.27 KHz</td>
</tr>
<tr>
<td>Netduino</td>
<td>8.4 KHz</td>
</tr>
</tbody>
</table>
<p>Lo speed test è indicativo e non stabilisce certamente la scheda migliore. Ogni dispositivo possiede pro e contro a prescindere dal risultato dello speed test.</p>
<p>The post <a href="https://logicaprogrammabile.it/flyport-ethernet-speed-test/">Flyport Ethernet Speed Test</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/flyport-ethernet-speed-test/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Flyport Ethernet, conoscere i pin digitali</title>
		<link>https://logicaprogrammabile.it/flyport-ethernet-pin-digitali/</link>
					<comments>https://logicaprogrammabile.it/flyport-ethernet-pin-digitali/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 13 May 2013 09:22:15 +0000</pubDate>
				<category><![CDATA[OpenPicus]]></category>
		<category><![CDATA[Flyport]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[Ingressi Analogici]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3582</guid>

					<description><![CDATA[<p>Come configurare ed utilizzare i pin digitali del Flyport Ethernet L&#8217;utilizzo dei pin digitali rientra tra le nozioni basilari da comprendere per poter iniziare ad interagire con  i dispositivi ed i componenti esterni che permettono al modulo Flyport Ethernet di far parte di un sistema...</p>
<p>The post <a href="https://logicaprogrammabile.it/flyport-ethernet-pin-digitali/">Flyport Ethernet, conoscere i pin digitali</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come configurare ed utilizzare i pin digitali del Flyport Ethernet</h3>
<p>L&#8217;utilizzo dei pin digitali rientra tra le nozioni basilari da comprendere per poter iniziare ad interagire con  i dispositivi ed i componenti esterni che permettono al modulo <a href="http://wiki.openpicus.com/index.php/Flyport_Ethernet" target="_blank"><strong>Flyport Ethernet</strong></a> di far parte di un sistema complesso.<br />
Il modulo <strong>Flyport Ethernet</strong> è composto da due <strong>connettori, J1 e J2</strong>; essi sono collegati direttamente ai pin del microcontrollore <strong>Pic24F</strong> ed al controller Ethernet <strong>ENC424J600</strong>.</p>
<p>Tramite questi connettori possiamo collegarlo al modulo <strong>NEST Proto</strong> o ad un nostro circuito host dedicato.<br />
Nel mio caso utilizzerò il <a href="http://wiki.openpicus.com/index.php/Proto_NEST" target="_blank">Nest Proto</a> per motivi di semplicità e di uniformità dei tutorial.</p>
<p>Nel Nest Proto è presente un connettore femmina collegato direttamente al connettore J1 del Flyport Ethernet, che permette di utilizzare dei fili elettrici pint-to-pin per realizzare velocemente prototipi ed esperimenti. Tralasciamo, per ora, il connettore J2 che viene impiegato per la comunicazione ethernet (tramite una porta RJ45 da saldare sul NEST Proto), e per offrire altri 8 pin IO.</p>
<p><span id="more-3582"></span></p>
<p>Il connettore <strong>J1</strong> è composto da <strong>26 pin</strong>, ad ognuno è associata una funzione specifica. La tabella seguente mostra la pin-function del connettore:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/05/Flyport-J1-Port.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3585" alt="Flyport Ethernet J1 Port mapping" src="https://logicaprogrammabile.it/wp-content/uploads/2013/05/Flyport-J1-Port.png" width="564" height="546" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/05/Flyport-J1-Port.png 564w, https://logicaprogrammabile.it/wp-content/uploads/2013/05/Flyport-J1-Port-300x290.png 300w" sizes="auto, (max-width: 564px) 100vw, 564px" /></a></p>
<h4>Configurare pin GPIO come uscita</h4>
<p>I pin contrassegnati come <strong>GPIO</strong> possono funzionare sia come<strong> ingressi</strong> sia come<strong> uscite</strong> digitali. La colonna <strong>Remappable</strong> indica invece se al pin può essere associata una funzione speciale, ad esempio i pin <strong>p1</strong> e <strong>p3</strong> NON sono rimappabili e quindi possono essere configurati o come GPIO o come bus I2C. Un pin rimappabile può funzionare sia come GPIO ed è possibile associarli anche una funzionalità aggiuntiva come PWM, UART o SPI. Questa peculiarità permette di avere un sistema molto flessibile, configurabile per ogni esigenza progettuale.<br />
La colonna, <strong>5V Tollerant</strong>, indica se il pin può sopportare tensioni di 5 Volt (Logica TTL), ad esempio il pin p17 non è 5V tollerant e quindi dobbiamo stare <strong>molto attenti</strong> a non collegare tensioni superiori ai 3.3V, causa possibile danneggiamento del microcontrollore.</p>
<p>Utilizziamo il circuito in figura per scrivere un piccolo programma che utilizzerà le istruzioni per definire il <strong>pin p2</strong> come uscita digitale:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/05/TestIO.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3607" alt="Flyport Ethernet Led blink" src="https://logicaprogrammabile.it/wp-content/uploads/2013/05/TestIO.png" width="429" height="304" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/05/TestIO.png 429w, https://logicaprogrammabile.it/wp-content/uploads/2013/05/TestIO-300x212.png 300w" sizes="auto, (max-width: 429px) 100vw, 429px" /></a></p>
<p>al pin <strong>p2</strong>, ho collegato una resistenza da 330 ohm ed un diodo led. Da notare che i numeri dei pin sono disposti utilizzando la prima riga, del connettore J1, per i numeri dispari e la seconda riga per i numeri pari.</p>
<p>Il codice seguente accende e spegne il led ogni 500ms:</p>
<p>[c]<br />
#include &quot;taskFlyport.h&quot;</p>
<p>void FlyportTask()<br />
{<br />
  //il pin p2 viene configurato<br />
  //come uscita digitale<br />
  IOInit(p2, out);</p>
<p>  //ciclo infinito<br />
  while(1)<br />
  {<br />
    //commuto il pin p2 a livello<br />
    //logico alto<br />
    IOPut(p2, on);<br />
    //creo un ritardo di 500ms<br />
    DelayMs(500);<br />
    //commuto il pin p2 a livello<br />
    //logico basso<br />
    IOPut(p2, off);<br />
    //creo un ritardo di 500ms<br />
    DelayMs(500);<br />
  }<br />
}<br />
[/c]</p>
<p>L&#8217;istruzione che permette di definire un pin come uscita o come ingresso è la <strong>IOInit()</strong>. I parametri da passare sono il numero del pin, espresso nella forma <strong>px</strong> (dove x è il numero del pin) ed il flag per specificare un uscita <strong>out</strong> o un ingresso <strong>in</strong>.<br />
In questo caso il pin <strong>p2</strong> viene usato come uscita (<strong>out</strong>). Per poter commutare il suo stato logico utilizziamo la funzione <strong>IOPut()</strong>. Questa funzione accetta due parametri, il primo è il numero del pin, definito nella <strong>IOInit</strong>, e il secondo specifica se metterlo a livello logico alto (<strong>on</strong>) o al livello basso(<strong>off</strong>).</p>
<h4>Configurare pin GPIO come ingresso</h4>
<p>Il pin <strong>p2</strong> viene ora impiegato come <strong>ingresso digitale</strong>. Lo schema elettrico è il seguente:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/05/TestIO_input.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3610" alt="Flyport ethernet input port" src="https://logicaprogrammabile.it/wp-content/uploads/2013/05/TestIO_input.png" width="494" height="361" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/05/TestIO_input.png 494w, https://logicaprogrammabile.it/wp-content/uploads/2013/05/TestIO_input-300x219.png 300w" sizes="auto, (max-width: 494px) 100vw, 494px" /></a></p>
<p>la resistenza R1 serve per avere un livello logico basso sul pin p2 quando il pulsante è aperto. Sul pin <strong>p4</strong> ho collegato un diodo led in modo da poterlo accendere quando premo sul pulsante.<br />
Questo è il codice del firmware da caricare sul Flyport:</p>
<p>[c]<br />
#include &quot;taskFlyport.h&quot;</p>
<p>void FlyportTask()<br />
{<br />
  //il pin p2 viene configurato<br />
  //come Ingresso digitale<br />
  IOInit(p2, in);</p>
<p>  //il pin p4 viene configurato<br />
  //come Uscita digitale<br />
  IOInit(p4, out);</p>
<p>  //ciclo infinito<br />
  while(1)<br />
  {<br />
    //verifico lo stato del pin p2<br />
    //Alto o basso<br />
    if(IOGet(p2) == 1)<br />
      //sel il pin è a livello<br />
      //logico alto, accendo il led<br />
      IOPut(p4, on);<br />
    else<br />
      //altrimenti<br />
      //spegni il led<br />
      IOPut(p4, off);</p>
<p>    DelayMs(20);<br />
  }<br />
}<br />
[/c]</p>
<p>Ho usato due istruzioni <strong>IOInit</strong> per definire il pin<strong> p2 come ingresso</strong> e il pin <strong>p4 come uscita</strong>. Nel blocco <strong>while</strong>, controllo, con l&#8217;istruzione <strong>IOGet</strong>, se il livello logico sul pin <strong>p2</strong> è alto. In caso affermativo, utilizzo il pin <strong>p4</strong>, per accendere o spegnere il diodo led.</p>
<p>Nei prossimi tutorial vedremo come attivare la resistenza interna di pull-up e di pull-down per gli ingressi digitali del Flyport Ethernet.</p>
<p>The post <a href="https://logicaprogrammabile.it/flyport-ethernet-pin-digitali/">Flyport Ethernet, conoscere i pin digitali</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/flyport-ethernet-pin-digitali/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Uno gpio Speed Test</title>
		<link>https://logicaprogrammabile.it/arduino-uno-gpio-speed-test/</link>
					<comments>https://logicaprogrammabile.it/arduino-uno-gpio-speed-test/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Thu, 24 Mar 2011 13:01:56 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[Speed Test]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=585</guid>

					<description><![CDATA[<p>Gpio Speed Test velocità di commutazione di un pin digitale Per eseguire una comparazione con Netduino ho eseguito lo stesso esperimento (Netduino speed test) anche per Arduino Uno. Il gpio speed test è molto semplice, basta definire un pin in uscita ed eseguire in modo...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-uno-gpio-speed-test/">Arduino Uno gpio Speed Test</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Gpio Speed Test velocità di commutazione di un pin digitale</h1>
<p>Per eseguire una comparazione con Netduino ho eseguito lo stesso esperimento (<a href="https://logicaprogrammabile.it/netduino-gpio-speed-test/">Netduino speed test</a>) anche per <strong>Arduino Uno</strong>. Il gpio speed test è molto semplice, basta definire un pin in uscita ed eseguire in modo ciclico un&#8217;istruzione che lo ponga a livello logico alto e poi basso.<br />
Questa commutazione continua genera un segnale ad onda quadra misurabile con un oscilloscopio.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-612 size-full" title="DSCF0945" src="https://logicaprogrammabile.it/wp-content/uploads/2011/03/DSCF0945.jpg" alt="Arduino uno gpio speed test" width="400" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/03/DSCF0945.jpg 400w, https://logicaprogrammabile.it/wp-content/uploads/2011/03/DSCF0945-300x225.jpg 300w" sizes="auto, (max-width: 400px) 100vw, 400px" /></p>
<p>Il codice seguente mostra come effettuare questo test:</p>
<pre class="lang:arduino decode:true ">void setup()
{
  pinMode(0, OUTPUT); //Definisce il Pin0 come Uscita
}

void loop()
{
  while(true)
  {
    digitalWrite(0, HIGH); //Commuta l'uscita alta
    digitalWrite(0, LOW); //Commuta l'uscita bassa
  }
}</pre>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-609 size-full" title="DSCF0943" src="https://logicaprogrammabile.it/wp-content/uploads/2011/03/DSCF0943.jpg" alt="Arduino Speed test" width="350" height="262" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/03/DSCF0943.jpg 350w, https://logicaprogrammabile.it/wp-content/uploads/2011/03/DSCF0943-300x224.jpg 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /></p>
<p>La frequenza ottenuta sul pin 0 è di ben 125 KHz decisamente superiore a quella ottenuta dal Netduino (8.4KHz) nonostante i suoi 48 Mhz di clock contro i 16Mhz dell&#8217;Arduino.</p>
<p>L&#8217;istruzione digitalWrite() impiega circa 4uS contro i 53uS della Write() eseguita dal Netduino.</p>
<p>Netduino impiega delle risorse per far girare il .Net micro framework ecco perché nello speed test contro Arduino esce perdente.<br />
Arduino nonostante i sui 16Mhz di clock è capace di essere più veloce, perché il suo codice, accede direttamente alle funzioni a basso livello del microprocessore ATMEGA328.</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-uno-gpio-speed-test/">Arduino Uno gpio Speed Test</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-uno-gpio-speed-test/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
