Autor Tema: Libreria full LCD para CCS  (Leído 24558 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1834
    • IDEAA
Re: Libreria full LCD para CCS
« Respuesta #15 en: 19 de Diciembre de 2008, 00:16:38 »
Lo que si veo con buenos ojos es implementar las demas caracteristicas de estos lcds en la libreria.

No entiendo a que te refieres. Que otras caracteristicas ¿?
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Libreria full LCD para CCS
« Respuesta #16 en: 19 de Diciembre de 2008, 01:15:30 »

Me refiero a lo que no viene en las demas librerias,es decir las funciones completas de los lcds , lo que ya se hablo como es el rotar izquierda , derecha,blink,cursor.

Desconectado gaston

  • PIC12
  • **
  • Mensajes: 77
Re: Libreria full LCD para CCS
« Respuesta #17 en: 19 de Diciembre de 2008, 09:33:07 »
Hola a todos,

como les dije antes, yo mismo con el Mikroe C, lo hice, hace meses, y lamentablemte no tengo el codigo, pero si recuerdo que no me fue complicado,

voy a hacerme un tiempo para instalar el Mikroe C, y ver la documentacion para tratar de repeterlo y les posteo el codigo y el hex para, como dice MGLSOFT ver que hace en assembler para estudiarlo un poco entre todos


Desconectado solitario

  • PIC10
  • *
  • Mensajes: 23
Re: Libreria full LCD para CCS
« Respuesta #18 en: 09 de Marzo de 2009, 03:04:12 »
Hola MLO___ como le haces para mostrar los comandos que mencionas en tu post????? Yo estoy usando la libreria que trae el CCS y es a 4 hilos. Con esta libreria es posible activar los comandos del LCD??

Saludos . . .



Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Libreria full LCD para CCS
« Respuesta #19 en: 10 de Marzo de 2009, 03:16:24 »
Hola.

Si es posible, de hecho yo uso la libreria a 4 "hilos" ...

Para hacer uso de los comandos, solo escribo en el main: lcd_command(LCD_OFF); para apagar la LCD, por ejemplo .....
El papel lo aguanta todo

Desconectado gaston

  • PIC12
  • **
  • Mensajes: 77
Re: Libreria full LCD para CCS
« Respuesta #20 en: 11 de Marzo de 2009, 18:55:34 »
Creo que esto que escribe MLO es justo lo que buscamos
donde podemos ver todos los comandos y su formato como lcd_command(LCD_OFF) ??

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Libreria full LCD para CCS
« Respuesta #21 en: 11 de Marzo de 2009, 19:10:18 »
En este mismo hilo en el mensaje:

http://www.todopic.com.ar/foros/index.php?topic=24085.msg195373#msg195373

encuentras todas las constantes que permiten hacer lo que quieres... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado moronilehi

  • PIC10
  • *
  • Mensajes: 17
Re: Libreria full LCD para CCS
« Respuesta #22 en: 16 de Julio de 2009, 23:16:04 »

Hola a todo soy nuevo en este mundo de microcontroladores y es la primera vez que escribo, tengo la siguiente inquietud es que  compre un Lcd VT162B/B que supuesta mente era compatible con S6A0069 bueno tuve problema con la compatibilidad del Lcd que no me funcionaba y aun no me funciona , la historia es que pedí ayuda a la empresa  ellos me enviaron un archivo y un data de este modelo(no aceptaban devoluciones) y bueno  me enviaron una librería que supuestamente trabaja con el LCD VT162B/B y es como me dijo el hombre  que la librería es del CCS, Bueno lo compilo y buala me sale un mensaje de error o es un bugs del compilador por la siguiente declaración
  #byte DataBus = PORTD               // DEFINE BUS DE DATOS
#byte Tris_DataBus = TRISD         // DEFINE TRIS DE BUS DE DATOS         
#byte ControlBus = PORTE            // DEFINE BUS DE CONTROL
#byte Tris_ControlBus = TRISE   // DEFINE TRIS DEL BUS DE CONTROL
 Yo estoy usando el compilador CCS 4.08 y el pic16f874a no sé si es un bugs o es que me enviaron para callarme un código cualquiera de internet por favor ayúdenme le agradesco por su comprensión.
Pd aquí le envió el código completo que me entrego la empresa para el LCD:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                   LCD.H                                                                                      //
//                                                             VERSION   2.1                                                                                 //
//                                                              JULIO 2009                                                                                 //
//                                                                                                                                                               //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
#nolist

                                             // DEFINICION DE CONSTANTES PARA USO EN FUNCIONES
#define HOME               0x02      // PARA PONER CURSOR EN LA POSICION 0 DEL DISPLAY. USAR CON WRITE_LCD_COM
#define INCREASE         0x02      // INCREMENTA CURSOR. USAR CON LCD.ID
#define DECREASE         0x00      // DECREMENTA CURSOS. USAR CON LCD.ID
#define SHIFT_ON         0x01      // SHIFT DISPLAY. USAR CON LCD.SHIFT
#define SHIFT_OFF         0x00      // NO SHIFT DISPLAY. USAR CON LCD.SHIFT
#define LCD_ON            0x04      // ACTIVA LCD. USAR CON LCD.MODE
#define LCD_OFF            0x00      // DESACTIVA LCD. USAR CON LCD.MODE
#define CURSOR_ON         0x02      // ACTIVA CURSOR. USAR CON LCD.CURSOR
#define CURSOR_OFF      0x00      // DESACTIVA CURSOR. USAR CON LCD.CURSOR
#define BLINK_ON         0x01      // ACTIVA PARPADEO DEL CURSOR. USAR CON LCD.BLINK   
#define BLINK_OFF         0x00      // DESACTIVA PARPADEO DEL CURSOR. USAR CON LCD.BLINK   
#define BUS_8               0x10      // DEFINE BUS DE 8 BITS. USAR CON LCD.INTERFASE
#define BUS_4               0x00      // DEFINE BUS DE 4 BITS. USAR CON LCD.INTERFASE
#define CLEAR               0x01      // LIMPIA DISPLAY. USAR CON FUNCION WRITE_LCD_DATA()
#define NOCLEAR            0x00      // NO LIMPIA DISPLAY. USAR CON FUNCION WRITE_LCD_DATA()
#define   LINE1               0x00      // PRIMERA DIRECCION DE LINEA 1.
#define   LINE2               0x40      // PRIMERA DIRECCION DE LINEA 2.
#define   LINE3               0x14      // PRIMERA DIRECCION DE LINEA 3.
#define   LINE4               0x54      // PRIMERA DIRECCION DE LINEA 4.
#define LARGO               16         // Editar esta línea para indicar la cantidad de caracteres por línea del display
#define LINEAS            2            // Editar este línea para indicar la cantidad de líneas que dispone el display
#define   NULL               0x00

#list

struct
{
   char TEXT[LARGO+1];                  // define texto para escribir en lcd   
   int ID;                                    // define si el cursor de incrementará o decrementará
   int SHIFT;                              // define el shift del cursor
   int MODE;                                 // define si el display está ON ú OFF
   int CURSOR;                              // define si el cursor estará visible
   int BLINK;                              // define si el cursor parpadeará
   int INTERFASE;                        // define interfase de 4/8 bits
} lcd;

// CONFIGURAR AQUI LOS PUERTO QUE SE USARAN PARA BUS DE DATOS Y DE CONTROL
#byte DataBus = PORTD               // DEFINE BUS DE DATOS
#byte Tris_DataBus = TRISD         // DEFINE TRIS DE BUS DE DATOS
#byte ControlBus = PORTE            // DEFINE BUS DE CONTROL
#byte Tris_ControlBus = TRISE   // DEFINE TRIS DEL BUS DE CONTROL

// GENERA PULSOS DE ESCRITURA PARA COMANDOS DEL DISPLAY Y SACA DATO
void WriteLcdComData(int x)
{
   Tris_ControlBus = 0xF8 & Tris_ControlBus;
   Tris_DatalBus = 0x00;
   DataBus = ControlBus = 0x00;
   ControlBus = 3;
   ControlBus = 0;
   ControlBus = 4;
   DataBus = x;
   ControlBus = 0;
   ControlBus = 3;
   delay_us(50);
}

// LIMPIA DISPLAY
void ClearLcd(void)
{
   WriteLcdComData(CLEAR);               // display clear
   delay_ms(2);
}

// INICIALIZA EL EL DISPLAY
 void IniLcd(void)
{
   delay_ms(20);
   WriteLcdComData(0x30);
   delay_ms(5);   
   WriteLcdComData(0x30);
   delay_us(150);
   WriteLcdComData(0x30);   
}

// CONFIGURA EL DISPLAY. LOS DATOS PARA LA CONFIGURACION DEBEN SER PUERTOS ANTES DE LLAMAR
// A ESTA FUNCION. LOS DATOS SON PARTE DE LA ESTRUCTURA LCD.
void SetupLcd(void)
{
   WriteLcdComData(0x04 | lcd.ID | lcd.SHIFT);                              //ENTRY MODE SET
   WriteLcdComData(0x08 | lcd.MODE | lcd.CURSOR | lcd.BLINK);      // DISPLAY ON OFF
   WriteLcdComData(0x28 | lcd.INTERFASE);                                    // SET FUNCTION
}

// ESCRIBE DATOS EN EL DISPLAY. X REPRSENTA DESDE QUE DIRECCIÓN DEL DISPLAY SE DESEAN ESCRIBIR LOS DATOS
// E Y INDICA SE SE LIMPIARÁ EL DISPLAY ANTES DE ESCRIBIR
// SI C = CLEAN, EL DISPLAY ES LIMPIADO
// SI C = NOCLEAN, SOLO SE ESCRIBEN LOS DATOS DESDE LA POCISION ESPECIFICADA POR POS
// LOS DATOS A ESCRIBIR DEBE SER COPIADOS PREVIAMENTE EN EL ELEMENTO LCD.TEXT DE LA ESCTRUCTIRA LCD
void WriteLcd(int pos, int c)
{
   int *p;
   Tris_ControlBus = 0xF8 & Tris_ControlBus;
   Tris_DatalBus = 0x00;
   DataBus = ControlBus =0x00;
   if (c)
      {
         clear_lcd();
         delay_ms(2);
      }
   pos|= 0x80;
   WriteLcdComData(pos);
   p = lcd.TEXT;
   for (; *p!=NULL; p++)
   {   
      DataBus = 0xff;
      ControlBus = 2;
      ControlBus = 1;
      ControlBus = 5;
      DataBus = *p;
      ControlBus = 1;
      ControlBus = 2;
      delay_us(50);
   }
}

void PutcLcd(int ini, char data)
{
   if (ini != CURRENT)
      {
         ini|= 0x80;
         WriteLcdComData(ini);
      }
   Tris_ControlBus = 0xF8 & Tris_ControlBus;
   Tris_DatalBus = ControlBus = 0x00;
   DataBus = 0xff;
   ControlBus = 2;
   ControlBus = 1;
   ControlBus = 5;
   DataBus = data;
   ControlBus = 1;
   ControlBus = 2;
   delay_us(50);
}

void ClearLcdLine(int x)
{
   int y;
   for (y=0; y<=LARGO; y++)
      {
         lcd.TEXT[y] = ' ';
      }
   lcd.TEXT[++y] = NULL;
   switch (x)
      {
         case 1   :   WriteLcd(LINE1,NOCLEAR);
                        break;
         case 2   :   WriteLcd(LINE2,NOCLEAR);
                        break;
         case 3  :   WriteLcd(LINE3,NOCLEAR);
                        break;
         case 4  :   WriteLcd(LINE4,NOCLEAR);
                        break;
         default :   break;
      }
}



Desconectado Orko

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 423
Re: Libreria full LCD para CCS
« Respuesta #23 en: 20 de Enero de 2012, 14:22:19 »
Hola.

Lo que yo hice para que la libreria de la LCD me acepte comandos (los del pdf de la controladora) es definir una funcion en la libreria:

Código: C#
  1. void lcd_command(byte cmd)
  2. {
  3.         lcd_send_byte(0, cmd);
  4. }

Y al inicio de la libreria puse los #define correspondientes:

Código: C#
  1. #define LCD_OFF                 0x08
  2. #define CURSOR_ON               0x0E
  3. #define CURSOR_OFF              0x0C
  4. #define BLINK_ON                0x0D
  5. #define BLINK_OFF               0x0C
  6. #define SHIFT_LEFT              0x1C
  7. #define SHIFT_RIGHT             0x18
  8. #define CURSOR_RIGHT    0x14
  9. #define CURSOR_LEFT             0x10
  10. #define CGRAM                   0x40
  11. #define DDRAM                   0x80


Si lo que se quiere es el texto inverso, seria implementar algun flag de aviso de que letra se va pasar a modo inverso y usar la CGRAM para generar ese caracter, obviamente tendria que haber un .h con las definiciones de las letras en modo inverso.

Saludos.




Gracias, gracias, me sirvió mucho!.