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 in campo risorse per la realizzazione di nuovi dispositivi facili da programmare (il modulo G30 TH è un esempio), dal costo contenuto e open.
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 GHI Electronics.
E’ 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.
E’ 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.
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.
Tenterò di fare questa comparativa soprattutto per farvi conoscere la scheda G30 TH (sfortunatamente GHI Electonics non mi paga per fargli pubblicità!!)
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€.
La tabella seguente mette in evidenza quali siano le differenze hardware tra i due prodotti:
GENUINO UNO | GHI G30 TH | |
Microcontrollore | ATMEGA328PU 8bit | ARM Cortex M4 32bit |
Clock Speed | 16MHz | 84MHz |
Tensione di lavoro | 5Vdc | 3.3Vdc |
Input /Output Digitali GPIO | 14 | 32 |
Input Analogici (ADC) | 6 | 10 |
PWM | 6 | 13 |
Memoria Flash | 32 KB | 128 KB |
Memoria SRAM | 2 KB | 68 KB |
Memoria EEPROM | 1 KB | – |
UART | 1 | 2 |
SPI | 1 | 2 |
I2C | 1 | 1 |
One Wire | – | 1 |
RTC | Con shield aggiuntiva | Integrato |
Peso | 25g | 4g |
Dimensioni (LxH) | 68.6 x 53.4mm | 50.5 x 17.5 mm |
Analizzando la tabella sembrerebbe che la G30 TH esca vincitrice nel confronto delle singole voci. Ma è davvero cosi?
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
//codice eseguito dalla Genuino UNO void setup() { pinMode(2, OUTPUT); } void loop() { while() { digitalWrite(2, HIGH); digitalWrite(2, LOW); } }
//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); } } }
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.
Ora proviamo a eseguire il GPIO speed test impiegando questa volta tre pin digitali, il codice sulla UNO è il seguente:
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); } }
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:
Di seguito il listato di codice caricato sul modulo G30 TH:
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(); } } }
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:
Quindi sulla scheda UNO, inserendo più istruzioni, otteniamo un rallentamento dovuto all’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.
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?”.
Differenze principali tra G30 TH e UNO
La differenza sostanziale tra la UNO e la G30TH è che in quest’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.
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!).
Il microcontrollore della UNO, l’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.
Ambiente di sviluppo:
La UNO può essere programmata con l’Arduino IDE, un software molto spartano ma che mette a disposizione tutto il necessario per programmare e caricare i programmi sul microcontrollore. L’IDE è multi piattaforma è può essere utilizzato con sistemi Windows, Mac e Linux.
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.
Supporto e community
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’ottimo forum che solitamente assolve a qualsiasi tipologia di richiesta, inoltre potete trovare numerosissimi tutorial su blog e siti web.
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.
Conclusione:
Penso che definire una scheda migliore di un’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).
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.
Related posts
4 Comments
Lascia un commento Annulla risposta
Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.
Articoli popolari
Sorry. No data so far.
.Net micro framework Arduino Arduino Webserver Domotica Flyport I2C IOT Netduino OpenPicus raspberry RTC Speed Test
Ciao, premetto che sono nuovo di questo settore e che ho tredici anni quindi chi sa rispondermi lo faccia con termini semplici per favore…
io vorrei iniziare a costruire un quadricottero e ho le idee confuse sulla programmazione, non ho la più pallida idea di come si faccia a programmare una scheda di questo tipo.
ho già programmato qualche piccolo videogame, ma non è per niente la stessa cosa.
non scrivetemi cose sui motori ecc. perché su quello ho già le idee chiare.
grazie molte in anticipo
Ciao Paolo
se sei alle prime armi lascia stare Arduino come piattaforma hardware per quadricotteri. Visto che la parte motori, esc ecc hai idee chiare ti consiglio di puntare su una CC3D oppure su una centralina DJI (Naza v2 o Naza Lite)
Saluti
Marco
Ciao Marco,
seguirò certamente il tuo consiglio grazie di tutto!
Ciao Marco
volevo solo chiederti un’altra cosa anche se non è in tema ma ho pensato fosse stato meglio scriverlo sul post più recente.
Visto che sono alle prime armi posso già usare (come frame) questo
(Turnigy Talon Tricopter (V1.0) Carbon Fiber Frame) oppure è meglio puntare su un frame predisposto per quattro rotori o ancora per sei rotori??
grazie in anticipo e a presto