chip -casi -"e il" -aggiunto

annuncio pubblicitario
INTERFACCIA COMANDO LED PER PC
TRAMITE ARDUINO UNO
Descrizione scheda arduino uno.
La Arduino UNO è una scheda basata sul microcontrollore ATmega328.
La scheda Arduino UNO è dotata di 14 pin di input/output digitali (6 dei
quali possono essere usati come segnali PWM), 6 input analogici, un
quarzo a 16MHz, un connettore USB, un jack per l'alimentazione, un
connettore per la programmazione ICSP ed un pulsantino per il reset della
scheda. La scheda inoltre fornisce tutto ciò che è necessario per supportare il
funzionamento del microcontrollore.
Per cominciare ad utilizzare la Arduino UNO è semplicemente necessario
connettere la scheda ad un PC tramite un cavo USB oppure alimentare la
scheda tramite un adattatore AC-to-DC o tramite una semplice batteria.
La Arduino UNO differisce dalle precedenti schede per il fatto che non usa il
chip FTDI USB-to-serial; la scheda Arduino UNO R3 infatti implementa il chip
Atmega16U2 (che rimpiazza il chip Atmega8U2 delle precedenti revisioni)
programmato proprio per essere un convertitore USB-to-serial.
La Arduino UNO sarà una delle schede di riferimento delle future versioni
della Arduino. La UNO è l'ultima fra una serie di schede USB Arduino e
rappresenta un modello di riferimento per le piattaforme Arduino.
La Revisione 3 della scheda Arduino UNO ha le seguenti nuove
caratteristiche che la distinguono dalle precedenti revisioni della stessa
scheda:
 modifiche al 'pinout' della scheda:
o vicino al pin AREF, sono stati aggiunti due pin: SDA e SCL;
o vicino al pin RESET, sono stati aggiunti due nuovi pin. Uno di essi
è identificato con il nome IOREF e permette alle shield di adattare
la propria tensione di alimentazione a quella della scheda Arduino
UNO. L'altro pin non è stato connesso, è stato lasciato disponibile
per le prossime revisioni.
 un circuito di RESET più robusto.
 il chip Atmega16U2 ha rimpiazzato il chip Atmega8U2; con questo
nuovo chip si potrà ottenere un rate maggiore nel trasferimento dei dati
e soprattutto una quantità maggiore di memoria nel trasferimento dei
dati.
La scheda Arduino UNO R3 viene fornita
CON il microcontrollore ATmega328.
Specifiche
•Microcontrollore: Atmel ATmega328
•Tensione operativa: 5V
•Input Voltage: (consigliata) 7-12V
•Input Voltage: (limiti) 6-20V
•Pin di I/O Digitali: 14 (6 dei quali forniscono in uscita segnali PWM)
•Pin di Input Analogici: 6
•DC Current per I/O Pin: 40 mA
•DC Current per Pin alimentati a 3.3V: 50mA
•Flash Memory: 32KB (di cui 0.5KB utilizzati dal bootloader)
•SRAM: 2KB
•EEPROM: 1KB
•Frequenza di Clock: 16MHz
Schema elettrico scheda (shield) con 10 LED
LATO COMPONENTI
PROGRAMMA UTILIZZATO PER IL PILOTAGGIO DEI LED CON TRAMITE
USB
/* Programma per comandare l'accenzione
dei Led della scheda preparata per
tesina sistema con comunicazione tra microcontrollore e PC tramite USB */
// In un vettore di 10 elementi inserisco i pin dove sono collegati i LED
const int LedPin[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
void setup() {
// in questa parte di programma metto
// l'impostazione dei pin dell'arduino con i LED come OUTPUT
// questa parte del programma viene eseguita una sola volta
int i;
for (i=0 ; i<=9 ; i++) {
pinMode(LedPin[i], OUTPUT);
}
// inizializzo la seriale alla velocità di 9600 bps
Serial.begin(9600);
}
void loop() {
// qui inserisco la parte di codice del
// programma che viene ripetuta continuamente
int LedRS232[10]; // memorizzo lo stato dei led in un vettore di 10 interi
int NumByte=0; // in questa variabile memorizzo il numero di byte inviati
presenti sulla seriale
int i;
// aspetto fino a che il numero totale di byte presenti sulla seriale non è
pari a 10
while (NumByte < 10) {
NumByte=Serial.available();
seriale
//
leggo
il
numero
di
byte
presenti
sulla
}
// se esco dal ciclo while, vuol dire che ho ricevuto la configurazione dei 10
LED
for (i=0; i<NumByte; i++) {
LedRS232[i]=Serial.read(); // per ogni byte letto imposto il valore del
vettore con lo stato dei LED
}
for (i=0; i<10; i++) {
Serial.print("LED"); // risposta sulla seriale con i byte letti
Serial.print(i+1);
Serial.print(' ');
Serial.println(char(LedRS232[i]));
if (LedRS232[i]==49){ // 49 è il codice ASCII del carattere "1"
digitalWrite(LedPin[i], HIGH); // accendo il LED corrispondente all'indice
i
}
if (LedRS232[i]==48){ // 48 è il codice ASCII del carattere "0"
digitalWrite(LedPin[i], LOW); // spengo il LED corrispondente all'indice i
}
}
}
// FINE
SPIEGAZIONE DEL PROGRAMMA
Come in tutte le applicazioni dove è necessario usare dei microcontrollori, è
bene tener presente la parte schematica di collegamento tra la scheda
sviluppata e l’HW Arduino.
Dallo schema realizzato si vede che i LED presenti sulla scheda sono stati
collegati ai pin di output digitale a partire da D2 fino a D11, i primi due pin D1
e D2 non sono collegati ai LED perché sono utilizzati dal convertitore USBSeriale presente sulla scheda.
Nella prima parte del programma, la parte che viene eseguita una sola volta,
che inizia con la parola chiave:
void setup() {
indicheremo quali pin usare come input e quali come output. Nel nostro caso
utilizzeremo i pin dal 2 al 11 come pin di output. L’istruzione che consente di
fare tale impostazione è:
pinMode(LedPin[i], OUTPUT);
Il vettore LedPin[i], contiene i pin ai quali sono collegati i LED.
Nel programma si utilizza la comunicazione seriale tramite l’interfaccia USB
per pilotare i LED. L’istruzione che permette di leggere il numero di Byte
presenti nel Buffer seriale è la seguente:
NumByte=Serial.available();
Quando l’istruzione viene eseguita carica nella variabile NumByte la quantità
di byte presente all’ingresso della seriale. Quando questa quantità di byte è
pari a 10, vuol dire che ho ricevuto tutti i byte necessari a definire quali LED
devono essere accesi e quali spenti.
Per leggere i 10 byte presenti in ingresso alla seriale devo andare a leggere i
Byte. L’istruzione che esegue la lettura è la seguente:
LedRS232[i]=Serial.read();
In particolare sulla seriale saranno presenti i caratteri inseriti tramite la
console di monitoraggio seriale. I caratteri saranno letti come Byte con il loro
codice ASCII. Il codice ASCII dei caratteri 0 = 48 del carattere 1 = 49.
L’accensione dei LED è fatto impostando uno stato alto (HIGH) sul
corrispondente pin della scheda Arduino, per spegnere il led si imposta uno
stato basso sul corrispondente pin della scheda arduino. Le istruzioni che
eseguono tale azione sono le seguenti:
if (LedRS232[i]==49){ // 49 è il codice ASCII del carattere "1"
digitalWrite(LedPin[i], HIGH); // accendo il LED corrispondente all'indice
i
}
if (LedRS232[i]==48){ // 48 è il codice ASCII del carattere "0"
digitalWrite(LedPin[i], LOW); // spengo il LED corrispondente all'indice i
}
L’istruzione digitalWrite(LedPin[i], HIGH) accende il LED
L’istruzione digitalWrite(LedPin[i], LOW) spegne il LED.
Scarica