Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

11
voti

Iniziare con i Microcontrollori Microchip

Indice

Abstract

Questo articolo non vuole essere una trattazione teorica completa del mondo dei microcontrollori Microchip(d'ora in poi PIC), ma semplicemente una piccola guida di riferimento per chi inizia ora o ha iniziato da poco. Per capire come valutare, cioè in base a quali parametri, scegliere una soluzione piuttosto che un'altra. Ci chiederemo perché spesso si preferisce iniziare con Arduino & company piuttosto che con una demoboard/scheda di sviluppo(prodotta dalla Casa Costruttrice) che costa la metà(ed ha molte più periferiche, più potenza di calcolo, maggior numero di I/O) e proveremo a spiegarne il perché.

Analisi dei propri obbiettivi

Prima di procurarci l'occorrente necessario per scrivere il nostro programma, bisogna analizzare i nostri obbiettivi. Dobbiamo chiederci: "Io cosa voglio fare con questi PIC?"

Possiamo rispondere in molti modi diversi, ma limitiamoci ad analizzare il caso in cui la risposta sia: "Utilizzarli per hobby, ne ho sentito parlare bene da un amico/ne ho letto su una rivista(o sito web) e voglio imparare ad utilizzarli", che è la risposta più comune tra chi inizia. Nel caso si voglia utilizzarli per lavoro allora il discorso si complica un pò di più, però a noi non interessa molto per ora, stiamo infatti iniziando da poco e direi che non è proprio il caso di preoccuparci di queste cose!
Dunque, abbiamo capito che il nostro è un hobby, che abbiamo un'oretta o due da dedicare a questo nuovo mondo e ne siamo affascinati, direi che ora siamo pronti per capire cosa serve per iniziare!

Le basi

Prima di tutto è fondamentale avere "pazienza, una discreta conoscenza dell'inglese e tanta voglia di imparare, sia dai propri errori, sia da documenti in inglese(datasheet, libri e application notes)"

Senza le basi, non si va da nessuna parte, in nessuna materia. Questo è un dato di fatto, innegabile ed evidente. Allora come facciamo?
Chi non è uscito da un istituto tecnico/professionale non può praticare quest'hobby?
Ovviamente può, ma prima deve conoscere qualcosa di elettronica di base, come i concetti di tensione, corrente, resistenza, la differenza tra valori analogici e valori digitali. Il concetto che manda in tilt molte persone che non hanno studiato elettronica di base bene è quello di potenziale di riferimento. C'è chi lo chiama massa,chi terra e chi zero Volt. Per chiarire una volta per tutte la differenza tra questi concetti(usati molto spesso in contesti sbagliati) rimando ad un chiarissimo articolo di un guru di ElectroYou, IsidoroKZ

I requisiti HW/SW

Diamo per scontato che conosciamo abbastanza bene questi concetti di base, vogliamo dunque concentrarci su questi benedetti microcontrollori. La domanda che si insinua nella nostra testolina di neofita è: "Ma di cosa ho bisogno?"
Facciamo dapprima un breve viaggio nel mondo della programmazione in generale per farci un'idea abbastanza chiara, e da lì poi dedurremo ciò che ci servirà! Partiamo con un semplice esempio:
Il browser che stiamo utilizzando per visualizzare questa pagina web(IE,Firefox,Chrome,Safari ecc...) è anzitutto un software, cioè un insieme di istruzioni che dicono all'hardware(Il nostro PC) quali operazioni svolgere. Questa definizione farà inorridire coloro che di programmazione ne capiscono, ma è importante partire dalle basi per capire effettivamente cosa dobbiamo fare. Il software che utilizziamo è di tipo eseguibile, cioè ci basta cliccarci sopra(o "lanciarlo" da riga di comando) perchè si avvii e faccia il suo compito. Bene, è chiaro che questo software eseguibile non viene dal nulla(affermazione idiota) ma è stato scritto da qualcuno in un linguaggio di programmazione. Chiariamo meglio quest'affermazione! Ad esempio, un giorno un programmatore si sveglia e decide di scrivere il suo browser personale. Allora va al suo PC e apre un editor di testi(nel caso più semplice) e inzia a scrivere il codice nel suo linguaggio di programmazione preferito. Quando ha finito non ha ancora un programma eseguibile, ma solo un file che contiene migliaia di istruzioni(file sorgente), né più né meno. Allora cosa fa? Cerca un altro software che gli permetta di ottenere da questo file pieno di istruzioni un file eseguibile, cioè pronto a svolgere il suo lavoro. Dopo qualche ricerca scopre che esistono vari tipi di software che svolgono questa funzione, e capisce che si differenziano tra loro per il linguaggio di programmazione che accettano in ingresso e per il sistema operativo su cui "girano"(Windows,Linux,Mac,FreeBSD ecc ecc). Scopre che alcuni sono a pagamento, altri gratis, altri Open Source, altri sono concessi in licenza ecc...
Questi software si chiamano compilatori. Decide quindi di scaricare il compilatore adatto al suo linguaggio di programmazione, lo installa e leggendo il manuale capisce una cosa importante: Non basta solo il compilatore a trasformare il file sorgente in un file eseguibile. Scopre che il compilatore produce in output un file che non è eseguibile direttamente, ma che ha bisogno di qualcos'altro(chiariremo tra poco cosa). Leggendo sempre il manuale, il programmatore scopre che il file restituito dal compilatore è di tipo oggetto(solitamente questi file hanno estensione .obj), cioè non è né un file sorgente né un file eseguibile. Inizia a chiedersi l'utilità di questo file, quindi inizia a cercare sul suo manuale a cosa serve questo file. Capisce che questo file non è altro che la traduzione del file sorgente(contenente istruzioni in un generico linguaggio di programmazione) in un file che contiene codice macchina, cioè istruzioni che solo il computer può capire. Per rendere questo file eseguibile il nostro programmatore ha bisogno di un altro software in grado di prendere come ingresso un file di tipo obj e restituire un file eseguibile(di solito di tipo exe). Scopre che il software che fa al caso suo è un linker cioè un software che collega i moduli del nostro file oggetto in modo da poterlo rendere eseguibile. A questo punto, il nostro programmatore(se non ha commesso errori nella stesusra del codice sorgente) ha pronto il suo bel file eseguibile! Ma cosa sono questi moduli menzionati poco fa? Beh non è questa la sede più adatta per spiegarli, per questo rimando a wikipedia(Programmazione). Riassumendo molto brevemente un concetto che richiederebbe un libro intero, possiamo dire che il 99% delle volte un programma non viene eseguito per come è stato scritto, ma effettua dei salti nel codice, cioè esegue o meno alcune istruzioni/parti di programma a seconda del verificarsi o o meno di alcune condizioni. Non c'è da preoccuparsi se questo non è chiaro fin da subito, lo diventerà con la pratica e lo studio. Quindi, in maniera molto breve, il linker si occupa di "organizzare" questi salti nel codice, collegando appunto i vari moduli tra loro. Questa spiegazione semplice non è del tutto esaustiva, ma ce la facciamo bastare.
Ok, questa situazione va bene per scrivere programmi per PC, ma per i micrcocontrollori? Beh, l'iter da seguire è uguale, cambiano solo i tipi di file(chiariremo meglio dopo) per questo non è possibile utilizzare gli stessi compilatori/linker utilizzati solitamente per lo sviluppo di software sul PC. Quindi per iniziare a programmare questi microcontrollori abbiamo bisogno(per quanto riguarda il Software) di:

  1. Un qualsiasi editor di testi
  2. Un Compilatore a loro dedicato
  3. Un Linker a loro dedicato

Non molto in fondo! Ora prima di scaricare tutto questo, vi dico che esiste un IDE(Integrated Developement Environment) che comprende in sé un editor di testi, un compilatore(selezionabile a seconda della famiglia di microcontrollori utilizzata) e un linker ottimizzato per i microcontrollori.
Prima di scaricarlo e di iniziare a smanettarci un po', prendiamo in considerazione l'idea di scegliere quale tipo di microcontrollori utilizzare.

I microcontrollori Microchip

In questa guida sono stati scelti i microcontrollori Microchip(PIC) per la loro enorme diffusione e ampia documentazione disponibile in rete. Ci tengo però a precisare che esistono validissime alternative a questi microcontrollori, prodotti da ATMEL, FREESCALE, NXP, e altri produttori che sono anch'essi ottimi prodotti! Quindi chiariamo che la scelta è stata fatta in base alle personalissime preferenze dell'autore e dal fatto che sono in molti a voler iniziare con questo tipo di microcontrollori. Da notare che non ho citato il blasonato Arduino in quanto non lo ritengo molto utile per un neofita(e a maggior ragione per chi ha già un po' di esperienza in questo campo). Anche questo è un personalissimo parere. Il motivo è che al programmatore che utilizza Arduino viene nascosta la complessità della programmazione del microcontrollore, in un certo senso il "divertimento". Questo perché è tutto preconfezionato, non si deve fare quasi nulla per avere un programma già funzionante. Questo tipo di approccio non è consigliato, in quanto se un giorno si volesse sviluppare con una piattaforma più complessa/architettura diversa non si saprebbe nemmeno da dove incominciare, perché quello che su Arduino si fa con una funzione, in un altro micro si fa con 5 o 6 istruzioni. La differenza dove sta? Con il primo si programma, con il secondo si impara a programmare. Utilizzando la seconda piattaforma/micro si capisce cosa bisogna realmente fare per ottenere un certo risultato, facendo propri i concetti di registro, operatore sui bit, operazioni di set e reset di pin ecc ecc... Con Arduino invece tutto questo lo fa il compilatore, impedendovi di capire cosa bisogna realmente fare per ottenere quel risultato. Quindi dove sta la principale differenza? Programmando la seconda piattaforma si può poi passare ad altre piattaforme molto agevolmente, dato che i concetti di base sono quelli(sopra menzionati), che sono già stati acquisiti(anche a furia di sbatterci la testa più e più volte), con Arduino è molto più difficile, in quanto questi concetti vengono mascherati da una o più funzioni, che sono ovviamente assenti nelle altre piattaforme. Riprenderemo questo discorso in seguito.
Ora iniziamo a dare un'occhiata al sito Microchip! Scopriamo che i PIC si dividono per applicazione(USB, Display, Applicazioni mediche ecc ecc...), per dimensione in bit cioè ne esistono da 8 bit, da 16 bit e 32 bit. Chiaro che la complessità nel programmarli(e le performance) cresce al crescere della dimensione, quindi gli 8 bit saranno i più semplici, i 32 i più complessi. Analizzaremo dopo, in maniera breve le principali differenze tra questi PIC. Essi si dividono pure per famiglie, quindi abbiamo la famiglia dei PIC16 e PIC18 che sono a 8 bit, la famiglia dei PIC24, dsPIC30 e dsPIC33 e la famiglia dei PIC32 che sono a 32 bit(dei veri "mostri" in quanto a prestazioni!).
Iniziare dai PIC32 è davvero(molto) complesso, in quanto richiedono conoscenze di un certo livello, quindi lasciamoli stare per ora. I PIC24 sono un buon compromesso, ma se iniziamo da ora sono abbastanza difficili, per ora lasciamoli stare. I PIC18 sarebbero ottimi, ma presentano alcuni aspetti abbastanza ostici per chi inizia davvero ora, quindi "buttiamoci" sui PIC16 per farci le ossa, in quanto dopo non sono molto consigliati, in quanto costano quanto un PIC24 e hanno \frac{1}{3} delle loro prestazioni. Da utilizzare solo se si hanno già nel cassetto o per farsi le ossa. Ci sono molti PIC nella famiglia dei PIC16, contrassegnati dalla sigla PIC16FXXX(A) dove XXX rappresenta 3 numeri e la A tra parentesi indica che può esserci come non esserci(non cambia nulla a livello di programmazione). Ora vediamo un attimo cosa bisogna avere a livello Hardware per poterlo programmare e poi affronteremo la programmazione vera e propria!

Il Programmatore(oggetto e non persona)

Il programmatore(inteso come oggetto e non come una persona) è un dispositivo in grado di trasferire dal PC al PIC il programma compilato e linkato precendemente. Come funziona? A grandi linee, ha 2 interfacce, una USB da collegare al computer(è fornito di software che ne installa i driver e il programma relativo alla sua gestione) e di un'altra interfaccia composta da 6 pin(contatti elettrici) da collegare al PIC da programmare. Vedremo dopo in dettaglio come collegarlo.
Ci tengo a dire che il programmatore va comprato dalla casa produttrice(Microchip), in quanto solo così ci si può garantire un prodotto supportato e perfettamente funzionante! Per il web girano molti programmatori autocostruiti/cloni, lasciateli perdere, non sono affatto utili e con i soldi che spendete per comprarli/costruirli ve ne comprate uno ufficiale dal negozio online e siete sicuri che funziona!
Il programmatore consigliato è il PicKit3, l'ultimo nato di casa Microchip che permette di programmare tutti i nuovi PIC. Io personalmente ho ancora il "vecchio" modello PicKit2(al tempo non era uscito il PicKit3), che per le mie esigenze è ottimo! Non mi ha mai dato problemi, e se viene tenuto bene può durare anche parecchi anni! Quindi ora sappiamo che questo programmatore è un dispositivo HW che trasferisce i file compilati e linkati(file con estensione .hex) dal PC al nostro PIC. Quindi è questo l'unico requisito HW, apparte una Breadboard(che serve per montare i circuiti senza dover saldare i componenti), questa si presume si abbia già quando ci si interessa di microcontrollori.

MPLAB IDE

Qualche riga fa abbiamo parlato di un IDE, un misterioso programma che racchiude in sè un editor di testi, un compilatore e un linker. Ma la sua utilità qual'è? Non posso scaricare ognuno di questi programmi a parte e utilizzarli singolarmente?
Certo che è possibile farlo, ma non molto consigliato agli inizi. L'utilizzo di un IDE permette di avere in un unico programma tutto ciò di cui abbiamo bisogno per programmare i nostri PIC! L'IDE in questione si chiama MPLAB e si trova in due versioni, la versione 8.83 che è quella più "vecchia", e la versione X che è la più nuova, abbastanza differente dalla versione 8. L'utilizzo dell'una o l'altra non è così importante, è più una decisione personale. Io utilizzo ancora la versione 8 in quanto mi trovo davvero bene con quella, ma nulla vieta di utilizzare la versione X. Qualora si decida di utilizzare l'ultima versione, questo articolo è ottimo per capire come funziona! Dall'esperto di PIC, paolino! Paolino ha anche scritto un'ottimo libro sui PIC, consigliato assolutamente se volete imparare qualcosa :)

Il linguaggio di programmazione

Esistono vari linguaggi di programmazione per i PIC, i più diffusi sono: Assembly, Basic e C.
Il linguaggio con cui consiglio di iniziare è il C, anche sui PIC16. Alcuni dicono che sui PIC16 sia meglio l'assembly, in quanto non hanno molte risorse, ma il problema è che tale linguaggio è abbastanza "ostico" per chi non ha mai fatto programmazione. Non è molto difficile da imparare, ma ci si deve dedicare un bel pò. Il C invece è più "intuitivo" come linguaggio di programmazione, in quanto è di alto livello(cioè più vicino a noi). E' anche vero che non è ottimizzato perfettamente, quindi un programma in C occuperà un pò più di spazio sul PIC e sarà un pò più lento, ma non è così significativa la differenza e questo a noi basta. In fondo i nuovi PIC della famiglia PIC16(16F887,16F913,16F1454, ecc ecc...) hanno così tanta memoria programma/dati che non è quasi necessario utilizzare l'assembly. NON sto dicendo che l'assembly sia un cattivo linguaggio(tutt'altro), solo che a parere mio, conviene utilizzare il linguaggio C, almeno agli inizi. Se poi ci dovesse essere necessità di ottimizzare alcune parti di codice, esse possono essere scritte in assembly, meglio di così! :)


Sintesi

Dopo tutta questo leggere, riassumiamo in una semplice lista i componenti HW/SW di cui abbiamo bisogno!

  • MPLAB IDE(scaricabile a partire da qui)
  • Compilatore Linguaggio C(scaricabile a partire da qui)
  • Programmatore PicKit2/3(qui e qui)

Questo è tutto ciò di cui abbiamo bisogno per programmare i nostri PIC!

A breve spero di fare un tutorial sulla programmazione dei PICmicro!

23

Commenti e note

Inserisci un commento

di ,

adnoctis, non usare l'area commenti a un articolo per problemi di altra natura. Apri un post sul forum.

Rispondi

di ,

è lo so, ma i miei disegni non sono solo schemi o circuiti stampati, ci sono molte foto molti layout, programmi, screenshot, ecc ecc. mi serve poter caricare immagini come facevo su grix :-)

Rispondi

di ,

Posso consigliarti di utilizzare fidocadj :) E' a dir poco OTTIMO e molto comodo, prova un pò :)

Rispondi

di ,

si ...ma io ho seguito le ostruzioni, ovvero, prendop uno schema salvato in formato gif. jpeg, png...ho provato tutti e 4. Lo seleziono dal mio PC, il sistema lo acchiappa...ma poi non compare l'immagine in preview come annunciano le istruzioni, infatti quando salvo l'immagine non c'è. Ho fatto molte prove ma niente. Che può essere? alloro ho pensato di rimandare al mio sito tramite dei link. Ripeto che vorrei fare miolte cose con questo sito, ma non accetta il caricamento di schemi da parte mia.

Rispondi

di ,

Mi scuso se ho frainteso! Non c'è da impazzire, l'editor è abbastanza semplice da usare :)

Rispondi

di ,

non è spam, è il mio sito personale dove ho messo anche un corso di PIC 16, il prossimo corso di PIC 32 vorrei pubblicarlo qui ma l'editor non me lo permette. Stamattina sono impazzito solo per caricare un'immagine. Se i webmaster mi trovano una soluzione credo potrò fare molte pubblicazioni in questo portale. Marco

Rispondi

di ,

Non vorrei fosse spam, mi auguro di no...

Rispondi

di ,

OLtre ad un programme si necessita di una demoboard che sia potente completa e semplice da usare, oltre che ovviamente economica. L'unica che attualemente contiene anche le interfacce di potenza per il controllod ei motori D.C. sia stepper che a spazzole è la Micro-GT versatile IDE, che funziona anche da programmer. Pilota display a sette segmenti, LCD 2x16, grafici 128*64. La potete vedere a questo indirizzo: http://www.gtronic.it/energiaingioco/it/scienza/Micro-GT%20PIC_ultimate.html è possibile procurarsi il solo stampato scrivendo all'indirizzo che vedete sul sito. Comunque ci sono schemi e tutto quel che serve per costruirsela da soli.

Rispondi

di ,

Vedrai che la voglia verrà e sarà una bella esperienza! Veder lampeggiare il tuo primo led("Hello World" formato PIC) è una soddisfazione. Non sarà nulla di rivoluzionario, ma con il tempo imparerai a fare cose che ora ti sembrano assurde. In bocca al lupo, per qualsiasi cosa io sono qui :) Ciao e grazie a te!

Rispondi

di ,

Grazie per le precisazioni, ho appena fatto l'ordine sul sito RS (con un po' di confusione fra indirizzo di consegna e di fatturazione, codici fiscali, ragioni sociali, modalità di pagamento... insomma è un po' confusionario il sito per un privato comunque dovrei essere riuscito). Speriamo che mi venga, e rimanga, la voglia di sperimentare un po' sui PIC approfittando di un po' di tempo libero durante le prossime feste.

Rispondi

di ,

@ildani errore mio, il link avrebbe dovuto puntare al solo PicKit3, non volevo far comprare anche la scheda. Il motivo? E' sicuramente un'ottima scheda, fornita di esempi molto utili e didattici, ma non è proprio indispensabile il suo acquisto in quanto con una breadboard e qualche cavetto ci si autocostruisce la propria scheda imparando "dal basso" come è composta. In definitiva si è liberi di prendere la versione che si vuole, io personalmente non l'ho acquistata, e non è proprio necessaria. A discrezione personale :) L'acquisto da RS non è da considerarsi privilegiato rispetto a quello sul sito Microchip, l'ho linkato solamente perchè mi è capitato più e più volte di effettuarci acquisti e mi sono trovato benissimo con consegne entro 2 giorni lavorativi. Sul sito Microchip non ho mai acquistato, ma non dubito sia altrettanto efficiente :) In definitiva acquistare da RS o da Microchip non è rilevante, il link è riferito a RS per "esperienze" positive dell'autore, non per altro :) La scheda da 44 pin non è necessaria :) Grazie a te :)

Rispondi

di ,

Vorrei un chiarimento sull'hardware che si consiglia di comprare, perchè nell'articolo nella sezione "Il Programmatore" c'è un link al PicKit3 che porta al prodotto codice PG164130 che è il solo "PICkit 3 In-Circuit Debugger" mentre nella sezione "Sintesi" c'è un altro link che porta al prodotto codice DV164131 che è il "PICkit 3 Debug Express". Nel secondo caso, oltre al programmatore/debugger c'è incluso un cd (con software, lezioni ed esempi), il cavo usb ed anche una demo board a 44 pin con microcontrollore PIC18F45K20. Il solo debugger costa 35/36 Euro, mentre il kit di sviluppo costa 54/56 Euro. Immagino sia migliore il kit di sviluppo ma chiedo conferma per evitare di spendere soldi inutilmente, ed inoltre vorrei sapere se c'è un motivo particolare per cui si consiglia l'acquisto tramite la RS anzichè direttamente dalla Microchip. Grazie.

Rispondi

di ,

Grazie kotek :) Certo, è già in preparazione! @franx Consiglio personalmente i PIC16 almeno agli inizi, però se hai già i PIC18 non è assolutamente un problema! C'è qualcosa in più da sapere, ma non troppo difficile :)

Rispondi

di ,

Bellissima guida, spero tu possa fare anche un tutorial!

Rispondi

di ,

quindi partire direttamente con PIC18 e Pickit3 considerato che questi sono ottimizzati per il C (non è mia intenzione imbarcarmi nell'assembler)

Rispondi

di ,

Mi sembra ci siano buone premesse... ;)

Rispondi

di ,

Paolino grazie dei complimenti, da chi se ne intende come Te sono davvero un ottimo ringraziamento :) Ho seguito i tuoi articoli, mi sono liberamente ispirato al loro stile e, come vedi, qualcuno ha apprezzato :)

Rispondi

di ,

Grazie :) Franx, personalmente credo che un PicKit3 e un PIC16 inizialmente siano un'ottimo punto di partenza. Dopo aver capito i limiti dei PIC16 passa ai PIC18, sono ottimi, per esperienza personale :) Hanno l'USB, cosa che al giorno d'oggi è utilissima! Il PicKit 3 costa 30€ in più del 2, ma è un debugger completo e performante, ne vale la pena di comprarlo! Io ho il 2 solo perchè il PicKit3 ancora non era uscito al tempo.

Rispondi

di ,

Beh, che dire? Grazie per le citazioni e per i complimenti: li ho apprezzati e spero di averli meritati. Ora che hai iniziato con questa rassegna, aspettiamo le prossime uscite! Bene così!

Rispondi

di ,

Riepilogando: Pickit3 (o 2) e come mcu per iniziare? Chi dice PIC18 chi dice PIC16, bel dilemma.

Rispondi

di ,

Grazie per l'articolo, informativo e chiaro... aspettiamo il seguito!

Rispondi

di ,

non vedo l'ora! già mi sfrego le mani stile Fantozzi :)

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.