Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia...

9
Tutorial MPLAB X 3.15 Creazione nuovo progetto Per la creazione di un nuovo progetto selezionare File -> New Project si aprirà una finestra per la creazione del nuovo progetto, oppure cliccare sul pulsante Nella finestra aperta, nella sezione Categories selezionare la cartella Microchip Embedded. Nella categoria Project selezionare Standalone Project e cliccare su Next. Se invece si vuole convertire un progetto creato con MPLAB IDE 8 selezionare la voce Existing MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt. Nella seconda finestra bisogna dichiarare quale microcontrollore Microchip si vuole utilizzare per il progetto (è possibile cambiare il tipo di microcontrollore anche dopo aver creato il progetto). Se si conosce la famiglia del PIC che si vuole utilizzare cliccare su Families e selezionare la relativa famiglia; successivamente in Device selezionare il microcontrollore desiderato. Nel caso in cui non si conosca la famiglia del microcontrollore nella casella Family selezionare All Families. Per questo tutorial utilizzeremo il PIC16F1826. Nella terza finestra viene chiesto un file Header per la fase di Debug con appositi strumenti come per esempio: ICD3, PicKit3 ecc. Nella casella Supported Debug Header lasciare selezionata la casella None. Proseguire nel wizard cliccando su Next. Tutorial MPLAB X 3.15 Nicolas Farabegoli 5A 1

Transcript of Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia...

Page 1: Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt. Nella seconda finestra bisogna dichiarare quale

Tutorial MPLAB X 3.15Creazione nuovo progetto

Per la creazione di un nuovo progetto selezionare File -> New Project si aprirà una finestra per la creazione del nuovo progetto, oppure cliccare sul pulsante

Nella finestra aperta, nella sezione Categories selezionare la cartella Microchip Embedded.Nella categoria Project selezionare Standalone Project e cliccare su Next. Se invece si vuole convertire un progetto creato con MPLAB IDE 8 selezionare la voce Existing MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt.

Nella seconda finestra bisogna dichiarare quale microcontrollore Microchip si vuole utilizzare per il progetto (è possibile cambiare il tipo di microcontrollore anche dopo aver creato il progetto).Se si conosce la famiglia del PIC che si vuole utilizzare cliccare su Families e selezionare la relativa famiglia; successivamente in Device selezionare il microcontrollore desiderato.Nel caso in cui non si conosca la famiglia del microcontrollore nella casella Family selezionare All Families. Per questo tutorial utilizzeremo il PIC16F1826.

Nella terza finestra viene chiesto un file Header per la fase di Debug con appositi strumenti come per esempio: ICD3, PicKit3 ecc. Nella casella Supported Debug Header lasciare selezionata la casella None.Proseguire nel wizard cliccando su Next.

Tutorial MPLAB X 3.15 Nicolas Farabegoli 5A �1

Page 2: Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt. Nella seconda finestra bisogna dichiarare quale

In questa sezione ci viene chiesto quale strumento vogliamo selezionare per effettuare il debug ed eventualmente il caricamento dell’eseguibile sul PIC. In questo caso Selezioniamo Simulator in modo da poter simulare sul PC il funzionamento del programma che abbiamo scritto. Nel caso in cui vogliamo cambiare lo possiamo effettuare in seguito nelle proprietà del progetto.

Nella sesta fase dobbiamo specificare quale compilatore utilizzare per compilare il nostro progetto. Possiamo selezionare il compilatore mpasm se si vuole scrivere il programma in assembly, se invece si vuole scrivere il programma in C selezionare il compilatore XC8.XC8 è il compilatore di default che fornisce gratuitamente Microchip, è possibile scaricare e installare altri compilatori di terze parti e utilizzarli senza problemi.

Nella fase finale bisogna specificare in Project Name il nome del progetto, mentre in Project Location specifichiamo la directory del progetto.Terminiamo la fase del wizard di creazione del progetto cliccando su Finish.

Tutorial MPLAB X 3.15 Nicolas Farabegoli 5A �2

Page 3: Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt. Nella seconda finestra bisogna dichiarare quale

Code ConfiguratorInstallazione

Code Configurator è un tool molto utile per la programmazione di PIC della serie 10/12/16/18 e 24. Questo tool ci consente di programmare in modo rapido, intuitivo ed efficiente i PIC; tramite interfacce grafiche è possibile configurare le periferiche integrate nel PIC secondo le esigenze del progetto. Code Configurator genererà in automatico tutti i file necessari alla programmazione, basterà quindi richiamare solamente le funzioni generate per creare un progetto completo.

Code Configurator è possibile scaricarlo direttamente da MPLAB X.Per scaricarlo, dal menu in alto, selezionare Tool -> Plugins; si aprirà una finestra, selezionare Available Plugins e selezionare il plugin Code Configurator e installarlo.Una volta installato riavviare MPLAB X.

Per poter utilizzare Code Configurator verificare che nella finestra di sinistra al tab Projects sia selezionato il progetto desiderato, per verificare se è selezionato correttamente la scritta del progetto deve risultare in grassetto rispetto agli altri nomi dei progetti, se così non fosse cliccare con il tasto desto sul progetto e cliccare Set as Main project in modo da rendere principale il progetto. Per l’abilitazione di Code Configurator sul progetto, dal menu in alto selezionare Tool -> Embedded -> Code Configurator Si aprirà una finestra: sulla sinistra troviamo le varie finestre relative alle risorse del progetto, le risorse disponibili dal PIC ecc. al centro è presente la finestra per la configurazione delle risorse.

Tutorial MPLAB X 3.15 Nicolas Farabegoli 5A �3

Page 4: Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt. Nella seconda finestra bisogna dichiarare quale

Configurazione progettoPer la configurazione delle periferiche del PIC, che è possibile trovarle nella finestra di sinistra chiamata Device Resources, selezionare quella desiderata, in questo caso configureremo la GPIO, e fare doppio click alla voce desiderata.La periferica selezionata scomparirà da questa finestra e comparirà sulla finestra Project Resources.

Cliccare, nella finestra Project Resources, sulla periferica che si vuole configurare; in questo caso faremo l’esempio di come configurare la GPIO:sempre in Project Resources cliccare su GPIO, si aprirà la finestra di configurazione. Nella parte sinistra della finestra troviamo l’immagine dell’integrato nella quale possiamo visualizzare i pin disponibili e quelli occupati, è possibile inoltre visualizzare quali pin sono destinati a periferiche interne come per esempio timer, ADC, comparatori ecc. Per poter utilizzare un pin, nella parte inferiore dove sono presenti i lucchetti chiudere quello relativo al pin che si vuole utilizzare, una volta chiuso il pin comparirà nella finestra di sinistra dove possiamo modificarne le proprietà: allo stato iniziale i pin saranno impostati come input, cliccando sul flag Output il pin verrà impostato come tale; se il progetto lo richiede è possibile impostare, tramite il flag Start High, a livello alto il pin all’accensione del PIC. I flag restati sono: WPUE che se abilitato imposta le resistenze di Pull-Up su i pin che consentono questa operazione; IOC abilita l’interrupt sul cambio di stato del pin; IOCP abilita l’interrupt sul cambio di stato del pin solamente sul fronte di salita; IOCN abilita l’interrupt sul cambio di stato sul fronte di discesa.Infine è possibile assegnare un nome più utile e significativo per maggiore chiarezza nella scrittura del codice modificando la field Custom Name con un nome a piacere.

Tutorial MPLAB X 3.15 Nicolas Farabegoli 5A �4

Page 5: Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt. Nella seconda finestra bisogna dichiarare quale

Una volta configurate le periferiche bisogna configurare le impostazioni di sistema, quindi nella finestra Project Resources cliccare su System.Come prima cosa configurare il clock, quindi alla sezione Clock selezionare la fonte del clock, quindi se è esterna oppure interna, in questo caso selezioniamo l’oscillatore interno tramite INTOSC mentre come frequenza del clock 16MHz che è la frequenza massima dell’oscillatore interno.Il PIC16F1826 presenta due fuse di configurazione: è consigliabile impostarli tutti secondo le esigenze del progetto.A seguito della selezione è disponibile una breve descrizione dell’impostazione che si andrà ad eseguire.

Terminate tutte le configurazioni necessarie procediamo a generare i file necessari alla compilazione e scrittura del progetto, quindi tramite il pulsante Generate Code il tool procederà a scrivere tutti i file con le impostazioni precedentemente settate.Comparirà un pop-up dove chiede se vogliamo che in automatico venga creato il file “main.c” cliccare obbligatoriamente Yes.Ora al tab Project nella finestra di sinistra è possibile osservare i file generati dal tool all’interno della cartella del progetto. All’interno della cartella Header Files sono presenti i file .h, mentre nella cartella Source Files oltre al main.c sono presenti i file .c delle periferiche utilizzate.Si consiglia di visualizzare il contenuto dei file nei quali sono presenti commenti che spiegano in modo approfondito il funzionamento e l’utilizzo delle funzioni da richiamare nel main.

Tutorial MPLAB X 3.15 Nicolas Farabegoli 5A �5

Page 6: Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt. Nella seconda finestra bisogna dichiarare quale

Scrittura programma Vediamo ora come sfruttare e implementare i file generati da Code Configurator nel progetto. Apriamo il main e osserviamo che è gia stato pre scritto parte del codice fondamentale come il while(1)e sono state commentate alcune funzioni che devono abilitare o disabilitare gli interrupt di periferiche o quelli globali. In questo esempio accenderemo il LED con un pulsante collegato al PIC quindi non avremo necessità di alcuna routine di interrupt, lasciamo quindi commentate le funzioni.Dobbiamo ora andare a cercare quali funzioni utilizzare per la scrittura del programma, quindi apriamo il file che Code Configurator ha generato al percorso: Heder Files -> MCC Generated Files -> pin_manager.h, in questo file sono descritte tutte le funzioni relative i pin descritti in Code Configurator, nel nostro caso utilizzeremo la funzione toggle chiamata LED_Toggle(), mentre per la lettura dello stato del pulsante utilizzeremo la funzione Puls_1_GetValue()che restituisce lo stato del pin, quindi del pulsate collegato.Il listato è il seguente:while (1) {

// Add your application code

if(Puls_2_GetValue()){

__delay_ms(5); //ritardo per l'antirimbalzo software

if(Puls_2_GetValue()){

LED_Toggle(); //cambio di stato il LED

}

}

}

Il codice è molto semplice: all’interno del ciclo infinito viene ciclicamente eseguito un if che controlla che il pulsante sia stato premuto, successivamente è presente un piccolo ritardo per l’anti rimbalzo del pulsante, successivamente viene eseguito un if identico al precedente e se verificato, tramite la funzione LED_Toggle()viene invertito lo stato del LED. Una volta finito di scrivere il programma bisogna compilarlo, cliccare quindi sull’icona del martello; nella console in basso verranno mostrati i risultati della compilazione e se la compilazione è andata a buon fine, comparirà la scritta Build Successful, in caso contrario Build Fail.

Tutorial MPLAB X 3.15 Nicolas Farabegoli 5A �6

Page 7: Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt. Nella seconda finestra bisogna dichiarare quale

Periferiche avanzate Code ConfiguratorVediamo ora come configurare periferiche più avanzate integrate nel PIC16F1826 come: Timer, ADC, USART.

Configuriamo ora il Timer 0 del PIC, clicchiamo sul progetto e tramite il menu selezionare Tool -> Embedded -> Code Configurator, ora in Device Resources (nella finestra di destra) fare doppio click su Timer - TMR0, la periferica verrà aggiunta alla finestra Project Resources selezionare quindi TMR0, si aprirà una finestra dove potremo modificare i parametri del Timer 0.Come prima cosa bisogna selezionare la sergente del clock, se vogliamo utilizzare il clock interno, alla voce Clock Source selezionare Internal (Fosc/4); se invece vogliamo utilizzare una sorgente di clock esterno selezionare External (T0CKI pin).E’ possibile abilitare il prescaler tramite il flag Enable Prescaler. Alla voce Period possiamo modificare il periodo di overflow del timer Nota: non sempre il periodo desiderato coincide con quello che propone il software, la precisione del periodo è limitata al munero di bit del timer, quindi più è elevato il numero di bit, più sarà preciso il periodo desiderato con quello generato dal software.Alla voce Reload Value è possibile inserire il valore di partenza della variabile di conteggio del Timer 0 una volta verificato l’overflow dello stesso.Possiamo abilitare l’interrupt su overflow del timer tramite il flag Enable Timer Interrupt, questa operazione abilita la funzione di Callback Function Rate, questa opzione crea una funzione che viene richiamata dopo n overflow del timer dove n è impostato dall’utente, il programma visualizza ogni quanti millisecondi viene eseguita quella funzione di Callback.

La funzione di Callback la troviamo nel file .c generato da Code Configurator alla directory: Nome Progetto -> Source Files -> MCC Generated Files -> tmr0.c in fondo al file troviamo una funzione chiamata TMR0_CallBack() all’interno di questa funzione va scritto il codice che vogliamo eseguire dopo n overflow del TMR0.Questa funzione non va richiamata in nessuna parte del main, viene eseguita in automatico.

Tutorial MPLAB X 3.15 Nicolas Farabegoli 5A �7

Page 8: Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt. Nella seconda finestra bisogna dichiarare quale

Configurazione ADC

Vediamo ora come configurare l’ADC interno del PIC16F1826: Apriamo sempre Code Configurator come nel precedente esempio e selezioniamo come risorsa l’ADC.Nella finestra di configurazione abilitiamo il modulo ADC tramite il flag Enable ADC, dobbiamo ora definire i due livelli di riferimento per l’ADC, in questo caso per comodità impostiamo come soglie i due livelli di alimentazione, quindi VDD come soglia di riferimento positiva e VSS come soglia di riferimento negativa. Definiamo ora la frequenza di campionamento dell’ADC tramite il Clock, scegliamo la divisione del clock che ci interessa e sulla destra comparirà la frequenza di campionamento relativa; è possibile anche definire questa frequenza di campionamento tramite un clock esterno generato da una rete RC.Come ultimo parametro impostiamo l’allineamento del risultato della conversione: siccome l’ADC è composto da 10 bit il risultato è composto da un byte e un secondo byte dove però i dati utili del secondo byte sono solo due bit, quindi tramite l’allineamento dei bit possiamo scegliete se l’MSB si trova a desta oppure a sinistra, per convenzione e logica si posiziona quasi sempre l’MSB a sinistra in modo da non dover manipolare il codice ulteriormente.Dobbiamo ora selezionare i pin sui quali vogliamo effettuare la conversione, quindi dalla finestra di destra alla voce ADC, alla riga ANx chiudere il lucchetto sul pin desiderato.E’ infine possibile abilitare l’interrupt di conversione abilitando il flag Enable ADC interrupt.

Clicchiamo su Generate Code in modo da generare i file e andiamo al percorso Nome progetto -> Header Files -> adc.h, qui sono riportate tutte le funzioni relative alla conversione ADC. Utilizzando queste funzioni scriviamo un programma che legga il valore analogico di tensione compreso tra 0-5V

ADC_Initialize(void); //inizializzazione ADC

uint16_t convertedValue = 0;

while (1) {

// Add your application code

ADC_StartConversion(channel_AN8);

while(ADC_IsConversionDone()) continue;

convertedValue = ADC_GetConversionResult();

convertedValue = (convertedValue * 5) / 1023;

}

Tramite ADC_Initialize(void); inizializziamo il convertitore ADC, questa funzione va richiamata fuori dal ciclo while; definiamo una variabile a 16 bit dove verrà salvato il risultato della conversione; Attraverso la funzione ADC_StartConversion(channel_AN8); iniziamo la conversione ADC sul canale scelto; ADC_IsConversionDone(); fa si che il S/H venga caricato correttamente e una volta pronto tramite convertedValue = ADC_GetConversionResult(); salviamo il dato nella variabile di conversione.

Tutorial MPLAB X 3.15 Nicolas Farabegoli 5A �8

Page 9: Tutorial MPLAB X 3 - ita.ovh · MPLAB IDE 8 Project; mentre se si vuole caricare un file gia compilato .hex selezionare Prebuilt. Nella seconda finestra bisogna dichiarare quale

Configurazione USART

Vediamo ora la configurazione della seriale sul PIC16F1826. Creiamo un nuovo progetto, apriamo Code Configurator e selezioniamo come periferica USART.

Abilitiamo il flag Enable USART per l’abilitazione della seriale, l’abilitazione del flag Enable Transmit abilita la trasmissione seriale; Auto-Baud Detection permette di riconoscere il Baud Rate in fase di ricezione, Enable Address Detect permette di riconoscere l’indirizzo di ricezione. Configuriamo ora i parametri per la trasmissione seriale: alla voce Baud Rate impostiamo la velocità di trasmissione dei bit, a fianco di questa voce il Plug-in indica l’errore sul Baud Rate in relazione con il clock di sistema.Trasmissione Bits indica il numero di bit che possono essere trasmessi in una singola trasmissione, Reception Bits indica in numero di bit che possono essere ricevuti in una singola ricezione. Clock Polarity indica la polarità del clock, quindi fronte di salita o discesa.Il flag Enable Continuous Receive permette di restare in ascolto sulla seriale e consentire una ricezione continua sulla seriale. E’ inoltre possibile abilitare interruppt sulla seriale tramite il flag Enable EUSART interruppts mentre è possibile utilizzare le librerie standard IO del C quindi printf per la scrittura sulla seriale tramite il flag Redirect STDIO to USART. Tramite la finestra di destra per la selezione dei pin selezioniamo i pin Rx e Tx per la seriale. Clicchiamo su Generate Code per generare i file necessari.

Esempio di codice che fa l’echo del dato ricevuto sulla seriale.

uint8_t RxBuffer = 1;

printf("Echo RxTx PIC\n\r");

while (1) {

// Add your application code

printf("Inserisci stringa\n\r");

while(!EUSART_DataReady){

RxBuffer = EUSART_Read();

EUSART_Write(RxBuffer);

}

}

Tramite EUSART_DataReady controlliamo se è presente un dato sulla seriale, mentre con EUSART_Read()leggiamo il byte sulla seriale, mentre con EUSART_Write(RxBuffer);scriviamo un byte sulla seriale.

Tutorial MPLAB X 3.15 Nicolas Farabegoli 5A �9