Cominciamo a sperimentare con qualcosa di nuovo: MSP430 Launchpad By Texas Instruments – Getting Started!
Analizziamo in questo articolo una famiglia di microcontrollori forse ancora poco noti (?) ma che ultimamente stanno salendo alla ribalta date le eccezionali caratteristiche. Sto parlando degli MSP430 (Mixed Signal Processor) prodotti dalla Texas Instruments.
In realtà era da tempo che desideravo cominciare a provare qualcosa di nuovo, giusto per tenere la mente in esercizio e poi perchè mi piace esplorare nuovi mondi. Perchè la scelta è ricaduta sugli MSP430?
Per tanti motivi. Uno dei motivi principali è che la Texas Instruments mi sta simpatica. Sarà forse perchè è stato uno dei primi marchi di elettronica che ho conosciuto da piccolo (mio padre mi portò dall’america una calcolatrice scientifica della TI quando ero bambino e all’epoca non si trattava di cose che si vedevano tanto facilmente). Poi ultimamente con la questione del librone a dieci centesimi, delle schede di valutazione gratis… (!)
Motivi futili a parte, in verità il motivo principale è che gli MSP430 sono dispositivi con un consumo ridotto all’osso e sono da prendere in seria considerazione nei casi in cui desideriamo progettare dispositivi alimentati con batterie. Per di più sono molto economici, la TI offre un ottimo supporto, e sono ricchissimi di periferiche, alcune delle quali inaspettate.
Poi scopro questa piccola meraviglia: L’MSP430 Launchpad. Una scheda di sviluppo per MSP430 fino a 20 pin in formato DIL, che include anche il programmatore/debugger USB e che viene fornita, in una confezione con tanto di adesivi, completa di:
- 2 MCU (un MSP430G2231 e un MSP430G2211 – entrambi a 14 pin)
- Quarzo secondario da 32768 Hz (optional da montare)
- Coppia di header maschio
- Coppia di header femmina
- Cavo USB
Ad un prezzo che quasi mi vergogno anche a scrivere: $4,30 (circa TRE EURO!) se la acquistate direttamente da TI (più spese di spedizione). Mi faccio un giro sulla documentazione, vedo che la TI ha in catalogo un bel numero di MSP430 anche in formato DIL a prezzi ridicoli, ci sono vari compilatori in C e per me che vengo dai picmicro vedo che i programmi sono abbastanza semplici da capire. Non ci penso su due volte… ed è amore a prima vista!
Indice dei contenuti
MSP430 Launchpad
L’MSP430 Launchpad è fatto molto bene, compatto (misura 6,5 x 5cm), curato nei minimi dettagli. Poi… Piccolezze ma io ho una spiccata attenzione per i dettagli: lo zoccolo a bordo ha i pin torniti e sotto la scheda ci sono 4 piedini in gomma adesivi che eviteranno tanti danni. Per me queste due finezze non sono cosa da poco: evidenziano un certo modo di pensare.
Gli MSP430 in formato DIL della Value Line (quelli con la G nella sigla: MSP430Gxxx), anche se hanno un diverso numero di piedini, possono essere usati tutti su questa scheda in quanto la disposizione dei pin è uguale per tutti, purchè abbiano massimo 20 pin. Una comodità insomma.
La scheda è divisa in 3 parti, separate da due linee tratteggiate :
La parte superiore comprende il connettore mini-USB e tutta la circuiteria relativa al programmatore/debugger. Dalla porta USB viene anche prelevata l’alimentazione. Il chip TUSB3410 presente in questa zone provvede ad eseguire la conversione USB/Seriale, necessaria per la comunicazione. In questa zona c’è anche un altro MSP430: MSP430F1612, preprogrammato per funzionare da debugger. Abbiamo anche la presenza di una eeprom prodotta da microchip (U5) e del regolatore di tensione a 3.6V (U2).
In realtà sono io a supporre che U5 sia un’eeprom preprogrammata dal momento che dallo schema del Launchpad così si capisce: sembra un’eeprom I2C. Però la sigla riportata sopra è diversa: 4LC I945 8P1 … roba che non esiste… Per cui si tratta di qualche componente custom o risiglato ?
La parte centrale è divisa dalla parte inferiore per far capire che sullo zoccolo ci si possono montare MSP430 a 14pin, che hanno solo 8 I/O (e quindi occupano solo i pad centrali), mentre montando MSP430 a 20pin, sono disponibili altre 6 porte in più. Nella parte inferiore trovano posto anche un pulsante programmabile, il pulsante di reset e 2 led programmabili.
Non abbiamo un quarzo. I dispositivi della value line hanno l’oscillatore a controllo digitale (DCO), precalibrato in fabbrica, che gira di default ad 1MHz (ma è possibile regolare la frequenza fino a 16MHz). Stiamo parlando di dispositivi a basso consumo dopotutto, in ogni caso non pensate che 1MHz sia poco, basta vedere alcuni programmi di esempio in giro per rendersi conto cosa possono fare questi mostriciattoli.
Anche il Launchpad ha i suoi kit di espansione, prodotti o meno dalla Texas Instruments, che si chiamano Booster Packs.
Iniziamo
Premetto che, anche se scriverò ulteriori articoli sugli MSP430, le mie non saranno lezioni di programmazione in quanto mi sono avvicinato solo ora a questi dispositivi. Posso però dirvi con un pizzico di orgoglio che Mauro Laurenti pubblicherà sul suo sito una serie di articoli molto approfonditi su questi dispositivi, per cui abbiamo parecchio con cui divertirci e con pochissima spesa!
Lo ammetto: non ce la facevo più a tenermelo dentro, stavo troppo gasato!
Colleghiamo il Launchpad al PC. Non spostiamo nessun jumper, lasciamo tutto così come è uscito dalla confezione, vedremo poi a cosa servono. Non c’è bisogno di drivers in quanto il Launchpad viene riconosciuto come una periferica USB composita standard. Attendiamo che Windows finisca di installare il Launchpad (verranno riconosciute due periferiche). I due led LED1 e LED2 cominceranno a lampeggiare alternativamente dato che c’è un programma precaricato sull’ MSP430G2231 montato di default sulla scheda.
Rettifica: dei driver in realtà ce n’è bisogno eccome, vengono installati automaticamente con CCS, quindi installate prima CCS e solo successivamente collegate il launchpad. Se avete collegato il launchpad prima, Windows potrebbe non riconoscere più la scheda. In questo caso installate CCS e quindi dal pannello di controllo di windows, visualizzate le periferiche e trovate quelle che hanno un punto esclamativo giallo, procedete quindi all’aggiornamento. Se ancora non va, scaricate i driver per il chip TUSB3410 dalla pagina ufficiale: http://www.ti.com/tool/tusbwinvcp
E’ necessario regitrarsi sul sito della Texas Instruments creando un account my.TI. Questo passaggio è obbligato per poter scaricare gratuitamente gli strumenti di sviluppo.
Ide e compilatori
La Texas Instruments consiglia due ambienti di sviluppo che comprendono già un compilatore C: IAR Embedded Workbench e Code Composer Studio (CCS). Si tratta tuttavia di due strumenti a pagamento per i quali esistono le versioni gratuite ma che pongono un limite al codice. Anche per gli MSP430 vi so altri compilatori tra cui uno Free, derivato dal GNU C Compiler: MSPGCC.
Lo IAR Embedded Workbench è stato sviluppato per offrire il supporto a numerose MCU, sul sito ufficiale difatti potrete notare il folto elenco… (in cui mancano i picmicro !). E’ a pagamento, tuttavia la versione Kickstart è free ma limita il codice a 4Kb per gli MSP430 e 8K per gli MSP430X. C’è anche una versione liberamente scaricabile, completa, ma che dura 30 giorni. Potete scaricare IAR Embedded Workbench dal sito della TI oltre che dal sito ufficiale. Io l’ho installato ma sinceramente non mi è piaciuto molto e non l’ho trovato molto intuitivo, per cui ho cominciato con il CCS, che tra l’altro deriva da un ambiente che già mi era familiare: Eclipse.
Code Composer Studio
Scarichiamo Code Composer Studio. La versione da scaricare per poter essere usata con il Launchpad è quella che si trova più in basso, versione 4 (Download latest production CCSv4 MSP430/C28x code size limited image). Il codice prodotto da CCS è limitato a 16Kb per gli MSP430. Per poterlo scaricare dovremo compilare un modulo in cui dichiariamo che uso vogliamo fare del software e altre cose, è necessario compilare tutti i campi, leggere la licenza ed accettarla prima di poter continuare.
Dopo di ciò viene avviato il download e vi arriva anche un link via email nel caso il download non venisse avviato: sono oltre 350Mb e a me l’ha scaricato piuttosto lentamente. Andandolo ad installare su Windows7 mi appare una finestra con un messaggio che recita “User Account Enabled”, continuiamo pure. Un avviso del genere viene mostrato anche in seguito quando viene impostata la cartella di installazione, non facciamoci caso e continuiamo tranquillamente. La finestra seguente invita a scegliere il tipo di installazione:
Possiamo scegliere la prima o la seconda opzione indifferentemente in quanto entrambe hanno il supporto per gli MSP430. Nella finestra successiva lasciamo le impostazioni di default e attendiamo che l’installazione prosegua da sola fino al pulsante “Finish”.
Ora colleghiamo il Launchpad al PC. Non spostiamo nessun jumper, lasciamo tutto così come è uscito dalla confezione, vedremo poi a cosa servono. Non c’è bisogno di drivers in quanto sono stati installati dal CCS.
In ogni caso i driver necessari sono quelli richiesti dal chip TUSB3410, che eventualmente potete scaricare da questa pagina: http://www.ti.com/tool/tusbwinvcp
Il Launchpad viene riconosciuto come una periferica USB composita standard. Attendiamo che Windows finisca di installare il Launchpad (verranno riconosciute due periferiche). I due led LED1 e LED2 cominceranno a lampeggiare alternativamente dato che c’è un programma precaricato sull’ MSP430G2231 montato di default sulla scheda.
Ora sul desktop abbiamo un’icona “Code Composer Studio v4 Core Edition” sul desktop, clicchiamola. Viene chiesto di selezionare una cartella da utilizzare come spazio di lavoro. Possiamo anche lasciare l’impostazione di default.
Ci troveremo quindi la finestra home del CCS: partiamo subito col far lampeggiare un LED!
Avviamo un nuovo progetto dal menù File -> New -> CCS Project
Diamo un nome al progetto, io l’ho chiamato semplicemente “LED”:
Premiamo quindi il pulsante “next”, nella finestra successiva possiamo lasciare le impostazioni di default:
Segue una finestra in cui viene richiesto se referenziare eventuali progetti già esistenti:
Anche qui possiamo passare avanti. Nella finestra successiva dobbiamo scegliere l’MSP430 montato sul nostro Launchpad, nel mio caso ho quello montato di default sulla scheda, un MSP430G2231, per cui nella casella “Device Variant” scelgo MSP430Gxxx Family e quindi affianco MSP430G2231:
Lasciamo intatte le altre impostazioni e premiamo il pulsante Finish.
Viene quindi creata una cartella di progetto nel workspace:
Vedete che questa cartella contiene un’ulteriore cartella “Includes” ad indicare che tutti i files che si trovano li dentro è possibile includerli semplicemente con un #include “xxxx” senza dover digitare tutto il percorso. I file che si trovano li dentro sono molto importanti: vi sono gli header degli MSP430 e varie librerie.
Vedo che nella cartella dell’IDE c’è già qualche esempio pronto quindi scelgo di includere un file già esistente. Selezioniamo la cartella “Includes” del progetto e clicchiamo su Project -> Add Files to Active project:
Navighiamo nella cartella
C:\Program Files\Texas Instruments\ccsv4\msp430\examples\msp430x2xx\C-source |
e selezioniamo il file
msp430x2xx_fet_1.c |
e quindi clicchiamo “apri”. Il file viene aggiunto al progetto:
Facciamo doppio click sul nome del file msp430x2xx_fet_1.c per aprirlo nell’editor:
Alla riga 21 dobbiamo cambiare il file header per poterlo adattare all’MSP430 sulla nostra scheda, per cui la riga 21 nel mio caso diventa:
21 | #include "msp430g2231.h" |
In alternativa possiamo anche includere “msp430.h”, che includerà l’header giusto in base all’MSP selezionato per il progetto.
Premiamo quindi il pulsante con su raffigurato il bacarozzo (?) verde:
Verrà chiesto di salvare il file:
Dopo aver premuto Yes comincia la compilazione, attendiamo un po’ e il programma viene caricato sull’MSP430. I due led smettono di lampeggiare e si spengono. L’IDE cambia aspetto e in basso viene visualizzata una finestra di consolle che illustra i quantitativi di memoria utilizzati:
Per far partire il programma possiamo staccare e riattaccare la porta USB oppure, meglio, semplicemente premere il pulsante RUN affianco alla finestra di debug:
Per ritornare alla finestra di progettazione possiamo premere il pulsante Terminate All:
Il programma ovviamente continuerà a girare anche se terminiamo il debug.
Analizziamo il programma
Chi viene dai PIC noterà subito che non abbiamo word di configurazione, eh no, qui non serve.
Riga 25
25 | WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer |
WDTCTL è il registro di controllo del Watchdog timer (locazione 0x0120). Sappiamo che Il Watchdog timer è un timer che, se abilitato, permette il reset del programma se per caso questi si blocca. Sugli MSP430 può anche essere configurato affinchè generi un interrupt ad intervalli prestabiliti (forte!).
La spiegazione di come operano i registri sugli MSP430 non si trova sul datasheet del singolo componente ma in un documento relativo alla famiglia di appartenenza (come abbiamo visto accade per i pic a 16 bit). Nel mio caso vado sulla pagina dedicata all’MSP430G2231 e scorrendo verso il basso è possibile trovare il datasheet, molti esempi di utilizzo interessanti e quindi un documento chiamato MSP430x2xx Family User’s Guide (Rev. H). Leggendo questo documento pssiamo quindi vedere che WDTPW è in realtà una password che permette di eseguire la scrittura in questo registro e vale 0x5A00. Questo define si trova a riga 568 del file header incluso:
C:\Program Files\Texas Instruments\ccsv4\msp430\include\msp430g2231.h |
WDTHOLD vale 0x0080 (riga 566). Quindi in pratica stiamo eseguendo l’operazione:
WDTCTL = 0x5A00 + 0x0080 = 0x5A80 |
In cui gli 8 bit alti (0x5A) rappresentano la password che ci consente di scrivere nel registro e 0x80 (0b10000000) mette in pratica a 1 il bit 7 (WDTHOLD) del registro WDTCTL consentendo quindi di bloccare il watchdog timer.
Riga 26
26 | P1DIR |= 0x01; |
Sugli MSP430 i banchi di porte vengono identificati come P1, P2 ecc. In particolare l’MSP430G2231 ha solo il banco P1. I pin dei banchi vengono identificati con un numero progressivo dopo un punto che segue la denominazione del banco (es.: P1.3 è la porta n°3 -la quarta- del banco P1). Ogni banco di porte ha i seguenti registri:
Nome registro | Funzione |
---|---|
PxREN | Abilitazione resistenze di pullup o pulldown sul banco Px. Qui la resistenza viene solo abilitata o disabilitata. La funzione pullup o pulldown viene eseguita dal registro PxOUT |
PxSEL | Sceglie se i pin del banco Px devono funzionare come normali I/O o come I/O associati alle periferiche |
PxIE | Abilitazione interrupt |
PxIES | Scelta fronte di salita o di discesa per l'interrupt |
PxIFG | Flag di interrupt |
PxDIR | Funzionamento dei pin come ingresso o come uscita. 0=pin come ingresso, 1=pin come uscita. Per chi viene dai picmicro: fate attenzione perchè qui la logica è invertita rispetto ai picmicro |
PxOUT | Imposta il livello di un pin configurato come uscita (1=livello alto, 0=livello basso). Se sono abilitate le resistenze di pullup/down, 1 abilita la resistenza di pullup e 0 la resistenza di pulldown |
PxIN | Registro in lettura. Permette di conoscere lo stato di un pin configurato come ingresso (0=livello basso, 1=livello alto) |
L’istruzione a riga 26 sappiamo che si può anche scrivere come:
P1DIR = P1DIR | 0x01; |
Il che serve ad impostare la porta P1.0 (porta zero del banco P1) come uscita lasciando invariata l’impostazione delle altre porte.
Fate riferimento a questo articolo per sapere come si eseguono le operazioni sui bit
Riga 28
28 | for (;;) |
Sappiamo che qui inizia il ciclo continuo, nel quale risiede il programma che deve essere eseguito. Mettere un ciclo continuo serve ad evitare il reset del processore che non saprebbe cosa fare altrimenti se il programma terminasse. Avremmo anche potuto scrivere il classico while(1).
Riga 32
32 | P1OUT ^= 0x01; |
Dovrebbe essere chiaro che questa istruzione esegue il toggle (inverte lo stato) del livello di uscita sulla porta P1.0, causando quindi il lampeggio del led.
Riga 34
34 35 36 | i = 10000; // SW Delay do i--; while (i != 0); |
Qui viene eseguito un ritardo software. Viene impostata la variabile i al valore 10mila, segue quindi un ciclo do…while in cui la variabile i viene decrementata di uno (i–) fino a che non raggiunge il valore di 0.
Facendo partire il programma, sulla porta P1.0 vediamo che l’onda quadra ha un periodo di 220mS:
Per cui un ciclo completo dura 110mS.
Alla prossima sugli MSP430, fatemi sapere se vi hanno interessato, e non perdete d’occhio il sito di Mauro perchè ne vedremo delle belle ;)
Nel frattempo vi consiglio di visitare questo link per approfondire: c’è tutto quello di cui si ha bisogno.