Arduino M0 Pro: getting started

Arduino M0 Pro la nuova board di sviluppo made in Italy con microcontrollore a 32 bit e DEBUG (EDBG) integrato. Questa scheda rappresenta una estensione della nota Arduino UNO, con la stessa dimensione e posizione dell'header ma con un cuore più potente, un Cortex M0+. Grazie alla sua velocità di clock (48Mhz), a una flash più capiente (256Kb) e al core a 32bit questa scheda si posiziona tra le migliori board ad MCU in commercio ma la vera rivoluzione, utile soprattutto per i maker, è l'integrazione a bordo del controller per il debug; finalmente Arduino diventa professionale!

La scheda di sviluppo Arduino M0 Pro è dotata di un microcontrollore Atmel ATSAMD21G18 basato su un core ARM Cortex M0+ a 32 bit. Il D21G18A è provvisto di una memoria Flash di 256 Kb (di cui 4 occupati dal bootloader), 32 Kb di SRAM e opera a una frequenza di 48Mhz. Questo core offre all’Arduino M0 Pro una elevata flessibilità, aumentando il ventaglio di progetti possibili da realizzare: dai dispositivi indossabili, Internet of Things, automazione high tech, fino alla robotica, e tanto altro ancora. Una caratteristica fondamentale, che rende unico questo dispositivo nella famiglia Arduino, è il debugger incorporato a bordo della scheda (EDBG) che elimina la necessità di hardware aggiuntivi. L' EDBG (Embedded Debugger) offre uno streaming di dati tra il PC e la MCU; oltre alla programmazione e il debug, attraverso Atmel Studio, supporta inoltre una porta COM virtuale per programmare il dispositivo nella funzionalità bootloader di Arduino.

Caratteristiche

Microcontroller ATSAMD21G18, 48pins LQFP
Tensione di funzionamento  3.3V
Pins Digital I / O  14, con 12 PWM e UART
Pins di ingresso analogico 6, 12-bit ADC channels
Analog pin di uscita 1, 10-bit DAC
Corrente Max per Pin O/I  7 mA
Memoria Flash 256 KB
SRAM 32 KB
EEPROM  fino a 16KB per emulazione
Frequenza di clock 48 MHz

NOTA: Al contrario della Arduino Uno, che ha una tensione di funzionamento di 5V, questo microcontrollore supporta solo i 3.3V; Una tensione operativa che si adegua ai nuovi standard richiesti dalle periferiche di ultima generazione, come l'ESP8266.

La M0 dispone di due porte USB; la prima detta "Native" è connessa direttamente al MCU, come per la board Arduino Micro, utilizzata per la programmazione tramite l'IDE e per essere collegata facilmente alle periferiche esterne quali: telefoni, tablet, macchine fotografiche e così via, consentendo così di realizzare un numero variegato di applicazioni in cui la scheda possa comunicare con i dispositivi più disparati. La seconda porta USB è chiamata "Programming", connessa direttamente al controller EDBG, utilizzata per la programmazione e per il debug del SAMD21G18A.

zero_pro_usb-185x300

Programming e Debug con l'IDE di Arduino

Per programmare l'Arduino M0 Pro è necessario l'utilizzo dell'IDE aggiornata alla versione 1.7 o maggiore; le prove eseguite per questo articolo sono state realizzate con la versione 1.7.3. La M0 Pro è stata rilasciata dall'azienda Arduino srl,  pertanto tutti i driver e software sono sul portale arduino.org. Durante l'installazione del nuovo software si noterà l'aggiunta del pacchetto "Atmel USB Driver", una novità rispetto alle vecchie versioni, per il supporto e la gestione del driver Jungo.

Driver usb

Terminata l'installazione collegare l'Arduino M0 Pro al PC tramite la porta USB native e attendere il riconoscimento del dispositivo da parte del sistema operativo.

Driver EDBG

Avviare l'IDE per scrivere lo sketch di prova, come esempio ho utilizzato il classico progetto per far lampeggiare il led sulla board,  come di seguito:

/*
  Blink Led
  Maggio 2015
  
  Sorrentino Ernesto
 */

#define  LED_PIN 13                    // Definisce la porta DGT 13 come LED_PIN
#define  LED_ON  HIGH                  // Definisce il livello logico ALTO come LED_ON
#define  LED_OFF  LOW                  // Definisce il livello logico BASSO come LED_OFF

void setup() {
  pinMode(LED_PIN, OUTPUT);            // Imposta la porta DGT 13 come uscita
}

void loop() {
  digitalWrite(LED_PIN, LED_ON);       // Setta la porta DGT 13 a livello logico alto (led acceso)
  delay(250);                          // Attesa di 250ms
  digitalWrite(LED_PIN, LED_OFF);      // Setta la porta DGT 13 a livello logico basso (led spento)   
  delay(250);                          // Attesa di 250ms             
}

La prima parte del codice è composta dalle dichiarazioni “#define” per settare di default lo stato del led e il numero del pin dove è collegato il led al micro

#define  LED_PIN 13                  
#define  LED_ON  HIGH                
#define  LED_OFF  LOW

La seconda parte setta la configurazione hardware, in particolar modo imposta la porta digitale 13, dove è collegato il led della board, come uscita

pinMode(LED_PIN, OUTPUT);

La terza parte, corrispondente al ciclo del programma, ci sono le istruzioni per settare il livello logico sulla porta DGT 13 e la routine di ritardo impostato a 250ms.

  digitalWrite(LED_PIN, LED_ON);     
  delay(250);                         
  digitalWrite(LED_PIN, LED_OFF);     
  delay(250);

Prima di compilare lo sketch è necessario settare il software per la board in utilizzo; dal menù "Strumenti/Scheda" selezionare "Arduino Zero Pro (Native USB Port)"

Arduino Zero_IDE (2)

Impostare la porta di comunicazione dal  menù "Strumenti/Porta", selezionare la COM riconosciuta dal sistema operativo

Arduino Zero_IDE (3)

Terminato il settaggio compilare lo sketch e programmare la scheda con la combinazione dei tasti "Ctrl + U" o con l'apposito pulsante in alto a sinistra della finestra. Al termine della programmazione, se tutto è andato a buon fine, noterete il led lampeggiare; al contrario se il led non lampeggia bisogna effettuare un "debug" per risalire al problema. Per l'IDE in uso l'unico debug disponibile è la funzione "Serial.print()", cioè inviare dall'Arduino, tramite la porta seriale, un comando testuale per avvisare durante l'esecuzione del programma il raggiungimento della riga che si vuol tenere sotto controllo. Per la M0 il comando di "stampa" si differenzia in base alla porta USB in utilizzo: 

Serial5.print(); Per la porta "USB Programming"
SerialUSB.print(); Per la porta "USB Native"

Dato che la scheda è connesa al PC tramite porta USB Native, useremo quest'ultimo comando per modificare lo sketch come segue:

/*
  Blink Led
  Maggio 2015
  
  Sorrentino Ernesto
 */

#define  LED_PIN 13                    // Definisce la porta DGT 13 come LED_PIN
#define  LED_ON  HIGH                  // Definisce il livello logico ALTO come LED_ON
#define  LED_OFF  LOW                  // Definisce il livello logico BASSO come LED_OFF

void setup() {
  pinMode(LED_PIN, OUTPUT);            // Imposta la porta DGT 13 come uscita
  SerialUSB.begin(9600);               // Inizializza la porta seriale
}

void loop() {
  digitalWrite(LED_PIN, LED_ON);       // Setta la porta DGT 13 a livello alto (led acceso)
  SerialUSB.println("Led ON");         // Messaggio inviato da Arduino
  delay(250);                          // Attesa di 250ms
  digitalWrite(LED_PIN, LED_OFF);      // Setta la porta DGT 13 a livello basso (led spento)   
  SerialUSB.println("Led OFF");        // Messaggio inviato da Arduino 
  delay(250);                          // Attesa di 250ms             
}

Le istruzioni SerialUSB.println() inserite nel ciclo del programma consentiranno di avvisare l'utente il passaggio avvenuto da una riga all'altra, in corrispondenza del cambio stato sulla porta DGT 13.
Compilare lo sketch e programmare la scheda con la combinazione dei tasti "Ctrl + U"; aprire la comunicazione con la serial port avviando il tool "Monitor seriale" dal menù "Strumenti", ottenendo una nuova finestra dove visualizzare un "debug" elementare. Arduino Zero_IDE (5)

Programming e Debug con Atmel Studio

Le prove effettuate e descritte nei seguenti passi sono state realizzate con Atmel Studio 6.2 e con l'ASF (l'Atmel Software framework) aggiornato alla versione 3.23; quest'ultima è molto importante che sia aggiornata dato che contiene tutte le librerie per utilizzare al meglio l'integrato SAMD21G18A.

L'aggiornamento può essere scaricato attraverso "Extension Manager" dal menù "Tools" o dal sito ATMEL.

ASF322

ASF è una raccolta di software per lo sviluppo di programmi sui microcontrollori di Atmel ed è integrata nella IDE di ATMEL STUDIO. Il framework è organizzato in strati di livelli come di seguito:

ASF

BOARDS rappresenta la board (pin, pulsanti, led, ecc...)
DRIVERS sono le funzionalità di basso livello per interfacciarsi con le periferiche (DMA, SPI, DAC, ecc...)
COMPONENTS driver per la funzionalità ai componenti esterni (Display, sensori, ecc...)
SERVICE funzione che offre un più alto livello, di DRIVERS, per interfacciarsi con le periferiche
APPLICATION esempi già pronti
UTILITIES funzioni utilizzate da tutti gli altri strati
YOUR CODE il nostro programma

Per la programmazione e il debug utilizzeremo la porta USB Programming dell'Arduino M0 Pro, tale porta è connessa al controller EDGB che simula una porta COM virtuale.
Dopo aver avviato l'ambiente di sviluppo Atmel Studio creare un nuovo progetto da "File/New/Project..." .
Il progetto da creare sarà basato sul framework perciò selezioneremo [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2586 parole ed è riservato agli abbonati PLATINUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e PLATINUM e potrai fare il download (PDF) di tutti gli EOS-Book, Firmware e degli speciali MONOTEMATICI. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

45 Commenti

  1. Emanuele Bonanni Emanuele 20 maggio 2015
  2. andrea0289 18 giugno 2015
  3. fulvioaffa 15 luglio 2015
    • Ernesto Sorrentino 15 luglio 2015
      • fulvioaffa 15 luglio 2015
        • Ernesto Sorrentino 15 luglio 2015
          • fulvioaffa 15 luglio 2015
  4. Ernesto Sorrentino 15 luglio 2015
    • fulvioaffa 15 luglio 2015
    • fulvioaffa 15 luglio 2015
      • f.amantea 8 dicembre 2015
        • fulvioaffa 9 dicembre 2015
          • f.amantea 10 dicembre 2015
      • Ernesto Sorrentino 10 dicembre 2015
        • f.amantea 10 dicembre 2015
          • Ernesto Sorrentino 10 dicembre 2015
          • f.amantea 14 dicembre 2015
          • Ernesto Sorrentino 14 dicembre 2015
          • f.amantea 14 dicembre 2015
          • Ernesto Sorrentino 14 dicembre 2015
          • f.amantea 15 dicembre 2015
          • Ernesto Sorrentino 15 dicembre 2015
          • f.amantea 16 dicembre 2015
  5. Mario Mottula Mario Mottula1981 22 luglio 2015
  6. Ernesto Sorrentino 22 luglio 2015
    • Mario Mottula Mario Mottula1981 28 luglio 2015
  7. Ernesto Sorrentino 28 luglio 2015
  8. Mario Mottula Mario Mottula1981 28 luglio 2015
  9. Maurizio Teobaldelli Maurizio Teobaldelli 9 novembre 2015
  10. yesenergy 15 dicembre 2015
    • Ernesto Sorrentino 15 dicembre 2015
  11. yesenergy 15 dicembre 2015
  12. yesenergy 15 dicembre 2015
  13. Ernesto Sorrentino 17 dicembre 2015
    • yesenergy 17 dicembre 2015
      • yesenergy 17 dicembre 2015
        • yesenergy 18 dicembre 2015

Scrivi un commento

EOS-Academy