domenica , 21 Luglio 2019
iten
Home » Elettronica » MCU programming: come cominciare

MCU programming: come cominciare

Dopo la pubblicazione del mio articolo precedente, ho ricevuto alcune richieste in merito a consigli su quale percorso seguire per avventurarsi nel mondo dei microcontroller, la programmazione firmware e l'interfacciamento con componenti elettroniche. Diciamo subito che la cosa non è facile, specie se non si ha avuto la possibilità in precedenza di poter sperimentare con tematiche di questo tipo e se, soprattutto, magari avete avuto la sfortuna all'Università di studiare per l'esame di elettronica il moto degli elettroni, le equazioni di Schrödinger, il principio di esclusione di Pauli e tutte queste amenità senza che vi abbiano mai spiegato, e dico mai, poi praticamente e concretamente quei concetti come si applicano. Tuttavia, mai scoraggiarsi, soprattutto considerando che oggi come oggi grazie ad internet si ha la possibilità di accedere a una miniera di informazioni in tempo zero, partecipare a community, porre domande in giro.

Diciamo subito che condizione necessaria per intraprendere questo viaggio è avere un minimo di rudimenti di architettura degli elaboratori: un po' di basi di circuiti logici, come è strutturato un processore, programmazione assembler, ecc, serve. In assenza di conoscenze di questo tipo, vi esorto a farvi una rapida lettura su qualche testo di architettura degli elaboratori. Se ne trovano diversi in giro: io all'università ho studiato sul libro "Introduzione all'architettura degli elaboratori", di Daniel P. Bovet, edito da Zanichelli.

In alternativa potete scegliere un qualunque altro testo. Non è fondamentale entrare proprio nel dettaglio delle moderne architetture, però conoscere delle cose vi risparmierà tempo e soprattutto mal di testa.

Fatta questa premessa, passiamo poi agli aspetti più concreti. Innanzitutto, per cominciare vi dovete scegliere un'architettura di microcontroller. Ne esistono una vera e proprio caterva, anche se spesso architetture in apparenza differenti poi sono in realtà molto simili. Non ne parliamo poi di produttori: se solo ci limitiamo ai principali, c'è ne sono almeno una decina da citare (Atmel, Microchip, Silicon Lab, ecc). Diciamo anche che forse per fini autodidattici, la piattaforma più completa è rappresentata da un famoso prodotto 100% Open e per giunta Made in Italy: Arduino. È anche vero, però, che su puntate a "ricadute di mercato", forse scegliere architetture più commerciali è meglio.

Per quanto mi riguarda, dato che i chip della famiglia CC1110-F32 di Texas Instruments hanno un core basato sul celebre (e ancora "leader di mercato") 8051 di Intel (o meglio, Intel MCS51), ho dovuto concentrare gli sforzi su questa piattaforma, e i riferimenti che vi darò sono prevalentemente basati su di essa.
Scelta l'architettura, dovete comprarvi uno starter kit, detto anche developer kit, che in genere è formato dal MCU che scegliete (in genere oggi ad archiettura SMD) montato su una board che vi permette di poter facilmente interagire con il chip sia dal punto di vista fisico che di programmazione. Queste board come minimo forniscono un'interfaccia RS-232, ma alcune recenti anche una USB o una Ethernet, la piedinatura completa del chip su connettori facilmente manipolabili, una porta di debugging (basata sulla JTAG o altre interfacce proprietarie). Spesso, molte di queste board hanno anche una parte di prototipizzazione per poter fare esperimenti con altri componenti. Per quanto riguarda poi il kit da scegliere, anche qui è una vera e propria giungla. Si va da prodotti semi-didattici a finire a prodotti per ambiti industriali, e nell'ambito dello stesso produttore siate preparati a dover scegliere fra una decina di diversi modelli di MCU e di kit di sviluppo. Io ho tagliato la testa al toro, ed ho scelto per cominciare uno dei tanti kit base prodotti da Silicon Lab, nello specifico uno della famiglia C8051F31X, il C8051F310, che vedete fotografato si seguito.

 

Il kit si può acquistare su DigiKey ad un prezzo veramente irrisorio (circa 56 euro) e vi arriva in circa 3gg lavorativi dagli USA, ed è completo di tutto quello che vi serve per cominciare (debugger, alimentatore, IDE e  compilatori free, documentazione, esempi, area di prototipizzazione). Purtroppo devo anche darvi una brutta notizia: tutto quello che gira attorno alla programmazione MCU implica l'esistenza di Windows. Mettetevi l'animo in pace ma purtroppo è così. Per quanto mi riguarda, un'istanza di Parallels ad hoc con Windows mi ha permesso di poter usare comunque i miei Mac senza alcun problema (occhio che per funzionare bene, il debugger di Silicon Lab richiede Parallels 5).

Se per voi il budget non è un problema e siete interessati a lavorare direttamente con MCU con funzionalità Wireless come il CC1110-F32, allora potete acquistare un kit già con queste funzionalità. Silicon ne ha un paio a catalogo e non costano molto, ma date uno sguardo a Microchip. Quello Texas è veramente qualcosa di formidabile, ed esce completo di mouduli per sviluppare a 315, 433 e 868 Mhz, oppure c'è il kit a 2.4Ghz. Il kit comprende due board completissime, e i moduli necessari, mentre tutta la parte software si scarica on-line. Purtroppo per la parte IDE Texas si affida a IAR, che è a pagamento, ma per qualunque cosa bussate pure ;).

 

Gli unici due problemi sono: il costo, 650$ direttamente dal sito Texas; il fatto che manca una vera e propria area di prototipizzazione. Ma per il resto, quanto di più completo esista. Un consiglio? Se non avete requisiti specifici e immediata voglia di partire con la parte di RF, allora cominciate con un kit più economico con il Silicon di cui sopra.

Passiamo ora alla parte letteraria.

Ci sono dei libri che sono fondamentali e molto istruttivi. Innanzitutto, è importante farsi le ossa con l'architettura dell'8051. Un testo che io ho trovato ottimo è The 8051 Microcontroller and Embedded Systems, di Muhammad Ali Mazidi. È un libro che illustra l'architettura del microcontroller, dalla parte fisica fino alla programmazione in C, passando per quella in Assembler. Illustra, inoltre, varie tecniche di programmazione per interfacciarsi con l'hardware esterno, i timer, la gestione degli interrupt, ecc. Nei capitoli finali, inoltre, c'è anche una parte dedicata all'uso dei convertitori analogico/digitali, di DAC, di sensori, oltre che ci sono esempi per interfacciare il microcontroller con altre componenti esterne come motori DC, stepper e altro. Infine, questo libro può anche rappresentare un ottimo libro di introduzione proprio all'architettura degli elaboratori, ovviamente focalizzato sulle architetture Harvard quali i microcontroller.
Un libro veramente molto utile è Embedded C di Michael J. Pont. È un libro che focalizza l'attenzione esclusivamente sulla programmazione C dell'8051, e astrae quasi totalmente da aspetti connessi con l'hardware (è un obiettivo dichiarato del libro), ma certamente è un ottimo punto per cominciare a programmare con queste architetture. Si comincia con cose molto semplici, come piccoli esempi per interfacciarsi con semplici led o interruttori di varia natura, e si finisce man mano con il gettare le basi di un piccolo sistema operativo real-time. Vengono, quindi, illustrati molti aspetti connessi con i timer di sistema, gli oscillatori esterni, il clock, ecc. I concetti espressi nella maggior parte del libro sono una vera e propria miniera formativa, che gettano luce su molti aspetti che oggi come oggi sono totalmente nascosti dai sistemi operativi general purpose. Si finisce poi con trattare aspetti connessi con la gestione delle UART (tipo RS-232), e con la modellazione software di un sistema di sorveglianza.
Un libro da non perdere, secondo me.
Sempre dallo stesso autore del libro di prima, c'è un vero e proprio catalogo di pattern per la programmazione con microcontroller 8051. Patterns for Time-Triggered Embedded Systems è addirittura un libro liberamente scaricabile on-line, con oltre 1000 pagine di esempi, casi d'uso e software. In realtà la parte software è globalmente quella presente nel libro Embedded C, e forse pecca anche un pelo di "didattica". Invece, questo libro è il completamento di quello precedente per quanto riguarda la parte hardware, con esempi, consigli di configurazioni, soluzioni a problematiche tipiche di integrazione. Un ottimo testo di riferimento, soprattutto se si considera che è gratis.

 

Veniamo, infine, alla parte on-line. Googlando troverete una vera e propria miniera di informazioni sparse per la rete. Ci sono, inoltre, diverse community attive, dove troverete materiale didattico, esempi finiti, oltre che spesso e volentieri forum e chat con cui interagire con le persone. Il più completo che ho trovato finora è www.8051projects.net, ricchissimo di tutorial oltre che con un forum dove ci sono molti esperti che sapranno eventualmente darvi consigli. Un altro sito altrettanto buono è www.8052.com (oggi si parla di 8051 per indicare in realtà derivati dell'8052). Anche qui troverete materiale e spunti per applicazioni. Per quanto riguarda la parte Texas Instruments, la community sul sito di Texas è molto ricca di esempi, documentazione, librerie. Inoltre, nel forum spesso e volentieri troverete risposte direttamente dai progettisti Texas: penso sia la fonte più autorevole 😉

Che dire: penso di aver detto tutto. Giusto per completezza, se non ne avete una, pensate di fare l'acquisto di una stazione saldante con controllo di temperatura. Su ebay ne trovate molte intorno ai 50€: sono degli ottimi prodotti tutto sommato, di cui avrete sicuramente bisogno quando vorrete fare delle prove. Su Youtube poi si trovano decine di video di esempio su come saldare al meglio: addirittura c'è chi salda chip SMD, e presto ci proverò anche io. Per qualunque cosa, non esitate a chiedere 🙂


Check Also

Compilare micropython per una scheda STM32Nucleo-F4

Chi mi conosce sa che il mio linguaggio di programmazione preferito è Python. Ho scritto …

10 comments

  1. una bella gatta da pelare!! mi sono messo in testa di costruire la cabina e chiudere quanto vedi nel sito e poi porla su un sistema a tre assi per il " full motion " - il problema : una scheda di interfaccia con flight simulator che possa gestire le variabili yaw pitch and roll e darmi un segnale da inviare algi encoder degli attuatori lineari che interagiscono con i tre assi. scusa se non mi sono spiegato bene ma sono certo che hai intuito il problema. che faccio ???  u caro saluto lorenzo

  2. Ho lavorato per un periodo con Zigbee (piattaforma XBow MicaZ), ma non è attualmente utilizzabile sia per i costi sia per la difficoltà di implementazione.
    Il kit che suggerisci te è piuttosto costoso, per un utilizzo hobbystico non è proponibile, meglio utlizzare Arduino con una board aggiuntiva.

  3. Ciao Lorenzo,
    la piattaforma XBow come dici tu è proibitiva, sia per il costo dei moduli sia dell'intera soluzione. Diciamo che è molto diffusa nell'ambito scientifico. Per quanto riguarda lo Zigbee, ora anche Texas si è lanciata con i suoi kit e le sue soluzioni, e il costo di mercato dello Zigbee sta scendendo verticalmente.
    Per quanto riguarda il kit Texas, si quello full è impegnativo per un uso hobbystico, anche se esistono dei cloni "cinesi" molto più a buon mercato. Per quanto riguarda il discorso Arduino, indubbiamente è la piattaforma più completa e diffusa nell'ambito Hobbystico, ma se parliamo di applicazioni che devono essere industrializzate, a mio modo di vedere, bisogna andare su altro. Soprattutto se cerchi soluzioni RF.

  4. Nel sito della Olimex si fa riferimento a Te,su delle modifiche apportate al tcpstack della scheda RS232-Lan con Pic18f67j60.La mia domanda è:Questa scheda riceve dalla Lan e trasmette nella seriale e viceversa o la seriale serve solo per programmarla?
    Saluti.

    • Allora, quella scheda è dotata di una seriale ma l'uso di quella porta dipende da cosa gli fai fare tu. Non è un convertitore RS-232/LAN per capirci. Nel progetto di esempio (Demo App) l'uso della seriale è riservato all'impostazione dei parametri di configurazione (indirizzo IP, DNS, ecc).
      Se ti serve un convertitore seriale/LAN ti consiglio gli ottimi prodotti di EZ-Tcp.

      P.S: ovviamente realizzare un convertitore RS-232/LAN con quella scheda sarebbe molto semplice, visto che gran parte del software necessario è già scritto per la demo TCP di Microchip. Ma mai reinventare la ruota 😉

  5. Salve, non mi è chiara ancora una cosa pur avendo girato in lungo e in largo internet e cioé: se tutti i microcontrollori basati sul core 8051 sono pressocché simili, e magari hanno anche la medesima piedinatura, perché i developer kit trovati in vendita sono spesso presentati come prodotti per una specifica marca, ad esempio ATMEL? (mi riferisco ad esempio ai kit di mikroelektronika). Questi sono compatibili con qualunque processore derivato con la stessa piedinatura e di qualunque marca, ad esempio Philips P87C54? Grazie in anticipo per la risposta.

    • Ciao,
      scusa per il ritardo. Quando si parla di "core" 8051 (che poi in realtà è l'evoluzione, ossia l'8052), si intende che il micro condivide lo stesso set di istruzioni e lo stesso modello di esecuzione dello storico 8051. In teoria, questo significa che un programma scritto in assembler per un dato micro 8051 può girare su un altro micro con stesso core. A cambiare sarà solo la parte di I/O e periferiche dedicate che ogni micro si organizza a suo modo (numero di pin di I/O, timer, ADC, ecc). Questo è molto importante per chi ha già scritto molte librerie, magari in assembler, e vuole riutilizzarle su altri micro. Tutto questo però è, come sempre in informatica, teorico. Purtroppo, peculiarità di alcune piattaforme, modelli organizzativi diversi della memoria, compilatori usati, ecc, possono ridurre pesantemente la portabilità di codice da un micro ad un altro, anche se basati sullo stesso core.

Rispondi a VItaliano Iovine Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.