Modifica Libreria Laurtec GLCD

  • Video Lab
  • Autore della discussione
  • Premium Utente
  • Premium Utente
Di più
9 Anni 9 Mesi fa - 9 Anni 9 Mesi fa #1 da Video Lab
Come da titolo apro questo post per comunicare che ho modificato con successo la libreria GLCD di Mauro, per adattarla ad un display 192x64 della Winstar WG19264E-YYH-V#N, oltre che a farla funzionare su un PIC16F877A.

File allegato:

Nome del file: LibreriaGL...2x64.rar
Dimensione del file:426 KB


Per compilare il tutto ho usato Mplab X e come compilatore HI-TECH 9.82, che comunque per quanto riguarda il PIC16F877A risulta identico al nuovo compilatore XC, io utilizzo HI-TECH perchè ho la versione completa e quindi supporta l'ottimizzazione del codice, ed è tanta roba, è proprio vero che dalla versione completa alla versione Lite il codice lievita di 3 volte, testato.

Ovviamente ho dovuto modificare tutte le direttive che fanno riferimento a XC e al C18 nei due file di Mauro.
Ho modificato i vari #define
Code:
#ifndef GLCD_K0108B_H #define GLCD_K0108B_H #include <htc.h> #include <stdlib.h> #include <delay.h> #define NOP_DELAY _delay(3)

Il ritardo _delay è definito nella libreria htc.h come per quella xc.h allo stesso modo.
Nel file h ho dovuto modificare la definizione dei pin
Code:
//************************************************** // GLCD pin constants //************************************************** // #define GLCD_DATA_WRITE PORTD il PIC16F877A non ha il registro LAT, quindi va usato solo il registro PORT #define GLCD_DATA PORTD #define GLCD_DATA_DIRECTION TRISD #define GLCD_D_I RB0 #define GLCD_R_W RB1 #define GLCD_E RB2 #define GLCD_CS1 RE0 #define GLCD_CS2 RE1 #define GLCD_CS3 RE2 #define GLCD_RST RC2 #define GLCD_LED RC4

Ho dovuto definire le nuove "misure" :
Code:
//************************************************** // GLCD Controller constants //************************************************** #define INPUT 0xFF #define OUTPUT 0x00 #define NUMBER_OF_PAGES 8 #define X_RESOLUTION 192 #define Y_RESOLUTION 64 #define CONTROLLER_MAX_X 128 #define CONTROLLER_MID_X 64

Il display che usato io, ha i pin Chip Select che funzionano negati, ossia attivi bassi, per ovviare a questo ho aggiunto una nuova macro solo per i CS
Code:
//************************************************** // General Purpose constants //************************************************** #define TURN_ON_LED_GLCD 0b00000001 #define TURN_OFF_LED_GLCD 0b00000000 #define TURN_ON_DISPLAY 0b00000001 #define TURN_OFF_DISPLAY 0b00000000 #define HIGH_GLCD 0b00000001 #define LOW_GLCD 0b00000000 #define CS_ON 0 // Nuove macro solo per pin CHIP SELECT #define CS_OFF 1 // Nuove macro solo per pin CHIP SELECT #define RESET_L 0 // Nuove macro solo per pin reset #define RESET_H 1 // Nuove macro solo per pin reset #define EN_L 0 #define EN_H 1 #define ENABLE_GLCD 0b00000001 #define DISABLE_GLCD 0b00000000 #define ENABLE_RESET_GLCD 0b00000000 #define DISABLE_RESET_GLCD 0b00000001 #define GLCD_CHIP_SELECT_1 0x00 #define GLCD_CHIP_SELECT_2 0x01 #define FILLING_WHITE 0x00 #define FILLING_BLACK 0xFF //***************************************************

Ho effettuato queste modifiche per poter rendere modificabile in modo più rapido il codice per adattarlo a display diversi. Se si utilizza un display con CHIP SELECT attivo alto basta scambiare di valori CS_ON =1 e CS_OFF=0

Un altro problema che ho incontrato il pin di RESET.
Probabilmente il display utilizzato da me ha un carico capacitivo molto alto, quindi sullo spunto il pic non è in grado di pilotarlo in modo adeguato, mandandolo in protezione.
In teoria utilizzando una resistenza in serie da 100ohm si dovrebbe risolvere, io per semplicità ho utilizzato un transistor NPN come buffer tra il PIC e il display.

In fondo al file h ci sono 2 loghi, quello attivo è quello della foto
[img]http://http://i62.tinypic.com/o8dyrr.jpg[/img]

Quello commentato è il logo LAURTEC modificato per il display 192x64.
In allegato allo zip c'è anche il datasheet del display.
Il controller usato è NT7108C che comunque è identico al KS0108B, difatti timing delle varie fasi di lettura e scrittura sul display sono identiche.

Ovviamente ho dovuto modificare tutte le funzioni primarie dove avvengono le funzioni di scrittura e lettura visto che ora c'è una porzione di schermo in più da controllare.
Di seguito una di esse (ad ogni modo sono tutte quelle dove sono presenti i pin CS)
Code:
/********************************************* // clear_GLCD //********************************************* void clear_GLCD (unsigned char filling_color) { unsigned char page = 0; unsigned char address = 0; GLCD_CS1 =CS_ON; GLCD_CS2 =CS_OFF; GLCD_CS3 =CS_OFF; set_address_GLCD (address); for (page = 0; page < NUMBER_OF_PAGES; page++) { set_page_GLCD (page); for (address = 0; address < Y_RESOLUTION; address++) { // wait_busy_status_GLCD (); write_data_GLCD (filling_color); // wait_busy_status_GLCD (); } } GLCD_CS1 = CS_OFF; GLCD_CS2 = CS_ON; GLCD_CS3 = CS_OFF; address = 0; set_address_GLCD (address); for (page = 0; page < NUMBER_OF_PAGES; page++) { set_page_GLCD (page); for (address = 0; address < Y_RESOLUTION; address++) { // wait_busy_status_GLCD (); write_data_GLCD (filling_color); // wait_busy_status_GLCD (); } } GLCD_CS1 = CS_OFF; GLCD_CS2 = CS_OFF; GLCD_CS3 = CS_ON; address=0; set_address_GLCD (address); for (page = 0; page < NUMBER_OF_PAGES; page++) { set_page_GLCD (page); for (address = 0; address < Y_RESOLUTION; address++) { // wait_busy_status_GLCD (); write_data_GLCD (filling_color); // wait_busy_status_GLCD (); } } GLCD_CS1 = CS_OFF; GLCD_CS2 = CS_OFF; GLCD_CS3 = CS_OFF; }

Resoconto finito, ringrazio Mauro per la sua libreria, e spero che questa modifica possa tornare utile ad altri.

Volere è Potere
Allegati:
Ultima Modifica 9 Anni 9 Mesi fa da Video Lab.
I seguenti utenti hanno detto grazie : alfa75, toni

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • alfa75
  • Platino Utente
  • Platino Utente
Di più
9 Anni 9 Mesi fa #2 da alfa75
Ottimo lavoro!
prossimamente la proverò per un mio progetto

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Video Lab
  • Autore della discussione
  • Premium Utente
  • Premium Utente
Di più
9 Anni 8 Mesi fa - 9 Anni 8 Mesi fa #3 da Video Lab
Aggiorno il post, in quanto ho adattato la libreria per utilizzarla con il ChipKitUno32 equipaggiato con PIC32MX320F128H.
Il Display utilizzato è una variante di quello che ho usato con il PIC16F877A, ossia WG19264A-YYH-V#N000 che si differenzia per la tensione di alimentazione che è a 3.3V, mentre l'altro era a 5V.
Questo è dovuto al fatto che il PIC32MX è a 3.3V, anche se ha dei pin 5V tollerant, però poi ci sarebbero stati problemi con i livelli dei segnali di pilotaggio, altra soluzione utilizzare un ic adattatore di livello, ma fortunatamente avevo già entrambi i display.
Altra differenza i comandi CS1, CS2 e CS3 sono attivi alti, mentre in quello precedente viceversa.
Spero di aver fatto cosa gradita.
p.s. Su questo pic le impostazioni dei Registri TRIS LAT e PORT sono fondamentali, anche perchè il pic configurato con le mie impostazioni ha come frequenza di Clock 80 Mhz.
Per sbaglio inizialmente ho invertito l'utilizzo del registro LAT e PORT.... non vi dico le testate nel muro per capire come mai in lettura dalla linea dati non mi rilevasse la status del display...

File allegato:

Nome del file: ChipKitUno.X.rar
Dimensione del file:390 KB


Sono passato al PIC32MX perchè avevo bisogno di più spazio per il mio progetto e 2 usart native, e poi perchè nel cassetto c'era già il ChipKitUNO 32.
Ho provato anche con l'Orbit16 di Gianni, ma purtroppo non c'erano abbastanza pin per quello che devo fare io (4 tasti, 2 usart e la gestione del GLCD).
Ho provato ad interfacciare la linea dati del GLCD con il PCF8574A, ma non funziona per problematiche di Timing, ossia la scrittura e la lettura della linea dati va fatta entro un certo tempo, utilizzndo il PCF8574A si perde molto tempo in lettura e scrittura.
Saluti

Ho utilizzato Mplab IDE X e XC32

Volere è Potere
Allegati:
Ultima Modifica 9 Anni 8 Mesi fa da Video Lab.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
9 Anni 8 Mesi fa #4 da Mauro Laurenti
ottimo,

grazie per la condivisione.

Ma mi state lasciando solo con i PIC18! :)

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Video Lab
  • Autore della discussione
  • Premium Utente
  • Premium Utente
Di più
9 Anni 8 Mesi fa #5 da Video Lab
Grazie a te Mauro, che hai fatto il più del lavoro, senza la tua libreria partire da zero sarebbe stato decisamente più lungo.
Ora sto studiando delle modifiche per poter stampare in qualsiasi posizione dello schermo delle immagini di dimensioni diverse.
Credo che le tratterò come dei caratteri più "grandi" e modificherò la funzione di stampa char aggiungendo le dimensioni del logo.

Volere è Potere

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro Laurenti

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.