Autor Tema: 2 lcd graficos con un pic  (Leído 3810 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
2 lcd graficos con un pic
« 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

#ifndef GLCD_E
#define GLCD_E       PIN_B5   // Enable
#endif

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:

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: 2 lcd graficos con un pic
« Respuesta #1 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.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: 2 lcd graficos con un pic
« Respuesta #2 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...

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: 2 lcd graficos con un pic
« Respuesta #3 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...



Desconectado lupe

  • PIC10
  • *
  • Mensajes: 1
consulta lcd
« Respuesta #4 en: 26 de Agosto de 2012, 13:51:27 »
hola amigos yo estoy en queriendo saber como mandar a imprimir algo en un lcd 16x2 sera q puedan ayudarme

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: consulta lcd
« Respuesta #5 en: 26 de Agosto de 2012, 14:07:51 »
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!!
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: 2 lcd graficos con un pic
« Respuesta #6 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
  1. void GLCD_write(Address, Data, SelGLCD){
  2.  
  3.      // .....
  4.  
  5.      if(SelGLCD==1){
  6.           // Trabajo con PIN_E1
  7.     }else{
  8.          // Trabajo con PIN_E2
  9.     }
  10.  
  11.      // .....
  12. }

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: 2 lcd graficos con un pic
« Respuesta #7 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.   

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: 2 lcd graficos con un pic
« Respuesta #8 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   :( :( :( :( :(


Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: 2 lcd graficos con un pic
« Respuesta #9 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.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: 2 lcd graficos con un pic
« Respuesta #10 en: 28 de Agosto de 2012, 11:06:06 »
Estoy modificando la rutina de inicializacion... pongo solo el pedazo que corresponde.

#ifndef HDM64GS12
#define HDM64GS12

#ifndef GLCD_WIDTH
#define GLCD_WIDTH   128
#endif

#ifndef GLCD_CS1
#define GLCD_CS1     PIN_B0   // Chip Selection 1
#endif

#ifndef GLCD_CS2
#define GLCD_CS2     PIN_B1   // Chip Selection 2
#endif

#ifndef GLCD_DI
#define GLCD_DI      PIN_B2   // Data or Instruction input
#endif

#ifndef GLCD_RW
#define GLCD_RW      PIN_B4   // Read/Write
#endif

//#ifndef GLCD_E
//#define GLCD_E       PIN_B5   // Enable
//#endif


#ifndef GLCD_RST
#define GLCD_RST     PIN_C0   // Reset
#endif

#define GLCD_LEFT    0
#define GLCD_RIGHT   1

#ifndef ON
#define ON           1
#endif

#ifndef OFF
#define OFF          0
#endif

#ifndef LCD
#define LCD           1
#endif

#ifndef LCD2
#define LCD2          0
#endif

/////////////////////////////////////////////////////////////////////////
// Function Prototypes
/////////////////////////////////////////////////////////////////////////
void glcd_init(int1 mode, int1 SelGLCD);
void glcd_pixel(int8 x, int8 y, int1 color);
void glcd_fillScreen(int1 color);
void glcd_writeByte(int1 side, BYTE data);
BYTE glcd_readByte(int1 side);
void glcd_update();
/////////////////////////////////////////////////////////////////////////

#ifdef FAST_GLCD
struct
{
   int8 left[512];
   int8 right[512];
} displayData;
#endif

// 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...

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: 2 lcd graficos con un pic
« Respuesta #11 en: 28 de Agosto de 2012, 11:10:33 »
no se sabe cual es la linea 66
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: 2 lcd graficos con un pic
« Respuesta #12 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.

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: 2 lcd graficos con un pic
« Respuesta #13 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!!

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: 2 lcd graficos con un pic
« Respuesta #14 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:

glcd_text57(0,57,configuracion_hora,1,1,SelGLCD_1);

Para borrar el LCD2 hacemos:

glcd_fillscreen(0,SelGLCD_2);

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.

Gracias.


 

anything