Descrizione delle procedure di scrittura sul display LCD

Come per quelle I2C, anche le librerie LCD del C18 Microchip usano waiting loop e delay che non sono compatibili con il sistema pseudo-RTOS.

Inoltre, come si vede nello schema, il display (16 caratteri per 2 righe) è collegato al PIC tramite un I/O expander I2C usando la modalità a 4 bit.
Tutto questo implica che il colloquio deve avvenire rispettando accuratamente lo stack di comunicazione a lato.

Codice per la gestione del display

Tutto si appoggia sulle procedure I2C tramite LcdByteSet che ricostruisce il byte da inviare sulla base del valore dei dati e dei flag impostati.

La scrittura a 8 bit (Lcd8Bit) si usa solamente nella fase di inizializzazione dell'LCD, dopo l'avvio si usa sempre quella a 4 bit (Lcd4Bit).

La procedura base è la LcdPutChar che invia un byte in modalità Dati o Comandi secondo necessità.
Questa è utilizzata da tutte le routine a livello superiore:
-
LcdInit, in fase di inizializzazione.
-
LcdPutString, per la scrittura di una stringa.
-Tutte le altre a livello ancora più alto per inviare un comando (clear display, posiziona cursore, ecc...) o un dato (singolo carattere).

La modalità di scrittura di una stringa è differente se questa è memorizzata nella zona programma (LcdPutStringInitRom) o in RAM, l'architettura Harvard del PIC infatti consente una differenza di lunghezza tra il bus dati e quello programma e per questo i puntatori devono essere riallineati con le tecniche suggerite nel manuale del C18.
Sulla procedura
LcdPutString si poggia anche la routine LcdPutStringInitC2A (Character To Ascii) che trasforma in decimale i valori esadecimali delle variabili per consentirne una lettura più "umana".

Durante la fase di inizializzazione (LcdInit) si impostano i parametri desiderati (Interfaccia a 4 bit, 2 linee di visualizzazione e caratteri di 5x7 punti) seguendo le specifiche del costruttore.
Subito dopo si visualizza la versione del software caricato ed il valore letto dal sensore di gas, questo serve per verificare che l'elemento riscaldante del TGS822 abbia raggiunto la temperatura necessaria prima di avviare il robot.
All'avvio (pressione di uno dei due bumpers) viene visualizzata una stringa fissa, si spegne la retroilluminazione e si disabilitano tutte le routine di interfaccia utente per non disturbare la marcia normale.

Premendo il tasto rosso o quello verde si entra nella procedura Display che accende il backlight e visualizza i diversi menu impostati.
Con il tasto blu si entro nello stato di modifica solamente se il menu selezionato è abilitato.
Con il tasto bianco si seleziona la variabile da modificare. Per indicare la variabile sotto modifica, lampeggia il nome della stessa.
In questa fase i tasti rosso e verde incrementano e diminuiscono il valore in modifica.
Sia le stringhe fisse che le variabili sono organizzate in array in modo che, semplicemente cambiando il valore di DisplayStatus o CursorStatus, cambi la scritta visualizzata.
Anche il lampeggio dell'indicatore della variabile in modifica è ottenuto calcolando il puntatore dell'array con una combinazione tra DisplayStatus e CursorStatus:

Quando si arriva all'ultimo menu o al primo, si torna nello stato di marcia normale, con la retroilluminazione spenta, la scritta fissa e tutte le user interface disabilitate, ci si rientrerà alla pressione dei tasti rosso o verde.
aggiornato il 10 - 12 - 2005