LIBRERIA per PIC:
Display TFT 2,4 inc (parallela 8 bit)
La libreria per TFT da 2,4 pollici è stata modificata da quelle per Arduino e, alcune funzioni, modificate per risparmiare Byte e adattarla al funzionamento di vari PIC con poca memoria.
Il TFT utilizza il ILI9341 e il touch screen è seplicemente collegato tra due piedini:
LCD_RS e LCD_D6 (assi X1 e X2)
LCD_WR e LCD_D7 (assi Y1 e Y2).
Giusto per capire che sole scritte e un rettangolo richiedono poco più di 2700 Byte, gestendo anche il touch screen la richiesta di memoria aumenta a 5000 Byte. Ovviamente l'immagine da visualizzare richiede molta memoria proporzionale alla grandezza dell'immagine stessa.
Se vogliamo gestire le stesse funzioni con la libreria di MikroC (presente solo per il PIC18 e non per la serie PIC16!) la richiesta di memoria varia da 11000 a 14000 Byte e senza la gestione del touch!
Vediamo in particolare gli elementi principali della libreria.
LCD_init ();
La funzione principale è la più importante del programma e opera principalmente con il collegamento tra il TFT e il PIC. E' importante capire che se intediamo usare il touch screen, 2 piedini del TFT vanno collegati ai pins del PIC che fanno parte del Convertitore Analogico Digitale (ADC) interno. Si tratta di:
LCD_RS ==> Y1
LCD_WR ==> X1
Il collegamento include una porte completa per lo scambio dei dati/comandi.
// TFT module connections
char TFT_DataPort at PORTC; // Data 8 bit
char TFT_DataPort_Direction at TRISC;
//
sbit TFT_RST at LATD0_bit; // Reset
sbit TFT_CS at LATD3_bit; // CS
sbit TFT_RS at LATA0_bit; // RS (ADC)
sbit TFT_RD at LATD1_bit; // RD
sbit TFT_WR at LATA1_bit; // WR (ADC)
//
sbit TFT_RST_Direction at TRISD0_bit;
sbit TFT_CS_Direction at TRISD3_bit;
sbit TFT_RS_Direction at TRISA0_bit;
sbit TFT_RD_Direction at TRISD1_bit;
sbit TFT_WR_Direction at TRISA1_bit;
// End TFT module connections
Attenzione: controllate la posizione dei dati (8 bit) non sono allineati dal PB0 al PB7 (vedi foto). In origine il TFT è progettato per funzionare con arduino, in particolare con "arduino uno".
Nel comando "0x36" è possibile cambiare la direzione di visualizzazione del display. Con il dato "0x88" la scelta è caduta su display posizionato con il pulsante a Sx e il lato da 320 pixel orizzontale.
LCD_clear (0x0C);
Pulisce il TFT con il colore di fondo azzurro.
Display_string (char *str);
Funzione molto utile. E' possibile selezionare la grandezza del fonts con la variabile "F_SIZE = 1;", con il valore più piccolo indicato e il massimo da testare sul TFT. Se selezioniamo un valore molto grande, riusciamo a visualizzare solo pochi caratteri contemporaneamente sul display.
E' importante inserire le variabili che definiscono il punto di partenza della stringa da visualizzare.
P_COL = 0;
(colonne X)
P_ROW = 50; (righe Y)
e il colore della stringa.
F_COLOR = RED;
Display_integer (int n);
Visualizza un intero sul TFT. Seguire le stesse istruzioni riportate per visualizzare una stringa.
Draw_BMP (unsigned int x_pos1, unsigned int y_pos1, unsigned int x_pos2, unsigned int y_pos2, const unsigned int *bitmap);
ATTENZIONE: NON USARE LA FUNZIONE CON IL PIC16: OGNI BYTE DELL'IMMAGINE OCCUPA UNA WORD DEL PIC. OGNI PAGINA DI MEMORIA DEL PIC CONTIENE 2048 WORD! DIFFICILE MEMORIZZARE UN'IMMAGINE!
Per esempio, in una pagina è possibile memorizzare 1004 Word. Significa visualizzare una figura da 32x31 pixel, davvero piccola!
Stampa sul display una figura. In origine la figura è un "*.BMP" che va modificata dal programma "bitmaptoarray.exe" che trovate nella directory "BITMAP ARRAY CONVERTER" e salvata in un file e incluso nel sorgente dalla direttiva "#include".
x_pos1 e y_pos1 sono i punti di partenza della figura, x_pos2 e y_pos2 sono i punti finali. *bitmap è il nome del file che contiene il codice per visualizzare l'immagine.
Ogni intero (2 Byte) del "*bitmap" contiene il colore di un singolo pixel.
LCD_rect (int col, int row, int width, int height, int color);
Disegna un semplice rettangolo pieno. Generalmente utilizzato per creare dei pulsanti touch.
col e row sono il punto di partenza (X, Y),
width e height sono rispettivamente la lunghezza e l'altezza del rettangolo,
color il colore.
ReadTouch ();
La funzione richiede molta memoria, circa 2400 Byte. Può risultare molto utile per gestire altre funzioni e/o parametri.
E' possibile vedere i valori rilevati dal ADC del PIC, utili durante il collaudo, da eliminare nella fase operativa.
Quando avete dei dubbi su i piedini dove sono collegati gli assi del touch, vi consiglio di testare ogni piedino di contollo (da LCD_RST a LCD_RD) con i piedini dei dati, usando un tester in ohm. Nel display presentato in questa pagina, l'asse X è collegato tra i pins
LCD_RS e LCD_D6 e presenta una resistenza di 298 ohms, l'asse Y è collegato tra
LCD_WR e LCD_D7 e presenta un resistenza di 575 ohms.
Se tocchiamo con una punta fine il lato sinistro del TFT, troviamo un valore ADC in bit di circa 84 ohms per X (col) e 99 ohms per Y (row).
Toccando in basso misuriamo un valore di 641 ohms (row) e toccando a destra un valore di 680 ohms circa (col).
Se trovate valori diversi dovete ricorrere alla calibrazione del touch screen.
Calibration_touch ();
Per calibrare il touch, dovete premere in centro del displat per circa 10/15 secondi. Il display si reseta e vi chiede di toccare il punto estremo alto a sinistra, quello estremo alto a destra e, infine quello in basso a sinistra.
I valori rilevati vengono memorizzati in EEPROM.
SCARICA LA LIBRERIA PER MIKROC PRO PIC18.
SCARICA LA LIBRERIA PER MIKROC PRO PIC16.
SCARICA IL PROGRAMMA "bitmaptoarray.exe" PER MODIFICARE IL FILE *.BMP E CARICARLO NEL PIC.