Tutorials - PIC - MPLAB

 

MPLAB 


La programmazione del chip in ambiente MPLAB.

Queste pagine sono state scritte principalmente come supporto al corso Assembly & C, ma possono essere lette in ogni caso.


  "Programmare il chip" vuol dire trasferire il contenuto del file .hex nella memoria flash del microcontroller. Per  fare questo occorre un dispositivo di programmazione; il suo scopo è quello di costituire una interfaccia tra un port del PC (seriale, parallela, USB) su cui si effettua lo sviluppo e la connessione ICSP del microcontroller.   

Abbiamo detto nell' introduzione, che NON serve alcun programmatore particolare, dato che il PICkit, tra le altre funzioni, svolge benissimo questo lavoro, sia sotto controllo dell' ambiente di sviluppo MPLAB, sia stand alone, con un package software opportuno.

Possiamo anche programmare il PIC utilizzando un PICkit e il suo software di programmatore stand alone. Nel caso del PICkit3 basta scaricarlo dal sito di Microchip. Altrettanto per il PICkit2 e collegare il tool ad uno zoccolo come questo.

Ma se siamo nell' ambiente MPLAB, non occorre alcun software addizionale.
Stiamo parlando di Pickit dato che, per il basso costo, è uno dei tools Microchip più diffusi, ma, ovviamente, si possono usare anche gli altri tools, come ICD o RealIce.
Però, pur essendo inferiore come prestazioni, Pickit offre un vantaggio, cioè la possibilità di alimentare il circuito in prova, il che, per piccole applicazioni, è veramente molto comodo.

Dalla barra del menù principale scegliamo Programmer->Select Programmer

Le opzioni attive indicano i programmatori utilizzabili con il chip scelto, mentre quelle non attive indicano i tool che non possono essere utilizzati.
Colleghiamo il PICkit3 ad un port USB del PC e selezioniamo PICkit3
Nella finestra di Output apparirà un messaggio di conferma.

Il messaggio certifica che il PICkit è stato rilevato correttamente

PICkit 3 detected
Connecting to PICkit 3...
Running self test...
Self test completed
Firmware Suite Version...... 01.26.92
Firmware type..............Baseline

A cui si sovrappone una finestra Voltage Caution:il suo scopo è quello di spingere l’ utente a verificare che la tensione impostata sia adeguata al processore scelto.    

   Attenzione
Applicando una tensione superiore a quella tollerata dal componente (per alcuni PIC è di 3.6V) si rischia di danneggiare il componente

 OK per confermare.
Anche se tutto è in ordine, nella finestra di Output apparirà sempre l’avviso in rosso.

PICkit 3 detected
Connecting to PICkit 3...
Running self test...
Self test completed
Firmware Suite Version...... 01.26.92
Firmware type..............Baseline
PICkit 3 Connected.
PK3Err0045: You must connect to a target device to use PICkit 3.

Il messaggio in rosso dice semplicemente che il Pickit3 non rileva un hardware collegato e questo può dipendere da alcune cause:

  • l’ hardware di connessione ICSP non è corretto

  •  il chip da programmare non è alimentato

Il primo caso è relativo a circuiti “fatti in casa”, dove sono possibili collegamenti malfatti o instabili oppure su breadboard, dove è possibile, soprattutto per articoli a basso costo, che i contatti siano di qualità scadente o risultino danneggiati dall’ uso.
Del tutto improbabile se si stanno utilizzando demo board di marca. 

In generale, dunque, il messaggio deriva dal fatto che manca alimentazione al circuito su cui è posto il microcontroller da programmare.
Non essendo alimentato il chip, il PICkit non riesce ad identificarlo.

La cosa si risolve semplicemente in due modi:

  • alimentare il microcontroller con un alimentatore adatto.

  • o, più semplicemente, facendolo alimentare direttamente dal Pickit

 Questa interessante funzione del Pickit permette di non avere bisogno di alimentare il micro in programmazione o anche un piccolo circuito di demo. 
Ad esempio, se disponiamo di una piccola demo board come quelle di Microchip (Low Pin count o simili) oppure delle nostre demo board o di un circuito assiepato su una breadboard, il PICkit , collegato sulla presa ICSP funge sia da dispositivo di debug (se il chip integra il motore ICD), sia da programmatore, sia da alimentatore del circuito.

Il PICkit  può erogare almeno una trentina di mA (ma all’ atto pratico anche di più) e quindi gestire l’ accensione di diversi LED, un display LCD e simili, sostituendo un alimentatore esterno.
Se si utilizzano tools diversi dai PICkit va considerato che:    

ICD e RealIce non dispongono della possibilità di alimentare il target ed occorre in entrambi i casi disporre di una alimentazione separata per il circuito target o il chip da programmare.

La funzione di alimentazione da parte del Pickit si ottiene agendo sul menù relativo al suo settaggio. Premere il tasto Programmer e poi Settings

Da questa finestra è possibile selezionare il programmatore, comandarlo, riconnetterlo e impostare numerosi parametri di lavoro.
Nell’ immagine, non essendo stato compilato alcun oggetto e non risultando un cip collegato al programmatore, la serie dei comandi specifici di programmazione (Program, Verify, Read, ecc) risulta inattiva. Diventerà attiva una volta riconosciuto un “target”, ovvero un chip collegato.

Premiamo Settings.  Apparirà una finestra di comando con vari folder.

Nella cartella Program Memory, la scelta di default demanda al tool di programmazione le modalità di azione durante la programmazione. E’ possibile anche una scelta manuale dei parametri, ma, se non necessaria, è opportuno lasciare quella del default.

Nelle caselle di scelta attive è possibile anche scegliere anche la cancellazione della memoria prima della nuova programmazione: questo evita che in un chip già utilizzato rimangano “avanzi” non desiderati di programmazioni precedenti (ricordiamo che la flash mantiene l’ informazione scritta fino a che non viene cancellata e ri scritta).
E’ possibili anche escludere dalla programmazione un’ area specifica della memoria.    

Avvertenza: Non è opportuno variare i parametri di default se non con la chiara idea di cosa si sta facendo e perché.

Noi proseguiamo selezionando il folder Power. Si aprirà la finestra relativa, con una casella di scelta Power target circuit from PICkit3 (o PICkit2), normalmente disattivata, che andremo a confermare.

Osserviamo che c’è anche un cursore Voltage che può essere manovrato per variare la tensione applicata, il cui valore appare nella finestrella a destra.
In generale la tensione sarà di 5V, ma se il microcontroller o il progetto richiedono una tensione minore, il valore corretto potrà essere impostato con il cursore.
Applica<
consente di applicare le scelte e vederne i risultati senza uscire dalla finestra di controllo.
Noi premiamo OK per confermare le scelte e proseguire. Si aprirà ora una finestra Voltage Caution di avviso uguale a quella già vista.
Il suo scopo è quello di spingere l’ utente a verificare che la tensione impostata sia adeguata al processore scelto.
OK
per confermare, poi OK per concludere.

Anche se tutto è in ordine, nella finestra di Output apparirà sempre l’avviso in rosso.

Occorre effettuare una riconnessione del tool.  
La ri-connessione spinge MPLAB a ricercare nuovamente il tool di programmazione e a verificare che il target sia collegato.

Tornare sul  tasto Programmer e scegliere Reconnect.

La ri-connessione viene anticipata dal messaggio di avviso già visto, relativo alle tensioni al chip, e che si ripete ogni volta in cui si agisce su un parametro che mette a rischio il processore. Clickando su OK si conferma la scelta e la finestra di Output indicherà la riuscita connessione. 

Ora il Pickit alimenta il circuito.

Sulla barra superiore dei comandi a icone apparirà una nuova lista, relativa al comando del programmatore.

Il significato delle icone è evidenziato automaticamente portando il mouse sull’ icona stessa.

Programma il microcontroller
Leggi il contenuto della memoria del microcontroller
Verifica la scrittura della memoria programma
Cancella la memoria programma
Verifica la cancellazione
Togli lo stato di reset
Metti nello stato di reset
ON/OFF  - tensione al circuito collegato

Se è stata selezionata l’opzione di alimentare il circuito dal Pickit e viene premuto il tasto di tensione al dispositivo, il colore passa dal verde al grigio e la tensione è sospesa. Anche gli altri tasti sono disattivati dato che manca l’ alimentazione.

Premendo nuovamente il tasto ON/OFF la tensione sarà ria-applicata e i tasti torneranno attivi.

I comandi relativi al reset vanno intesi in questo modo: la connessione ICSP-ICD utilizza tre pin del processore (ICSPDAT, ICSPCLK e Vpp). Nell’ emulazione ICD sono necessari solamente i primi due, ma durante la programmazione occorre anche la Vpp.
Il pin Vpp è condiviso con la funzione MCLR, ma questo segnale deve essere rilasciato per poter far funzionare il microcontroller con il programma caricato. I tasti di comando del reset consento di comandarlo a livello basso oppure di rilasciarlo.
Le ultime versioni di MPLAB fanno si che, una volta completata la programmazione, il pin MCLR/Vpp venga rilasciato in modo da permettere il funzionamento del micro e l’ eventuale azione di un segnale sullo stesso pin (pulsante o altro).
Gli stessi comandi della barra ad icone sono accessibili anche dal menù a tendina che si apre dal tasto Programmer della riga superiore di comandi.

La descrizione di alcune altre possibiltà del programmatore in-circuit le trovate nel documento che descrive la creazione di un progetto di MPLAB. 

Premiamo il tasto , che deve essere di colore verde, per indicare che il target è alimentato e quindi il tasto   per trasferire il file .hex nella memoria del chip.
La finestra Output ci informerà del risultato dell' operazione e, dato che nei default (Programmer->Settings) del PICkit3 si trova selezionata l' opzione di rilasciare MCLR dopo la programmazione, il programma entrerà immediatamente in azione e il LED si accenderà.

Se la programmazione non va a buon fine, si otterrà un messaggio del genere

Programming...
The following memory regions failed to program correctly:
Program Memory

Address: 00000002 Expected Value: 00000cdf Received Value: 00000047
Programming failed

Questo specifico messaggio indica che, con molte probabilità, la memoria del chip contiene già una precedente programmazione. In tal caso basta agire sul tasto di cancellazione   ottenendo un messaggio:

Erasing...
Erase device complete

e ripetere . Il messaggio diventa:

Programming...
Programming/Verify complete

Durante le operazioni una serie di quadretti mobili appare nella barra alla base della finestra principale, per indicare che il sistema sta lavorando.

Se premiamo il tasto , che diventerà grigio, anche il LED si spegnerà, perchè abbiamo tolto la tensione di alimentazione.

Ora il chip contiene il programma: ogni volta che applicheremo tensione, il LED verrà acceso.


Va detto che tutte le operazioni, a tutta prima complicate, dopo una brevissimo tempo di esercizio diventano routine quasi automatica e non richiedono che una minima parte del tempo di realizzazione del programma funzionante.


 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 30/07/14.