Introduzione
Nello scorso articolo abbiamo descritto la funzione analogRead, la quale utilizza l'ADC presente all'interno dell'MSP430. Abbiamo inoltre visto che se non settiamo in maniera opportuna l'ADC, la funzione restituisce valori secondo la scala di acquisizione dell'ADC, vale a dire valori che vanno da 0 a 1024 (ADC a 10 bit).
In questo articolo andremo ad approfondire l'argomento ADC mettendo poi a confronto la funzione analogRead con digitalRead.
Materiale necessario
Per il nostro progetto abbiamo bisogno del seguente materiale:
- Software Energia
- Scheda di sviluppo LaunchPad MSP430 con MSP430G2553
- 1 potenziometro con resistenza variabile da 10Kohm
- 1 pulsante (Tactile Push Switch)
- Cavetti per collegare il tutto
Cos'è un convertitore Analogico Digitale (ADC)?
Un convertitore analogico digitale permette al microcontrollore di acquisire informazioni di tipo analogico, trasformandole in valori digitali. Un ADC quindi accetta in ingresso una grandezza analogica, per esempio una tensione, e restituisce in uscita un numero finito, che rappresenta la grandezza analogica in ingresso. Una rappresentazione grafica di quanto appena detto è riportata in Figura 1. In particolare i vari campioni numerici discreti nel tempo ma ancora continui in ampiezza Figura 1 b, vengono discretizzati dal convertitore ADC in valori numerici finiti.
Per cui, durante la conversione analogico digitale una grandezza analogica che varia con continuità all’interno di un range di tensione, assumendo infiniti valori, viene convertita in una rappresentazione numerica in uscita che può assumere un numero finito di valori.
Figura 1: Confronto tra un segnale analogico (a) ad un segnale campionato (b).
Come abbiamo visto nel precedente articolo se abbiamo, ad esempio, un ADC a 10 bit che accetta in ingresso tensioni comprese fra 0 e 3 volt (Vref = 3V), poiché con 10 bit sono rappresentabili soltanto 2^10 combinazioni diverse, si possono rappresentare soltanto 1024 valori diversi di tensioni d’ingresso, valori che differiscono fra loro di un valore pari a 3 Volt/(1024-1)= 0,003 Volt (quanto dell'ADC). Ciò significa che una variazione della tensione d’ingresso inferiore al valore appena calcolato non verrebbe rilevata in uscita.
Tale valore può essere diminuito, quindi avere una maggiore precisione, aumentando il numero di bit che costituiscono l’uscita dell’ADC, diminuendo il valore di riferimento dell'ADC che va a determinare la dinamica in ingresso del convertitore ADC o mettendo un amplificatore in ingresso di guadagno opportuno al variare dell'ampiezza del segnale in ingresso.
Esempio Applicativo
Per eseguire il confronto tra le due funzioni analogRead e digitalRead, per prima cosa è necessario effettuare i vari collegamenti come mostrato in Figura 2 andando a collegare sia il pulsante che il potenziometro. Il particolare il potenziometro permette di testare la funzione analogRead mentre il pulsante la funzione digitalRead.
Figura 3: Schema esperimento.
Una volta effettuati i collegamenti è possibile scrivere il nostro Sketch, come sotto riportato:
Come nostro solito nella prima parte andiamo ad assegnare dei valori interi alle variabili che abbiamo intenzione di utilizzare ed inizializziamo gli ingressi e le uscite della scheda. Come mostrato nel dettaglio del codice sotto riportato:
Nella seconda parte del codice invece, come è facile vedere, abbiamo riutilizzato parte degli Sketch che abbiamo già usato negli scorsi articoli, in modo da facilitare il lavoro. Come è possibile vedere nella prima parte abbiamo composto lo Sketch riguardante il potenziometro, effettuando però una piccola modifica.
Se vi ricordate abbiamo detto che l'ADC può assumere 1024 valori mentre il PWM può assumere il valore massimo 255. A questo punto modificando la proporzione che abbiamo scritto la scorsa volta, possiamo far assumere ai valori presi in ingresso, invece che valori di tensione con tetto massimo di 3 Volt, valori che possono essere scritti nella variabile che gestisce la luminosità del LED, ovvero con valore massimo pari a 255.
Cosi facendo possiamo variare direttamente la luminosità del LED senza apportare ulteriori modifiche. Dopo un piccolo ritardo di 10mS viene effettuato il controllo sul pulsante al fine di poter controllare il LED rosso per mezzo del pulsante.
Il LED viene acceso ponendo l'uscita digitale allo stato stato HIGH se il pulsante è LOW (essendo collegato a massa) mentre l'uscita viene impostata come LOW, quindi LED spento, quando il pulsante non è premuto. In particolare quando il pulsante non è premuto il livello logico del pin associato al pulsante vale 1 (HIGH), visto che sono stati attivati i resistori di pull-up interni all'MSP430 per mezzo del parametro “INPUT_PULLUP”.
A questo punto lascio a voi effettuare un piccolo esperimento: aggiungere due LED esterni e provare a ricreare il lavoro appena fatto...
Autore : Andrea Valeriani
Bibliografia
- Ambiente di sviluppo Energia – per MSP430
- Scheda di sviluppo LauchPad MSP-EXP430G2
- Corso di programmazione MSP430 basato su Code Composer Studio e LaunchPad MSP430
- Adattatore schede Arduino – LauchPad
- Domande? Forum MSP430
-
Fritzing : programma per realizzare le immagini per l'assemblaggio di uno schema elettrico.
{jcomments on}
You don`t have permission to comment here!