Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Pchuqui_1 en 17 de Agosto de 2012, 14:59:56
Título: 2 lcd graficos con un pic
Publicado por: Pchuqui_1 en 17 de Agosto de 2012, 14:59:56
Hola amigos. Estoy tratando de controlar 2 lcd graficos de 128 x 64, con un pic, utilizando el mismo puerto. Estoy utilizando la libreria que proporciona ccs c la HDM64GS12.c. Bueno, mi intención es utilizar pines diferentes para controlar el pin de habilitación "E". En la libreria aparece
que es donde se configura el pin a utilizar. :oops: Alguien tiene algo de información para estudiar, yo busqué en el foro pero no encontre nada... :oops: :oops:
Título: Re: 2 lcd graficos con un pic
Publicado por: KALLITOS en 17 de Agosto de 2012, 15:16:10
De poder se puede pero debes modificar a libreria. Por ejemplo ya no utilizarias #define GLCD_E, sino #define GLCD_E_1 y #define GLCD_E_2 Lo mismo con los comandos de escritura y demas, debes direccionar a que display envias la info.
saludos.
Título: Re: 2 lcd graficos con un pic
Publicado por: Pchuqui_1 en 17 de Agosto de 2012, 15:26:08
Hola. Ya he probado con ese metodo de definir dos #define GLCD_E_1 y 2, pero el compilador toma como valido el ultimo #define que encuentra. No se si me explico...
Título: Re: 2 lcd graficos con un pic
Publicado por: Pchuqui_1 en 17 de Agosto de 2012, 15:30:51
Que les parece este metodo que encontré... usa un par de compuertas. Tendira que definir solo un pin mas para habilitar el lcd que desee...
hola amigos yo estoy en queriendo saber como mandar a imprimir algo en un lcd 16x2 sera q puedan ayudarme
En este foro todopic encontraras l que necesitas y mas, solo tienes que empezar a leer y leer y veras que hay muchas cosas que te ayudaran.
saludos!!
Título: Re: 2 lcd graficos con un pic
Publicado por: Suky en 26 de Agosto de 2012, 14:25:55
Hola! Respecto a controlar dos GLCD, como dice KALLITOS hay que cambiar que cambiar algunas cositas. Primero definir 2 pines que controlen cada GLCD. Luego cambiar las funciones recibiendo un nuevo parametro, por ejemplo si era así GLCD_write(Address, Data), ahora quedaría GLCD_write(Address, Data, SelGLCD):
Código: C
void GLCD_write(Address, Data, SelGLCD){
// .....
if(SelGLCD==1){
// Trabajo con PIN_E1
}else{
// Trabajo con PIN_E2
}
// .....
}
Saludos!
Título: Re: 2 lcd graficos con un pic
Publicado por: Pchuqui_1 en 26 de Agosto de 2012, 15:32:19
Hola Suky. Voy a seguir intentando. He hecho algunas pruebas modificando la librería y se me ataron las ramas.. :oops: Cuando la tenga la subo. Gracias.
Título: Re: 2 lcd graficos con un pic
Publicado por: Pchuqui_1 en 28 de Agosto de 2012, 10:31:11
Buenas otra ves. Hice algo asi, como dijo suky...
Esto lo agregé dentro de la libreria HDM64GS12
#ifndef LCD1 #define LCD1 1 #endif
#ifndef LCD2 #define LCD2 0 #endif
esta es la función de inicialización que le agrego un parámetro mas.. void glcd_init(int1 mode, int1 SelGLCD);
quedando así:
void glcd_init(int1 mode, int1 SelGLCD) { // Initialze some pins if (SelGLCD==LCD1){ //output_low(PIN_B0); } else{ //output_low(PIN_B1); }
output_high(GLCD_RST); output_low(GLCD_E_1);
output_low(GLCD_CS1); output_low(GLCD_CS2);
El problema es cuando llamo a la función para empezar con la inicialización me da error... glcd_init(ON,LCD1);
*** Error 58 "Principal.c" Line 66(14,18): Expecting a close paren :( :( :( :( :(
Título: Re: 2 lcd graficos con un pic
Publicado por: KALLITOS en 28 de Agosto de 2012, 10:42:34
busca en la linea 66. alli esta el problema.
o sube tu codigo completo para ver como va.
Título: Re: 2 lcd graficos con un pic
Publicado por: Pchuqui_1 en 28 de Agosto de 2012, 11:06:06
Estoy modificando la rutina de inicializacion... pongo solo el pedazo que corresponde.
// Purpose: Initialize the LCD. // Call before using any other LCD function. // Inputs: OFF - Turns the LCD off // ON - Turns the LCD on
void glcd_init(int1 mode, int1 SelGLCD) { // Initialze some pins if (SelGLCD==LCD1){ output_low(LCD1); } else{ output_low(LCD2); }
output_high(GLCD_RST); output_low(GLCD_E_1);
output_low(GLCD_CS1); output_low(GLCD_CS2);
output_low(GLCD_DI); // Set for instruction glcd_writeByte(GLCD_LEFT, 0xC0); // Specify first RAM line at the top glcd_writeByte(GLCD_RIGHT, 0xC0); // of the screen glcd_writeByte(GLCD_LEFT, 0x40); // Set the column address to 0 glcd_writeByte(GLCD_RIGHT, 0x40); glcd_writeByte(GLCD_LEFT, 0xB8); // Set the page address to 0 glcd_writeByte(GLCD_RIGHT, 0xB8);
if(mode == ON) { glcd_writeByte(GLCD_LEFT, 0x3F); // Turn the display on glcd_writeByte(GLCD_RIGHT, 0x3F); } else { glcd_writeByte(GLCD_LEFT, 0x3E); // Turn the display off glcd_writeByte(GLCD_RIGHT, 0x3E); }
glcd_fillScreen(OFF); // Clear the display
#ifdef FAST_GLCD glcd_update(); #endif }
Entonces llamo a la rutina glcd_init desde el programa principal, para primero inicializar el LCD1 y luego el LCD2. Porque no puedo inicializar los dos juntos de esta forma...
glcd_init(ON,LCD2); glcd_init(ON,LCD1);
pero me da el error *** Error 58 "Principal.c" Line 66(14,17): Expecting a close paren, que es en esas dos lineas. La función no me toma el dato LCD2 ni LCD1. Creo que lo definí todo bien, las compare con las otras y esta igual...
Título: Re: 2 lcd graficos con un pic
Publicado por: KALLITOS en 28 de Agosto de 2012, 11:10:33
no se sabe cual es la linea 66
Título: Re: 2 lcd graficos con un pic
Publicado por: Pchuqui_1 en 28 de Agosto de 2012, 12:01:43
En estas dos lineas me da el error..
glcd_init(ON,LCD2); glcd_init(ON,LCD1);
Cuando llamo a la rutina de inicialización, no me acepta el parámetro LCD2 Y LCD1.
Título: Re: 2 lcd graficos con un pic
Publicado por: Pchuqui_1 en 28 de Agosto de 2012, 17:08:10
Amigos!! lo tengo andando!!! Me falta depurar bien pero esta andando un lujo!! :-/ :-/ :-/ Tuve que modificar la librería "HDM64GS12.c" y "la graphics.c". Cuando la tenga lista las subo. Saludos!!
Título: Re: 2 lcd graficos con un pic
Publicado por: Pchuqui_1 en 30 de Agosto de 2012, 17:21:53
Bueno. Subo las librerías para manejar los 2 lcd gráficos con un pic. Anda muy bien. Es necesario utilizar las dos librerías juntas. Hay que inicializar los LCD por separado. Para seleccionar el lcd donde se quiere escribir tenemos que agregar al final de cada instrucción "SelGLCD_1" o SelGLCD_2, dependiendo si escribimos en el LCD1 o el LCD2. Por ejemplo para inicializarlos hacemos:
glcd_init(ON,SelGLCD_1); glcd_init(ON,SelGLCD_2);
Si queremos escribir sobre el LCD1 utilizamos la instrucción:
Es necesario definir los pines de eneable "E", ello se hace desde el archivo HDM64GS12_modificada.h, como hacían con anterioridad para definir todos los demás.