Introduzione
Nello scorso articolo abbiamo descritto la funzione analogWrite. Questa funzione utilizza la tecnica per il controllo di potenza denominato PWM (Pulse Width Modulation) al fine di poter controllare una grandezza analogica come per esempio la luminosità di un LED.
In questo articolo descriveremo il funzionamento del comando digitalRead utilizzando un pulsante collegato a massa, in particolare si farà uso del comando INPUT_PULLUP.
Inoltre avremo la possibilità di utilizzare per la prima volta il comando Serial.print che permette di stampare a video del testo.
Materiale necessario
Per il nostro progetto abbiamo bisogno del seguente materiale:
- Software Energia
- Scheda di sviluppo LaunchPad MSP430 con MSP430G2553
- 2 pulsanti
- 1 LED rosso
- 1 resistore 150ohm
- cavetti per collegare il tutto
Cos'è un pulsante?
I pulsanti sono componenti molto semplici, infatti quando premiamo su uno di loro colleghiamo due contatti in modo che la corrente elettrica possa scorrere attraverso due punti, una volta rilasciato, una molla provvede a riportarlo allo stato iniziale.
I piccoli pulsanti che utilizzeremo in questa lezione sono composti da quattro collegamenti, ma come possiamo vedere in Figura 1 i pin sono collegati due a due in maniera tale da formare comunque due pin di riferimento.
Figura1: Pulsante a 4 pin.
Molto spesso questi dispositivi elettromeccanici vengono confusi con gli interruttori. Gli interruttori sono componenti elettromeccanici che possono essere definiti pulsanti a stato fisso.
Come possiamo vedere dalla Figura 2, gli interruttori hanno uno stato ON ed uno stato OFF.
Generalmente hanno un pin comune centrale (deviatore), nel nostro caso il Pin B, e ai due lati sono presenti due Pin (A e C). Un sistema è allo stato OFF fisso se è collegato al Pin A, mentre si trova nello stato ON se l'interruttore è collegato al Pin C.
Figura2: Esempio di deviatore.
Dopo aver fatto maggiore chiarezza sulla differenza tra un pulsante ed un interruttore andiamo a vedere lo sketch che utilizzeremo.
Esempio Applicativo
Nel programma che andremo a scrivere faremo in modo che premendo il primo pulsante, il LED collegato alla nostra scheda si accenda, mentre nel caso in cui andremo a premere il secondo pulsante il LED tornerà nello stato di quiete, cioè spento. Vedendo con più attenzione lo sketch in Figura 3 è possibile notare due cose:
- Il LED si accende se il pulsante si trova nello stato LOW
- Utilizziamo la funzione Serial.println
Figura 3: Sketch per il controllo dei LED.
Andiamo ora a vedere nello specifico lo sketch. Nella prima parte dello sketch, si inizializzano le variabili che identificano i pin che vogliamo utilizzare, per poi utilizzarle all'interno della funzione setup.
int pulsante1 = 2;
int pulsante2 = 3;
int led = 4;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(pulsante1, INPUT_PULLUP);
pinMode(pulsante2, INPUT_PULLUP);
}
Il pin collegato al LED si dichiara come fatto nei precedenti progetti, mentre i due pulsanti sono stati dichiarati come “INPUT_PULLUP”. La modalità INPUT_PULLUP permette di settare gli ingressi di default nello stato HIGH (usando i resistori interni di pull-up presenti negli MSP430). È possibile utilizzare tale funzione perché, come vedremo nello schema elettrico, i pulsanti sono collegati verso massa.
In questo modo l'ingresso è settato di default come HIGH, mentre nel momento in cui premiamo il pulsante viene messo nello stato LOW.
Nella funzione di setup, inoltre, è presente una dichiarazione che non abbiamo visto fino ad ora, ovvero Serial.begin(9600).
Questo comando permette di aprire un canale seriale tra la nostra scheda ed il PC per vedere stampato sul monitor le informazioni che vogliamo. In particolare la scheda LaunchPad possiede una porta seriale virtuale, basata sulla classe USB CDC. Dal lato software del microcontrollore, essendo presente un brige (ponte) UART – USB, non ci si deve preoccupare del protocollo USB ma gestire la comunicazione come una semplice porta seriale.
Nel nostro esempio ho settato la velocità a 9600 Baud per secondo (velocità più che sufficiente per il nostro esempio), velocità che può essere settata anche diversamente, ma personalmente non ho mai cambiato valore.
Nella seconda parte dello sketch si è scritto quello che è in sostanza il nostro programma. Dato che abbiamo collegato i pulsanti a massa, andiamo ad eseguire ciclicamente dei controlli su questi due pulsanti e controllare se sono stati premuti. Nel caso in cui premiamo il pulsante collegato al pin “pulsante1”, questo imposterà l'ingresso nello stato LOW andando ad eseguire il primo ciclo "if".
void loop() {
if (digitalRead(pulsante1) == LOW) {
Serial.println("Led Acceso");
digitalWrite(led, HIGH);
}
if (digitalRead(pulsante2) == LOW) {
Serial.println("Led Spento");
digitalWrite(led, LOW);
}
}
In particolare, ad ogni cambio di stato, come prima cosa la scheda trasmettere attraverso la porta seriale, la stringa "Led Acceso" e successivamente si imposta l'uscita collegata al LED allo stato HIGH, accendendo cosi il LED. Questo stato persiste finché non premiamo il pulsante collegato al pin "pulsante2", impostando cosi l'ingresso nello stato LOW spegnendo il LED e trasmettendo alla porta seriale lo stato "Led Spento".
Per realizzare il tutto andiamo quindi a cablare il circuito seguendo i collegamenti fatti in Figura 4.
Figura 4: Cablaggio del circuito di esempio.
A questo punto andando ad aprire la porta seriale cliccando sul pulsante indicato in Figura 5 ed avviando il programma, ci accorgiamo di una cosa: la scritta compare più volte (per tutto il tempo in cui teniamo premuto il pulsante.
Questo perché per quando velocemente possiamo premere il pulsante, il microcontrollore impiega meno tempo a compiere il ciclo di controllo trovando di nuovo premuto il pulsante...
A questo punto dovremo scrivere quello che in gergo si chiama "controllo antirimbalzo". Piuttosto che scriverlo io vi invito a scriverlo da soli e postare la risposta sul Forum.
Dato che utilizzeremo di nuovo il pulsante, nel successivo articolo, ingloberò nello Sketch quella che a mio parere è la soluzione più efficiente.
Detto questo divertiamoci ad inviare segnali morse con il nostro LaunchPad!
Figura 5: Pulsante per visualizzare la finestra del terminal di comunicazione seriale.
Nota
La configurazione dei Jumper che la scheda deve avere per effettuare la trasmissione seriale con il PC è visibile sulla serigrafia di Figura 6, ovvero per un HW UART, bisogna collegare le linee TXRD e RXD con in Jumper in orizzontale (durante la fase di programmazione bisogna averli in verticale come in Figura 6). Questa configurazione è valida per la versione 1.5 della scheda LaunchPad. Per la versione 1.4, le linee TX e RX devono essere collegate tra loro per mezzo di un collegamento ad X, per cui i Jumper non sono più sufficienti per effettuare il collegamento richiesto, ma sono necessari dei cavi. Questo inconveniente è una delle ragioni che ha portato ad avere la versione 1.5 della scheda LaunchPad.
Figura 6: Scheda LaunchPad vesione 1.5.
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!