Upload
leque
View
214
Download
0
Embed Size (px)
Citation preview
IZ3HAE ARIVR Arduino Introduzione
IZ3HAE Davide Melchiori
ARI SEZIONE VERONA IQ3VO
ARDUINONuove opportunità' per la sperimentazione radioamatoriale
Serata introduttiva per iniziare ad utilizzarlo
IZ3HAE ARIVR Arduino Introduzione
Cosa è arduino?
E' un progetto open source hardware e software, tutta la documentazione è in rete
● Nasce per controllare dispositivi fisici● Basso livello, al contrario di Raspberry● Connettori standardizzati● Librerie per dispositivi fisici● Sistema shield
IZ3HAE ARIVR Arduino Introduzione
Cosa non è arduino?
Arduino non è un PC! Non ha e non è adatto a:● File system● Comunicazione ad alto livello● Monitor od HMI● Gestire tastiere evolute● Non adatto ad applicazioni ad alto livello
IZ3HAE ARIVR Arduino Introduzione
Licenze?
GNU Lesser General Public License (abbreviata in GNU LGPL o solo LGPL) è una licenza di software libero creata dalla Free Software Foundation, studiata come compromesso tra la GNU General Public License e altre licenze non copyleft come la Licenza BSD, la Licenza X11 e la Licenza Apache. Fu scritta nel 1991 (aggiornata nel 1999 e nel 2007) da Richard Stallman, con l'ausilio legale di Eben Moglen.
IZ3HAE ARIVR Arduino Introduzione
Licenze?
In pratica, posso utilizzare le librerie per creare e vendere un mio prodotto, anche senza rilasciare il codice sorgente.
● Attenzione, non tutte le librerie sono rilasciate con la stessa licenza, verificate se desiderate produrre sistemi che poi venderete per fare soldi!
IZ3HAE ARIVR Arduino Introduzione
HARDWARE
La connessione USB permette lo sviluppo e, volendo l'alimentazione
Senza PC si alimenta qui
BOOTLOADER
USB to Serial
IZ3HAE ARIVR Arduino Introduzione
SISTEMA
Il sistema è costituito da:● IDE, permette di costruire un'applicazione● TOOLCHAIN (invisibile), compila l'applicazione
in codice macchina● BOOTLOADER (sul micro) permette di caricare
l'applicazione nella FLASH del micro● SERIAL MONITOR permette il DEBUG
dell'applicazione
IZ3HAE ARIVR Arduino Introduzione
SISTEMA
PICCOLO ACCENNO AL "C"● Linguaggio è "C/C++"● "C++" è object oriented (OOP)● Permette di creare le classi e le istanze
IZ3HAE ARIVR Arduino Introduzione
DIVERSI TIPI DI HARDWAREEsistono una serie di dispositivi con vari processori, tutti ATMEL, in quanto la TOOLCHAIN (la vediamo successivamente) è gratuita.
● Tutti a base RISC (Reduced Instruction Set Computer)
● Con interfaccia di comunicazione ed hardware standard tra le varie schede
● Tutti sono compatibili con le SHIELD, le schede di espansione
IZ3HAE ARIVR Arduino Introduzione
Hardware attuali
Basati su AVR Atmega32u4/328 e simili
Base:● Uno, Leonardo, nano, mini, promini, lilypad, fio
Espansi:● Mega, Mega ADK (Android Development Kit)
Con dispositivi a bordo:● Esplora, Ethernet, Robot
IZ3HAE ARIVR Arduino Introduzione
Hardware attuali
Con Linux:● Arduino YUN e TRE (non ancora disponibile)
Con processore ARM● Arduino DUE
Con Linux:● Arduino YUN e TRE (non ancora disponibile)
Con processore ARM:● Arduino DUE
ESISTONO ANCHE I CLONI E SCHEDE COMPATIBILI, CON VARI PROCESSORI E LO STESSO IDE
(PIC)
IZ3HAE ARIVR Arduino Introduzione
Arduino SHIELD
Tutte le schede COMPATIBILI Arduino hanno la stessa interfaccia hardware e disposizione dei PIN HEADER.
● Su di questi si innestano delle schede di espansione denominate SHIELD, che si collegano ai pin di I/O del processore
● Aggiungono le più svariate funzioni● Si può sviluppare un proprio shield
IZ3HAE ARIVR Arduino Introduzione
Alcuni shield
GSM shield Ethernet shield
Motor shield Proto shield
Esistono di tanti produttori
IZ3HAE ARIVR Arduino Introduzione
Shield radioamatoriali
GPS Shield LCD display
ARRL Libri Accordatore antenna
IZ3HAE ARIVR Arduino Introduzione
Arduino è il LEGO degli elettronici?
Direi di sì, i vari shield si "montano" uno sopra l'altro come i cubetti del LEGO.
Per arrivare quindi ad avere un hardware sperimentale, basta trovare o sviluppare l'appropriato shield, installarlo, reperire librerie ed esempi ed adattarlo alle nostre esigenze
IZ3HAE ARIVR Arduino Introduzione
Progetti radioamatoriali
Le tipiche applicazioni possono essere:● Telecomandi via APRS e/o GSM● Progetti che utilizzino GPS● Controllo rotori, con interfacciamento ( ad
esempio Ham Radio De Luxe)● Telecomandi DTMF● Accordatori automatici locali e/o remoti● Controllo apparecchi via WEB e/o GSM
IZ3HAE ARIVR Arduino Introduzione
Progetti radioamatoriali
● Beacon CW per ripetitori● Relais di sequenza● Keyer CW● Decoder CW● COR (carrier operated relay) e sequencer ponti
radio
● METEO
IZ3HAE ARIVR Arduino Introduzione
E' possibile sviluppare uno shield?CERTAMENTE! Esiste un formato "ufficiale" su EAGLE, un piccolo esempio, decoder DTMF.
IZ3HAE ARIVR Arduino Introduzione
Passi per un HW dedicatoRealizzare l'hardware rispettando lo schema delle schede Arduino, successivamente:
● Programmare un microcontrollore con il BOOTLOADER, con una scheda Arduino o tramite ICSP (In Circuit System Programmer)
● Prevedere sulla scheda la possibilità di collegarsi in seriale, vedi gli schemi originali
● A questo punto si connette il dispositivo al PC e si programma normalmente con l'IDE
IZ3HAE ARIVR Arduino Introduzione
Ambiente di sviluppo (IDE)
Prima notizia importante, è gratis! Ci serve solamente un cavo USB, questo unito al bassissimo costo della scheda (circa 20€), ci consente di iniziare con poco sforzo, IDE è:
● Un ambiente di sviluppo integrato, basato su PROCESSING, sviluppato dal MIT (Massachusetts Institute of Technology)
IZ3HAE ARIVR Arduino Introduzione
Ambiente di sviluppo (IDE)Lo scopo del progetto era di fornire un linguaggio "C" semplificato per ricercatori e sperimentatori, che non fosse necessariamente aderente alle specifiche ufficiali, ma che fosse semplice da usare
● Viene quindi introdotto un livello di astrazione dell'hardware, che rende "trasparente" al programmatore tutte le operazioni a livello di registri hardware del micro necessari per ottenere la funzione richiesta
IZ3HAE ARIVR Arduino Introduzione
Ambiente di sviluppo (IDE)● Il principiante viene aiutato con esempi, librerie,
documentazione disponibile in rete● Non è necessario conoscere la toolchain per
programmare, tutto viene eseguito in automatico
Cos'è la toolchain?● Per generare un codice si parte, al giorno
d'oggi, da un linguaggio ad alto livello.
IZ3HAE ARIVR Arduino Introduzione
Ambiente di sviluppo (IDE)
● Il "C" viene compilato in codice "assembler" per lo specifico processore, per cui il sorgente "C" è "portabile" tra vari hardware. File .ASM
● A sua volta questo .ASM viene tradotto in "numeri" che sono i codici istruzione per lo specifico micro, ma non vengono assegnati gli indirizzi fisici, file rilocabile .OBJ
● Vengono compilate anche le librerie necessarie
IZ3HAE ARIVR Arduino Introduzione
Ambiente di sviluppo (IDE)
● A questo punto il programma LINKER, mette assieme, tramite una tabella che specifica i vari indirizzi fisici della memoria, tutti i file OBJ e genera un file .HEX .BIN .S19 o altre estensioni, che sono caricabili in memoria del micro e che sono comparabili al .EXE o .COM del PC
● Tutte le operazioni sono eseguite dal "makefile"
Si capisce che avere la toolchain gratis è un bel vantaggio.
IZ3HAE ARIVR Arduino Introduzione
Astrazione Hardware
Il principale vantaggio di un sistema Arduino è il livello di astrazione hardware.
Cosa significa?● Non devo studiarmi il data-sheet del
componente per poterlo utilizzare (448 pagine!)● Il tutto è portabile tra i vari processori● E' più intuitivo l'utilizzo dell'hardware
IZ3HAE ARIVR Arduino Introduzione
Astrazione Hardware
In cosa consiste?● Esiste un livello intermedio di librerie, linkate in
maniera trasparente, che consente di rendere "invisibile" l'hardware al programmatore. Per accendere, per esempio, il led sul pin 13, si utilizza un'istruzione semplice ed intuitiva.
● Quindi non ho bisogno di conoscere ed accedere ai registri hardware del micro, nè per le operazioni semplici nè tantomeno per quelle complesse.
IZ3HAE ARIVR Arduino Introduzione
Astrazione Hardware
Facciamo un piccolo esempio, sempre relativo all'impostazione ad 1 di un bit, per accendere il led:
● Devo individuare la porta di I/O a cui è connesso il pin in oggetto
● Tramite la documentazione devo capire quali sono i registri di controllo, tipicamente il Direction Register, ed il suo indirizzo
IZ3HAE ARIVR Arduino Introduzione
Astrazione Hardware
● Devo leggere il contenuto attuale del registro e settare come uscita il solo bit che mi interessa, applicando una maschera (OR)
● Devo individuare almeno il data register, e, con le stesse regole, leggerlo, inserire il bit 1 mediante una OR o il bit zero mediante una AND e riscriverne il contenuto, stando attento al che non ci sia nessuna possibilità di venir interrotto tra la lettura e la scrittura (interrupt). Questo per non alterare gli altri bit, utilizzati in altri punti del programma.
IZ3HAE ARIVR Arduino Introduzione
Astrazione Hardware
VEDETE CHE UN'OPERAZIONE BANALE DIVENTA COMPLESSA?
IZ3HAE ARIVR Arduino Introduzione
Strutture principali di un progettoStatement, sono le istruzioni per il compilatore, cominciano con #.
● Nel blocco iniziale abbiamo la prima istruzione, #INCLUDE, che "attiva" una libreria, la quale aggiunge "istruzioni", dette funzioni, al programma. Le librerie sono *.h
● L'inizializzazione dell'oggetto LiquidCrystal assegna i pin di Arduino all'interfaccia del display. Il livello di astrazione hardware consente di assegnare un numero progressivo che è corrispondente al circuito stampato
IZ3HAE ARIVR Arduino Introduzione
Strutture principali di un progetto
● Nello spazio successivo si possono assegnare le variabili di progetto e le costanti, ovviamente le variabili sono allocate nella RAM del processore, le costanti vengono compilate assieme al codice, vediamo successivamente come definirle
● La prima funzione di programma è SETUP, viene eseguito una sola volta al reset
● La seconda è LOOP ed è il never-ending loop, girerà sempre
IZ3HAE ARIVR Arduino Introduzione
Strutture principali di un progetto
Convenzioni sulle funzioni.
● In "C" le subroutines si chiamano funzioni, comparabili ai quadripoli
● Ogni funzione si deve chiudere, non esiste GOTO
● Ogni funzione può avere o non avere il passaggio parametri
● Una funzione SENZA passaggio di nessun parametro, nè in ingresso, nè in uscita, ha questa forma:
void NomeFunzione()
IZ3HAE ARIVR Arduino Introduzione
Elementi di codice "C"● Attenzione, i nomi sono "case sensitive"
● Void, vuole dire "vuoto"
● La parte di codice deve essere contenuta all'interno delle parentesi graffe
void ProvaCorso () {
Codice;Codice;}
Ogni riga di istruzione si chiude con il "semicolon" o punto e virgola, ad eccezione della funzione e delle istruzioni di controllo (if, for, loop....)
IZ3HAE ARIVR Arduino Introduzione
Elementi di codice "C"● Quando il programma arriva all'ultima parentesi
graffa esegue quello che in Basic era il RETURN, quindi ritorna alla funzione chiamante
● Il programma è così "strutturato" le varie chiamate di funzione sono innestate una dentro l'altra.
● Per convenzione di leggibilità, i vari livelli di NEST all'interno di una funzione vengono evidenziati mediante il "TAB", si chiama INDENT
IZ3HAE ARIVR Arduino Introduzione
Elementi di codice "C"void GestioneLcdEditor (){ if (EditorRobot==LOW) { DisplayServoPosition(); } else { lcd.setCursor(0,1); lcd.print("Parametri"); if (TastoGiu==HIGH){ TastoGiu=LOW; if (ParameterPointer <= 1){ ParameterPointer++; ParameterStatus=0; } } if (TastoSu==HIGH){ TastoSu=LOW; if (ParameterPointer > 0){ ParameterPointer--; ParameterStatus=0; } }
IZ3HAE ARIVR Arduino Introduzione
Elementi di codice "C"Tipi di variabile. In "C" deve essere definito il "tipo" della variabile, in base al numero di bit che essa impiega, le definizioni in arduino, sono leggermente diverse dal "C", vedi ad esempio HIGH e LOW, gestisce anche C ANSI.
● boolean , variabili che assumono 0 od 1● byte, in "C" è la char, 1 byte 8 bit● Int, 16 bit con segno● Uint 16 bit senza segno
E così via, studiare la guida di riferimento
IZ3HAE ARIVR Arduino Introduzione
Elementi di codice "C"
Definizione delle variabili:● Int NomeVariabile=0;
Definisce la variabile NomeVariabile, come 16 bit con segno, occupa 2 bytes di RAM e la inizializza a 0.
● #define CostanteProgramma 3
Definisce la costante CostanteProgramma, dove viene trovato il nome viene sostituito in compilazione con il valore 3.
IZ3HAE ARIVR Arduino Introduzione
Elementi di codice "C"
Passaggio parametri:● Le subroutines vengono chiamate funzioni in
quanto possono "leggere" un dato in ingresso, "trasformarlo e "rendere" un dato modificato in uscita, simile alle funzioni di trasferimento o quadripoli
● Se al posto di "void" si mette in tipo di variabile, la funzione può rendere il valore, ad esempio:
int LeggiQualcosa()
IZ3HAE ARIVR Arduino Introduzione
Elementi di codice "C"● Quando inseriremo la parola chiave RETURN, il valore sarà
posto sullo stack e letto dalla funzione chiamante, esempio:
int ReadIrValue(){
int IrValue;
if (irrecv.decode(&results)) {
Serial.println(results.value,HEX);
IrValue=results.value;
irrecv.resume(); // Receive the next value
return results.value;
}
else
return 0;
}
IZ3HAE ARIVR Arduino Introduzione
Elementi di codice "C"
Doppio passaggio parametri:● Oltre al "void", l'altro campo interessante sono
le doppie parentesi tonde, dove vengono passati i parametri dal chiamante al chiamato
● Vediamo assieme un esempio per utilizzare gli ingressi analogici come digitali.
IZ3HAE ARIVR Arduino Introduzione
Elementi di codice "C"
boolean TestDigitalIn (int ingresso){
int Read;Read=analogRead (ingresso);if(Read > SogliaInDigiHigh)
return HIGH;else
return LOW;
}
IZ3HAE ARIVR Arduino Introduzione
Elementi di codice "C"Quindi si vede il passaggio da chiamato a chiamante (risposta) al posto del VOID, come boolean, ed il passaggio parametri da chiamante a chiamato (interrogativo), all'interno della parentesi.
Facciamo un piccolo esempio di chiamata della funzione:
#define LineFollowerCenterAnalog 3 //analog in 3
if (TestDigitalIn(LineFollowerCenterAnalog)==HIGH)
IZ3HAE ARIVR Arduino Introduzione
LINKS● http://www.sainsmart.com/
● http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,892,893&Prod=CHIPKIT-UNO32
● http://www.adafruit.com/
● http://www.linear.com/solutions/1851
● http://chipkit.net/
● http://www.argentdata.com/
● http://blog.radioartisan.com/
● http://hamshop.cz/open-cw-keyer-c27/open-cw-keyer-i196/
● http://blog.radioartisan.com/2013/01/25/review-hamshop-cz-open-keyer/
● http://www.dvice.com/archives/2012/06/ardusat-a-real.php
IZ3HAE ARIVR Arduino Introduzione
ProseguimentoSe ci sono persone interessate si potrebbe procedere come segue:
● Impostazione di un sistema funzionante
● Real time, gestione
● Slot task, gestire il tempo macchina
● Interrupt
● Analisi di un progetto completo, hardware e software di un accordatore automatico
● EAGLE?
● Debug di un progetto (Serial Monitor)