
Questo articolo nasce dall'esigenza di programmare una scheda Arduino UNO con l’ambiente di sviluppo “Atmel Studio”. Un tool di sviluppo dalle molteplici funzioni per programmare e progettare con i microcontrollori della famiglia Atmel. Con questo strumento si possono superare alcuni limiti dell'IDE di Arduino come la mancanza di avvisi del compilatore e la capacità di debug. Grazie alla possibilità di scrivere le applicazioni in più linguaggi realizzeremo uno sketch, per far lampeggiare il led della board UNO, sia in Assembly che in C, quest'ultima con l'integrazione delle librerie dell'IDE di Arduino. Vedremo anche come configurare il tool di Atmel per poter programmare il micro ATmega328P attraverso la stessa board di Ardunio.
Atmel Studio 6 è una piattaforma di sviluppo integrato (IDP) per lo sviluppo e il debug di microcontroller (MCU) AVR di Atmel. Questo software fornisce un ambiente unico e facile da utilizzare per scrivere, costruire ed eseguire il debug delle applicazioni scritte in C / C ++ o codice Assembly. Al contrario dell'IDE di Arduino, basato sul linguaggio Wiring (un progetto di Hernando Barragàn), che facilita il programmatore offrendo un modo semplice per accedere alle periferiche di input/output della piattaforma hardware, in Atmel Studio si è costretti a programmare i dispositivi a livello di registri, il che implica una buona conoscenza dell'architettura del microcontrollore che si vuole utilizzare; in pratica bisogna scrivere il programma nella stessa modalità in cui Wiring svolge la compilazione di uno sketch a nostra insaputa. Questo metodo può risultare macchinoso e poco interpretabile ma si ha il vantaggio di avere il pieno controllo del micro sfruttando tutta la sua potenzialità. In alternativa, per chi ritiene difficile questo tipo di programmazione ma vorrebbe utilizzare ugualmente questo tool di sviluppo per usufruire delle funzioni come il debugger, il sistema di autocompletamento, l’integrazione di plugin di terze parti e altro ancora, potrà configurare la piattaforma per integrare le librerie dell’IDE di Arduino e programmare in "Wiring".
Atmel Studio è disponibile sul sito del produttore, con licenza freeware (versione attuale 6.2). Quest’ambiente di sviluppo non è leggero come quello di Arduino, l’installazione occupa oltre 1Gb di spazio su disco; perché si porta dietro un framework per lo sviluppo di applicazioni alquanto corposo, oltre alla toolchain di AVR-GCC e vari datasheet.
Programmazione in Assembly
Nell'esempio seguente vedremo come far lampeggiare il led posto sulla board di Arduino UNO con uno sketch scritto in Assembly.
Il linguaggio Assembly, detto anche assemblativo, è il più vicino a quella”macchina” vera e proprio. Per motivi hardware non esiste un unico linguaggio Assembly ma comunque molti meccanismi sono analoghi o del tutto identici tra loro. Spesso il passaggio, tra marchi diversi, si limita all'apprendimento di nuovi codici mnemonici, nuove modalità d'indirizzamento e altre varie peculiarità dovute alla architettura hardware del micro.
Avviata l’applicazione, creiamo un nuovo progetto andando per “file/nuovo progetto”.
Nella videata successiva bisogna scegliere il tipo di progetto da realizzare, impostare la destinazione di salvataggio dei file e il nome da assegnare. Il progetto da scegliere è [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2192 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Ottimo ottimo ottimo!
Introdurre questo modo di programmare aiuta a svincolarsi dalle cose già preconfezionate e a crearne di nuove avendo un totale controllo sul microprocessore.
Era da un po’ che aspettavo un articolo del genere (in italiano)!
Spero ci sarà un seguito che spieghi anche l’uso di altre funzioni/registri tipo il modulatore PWM e gli ADC.
Ancora complimenti
Mi sfugge perchè nel primo listato parli di linguaggio assembly ma poi di assembly non c’è una sola istruzione ma semplicemente usi il c con il richiamo diretto alle porte del micro, cosa che viene comunente fatta anche in “ambiente wiring”, almeno per le applicazioni “time critical”.
Per il resto non posso che dirti grazie, è almeno un anno che ho l’Atmel Studio installato sul mio PC proprio per svincolarmi dall’ambiente di sviluppo base di Arduino ma poi la pigrizia mi ha sempre impedito di cominciare a lavorarci….forse questo tuo articolo sarà la volta buona che faccio questo passo.
Ho provato quanto hai scritto in questo ottimo articolo. A differenza tua anzichè usare la versione 1.5.5 di Arduino IDE ho utilizzato la 1.6.1 ed ho riscontrato alcune piccole differenze che però possono portare a grossi problemi a chi è meno avvezzo a fare queste cose per cui riporto qui le mie considerazioni.
In primo luogo la directory “C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino” non esiste più, o meglio è stata sostituita dalle due C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino e C:\Program Files (x86)\Arduino\hardware\arduino\sam\cores\arduino, chiaramente per la programmazione di Arduino UNO andrà copiata la prima (nella ArduinoCore creata come da te spiegato). Anche facendo così però al momento della compilazione compare l’errore “Error1 – pins_arduino.h: No such file or directory”. Quel file (pins_arduino.h) infatti non sarà stato copiato perchè si trova in una directory diversa: C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard, perciò anche questo deve essere copiato nella “ArduinoCore”. Fatto questo tutto funziona anche con la 1.6.1. Detto tutto ciò, ti segnalo anche questo plugin (free trial) http://www.visualmicro.com/page/Arduino-for-Atmel-Studio.aspx che rende obsoleti tutti i passaggi di cui sopra permettendo di compilare per diverse schede Arduino, comprese quelle con chip SAM come la Due. Non ho testato l’invio del file compilato in quanto al momento in cui scrivo non ho schede a disposizione per provare, ma l’errore che mi indica l’assenza della scheda sulla COM selezionata direi che è un buon segnale 🙂 Nulla toglie però che si possa sviluppare sull’AtmelStudio e poi fare un banale “copia / incolla” sulla schermata dell’IDE per “compilare ed inviare” in un colpo solo.
Ciao smania2000,
Grazie per l’aggiornamento, sarà utile a tutti i lettori che vogliono cimentarsi in questo fantastico tool. La versione che ho utilizzato è la 1.6.0; purtroppo pochi giorni dopo dall’invio dell’articolo è stata rilasciata la 1.6.1. Da questa versione in poi è stata portata, come tu affermi, una modifica agli indirizzi delle directory facendo distinzione tra le MCU.
Come puoi notare dalle immagini, l’applicativo che suggerisci (Visual Micro) l’ho installato ma ho ritenuto più “divertente” e istruttivo un’impostazione manuale 😉
Ernesto complimenti per l’articolo. Tu che debugger usi? Conosci qualche modello anche non originale a poco prezzo? Ho un paio di Arduino in giro che non uso proprio per questo motivo.
Ciao
Stefano
Ciao Stefano, grazie.
Il limite di Arduino sta proprio nel debug … questo però fino a poco tempo fa. Aspetta il prossimo articolo…… 😉
PS: come è andata la giornata del 22 aprile? Avrei partecipato volentieri ma la destinazione era, per me, un po lontana 🙁
Ernesto, la giornata è andata molto bene, la location era stupenda, l’organizzazione di Sara e di Emanuele è stata perfetta e la colazione era come al solito al top. La presentazione penso abbia avuto successo, ho cercato di far vedere come sia possibile traghettare le proprie conoscenze in ambito Wiring / Arduino (che si chiama Energia nel mondo Texas Instruments) in un ambiente di sviluppo professionale basato su Eclipse (Code Composer Studio). Il tutto corredato da una sessioncina finale di debug, dato che le schede LaunchPad di TI hanno già l’hardware necessario incorporato. Allora aspetterò il tuo prossimo articolo prima di muovermi e se passi per Roma fammi pure un fischio tramite Sara che ci prendiamo un caffè (non lascio l’email nei commenti senno mi spammano a morte).
Fantastica idea 😉
Ciao a tutti.
Avevo da tempo installato la versione 7 di atmel studio, dove vi è già la possibilità di scecliere quale versione di arduino usare e quale processore questi utilizzi, ma per problemi di tempo non mi decidevo a testarlo.
Grazie ai suggerimenti di Ernesto mi è presa la voglia di provarci e alla fine sono riuscito a compilare e uploadare uno sketch abbastanza complesso per arduino uno rev3 atmega328p.
Un problema che subito è saltato fuori e la gestione delle librerie che se non copio i file allinterno del progetto non mi vengono compilate, ad esempio SD e SPI.
Inoltre una altro problema e che il compilato occupa più spazio rispetto ad utilizzare arduino ide:
Program Memory Usage : 26426 bytes 80,6 % Full
Data Memory Usage : 1017 bytes 49,7 % Full
contro:
Lo sketch usa 24.350 byte (75%) dello spazio disponibile per i programmi.
Le variabili globali usano 979 byte (47%) di memoria dinamica.
Purtroppo lo spazio utilizzato è importante per un processore cosi piccolo, sto già modificando la libreria Adafruit_TFTLCD per renderla utilizzabile solo su questo progetto ma in modo anche di consumare memoria inutile.
Ernesto, o qualcun altro, hai/avete idea del perchè non riesco a recuperare quel 5% di differenza?