Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Slides Lezione 3 - Ide Arduino
Slides Lezione 3 - Ide Arduino
PROTOTYPING
Prof. P. Visconti
http://forum.arduino.cc/index.php?action=profile;u=58300
Arduino è un progetto
formato…
Prof. P. Visconti
Pin Digitali
Ognuno dei 14 pin Digital I/O dell’Arduino può essere utilizzato sia come input che
come output. Pertanto Arduino è in grado di acquisire informazioni da sensori e
gadget elettronici e al contempo pilotare motori, emettere suoni o accendere luci.
I pin Digital I/O operano ad una tensione di 5V e possono fornire fino a 40mA di
corrente.
Come si può intuire, con un duty cycle pari a zero la potenza trasferita è nulla, mentre al
100% la potenza corrisponde al valore massimo trasferito nel caso non sia presente il circuito
di modulazione. Ogni valore intermedio determina una corrispondente fornitura di potenza.
Prof. P. Visconti
SPI (Serial Peripheral Interface)
Il Serial Peripheral Interface è un sistema di comunicazione tra un
microcontrollore e altri circuiti integrati o tra più microcontrollori.
La trasmissione avviene tra un dispositivo detto master e uno o più slaves. Il
master controlla il bus, emette il segnale di clock, decide quando iniziare e
terminare la comunicazione.
Il bus SPI si definisce:
• di tipo seriale
• sincrono per la presenza di un clock che coordina la trasmissione e
ricezione dei singoli bit e determina la velocità di trasmissione
• full-duplex in quanto il "colloquio" può avvenire contemporaneamente in
trasmissione e ricezione.
Prof. P. Visconti
SPI (Serial Peripheral Interface)
• Ogni device ha uno shift register contenente i
dati. Il trasferimento prevede lo scambio del
contenuto.
• In ogni trasferimeno avvengono gli scambi M->S e
S<-M
• Il Master indirizza lo slave, e gestisce il
trasferimento con il segnale SCK
• I dati in uscita vengono scritti in corrispondenza
del fronte di salita
[discesa] di SCK
• I dati vengono campionati sul fronte opposto
Prof. P. Visconti
I2C
Prof. P. Visconti
Arduino principali caratteristiche
Prof. P. Visconti
SRAM
Prof. P. Visconti
FLASH
Prof. P. Visconti
Bootloader
Prof. P. Visconti
sketch: programma scritto dall’utente
Bootloader
Prof. P. Visconti
sketch: programma scritto dall’utente
Comunicazione
Prof. P. Visconti
Comunicazione
Il software per la programmazione di tutti i tipi di
schede Arduino, si chiama semplicemente Arduino
IDE.
Ne esistono diverse versioni sia per Windows (quella
testata in questo lavoro), sia per Linux sia per Mac.
L’ultima versione disponibile è la 1.85
Prof. P. Visconti
sketch: programma scritto dall’utente
Open Software
https://github.com/arduino/Arduino
Arduino IDE (integrated development
environment)
Linguaggio C/C++
Sintassi semplificata da funzioni di supporto alla programmazione
Astrazione dei nomi dei pin, passaggio ai numeri
Facile da imparare e potente
Facilità di riutilizzo del codice C per altri progetti
Librerie scritte in C/C++
Moltissimo codice di esempio (Tutorial – Playground)
Moltissime librerie già pronte (GitHub – GoogleCode)
Parole chiave del C
Corpo principale del programma // the loop routine runs over and over again forever:
impostato come ciclo infinito void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is
Come un while(1) {…} the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by
Dov’è la funzione main() ? making the voltage LOW
} delay(1000); // wait for a second
Struttura di UNO sketch
• Strutture;
• Variabili e costanti;
• Funzioni.
Linguaggio di programmazione
Strutture
• setup() • while
• if • break
• if...else • continue
• for • return
• switch case
Linguaggio di programmazione
Variabili e costanti
Le variabili permettono di assegnare un nome e memorizzare un valore numerico da
utilizzare per scopi successivi nel corso del programma.
• Variabile globale: Una variabile globale è una variabile che può essere vista e usata
da ogni istruzione e funzione del programma; nell'ambiente di sviluppo di Arduino,
ogni variabile dichiarata al di fuori di una funzione (come ad es. setup(), loop(),..) è
una variabile globale.
• Variabile locale: Le variabili locali sono visibili solo dalle funzioni entro cui sono
dichiarate o all'interno di funzioni o cicli dove vengono definite.
• Variabile static: La parola chiave Static viene utilizzata per creare una variabile che
è visibile solo da una funzione.
• Variabile volatile: essa indica al compilatore di caricare la variabile dalla memoria
RAM ( memoria temporanea dove le variabili del programma sono memorizzate e
manipolate ), e non dalla memoria register.
• Variabile const: É un qualificatore di variabile che modifica il comportamento della
variabile, rendendola una variabile di “solo lettura”.
Linguaggio di programmazione
Variabili e costanti
Le variabili permettono di assegnare un nome e memorizzare un valore numerico da
utilizzare per scopi successivi nel corso del programma.
Le variabili sono numeri che possono cambiare a differenza delle costanti che invece
non possono mai cambiare.
pin numero del pin di cui si vuole impostare la modalità ingresso o uscita
Esempio:
void setup( ){
I pin analogici possono essere usati come pin digitali purché non riferisca con i
nomi A0, A1...A5.
Le funzioni di Arduino: I/O digitali
digitalWrite() : Scrive un valore HIGH o LOW su un pin impostato come digitale.
Se il pin è stato impostato come OUTPUT con il pinMode(), la sua tensione sarà
impostata al corrispondente valore di 5V per HIGH e 0V per LOW. Altresì, se il pin è
impostato come INPUT tramite il pinMode(), scrivendo un valore HIGH con
digitalWrite() si abiliterà un resistore interno di pullup da 20K. Scrivendo basso sarà
disabilitato il pullup. Il resistore di pullup è sufficiente per far illuminare un led
debolmente, per cui sembra che il diodo lavori anche se debolmente (questa è una
probabile causa).
digitalWrite(pin,valore);
Esempio:
digitalRead(pin)
pin è il numero intero del pin di cui si vuole leggere il valore alto o basso.
Esempio;
int ledPin = 13; // LED connesso al pin digitale13
int inPin = 7; // pulsante connesso al pin digitale7
int val = 0; // variabile che memorizza il valore letto
void setup( ) {
pinMode(ledPin, OUTPUT); // imposta il pin digitale 13 come uscita
pinMode(inPin, INPUT); // imposta il pin digitale 7 come ingresso
}
void loop( ){
val = digitalRead(inPin); // legge il pin di ingresso e lo memorizza in val
digitalWrite(ledPin, val); // imposta il LED a seconda dell'azione svolta
// sul pulsante
}
MAIN.cpp
pinMode(3, OUTPUT); or
pinMode(5, OUTPUT);
pinMode(7, OUTPUT); DDRD = 0xA8;
or
Accendiamo il LED
digitalWrite(7, HIGH);
Spegniamo il LED
digitalWrite(7, LOW);
Esempio 2
Impostare i pin 0 e 1(PD0 e PD1) come uscite con un livello del segnale
ALTO
• Arduino • Registri
DDRD = b00000011;
pinMode(0, OUTPUT);
PORTD = b00000011;
pinMode(1, OUTPUT);
digitalWrite(0, HIGH);
o
digitalWrite(1, HIGH);
DDRD = 0x03;
PORTD = 0x03;
oppure
pinMode(3, INPUT_PULLUP);
‘Weak Drive’
Settando il pin come input e attivando la ATmega328
resistenza di pull-up interna la corrente in
VTG= +5V
uscita dal pin è debole.
iweak
1
Il valore tipico delle resistenze di pull-up per PD3
l’ATmega328 è tra i 20 e 50 kΩ 0
Esempio 3
Arduino Registri
pinMode(0, INPUT); DDRD = 0; // all PORTD pins inputs
pinMode(1, INPUT); PORTD = b00000011;
digitalWrite(0, HIGH); o
digitalWrite(1, HIGH); PORTD = 0x03;
oppure
oppure
pinMode(0, INPUT_PULLUP); DDRD & = ~(1<<PD1 | 1<<PD0);
pinMode(1, INPUT_PULLUP); PORTD | = (1<<PD1 | 1<<PD0);
Risorse
www.arduino.cc
www.atmel.com/avr
en.wikipedia.org/wiki/Arduino
camillomiller.com/arduino/leggi-online.html
forum.arduino.cc
forum.arduino.cc