5° progetto (PIC18F45K50) – Display LCD

Nel progetto proposto andremo ad analizzare le principali caratteristiche di un display LCD 16×2 (COLONNExRIGHE), sino ad arrivare alla stesura di alcune righe di testo.

Progetto completo.

Display LCD.

Come si può notare dalla figura soprastante, il display LCD è composto, all’interno dello schermo, da tanti rettangolini il cui numero viene esplicitato nel datasheet (per un display 16×2 avremo, ad esempio, 32 rettangoli, disposti rispettivamente per COLONNExRIGHE). All’interno di questi rettangoli viene stampato il carattere desiderato, ciò determina un numero massimo di caratteri stampabili per cui, qualora nel vostro progetto si necessiti di un maggior numero di righe, bisogna ricorrere all’acquisto di un display più grande.

Il display può essere controllato attraverso due modalità:

  • Modalità a 4 bit
  • Modalità a 8 bit

La differenza principali tra queste due modalità di controllo sta nell’uso di un numero diverso di pin (4 per la modalità a 4 bit, 8 per la modalità ad 8 bit) e nella velocità di esecuzione del comando richiesto. Quest’ultimo aspetto può essere tranquillamente trascurato perchè qualche ms in più nell’esecuzione non ci cambia la vita, quando la possibilità di risparmiare 4 pin, da poter utilizzare a nostro piacimento, risulta essere migliore.

Per questo la libreria proposta a fine progetto è adatta a funzionare solo in modalità a 4 bit.

Con questa modalità verranno utilizzati solo i pin da DB4 a DB7 per la trasmissione dati, più ovviamente i pin di controllo.

Nella figura seguente potete notare la mappatura pin del display LCD che possiedo:

La maggior parte dei display LCD possiede questa mappatura, ma per evitare problemi vi rimando al relativo datasheet.

Consigli sull’acquisto di un display.

Mi permetto di darvi dei consigli utili sull’acquisto di un display, qualora ancora non ne aveste a disposizione:

  • HD44780 compatibile, l’HD44780 è il driver che gestisce il display e la maggior parte delle librerie (inclusa la mia) sono adattate su questo standard
  • Numero di COLONNExRIGHE adatto alle vostre esigenze
  • Eventuale retroilluminazione
  • Costo

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.

La prima cosa da fare prima di procedere con la stesura del codice è quella di prendere i file della libreria ed inserirli all’interno della nostra cartella progetto. Una volta fatto questo dobbiamo includere la libreria, andiamo quindi nel nostro main e inseriamo questa parte di codice:

#include <xc.h>
#include "LCD.h"

Le due virgolette stanno a simboleggiare che il file entro ad esse si trova all’interno della nostra cartella.

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
RA0RS (Display LCD)
RA1EN (Display LCD)
RA2D4 (Display LCD)
RA3D5 (Display LCD)
RA4D6 (Display LCD)
RA5D7 (Display LCD)

Il progetto in questione non prevede l’utilizzo di alcun registro particolare, necessita soltanto delle configurazioni dei pin utilizzati per gestire il nostro display.

I pin di controllo e i pin per la trasmissione dati devono essere subito impostati. La loro definizione si trova all’interno della libreria.

#define RS PORTAbits.RA0
#define EN PORTAbits.RA1
#define D4 PORTAbits.RA2
#define D5 PORTAbits.RA3
#define D6 PORTAbits.RA4
#define D7 PORTAbits.RA5

Una volta definiti i pin possiamo passare ad impostarli all’interno del nostro main:

// Registro per la configurazione dei pin (INPUT-1, OUTPUT-0)
TRISA = 0x00; // Pin collegato al LED
// Registro per la congigurazione del tipo di pin (ANALOGICO-1, DIGITALE-0)
ANSELA = 0x00;

Per le configurazioni riguardanti il display (inizializzazione, cursore, stato del display, ecc.) abbiamo la libreria, che contiene alcune funzioni che ci faciliteranno la stesura del tutto.

Progettazione e stesura del programma.

Il programma che andremo a scrivere esegue alcune delle funzioni disponibili dalla libreria (il progetto completo si trova a fondo pagina).

while (1) {
    LCD_Cancella();
    LCD_Cursore(1,1);
    LCD_ScriviStringa("PROGRAMMAZIONE");
    LCD_Cursore(2, 1);
    LCD_ScriviStringa("MICRO");
    while (Conta != 0) {
        LCD_Cursore(2, 15);
        LCD_ScriviIntero(Conta);
        Conta--;
        __delay_ms(500);
    }
    Conta = 10;
    LCD_Cancella();
    LCD_Cursore(1,1);
    LCD_ScriviStringa("Ciao a tutti.");
    __delay_ms(2000);
}
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.

Durante la compilazione potrete incorrere in qualche WARNING, ma non preoccupatevi è tutto funzionante.

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_LCD.X

La libreria è stata testata con un display 16×2, con display più grandi si potrebbe incorrere in alcuni errori dovuti alla stesura della libreria come ad esempio con la funzione LCD_Cursore(x, x);. Per eventuali richieste contattatemi pure.

Lascia un commento