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.

Modulo G30 TH contro Arduino UNO Genuino UNO

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:

Spedd test Arduino UNO

 

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:

gpio speed test with thread
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.