Texas Instruments Connected Launchpad Tiva C Series

Reduce dal Maker Faire Rome 2014, al quale come molti di voi sanno, ho partecipato col mio robot OR10n insieme al gruppo di Officine Robotiche (anzi ne approfitto per ringraziare tutti quelli che sono venuti a trovarmi!), ho cominciato a smanettare un po’ con le novità presentate in fiera che siamo riusciti duramente a conquistarci (e ne approfitto per dare un abbraccio anche gli amici che mi hanno accompagnato nella faticosa caccia al gadget: Marpin e Vegekou).

Illustro in questo articolo una delle ultime schede di sviluppo della Texas Instruments: il Tiva C Series TM4C1294 Connected LaunchPad, codice EK-TM4C1294XL, semplicemente Connected Launchpad per gli amici.

Cos’ha di particolare questo Launchpad?

  • Il costo, il vero punto forte di tutte le schede di sviluppo della TI: soltanto 20 dollari!
  • Le caratteristiche esagerate, che non ti aspetti mai da un prodotto così economico:
    • MCU ARM Cortex-M4 a 32bit, 120MHz: TM4C1294NCPDT
    • 1MB memoria Flash
    • 256KB SRAM
    • 6KB EEPROM
    • 10/100 Ethernet MAC+PHY integrato
    • USB OTG
    • Possibilità di innestare due booster-pack contemporaneamente (le schede di espansione dei Launchpad)
    • troppo altro che non mi va di elencare!
  • Lo si programma facilmente con Energia, che è un Fork dell’IDE di Arduino. Quindi se venite da Arduino, non troverete nessuna difficoltà. Se invece non avete mai usato Arduino et Similia, potrebbe essere il momento buono per cominciare.

Tutte le informazioni su questa scheda, e sul suo acquisto, sono disponibili sulla pagina ufficiale: http://www.ti.com/tool/ek-tm4c1294xl

Abbiamo già visto i Launchpad in alcuni articoli precedenti. Questo Connected Launchpad è interessante proprio per il fatto di avere un modulo Ethernet on-board, già funzionante senza settare nulla, appena presa la scheda dalla scatola (nella quale è incluso anche un fighissimo cavo Ethernet retrattile!).

Sulla scheda, in realtà, ci sono due microcontrollori: un TIVA TM4C123G che svolge le funzioni di programmatore e debugger on-board e un TM4C1294 che è il microcontroller vero e proprio che andremo a programmare. Come “interfacce utente” utilizzabili da subito sono presenti 4 led verdi (identificati con D1, D2, D3, D4) e due pulsanti (USER_SW1 e USER_SW2). Il connettore Ethernet purtroppo non ha i led che segnalano le attività, ma per 20 dollari penso ne possiamo fare anche a meno.

Altra piccola mancanza è il connettore di alimentazione sulla scheda (e quindi la relativa mancanza di regolatori di tensione, altra cosa che fa scendere il prezzo della scheda). Possiamo alimentare il nostro launchpad o dal connettore USB di debug/programmazione (condizione di default – connettore USB posto sulla destra), o dal connettore USB OTG (quello posto a sinistra, sotto il connettore Ethernet) o da un Booster Pack. La sorgente di alimentazione viene scelta tramite un jumper identificato come “POWER SELECT / JP1”.

Questa scheda può essere programmata utilizzando sistemi diversi. Il più conosciuto è sicuramente il Code Composer Studio, per il quale c’è qui un esauriente tutorial su come installare tutto e caricare il primo programma, utilizzando anche i software packages che potete scaricare da questa pagina. Tuttavia in questo articolo ho preferito utilizzare Energia per essere operativo da subito con il modulo Ethernet.

Il tutorial verterà quindi sull’installazione dei software sul pc per poterla utilizzare e su un paio di sketch.

Step 1 – Installazione drivers

Andiamo alla pagina della Texas Instruments dedicata ai drivers Stellaris ICDI (http://www.ti.com/tool/stellaris_icdi_drivers) e premiamo sul pulsante Download affianco alla scritta “Stellaris® ICDI Drivers”. Scaricheremo un file .zip (attualmente è spmc016.zip) ed estraiamolo. Otterremo una cartella “stellaris_icdi_drivers” che contiene dei files .inf e varie dll divise in cartelle.

Colleghiamo il Lauchpad al PC utilizzando la porta USB posta sulla destra, quella con la scritta “DEBUG”. Attendiamo che Windows termini il riconoscimento dell’Hardware, che non andrà a buon fine.

Qui faccio riferimento a Windows 7, se avete Windows XP o Windows 8, le istruzioni per proseguire si trovano nel PDF “Stellaris Drivers Installation Guide” che potete trovare nella stessa pagina del Driver. Ad ogni modo si tratta di passaggi di base che generalmente facciamo almeno una volta al mese!

Da Start -> Pannello di controllo, andiamo in “Gestione Dispositivi”, visualizzeremo 3 dispositivi, con l’icona del punto esclamativo, chiamati “In-Circuit Debug Interface”:

Andiamo su uno qualsiasi dei 3, premiamo il tasto destro del mouse e selezioniamo “Proprietà”. Dalla finestra che compare premiamo il pulsante “Aggiorna Driver”:

Scegliamo quindi l’opzione “Cerca il software del driver nel computer”:

Premiamo quindi il pulsante “Sfoglia” e puntiamo alla cartella stellaris_icdi_drivers avendo cura di tenere spuntato il check-box “Includi sottocartelle”:

Premere quindi il pulsante Avanti. Si presenterà la classica finestra di protezione:

Premiamo tranquillamente “Installa il software del driver” ed attendere un minuto o poco più che l’installazione termini:

Premere quindi Ok, e quindi Chiudi nella finestra delle proprietà del driver. Veniamo riportati nella finestra di gestione dispositivi in cui ora compare una nuova porta COM virtuale (annotiamoci il numero nel caso in cui avessimo più porte COM sul nostro PC, giusto per ricordarcelo quando nell’IDE dovremo selezionare la porta COM su cui è collegato il launchpad):

Rimangono quindi altri due dispositivi con il punto esclamativo. Ripetiamo tutte le operazioni fatte fin’ora, allo stesso identico modo fino a che tutti i dispositivi sono stati correttamente installati. (tasto destro -> Proprietà -> Aggiorna Driver -> Cerca il driver nel computer (qui ora ci sarà già scritto il percorso) -> Avanti -> Installare il software del driver).

Nella finestra gestione dispositivi avremo quindi 3 nuovi elementi: la porta COM vista prima, uno “Stellaris ICDI FDU Interface” e uno “Stellaris ICDI JTAG/SWD Interface”, entrambi sotto la voce “Stellaris In-Circuit Debug Interface”:

Step 2 – Energia

Energia è un IDE che permette di programmare le schede di sviluppo della Texas Instruments in un ambiente simile a quello di Arduino e con lo stesso stile di programmazione. Nato per gli MSP430, si è esteso anche alle schede di sviluppo di fascia media e alta (Stellaris e TIVA C) e supporta numerosi Booster-Pack. In realtà Energia non è di proprietà della Texas Instruments nè mantenuto o gestito da essa. E’ stato sviluppato da Robert Wessels, della Texas Instruments, durante il suo tempo libero ed è supportato da una vasta comunità di appassionati tra cui la comunità di 43Oh in primis.

L’ultima versione di Energia, nel momento in cui scrivo, è la 13, e può essere scaricata gratuitamente dalla pagina ufficiale: http://energia.nu/download/

Prendendo ad esempio la versione per Windows, si tratta di un file zip già pronto all’uso. Non dobbiamo installare nulla. Una volta scompattato in una cartella a piacere (energia-0101E0013), dobbiamo soltanto lanciare l’eseguibile (energia.exe) e fare i primi settaggi, gli stessi che si fanno con Arduino: porta COM e tipo di scheda collegata.

Supponendo di avere già la scheda collegata al PC con il cavetto micro-usb in dotazione, non dobbiamo fare altro che selezionare la porta COM creata dall’installazione della scheda andando in Tools -> Serial Port:

E quindi selezionare la scheda target dal menù Board, che nel nostro caso è “LaunchPad (Tiva C) w/tm4c129 (120MHz):

Step 3 – Led Lampeggiante

Come per Arduino, possiamo cercare il primo esempio da caricare (l’onnipresente led lampeggiante) in File -> Examples -> Basic -> Blink

Se non avete mai utilizzato Arduino, sappiate che di base avete sempre due funzioni: una funzione Setup, nella quale generalmente si impostano le funzioni dei pin e qualsiasi altra cosa da eseguire una sola volta all’avvio, e una funzione Loop, che contiene il codice da eseguire di continuo (come nel while(1) sui picmicro per intenderci).

Primo appunto da fare: nel sorgente c’è un commento: Most launchpads have a red LED. In questo caso ciò non è vero dato che ci sono 4 led ma tutti verdi! (ma… c’è scritto “most launchpads”, ovvero: la maggior parte dei launchpads, quindi non tutti pertanto… li perdoniamo!).

Basta soltanto premere il pulsante “Upload” (il secondo pulsante, quello con la freccia verso destra) per compilare lo sketch e caricarlo sulla scheda.

Ho sbattuto un po’ nel cercare dove fossero i defines per led, pulsanti e porte (come si chiamano gli altri 3 led? e i pulsanti? e gli I/O? ma poi perchè devo proprio chiamarlo RED_LED se rosso non è?). In un primo momento mi sono affidato allo schema delle porte presente sul sito di Energia a questo link: http://energia.nu/img/EK-TM4C1294XL.jpg

Nello schema vediamo che i 4 led vengono chiamati LED0, LED1 ecc ecc. e possiamo anche vedere che i led 3 e 4 (collegati alle porte PF0 e PF4) possono anche essere utilizzati come led di attività per il modulo Ethernet (ah! Ma allora non mancano ;) ). Scrivo quindi “LED1” nello sketch per cercare di accendere appunto il LED identificato come D1 sulla scheda… ma ottengo un errore di nome non definito…

E qui.. un pochetto mi arrabbio, ma non demordo, e mi focalizzo su questa nota scritta nel codice:

//see pins_energia.h for more LED definitions

chiaramente faccio una ricerca per il file pins_energia.h e ne trovo a bizzeffe fino a scoprire che quello giusto per la mia scheda è contenuto nel percorso:

C:\energia-0101E0013\hardware\lm4f\variants\launchpad_129

e finalmente scopro come chiamare Led e Pulsanti, e che il primo led (D1) l’hanno chiamato “RED_LED” (anche se verde) per mantenere la compatibilità del codice con gli altri Launchpad.

// energia pin definition end
 
#define D1_LED         PN_1
#define RED_LED        PN_1
#define D2_LED         PN_0
#define GREEN_LED      PN_0
#define D3_LED         PF_4
#define D4_LED         PF_0
 
#define ACTIVITY_LED      GPIO_PF4_EN0LED1
#define ACTIVITY_LED_BASE GPIO_PORTF_BASE
#define ACTIVITY_LED_PIN  GPIO_PIN_4
#define LINK_LED          GPIO_PF0_EN0LED0
#define LINK_LED_BASE     GPIO_PORTF_BASE
#define LINK_LED_PIN      GPIO_PIN_0
 
// LEDs end
 
// pushbuttons
#define PUSH1      PJ_0
#define PUSH2      PJ_1
#define TEMPSENSOR 0
 
#define USR_SW1    PJ_0
#define USR_SW2    PJ_1
// pushbuttons end

Ok ora so che posso chiamare i led come D1_LED, D2_LED ecc e utilizzare i pulsanti con il nome scritto anche sulla serigrafia della scheda: USR_SW1 e 2. Preso dall’entusiasmo ho quindi fatto uno sketch per farli lampeggiare in sequenza tutti e 4 ( Energia - Blink 4 led su TIVA C (385 download) ).

Ora passiamo a qualcosa di più serio…

Step 4 – La libreria Ethernet

Andremo a caricare lo sketch di esempio Ethernet Webserver, che permette di controllare lo stato dei pulsanti e accendere/spegnere i led sulla scheda tramite collegamento sulla rete Lan. Ovviamente potete fare questo se a casa avete una rete LAN o un router con una porta LAN disponibile.

Da Energia andiamo in File -> Examples -> Ethernet -> EthernetWebServer

Nei commenti c’è scritto che lo sketch è da utilizzare con il modulo Wi-Fi BoosterPack, ma tranquilli che funziona anche con il modulo Ethernet incluso sulla scheda.

La parte di codice che dobbiamo modificare è questa:

Dobbiamo cambiare gli indirizzi IP in maniera tale che coincidano con quelli della nostra rete. La mia rete, ad esempio, come la maggior parte, ha tutti indirizzi che iniziano con “192.168.0” e il router, che funge da gateway, ha indirizzo 192.168.0.1.

come DNS e GW metteremo quindi l’indirizzo del router, come IP metteremo un indirizzo IP non utilizzato da nessun dispositivo della nostra rete, e come subnet mask lasciamo 255,255,255,0.

Provvederemo quindi a commentare la riga “Ethernet.begin(0)” e decommentare la riga successiva. Questa parte a me si presenta quindi in questo modo:

Premiamo quindi il pulsante di upload.

Maledizione… cosa succede qui?

Otteniamo un noioso errore “redefinition of ‘const IPAddress INADDR_NONE'”. Il problema è già stato segnalato su Github e la prossima release di Energia non avrà questo problema. Per correggerlo basta eliminare una riga nel file Ethernet.h. Andate in

C:\energia-0101E0013\hardware\lm4f\libraries\Ethernet

aprite il file Ethernet.h ed eliminate (o commentate) la riga in cui c’è scritto:

12
const IPAddress INADDR_NONE(0,0,0,0);

(come anche specificato su github)

Caricate il codice sul launchpad. Ora staccatelo dal pc, avvicinatevi al vostro router o ad una presa di rete, alimentate il launchpad con un alimentatore USB e collegatelo alla rete con il cavo in dotazione.

Da un PC connesso alla rete della vostra casa, aprite il vostro browser preferito e digitate l’indirizzo IP che avete assegnato alla scheda nel codice (192.168.0.8 nel mio esempio). Vi si presenterà la pagina di default caricata sul launchpad attraverso il codice:

Clicchiamo sul link “Click Here” per visualizzare quindi la pagina in cui possiamo accendere/spegnere i led sulla scheda e visualizzare lo stato dei pulsanti:

Contemporaneamente possiamo anche visualizzare le attività hardware sulla scheda collegandola al PC con l’USB e utilizzando il monitor seriale (tools -> Serial Monitor) e impostandolo a 115200 bps.

Chiaramente immaginate di utilizzare degli I/O al posto dei led per controllare relè, fotoaccoppiatori o altro e quindi accendere/spegnere le luci del cortile o aprire il cancello di casa attraverso un’interfaccia web utilizzabile anche dal pc.

Buon Divertimento!

Se questo articolo ti è piaciuto, condividilo su un social:
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)