Introduzione ad Arduino (Lezione 2)
Introduzione
Arduino ha rivoluzionato il mondo dei markers, introducendo una sistema open source, che ha svincolato tutti i paradigma sulla complessità dei sistemi embedded, ha fornito i presupposti per lo sviluppo di una comunità molto attiva dove gli utenti hanno creato una rete di comunicazione dove e’ possibile trovare innumerevoli risorse.
E’ doveroso da parte mia fare una breve introduzione su Arduino Uno , la board più utilizzata, consapevole che articoli del genere la rete ne è ricca, ma vorrei realizzare un sito dove anche un neofita, in unico posto, possa trovare tutte le informazioni necessarie per iniziare.
In questo articolo descriverò tutte i principali componenti di Arduino Uno:
- Microcontrollore
- Interfaccia di programmazione
- Alimentazione
I componenti di Arduino Uno
Di seguito vi riporto una foto vista dall’alto della scheda di Arduino, in cui ho inserito una breve descrizione dei principali componenti della board.
Microcontrollore
Tutte le parti della scheda di Arduino sono necessarie per il corretto funzionato del sistema, ma il microcontrollore, possiamo ritenerlo, il componente principale della scheda, perché questo dispositivo contiene le periferiche, come l’ADC per la conversione dei segnali analogici a digitale, tutti i driver per pilotare i pin digitali, I2C ecc.
Inoltre, nel microcontrollore, c’è la memoria FLASH (non volatile) dove risiede il programma che l’unità di elaborazione (CPU) deve eseguire, la memoria RAM (volatile) dove è possibile memorizzare le variabili d’appoggio per l’esecuzione dei calcoli o quelle definite nel codice sorgente. Di seguito vi riporto, da un estratto del datasheet (fonte prelevata dal sito di Microchip), lo schema a blocchi del microcontrollore.
Il microcontrollore ATmega 328 ha un bus a 8 bit, pertanto la gestione dei dati è limitata alla sola ampiezza del bus, ma la codifica delle istruzioni ha un’ampiezza di 16 o 32 bit, quindi la CPU per eseguire un’istruzione deve fare più di un accesso in memoria, a parità di prestazioni della CPU, maggiore è l’ampiezza del BUS e maggiore è la velocità di esecuzione del codice.
Interfaccia di Programmazione
La scheda di Arduino Uno è dotata di un connettore, vedi la figura sopra riportata , In-Circuit Serial Programming (ICSP) connessa a dei pin dedicati del microcontrollore, tramite questa interfaccia si può caricare il codice sorgente all’interno della memoria FLASH del microcontrollore.
Prima dell’avvento di Arduino per poter programmare un microcontrollore bisognava acquistare dei programmatori dedicati, che in alcuni casi avevano dei costi non trascurabili, inoltre, c’era l’obbligo di utilizzare degli ambienti di sviluppo molto più complessi rispetto a quello di Arduino, ovviamente con molte più funzionalità che ad un maker, soprattutto alle prime armi, potrebbero essere poco utili.
Per rendere il sistema molto più semplice da usare ed economico, sulla scheda Arduino Uno è stato inserito un driver che converte il protocollo USB (Universal Serial Bus) a UART (Universal Asynchronous Receiver-Transmitter) connesso direttamente al microcontrollore, grazie a questa interfaccia, è possibile caricare il codice sorgente nella FLASH del microcontrollore senza usare costosi programmatori.
La gestione della programmazione è affidata ad un piccolo programma , definito Bootloader, caricato, precedentemente nel microcontrollore, al momento della produzione della scheda, il software Bootloader, nella fase programmazione della board , gestisce i segnali e i dati provenienti dalla UART che sono usati per programmare la FLASH interna.
Ingressi e Uscite
Ovviamente, qualsiasi programma per avere un’utilità pratica deve avere degli ingressi e delle uscite.
Nei sistemi embedded, in genere, si utilizzano i pin Input/output (GPIO), gli ADCs, UART e tutta una serie di periferiche di cui è dotato il microcontrollore ATmega 328 (successivamente approfondiremo).
Alcuni pins hanno un multiplex , gestibile tramite il codice, in questo modo, i pins non ha una funzione dedicata ma possono svolgere più funzioni, per esempio i pins dell’ADCs possono anche essere usati come GPIO.
Alimentazione
La Board Arduino Uno, ha un assorbimento di corrente, relativamente ridotto, e quindi, possiamo utilizzare il connettore USB , connesso al PC per alimentarla.
La scheda Arduino Uno ha anche un connettore dedicato per l’alimentazione, vedi figura precedente, affinché essa possa essere integrata in un sistema e alimentarla con una sorgente che può essere una batteria o un alimentatore.
La tensione di alimentazione esterna, che possiamo fornire, deve avere un valore minimo di 7V e massimo di 12V, e grazie ad un regolatore serie, la tensione è riportata al valore nominale di 5V.