2° progetto (PIC18F45K50) – Pulsante+LED

Dopo aver imparato come si crea un nuovo progetto (qui) ed essere riusciti con successo a realizzare il ‘lampeggio LED’, possiamo passare al nostro secondo progetto: Accensione di un led tramite pulsante. Sappiamo bene entrambi che per riuscire a realizzare una cosa simile non occorre un microcontrollore, ma per imparare le basi e l’uso degli INPUT noi lo faremo con questo.

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.

Questa può essere fatta tramite il tool descritto nel primo progetto (qui) o configurando manualmente cioè ‘scrivendo a mano’ soltanto le configurazioni cambiate.

Stesura del codice.

N.B. A differenza del primo progetto, qui, alcuni passaggi verranno descritti superficialmente e per eventuali spiegazioni vi rimando alla lettura di esso.

Creazione del ciclo while infinito.

Per funzionare, il programma ha bisogno di un while infinito entro cui noi andremo a scrivere le istruzioni che verranno svolte in continuazione.

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

Nel nostro caso basteranno soltanto i registri relativi all’oscillatore interno (OSCCON e OSCTUNE) e i registri relativi al settaggio dei pin (TRIS, PORT e ANSEL).

A differenza del primo progetto, necessitiamo di un ulteriore pin che possa essere utilizzato come INPUT per leggere il segnale derivato dal pulsante. Dopo aver controllato nel datasheet quali pin siano disponibili a svolgere questa funzione, ne scegliamo uno (RD2 per me) e lo impostiamo come INPUT DIGITALE.

// Registro per la configurazione dei pin (INPUT-1, OUTPUT-0)
TRISDbits.RD1 = 0; // Pin collegato al LED
TRISDbits.RD2 = 1; // Pin collegato al pulsante
// Registro per la congigurazione del tipo di pin (ANALOGICO-1, DIGITALE-0)
ANSELD = 0b00000000;
Progettazione e stesura del programma.

Per leggere un pulsante si usa la stessa identica istruzione usata per assegnare un LIVELLO LOGICO al pin, ovvero PORTDbits.RD2. Controllare quando questo risulti a LIVELLO LOGICO ALTO (se PULL-DOWN) è facile, basta soltanto inserire un if(condizione)la cui condizione preveda lo stato ALTO del pin.

(L’ if(condizione)è una struttura che contiene al suo interno una o più istruzioni che vengono svolte soltanto quando la sua condizione risulta essere vera. Esiste inoltre la possibilità di eseguire isutruzioni quando la condizione dell’ifnon risulta essere vera, ciò è possibile utilizzando un else)

La parte relativa al controllo del pulsante sarà dunque così:

// Se il pulsante è premuto
if(PORTDbits.RD2 == 1){
    // Aspetto 30ms per evitare il rimbalzo
    __delay_ms(30);
    // Controllo se il pulsante è ancora permuto
    if(PORTDbits.RD2 == 1){
        // Istruzioni da svolgere
    }
}
// Altrimenti
else{
    // Istruzioni da svolgere
}

N.B. Dal codice sopra riportato si può notare come il pulsante venga controllato due volte, dopo un breve intervallo di 30ms. Tutto ciò è finalizzato a evitare il rimbalzo, una condizione meccanica per cui il pulsante, quando premuto o rilasciato, effettua delle oscillazioni della durata di qualche millisecondo. Le oscillazioni potrebbero portare ad un errore in lettura.

Esistono svariate soluzioni a questo problema, soprattutto HW, come alcuni IC o come la possibilità di mettere in parallelo al pulsante un condensatore di piccola capacità.

Per il ritardo invece si ricorda la definizione di _XTAL_FREQ da fare a inizio main.

Verifica del codice e programmazione del PIC.

Una breve ricontrollata generale a tutto il codice unita a una buona riuscita nella compilazione del progetto ci permetteranno poi di programmare il nostro microcontrollore.

Montaggio del circuito elettrico.

Fatto questo non ci resta altro che montare il 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 v.1.42) e funzionante la potete scaricare qui  PIC18F45K50_PulsanteLED.X

 

Lascia un commento