1° progetto (PIC18F45K50) – Lampeggio LED

Una volta aver imparato come si crea un nuovo progetto all’interno del nostro ambiente di sviluppo (qui), possiamo procedere con la realizzazione del famoso ‘lampeggio LED’.

Progetto completo.

Fasi realizzazione progetto (dopo la sua creazione).

  1. Configurazione del PIC
  2. Stesura del codice:
    1. Creazione del ciclo while infinito
    2. Settaggio iniziale (pin e dispositivi)
    3. Progettazione e stesura del programma
    4. Verifica del codice e programmazione del PIC
  3. Montaggio del circuito elettrico
  4. Test su breadboard

Configurazione del PIC.

Prima di iniziare a scrivere il nostro main.c è buona regola configurare il PIC attraverso i suoi registri interni. MPLAB X mette a disposizione un tool utilissimo per svolgere questo, Configuration Bits, collocato in Window → PIC Memory Views → Configuration Bits.

La figura precedente ci mostra il percorso per trovare il tool.

Si aprirà così un ‘menù’ nella parte bassa della Sezione dedicata alla visualizzazione file e alla stesura del codice che, attraverso dei menù a tendina, ci consentirà di modificare le configurazioni del nostro PIC.

FOSC (Frequenza dell’oscillatore, possibilità di scegliere se interno o esterno), noi utilizziamo un’oscillatore interno che ci permette di risparmiare due pin del microcontrollore → INTOSCIO;

WDTEN (Watchdog, timer utilizzato per verificare il corretto funzionamento del programma), noi non lo utilizziamo → OFF;

MCLRE(Memory cleaner reset, possibilità di resettare il micro attraverso la pressione di un pulsante), noi non lo utilizziamo, il che ci permette di risparmiare un pin del microcontrollore che potrà essere utilizzato soltanto come INPUT → OFF;

LVP(Low voltage programming, programmazione basata sull’utilizzo del 6 pin del PICkit3), noi non la utilizziamo → OFF;

Una volta cambiate queste configurazioni dobbiamo generare il codice da inserire nel nostro main, Generate Source Code to Output → Copiamo il codice appena creato e lo sostituiamo a

#include <xc.h>, perchè il file appena generato contiene già questa inclusione (molti errori nella compilazione sono dovuto a questo per ciò bisogna prestare a questa operazione un minimo di riguardo).

Stesura del codice.

Creazione del ciclo while infinito.

Eseguite le istruzioni precedenti non manca altro che scrivere il programma vero e proprio. Rechiamoci innanzitutto all’interno del main.c, precisamente all’interno dell’omonima funzione, e creiamo all’interno di essa un while infinito while(1){}entro cui andremo a scrivere il programma che verrà eseguito continuamente.

void main (void){
    while(1){
    }
}
Settaggio iniziale (pin e dispositivi).
PINComponente
RD1+ (LED)

All’interno della funzione main e prima del while(1)andiamo a settare i registri che ci occorrono:

// Registri di configurazione del clock interno (riferimento al datasheet)
OSCCON = 0b01110010;
OSCTUNE = 0b00000000;
// Registro per la configurazione dei pin (INPUT-1, OUTPUT-0)
TRISD = 0b11111101;
// Registro per la congigurazione del tipo di pin (ANALOGICO-1, DIGITALE-0)
ANSELD = 0b00000000;

OSCCON registro a 8bit, riservato all’oscillatore interno;

OSCTUNE registro a 8bit, riservato all’oscillatore interno;

TRISD registro a 8bit utilizzato per configurare i pin come OUTPUT-0 o INPUT-1;

ANSELD registro a 8bit utilizzato per configurare i pin come ANALOGICI-0 o DIGITALI-1;

P.S. La D sta ad indicare che andremo a impostare i pin da RD7 (bit più alto) a RD0 (bit più basso), se fosse stato B avremmo impostato i pin da RB7 a RB0 e così via.

P.S. È buona regola impostare i pin non utilizzati come INPUT per evitare eventuali problemi.

Progettazione e stesura del programma.

All’interno del while(1)andiamo a scrivere il programma:

while(1){
     PORTDbits.RD1 = 1;
     __delay_ms(500);
     PORTAbits.RD1 = 0;
     __delay_ms(500);
}

PORTD (registro utilizzato per ‘portare’ un pin a LIVELLO LOGICO BASSO-0 o a LIVELLO LOGICO ALTO-1);

P.S. Vale la stessa regola dei TRIS e degli ANSEL.

P.S. Per configurare un solo pin, come nel nostro caso si ricorre all’uso della sintassi seguente: registrobits.nomepin = 0;

__delay_ms(tempoRitardo);(funzione interna al compilatore che genera un ritardo espresso in ms e pari a tempoRitardo. Necessita della dichiarazione di _XTAL_FREQ, variabile che indica la frequenza dell’oscillatore. Solitamente questa viene posta prima delle configurazioni del microcontrollore. #define _XTAL_FREQ frequenzaOscillatore.

Verifica del codice e programmazione del PIC.

Scritto tutto il codice non resta che compilare il tutto e verificare eventuali errori. Per compilare semplicemente il programma dobbiamo cliccare sulla prima icona proposta in figura mentre per cancellare i file creati dalla precedente compilazione ed eseguirne una nuova dobbiamo cliccare sulla seconda icona proposta in figura . Qualora non ci fossero problemi si può procedere con la programmazione del PIC.

Per programmare il microcontrollore dobbiamo controllare due diversi fattori:

1. I giusti collegamenti fra i pin del microcontrollore e i pin del vostro programmatore, rimando il lettore ai relativi datasheet.

2. L’alimentazione del PIC. Il PIC deve essere alimentato (alla sua tensione di funzionamento) ed esistono due modi per realizzare ciò, con un’alimentazione esterna o alimentandolo direttamente dal programmatore. Nel caso del PICkit3 (penso sia un processo analogo per ogni programmatore HW) per alimentare il microcontrollore basta andare su File → Project Properties (LampeggioLED) → PICkit3 → Nel menù a tendina selezionare Power e puntare la casella Power target circuit from PICkit3 (ed eventualmente selezionare la tensione di alimentazione) → OK.

Controllati questi due elementi possiamo programmare il nostro PIC cliccando sull’icona sguente .

Durante il processo potrebbero comparire diverse finestre di dialogo, non preoccupatevi e leggete attentamente cosa dicono prima di proseguire.

Montaggio del circuito.

Non ci resta soltanto che eseguire lo schema elettrico del circuito.

 

Mi raccomando prestate particolare attenzione alle varie alimentazioni perchè la mancata attenzione su ciò potrebbe portare alla rottura di diversi componenti.

Test su breadboard.

 

Download.

La cartella del progetto completo, compilato (con XC8 v2.05) e funzionante la potete scaricare qui  PIC18F45K50_LampeggioLED.X

 

 

 

 

Lascia un commento