Sei sulla pagina 1di 79

Arduino

cos
cosa si pu realizzare
Arduino: un successo italiano nel mondo
componenti elettronici e pinout
ATmega328: il cuore (e molto altro) di Arduino
generalit e caratteristiche
schema a blocchi del microcontrollore
descrizione dei singoli componenti
architettura AVR
introduzione e principio di funzionamento
datapath dellarchitettura
fasi del ciclo istruzione
diagramma a stati finiti

SEMERARO STEFANO
CALCOLATORI ELETTRONICI - 2014
INGEGNERIA DELLINFORMAZIONE UNIVERSITA DEL SALENTO

Arduino

esempio di ADD, STOREWORD e JUMP


implementazione pipeline
indici di prestazione e consumi
come programmare il microcontrollore
C: il linguaggio nativo dellAtmega328
lambiente di sviluppo (IDE) di Arduino
DEMO: blinking led
introduzione agli interrupts
DEMO: ultrasonic proximity sensor
comunicare col mondo esterno: la seriale
DEMO: Android bluetooth comunication
varianti di Arduino e relativi costi
quando Arduino non basta: Raspberry Pi e i minicomputer

SEMERARO STEFANO
CALCOLATORI ELETTRONICI - 2014
INGEGNERIA DELLINFORMAZIONE UNIVERSITA DEL SALENTO

Arduino is an open-source electronics prototyping


platform based on flexible, easy-to-use hardware
and software. it's intended for artists, designers,
hobbyists and anyone interested in creating
interactive objects or environments.
arduino.cc

Arduino pu:
interfacciarsi allambiente tramite sensori (luminosit,
temperatura, suoni, campi elettromagnetici, ),
interruttori, telecomandi,
effettuare elaborazione dei dati
interagire col mondo esterno tramite led, emettitori
acustici, motori, servomotori, pompe idrauliche,
segnali radio o infrarossi,
comunicare con altri dispositivi elettronici attraverso
la porta seriale
Tutto ci fa s che Arduino sia largamento usato in
ambiti quali la robotica, lautomazione, lentertainment,
il modellismo e in generale nella maggior parte dei
settori ingegneristici.

3D rgb led cube

liquid lifebar

quadcopter

Un successo italiano nel mondo


NellXI sec la pittoresca citt di
Ivrea era famosa per il suo re, il
marchese Arduino di Dadone,
che nel 1002 venne eletto re
dItalia, posizione che mantenne
fino
al
1014,
quando
fu
spodestato da re Federico II.
Pochi anni fa (2005), il Bar del Re
Arduino, a Ivrea, fu il luogo
dove Massimo Banzi, ingegnere
e professore universitario, ebbe
unicredibile idea:
creare una piattaforma per facilitare i propri studenti nello studio
dellInteraction Design (la disciplina che studia linterazione tra esseri
umani e sistemi informatici)
(dopo qualche birra di troppo)

Nacque Arduino.

Benzi rese pubblici tutti gli schemi (per laspetto elettronico) e


i sorgenti (per laspetto informatico) del suo prototipo,
autorizzandone la riproduzione e la modifica libera.

Poco dopo apr, assieme ad un ristretto gruppo di


collaboratori, un piccolo laboratorio ai piedi delle Alpi Graie
dove poter produrre Arduino per proporlo al mercato italiano.
La scheda completa viene venduta per meno di 30.
Il successo fu spaventoso e
immediato: Arduino fa il giro
del mondo nel giro di pochi
mesi e numerose industrie di
calibro
internazionale
realizzano copie della scheda.
Lentusiasmo dimostrato dalla
comunit di utenti ha aperto
un vero e proprio nuovo
settore commerciale, quello
dei microcontrollori hobbistici.

Componenti elettronici e
pinout

AREF valore massimo di


riferimento per lADC
USB PLUG connettore usb per
il collegamento al PC
ATmega16U2 integrato per
la conversione da USB a
seriale (RS232): permette al
PC di dialogare con Arduino
simulando una connessione
seriale (vedi dopo)

GROUND riferimento di massa


DIGITAL IO pin digitali di
ingresso e uscita (i pin
3,5,6,9,10,11 possono
simulare un uscita analogica
tramite funzionamento PWM)

SERIAL IN E OUT pin di


ricezione (RX) e trasmissione
(TX) dellinterfaccia seriale

VOLTAGE REGULATOR regolatore


di tensione che fornisce una 5V
stabile

GROUND riferimento di massa

ANALOG IN pin per la lettura di


grandezze analogiche (possono
essere usati anche come pin
digitali I/O non PWM)

ISP interfaccia per la scrittura


diretta della FLASH del
microcontrollore

ATmega328 di tutto e di pi (vedi


dopo)

EXT POWER / VOLTAGE IN


connettore/pin per
lalimentazione esterna

RESET PIN / RESET BUTTON


pin/pulsante per il reset di Arduino

3.3V / 5V pin per alimentare altri


componenti (MAX 200ma!)

Arduino
ATmega328: il cuore (e molto altro) di Arduino
generalit e caratteristiche
schema a blocchi del microcontrollore
descrizione dei singoli componenti

SEMERARO STEFANO
CALCOLATORI ELETTRONICI - 2014
INGEGNERIA DELLINFORMAZIONE UNIVERSITA DEL SALENTO

Atmel ATmega328

Specifiche

8-bit AVR RISC-based (RCISC) CPU


memoria flash da 32kb con read while write
SRAM da 2kb
EEPROM da 1kb
23 registri general purpose
23 linee di I/O general purpose
3 contatori (timers)
interrupts interni ed esterni
Interfaccia seriale bifilare
6 canali ADC a 10-bit
whatchdog interno programmabile
5 modalit di risparmio energetico
Grazie alla sua natura di componente tuttofare questo
piccolo microcontrollore risulta essere il candidato
migliore per un dispositivo come Arduino, che deve essere
al servizio della creativit degli sviluppatori.
E nonostante le sue enormi potenzialit, lATmega328
costa meno di 3!

LATmega328
allinterno di
Arduino

Schema a blocchi di alto livello

Diagramma
a blocchi
approfondito

FLASH
Memoria a stato solido,
autoprogrammabile, da 32kb.
Pu essere cancellata e riscritta
circa 10000 volte.
E la memoria che contiene le istruzioni che
devono essere eseguite dalla CPU
Mantiene le informazioni anche in assenza
di alimentazione.
SRAM (static random access memory)
Da 2kb. E una memoria volatile con bassi
tempi di lettura e consumo ridotto.
Qui vengono mantenute tutte le variabili e i
dati necessarie allesecuzione del
programma.
NON maniente i dati in caso di mancanza
di alimentazione.

CPU (central processing unit)


Esegue le istruzioni contenute nella flash.
Supporta una frequenza massima di 20Mhz.
Larchitettura implementata quella AVR
(approfondita nel seguito).

Clock generation circuit


E il componente che, dato
in ingresso il segnale proveniente
da un oscillatore (ceramico in questo caso),
produce il segnale di clock necessario alla
sincronizzazione delle operazioni.

Watchdog
Di tipo programmabile con oscillatore
interno.
Permette, una volta programmato dallo
sviluppatore, di intercettare loop infiniti o
situazioni di deadlock.
Power supervision
E il componente responsabile
dellalimentazione dellintegrato. Tra le sue
funzioni evidenziamo: 1) il mantenimento
della CPU in condizione di RESET fino al
raggiungimento di tensione richiesto 2) il
tamponamento della tensione in presenza
di glitch temporanei sullalimentazione.

EEPROM (electrically erasable


programmable read-only memory)
Da 1kb. E un tipo di memoria NON
volatile riscrivibile (~100000 scritture) in cui
ogni cella (1 bit) costituita da 2 transistor
MOS.
E utilizzata per salvare delle informazioni a
runtime, ad esempio per riottenere lo stato
del programma dopo un riavvio.
Timers / counters
3 contatori separati, 2 da 8-bit e 1 da 16-bit,
con modalit di comparazione.
Sono utilizzati per realizzare le uscite PWM
(pulse with modulation, con duty cycle
variabile) o come trigger per richiamare
porzioni di codice ad intervalli prefissati
(timer).
In modalit PWM i contatori da 8-bit
raggiungono una frequenza massima di
31250 Hz, contro i 62500 Hz di quello a 16-bit.

A/D converter
E un convertitore analogico /
digitale a 6 canali, ognuno
da10-bit.
Permette di effettuare letture di
segnali analogici, avendo a disposizione
un valore di riferimento fornito dal pin
AREF.

Internal bandgap
In assenza di un livello di tensione sul pin
AREF produce un riferimento stabile,
indipendente da variazioni
nellalimentazione, nel carico e nella
temperatura di funzionamento, da fornire
al convertitore analogico digitale.
Analog comparator
Permette di generare un interrupt
(esecuzione asincrona di porzioni di
codice, vedi dopo) nel caso in cui un
segnale analogico supera una soglia
impostata dallo sviluppatore.

USART (universal syncronus


asyncronous receiver-trasmitter)
Costituisce linterfaccia seriale
dellATmega328 e pu raggiungere
velocit prossime a 1Mbps in modalit
FULL DUPLEX.
Verr approfondita in seguito.

SPI (in-system programmer)


Permette di scrivere direttamente la flash
del microcontrollore, attraverso lausilio
di un programmatore ISP.
Verr approfondito nel seguito.
TWI (two wire interface)
Indica linterfaccia I2C, ovvero un
sistema di comunicazione seriale
sincrono HALF DUPLEX con struttura
master-slave. Non utilizzato in Arduino.
Ports
Costituiscono le porte di I/O del microcontrollore. La D corrisponde ai
pins 0-7 di Arduino, la B ai pins 8-13, la C ai pins (analogici) A0-A5.

Arduino

architettura AVR
introduzione e principio di funzionamento
datapath dellarchitettura
fasi del ciclo istruzione
diagramma a stati finiti

SEMERARO STEFANO
CALCOLATORI ELETTRONICI - 2014
INGEGNERIA DELLINFORMAZIONE UNIVERSITA DEL SALENTO

Arduino
esempio di ADD, STOREWORD e JUMP
implementazione pipeline

SEMERARO STEFANO
CALCOLATORI ELETTRONICI - 2014
INGEGNERIA DELLINFORMAZIONE UNIVERSITA DEL SALENTO

Larchitettura AVR
LAVR unarchitettura hardware RISC a 8-bit nata sulla base
dellarchitettura Harvard nel 1996 ad opera di 2 studenti del Norwegian
Institute of Technology, Alf-Egil Bogen e Vegard Wollan e
successivamente venduta ad ATmel.
E stata una delle prime architetture ad utilizzare una memoria flash
on-chip per limmagazzinamento delle istruzioni, in opposizione alle ROM,
EPROM ed EEPROM usate solitamente nei microcontrollori.
Le origini del nome sono incerte, alcuni lo attribuiscono ad Advanced
Virtual RISC (in quanto pu vantare di un maggior numero di istruzioni
rispetto ad unarchitettura RISC standard), altri alle iniziali dei suoi ideatori,
seguite dalla lettera R di RISC.

I componenti principali

PROGRAM COUNTER

INSTRUCTION REGISTER

INTRUCTION DECODER

REGISTERS

ALU

SRAM MEMORY

STATUS CONTROLLER

Particolarit dellAVR
Per massimizzare
le prestazioni e
permettere di
aumentare il
numero di azioni
compiunte
parallelamente,
larchitettura
AVR utilizza
memorie e bus
seprati per il
programma e
per i dati.

Particolarit dellAVR
Tutte le istruzioni
dellarchitettura AVR
sono composte da un
numero di bit multiplo
di 16
(la maggior parte
sono esattamente da
16-bit).
Un potente sistema di
indirizzamento
permettere di
raggiungere
qualunque istruzione
del programma
attraverso le istruzioni
di JUMP e BRANCH.

ALU e registri ad eccesso rapido


Il banco registri contiene
32 registri a 8-bit.
Il sistema a doppio bus
consente di poter
leggere 2 locazioni di
memoria e
contemporaneamente
scriverne una terza.
Questo consente di
effettuare la maggior
parte delle operazioni
logico/matematiche in
un singolo ciclo di clock.

One instruction: one clock!


Come si potuto notare il sistema a doppio bus consente un
notevole vantaggio in termini di prestazioni: da un lato permette
di eliminare le fasi del ciclo istruzioni successive alla EXECUTE,
dallaltro permette allunit di decodifica dellistruzione di
operare durante la stessa fase EXECUTE, rendendo superflua una
separata fase di ISTRUCTION DECODING.
Questo punto sar chiarito meglio nel seguito con lanalisi del
datapath.
Risulta evidente che le uniche 2 fasi interessate nellesecuzione
di una istruzione sono la FETCH e la EXECUTE.

Un (non troppo complesso) sistema di PIPE completa


larchitettura, accodando le 2 fasi e permettendo cos ad un
processore AVR di completare la maggior parte delle istruzioni in
un singolo ciclo di clock!

Il registro di stato
Il registro di stato permette di
interrompere lesecuzione del
programma in presenza di
interrupt esterni, di mantenere
il risultato delloperazione
logica pi recente per
permettere le istruzioni di salto
condizionato senza impiegare
nuovamente lALU per la
verifica della condizione e di
verificare la presenza di
eccezioni (divisione per 0,
ecc) che modificano il
normale flusso del programma.

Vista dinsieme
del datapath

Componenti del datapath


Registri

Program counter
Registro istruzione
Registro dellindirizzo di memoria
Prossimo valore program counter

Componenti del datapath


Memorie

Memoria del programma


Memoria dei dati

Componenti del datapath


ALU

Componenti del datapath


Unit di
allineamento
(e di controllo)

Traduce i bit dellistruzione nei


segnali necessari al il datapath

Componenti del datapath


Logica di
indirizzamento
dei registri
Fornisce gli indirizzi di scrittura e lettura per i
registri a partire dal codice operativo, dallo
spiazzamento e dai numeri di registro
contenuti nellistruzione

Componenti del datapath


Banco registri a 2 canali

Componenti del datapath


Sommatore del
program counter

Permette di calcolare il successivo


indirizzo del program counter in caso
di istruzioni di tipo JUMP o BRANCH

Diagramma a stati finiti

Tabella degli stati

Implementazione multiciclo
Ogni istruzione attraversa una e una sola
fase FETCH.
Ogni istruzione attraversa una o pi fasi
EXECUTE.
La maggior parte di esse (secondo
alcune statistiche l80% delle istruzioni
eseguite comunemente rientrano in
questa categoria) attraversano una sola
fase fetch.

Fase FETCH

Fase EXECUTE
La fase EXECUTE dipende dallo
specifico tipo di istruzione da
eseguire: in base ad esso infatti
verranno attivate diverse sezioni
del datapath.
In generale possiamo suddividere
le istruzioni in 3 categorie:

Logico/aritmetiche (tipo R)
Trasferimento di dati (tipo I)
Salto condizionato (JUMP) e
incondizionato (BRANCH)

Esempio: istruzione ADD

Esempio: istruzione LOADWORD (1)

Esempio: istruzione LOADWORD (2)

Esempio: istruzione JUMP (1)

Esempio: istruzione JUMP (2)

Datapath
completo
(e reale)

Segnali di controllo

Implementazione pipeline

Durante (lultima) la fase EXECUTE dellistruzione precedente


avviane la fase FETCH dellistruzione successiva.
Questo accorgimento permette di, superato un clock di
ritardo iniziale, eseguire la maggior parte delle istruzioni in
un singolo ciclo di clock.

Implementazione pipeline

Particolarit dellistruzione BRANCH: viene ipotizzato che la


condizione di BRANCH non sia mai verificata, caricando
sempre listruzione immediatamente successiva. Se lipotesi
risulta errata viene effettuato un nuovo FETCH dellistruzione
corretta, assegnando cos una penalizzazione di un ciclo di
clock.

Arduino

indici di prestazione e consumi


come programmare il microcontrollore
C: il linguaggio nativo dellAtmega328
lambiente di sviluppo (IDE) di Arduino
DEMO: blinking led
introduzione agli interrupts
DEMO: ultrasonic proximity sensor
comunicare col mondo esterno: la seriale
DEMO: Android bluetooth comunication
varianti di Arduino e relativi costi
quando Arduino non basta: Raspberry Pi e i minicomputer

SEMERARO STEFANO
CALCOLATORI ELETTRONICI - 2014
INGEGNERIA DELLINFORMAZIONE UNIVERSITA DEL SALENTO

Indici di prestazione e
consumi dellATmega328
Frequenza di clock massima: 20Mhz
Frequenza di clock di default: 16Mhz
Valore di throughput: 1 MIPS per Mhz
(16 MIPS alla frequenza di clock di
default)
Consumo di corrente a 1Mhz e 25C:
Modalit attiva: 0,2mA
Modalit power-save: 0,75A
Modalit power-down: 0,1A

Programmare lArduino:
USB vs ISP
Linterfaccia ISP (in-system programmer)
permette di scrivere direttamente la memoria
flash di Arduino, senza scomodare la CPU.
Uno dei (pochi) vantaggi di questa tipologia di
programmazione la possibilit di riprogrammare
il bootloader (la porzione di istruzioni che esegue
il bootstrap, ovvero lavvio del dispositivo),
negata con la programmazione USB.
Di contro richiedere un programmatore ed un
cavo ISP ed quindi in generale pi scomoda.

Programmare lArduino:
USB vs ISP
La programmazione tramite USB avviene, invece, nel seguente modo:
lintegrato ATmega16U2 funziona come convertitore USB-RS232 facendo
credere al computer collegato ad Arduino di avere a che fare con
uninterfaccia seriale.
Lintegrato, inoltre, dopo aver ricevuto uno specifico segnale di inizio
programmazione, resetta il microcontrollore ATmega328.
Il bootloader di questultimo, una volta avviato, rimane per pochi
millisecondi in ascolto di un secondo segnale di inizio programmazione.
Nel caso in cui questo segnale venga effettivamente ricevuto,
lATmega328 risponde con un segnale di acknowledgment che raggiunge
il computer e fa partire la programmazione vera e propria.
Con questa tipologia di programmazione si ha quindi bisogno di un
secondo integrato (lATmega16U2) ed il microcontrollore principale
(lATmega328) deve funzionare attivamente, attivando cio la sua CPU.

C: il linguaggio nativo di Arduino


Arduino un dispositivo pensato principalmente per gli hobbisti e gli
sviluppatori indipendenti. E stato quindi obbligatorio scegliere un
integrato pensato e realizzato per eseguire codice di alto livello.
Banzi ha pensato che il C, un linguaggio di programmazione ideato
da Dennis Ritchie nel 1972, assicurava un buon livello di astrazione
senza compromettere la consapevolezza di avere a che fare con una
piattaforma hardware con risorse tuttaltro che illimitate.
Anche in questo caso lintegrato
ATmega si rivelata la scelta pi
indicata. Il team AVR di Atmel ha
invitato esperti di C (da IAR System)
a partecipare alla progettazione
del microcontrollore.
Dopo un percorso di miglioramenti
e rifiniture, lATmega328 pu ora
eseguire codice C con una
velocit simile a quella di un
codice nativamente assembler.

Lambiente di sviluppo (IDE)


Carica
su Arduino
Controlla
codice

Nuovo

Salva

Apri

Apri console
seriale

Pin collegato
al LED

LED integrato

DEMO 1:
blinking led

Gli interrupts e la ISR


Gli interrupts permettono di interrompere il normale flusso del
programma nel caso in cui si verifichino condizioni predefinite
(triggers) per eseguire dei blocchi di codice con priorit superiore,
prima di ritornare al programma principale.

Interrupts interni ed esterni


Nella maggior parte dei microcontrollori si distinguono 2
tipologie di interrupts:

INTERNI: sono indipendenti dai dispositivi connessi e


possono essere scatenati da eccezioni (divisione per
0, overflows, ), timers e whatchdogs.

ESTERNI: si verificano solo in presenza di dispositivi


esterni connessi e sono scatenati da cambiamenti nel
livello logico di un pin (pins digitali) o superamento di
livelli di tensione di soglia (pins analogici).

DEMO 2: ultrasonic
proximity sensor

DEMO 2: ultrasonic
proximity sensor

Pin trigger

Pin echo
(agganciato
allinterrupt)

Linterfaccia seriale
Linterfaccia seriale di Arduino uninterfaccia FULL
DUPLEX bifilare, in cui il PIN 0 rappresenta il ricevitore e il
PIN 1 rappresenta il trasmettitore.
Essa permette di comunicare con altri dispositivi
elettronici che utilizzano lo stesso protocollo di
comunicazione (che prende il nome di RS-232)
La comunicazione attraverso linterfaccia
seriale :
SERIALE (non mi dire): i bit vengono
trasmessi in sequenza, uno dietro laltro;
ASINCRONA: non c un segnale di clock
che sincronizza la comunicazione (
necessario che i dispositivi si accordino
sulla velocit di trasferimento);
POINT-TO-POINT: ad ogni trasmettitore
associato un solo ricevitore.

Linterfaccia seriale
Lunit di misura che (spesso) viene usata per indicare la
velocit di trasferimento su di uninterfaccia seriale il
bps (che nel caso in questione di comunicazione binaria
coincide col baudrate) che corrisponde allinverso del
periodo che intercorre tra un bit e laltro.

I valori di baudrate che vengono usati comunemente


sono 9600, 19200, 38400, 57600, 115200 e 1.8432M per
motivi storici legati alle trasmissioni tra telegrafisti.

Magic
box

Bluetooth
adapter HC-06

DEMO 3:
Android
bluetooth
communication

La DEMO andata a
buon fine?

SI NO

Come doveva andare

Alcune varianti di Arduino

NOME BOARD
PREZZO UFFICIALE

PREZZO STREET

UNO REV.3

MEGA 2560

INTEL GALILEO

24

47

66

8 (clone)

12 (clone)

60

Quando Arduino non basta

I cosiddetti minicomputer, tra i quali si distingue leconomico Raspberry PI,


sono unaltra categoria di dispositivi che si scostano di poco dai
microcontrollori: essi possiedono componenti tipici di un computer quali
unuscita video e audio, una o pi porte USB, una scheda di rete (spesso
wireless) e unarchitettura adatta a sistemi operativi pi complessi.
Vengono spesso affiancati ad un microcontrollore per colmare la scarsit di
I/O (soprattutto di tipo analogico).

Riferimenti
Video introduttivi: https://www.youtube.com/watch?v=SyuLhEUImng /
w2itwFJCgFQ / ywfZsYApj_M
Storia di Arduino: http://spectrum.ieee.org/geek-life/hands-on/the-making-ofarduino
ATmega328 (datasheet): http://www.atmel.com/Images/doc8161.pdf
Architettura AVR: https://coefs.uncc.edu/sjkuyath/files/2012/04/Topic_3AVRarch.pdf
Datapath AVR:
http://web.engr.oregonstate.edu/~sinky/teaching/4.AVR_Microarchitecture.
pdf
AVR su Arduino: http://www.atmel.com/technologies/cpu_core/avr.aspx

Tutte le altre informazioni sono frutto di brevi ricerche su


Google o Wikipedia e di esperienza personale.

Si ringrazia la mia fidanza Roberta per laiuto nella


realizzazione della Magic Box (cos contenta).
Per info e chiarimenti: semeraro.stefano@hotmail.it