Autor Tema: Librería LCD-C32  (Leído 13035 veces)

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Librería LCD-C32
« en: 16 de Noviembre de 2011, 03:24:44 »
Me gustaría estrenar este subforo con la publicación de una librería para LCD que he estado adaptando estos días. Se trata de una adaptación de la famosa FlexLCD de CCS que he modificado para que funcione en C32.

Lo único que hay que modificar es la asignación de pines que se realiza al principio, y que habrá que configurar según sea el hardware seleccionado:

Código: C
  1. // Pines a los que está conectado el LCD
  2.  
  3. #define LCD_DB4                 LATDbits.LATD8
  4. #define LCD_DB5                 LATCbits.LATC13
  5. #define LCD_DB6                 LATDbits.LATD11
  6. #define LCD_DB7                 LATDbits.LATD0
  7. #define LCD_RS                  LATDbits.LATD5
  8. #define LCD_RW                  LATDbits.LATD6
  9. #define LCD_E                   LATDbits.LATD1
  10.  
  11. #define TRIS_DB4                TRISDbits.TRISD8
  12. #define TRIS_DB5                TRISCbits.TRISC13
  13. #define TRIS_DB6                TRISDbits.TRISD11
  14. #define TRIS_DB7                TRISDbits.TRISD0
  15. #define TRIS_RS                 TRISDbits.TRISD5
  16. #define TRIS_RW                 TRISDbits.TRISD6
  17. #define TRIS_E                  TRISDbits.TRISD1
  18.  
  19. #define LCDRW_DB4               PORTDbits.RD8
  20. #define LCDRW_DB5               PORTCbits.RC13
  21. #define LCDRW_DB6               PORTDbits.RD11
  22. #define LCDRW_DB7               PORTDbits.RD0

También podemos optar por no conectar el pin RW, para lo cual hay que comentar esta línea:
#define USE_LCD_RW       1

A partir de ahí, nos limitaremos a inicializar el LCD con lcd_init() y a usarlo como en este ejemplo:
Código: C
  1. lcd_init();
  2. sprintf(buf, "\f  Libreria LCD-C32\n  ===============\nAdaptada de FlexLCD\n  www.micropic.es");
  3. SendLCDBuffer(buf, strlen(buf));

También disponemos de la posibilidad de utilizar la función lcd_gotoxy() para situar el cursor en cualquier punto de la pantalla, o la función lcd_setcursor_vb() para establecer el tipo de cursor.

Espero que os sea de utilidad. Por supuesto, cualquier mejora de la misma será bienvenida.


Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Librería LCD-C32
« Respuesta #1 en: 16 de Noviembre de 2011, 08:56:53 »
Buenisima!!
Y la del teclado Mtouch que se ve en la foto para cuando ?? :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: Librería LCD-C32
« Respuesta #2 en: 16 de Noviembre de 2011, 09:01:24 »
Jeje, en breve, que la están peinando  :mrgreen:

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Librería LCD-C32
« Respuesta #3 en: 16 de Noviembre de 2011, 09:40:26 »
Los Delay_xx lo has hecho en otra librería??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Librería LCD-C32
« Respuesta #4 en: 16 de Noviembre de 2011, 10:10:41 »
En C32 podes crear una función como la siguiente:

Código: C
  1. void vPutcsLCD(const char *Ptr){
  2.  
  3.  // Trabajas con el Ptr...
  4. }

Y podes realizar:

Código: C
  1. vPutcsLCD("\f  Libreria LCD-C32\n  ===============\nAdaptada de FlexLCD\n  www.micropic.es");

Salvo para texto formateado, sirve  ;-)


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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: Librería LCD-C32
« Respuesta #5 en: 16 de Noviembre de 2011, 12:06:10 »
Buen apunte, Suky, muchas gracias.

Sí, Marcos, las tenía en otra parte. Las pego aquí:
Código: C
  1. // *****************************************************************************
  2. // void delay_us(WORD us)
  3. // *****************************************************************************
  4. void delay_us(WORD us)
  5. {
  6.  DWORD start = _CP0_GET_COUNT();
  7.  DWORD end = start + GetSystemClock() / 1000000 / 2 * us;
  8.  if (end > start) while (_CP0_GET_COUNT() < end);
  9.  else while (_CP0_GET_COUNT() > start || _CP0_GET_COUNT() < end);
  10. }
  11.  
  12. // *****************************************************************************
  13. // void delay_ms(WORD msec)
  14. // *****************************************************************************
  15. void delay_ms(WORD msec)
  16. {
  17.         unsigned int i;
  18.  
  19.         for(i=0; i<msec; i++)
  20.         delay_us(1000);
  21. }

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Librería LCD-C32
« Respuesta #6 en: 16 de Noviembre de 2011, 16:07:14 »
jjee, pues si, nocturno sin el sprintf no puede vivir  :D

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: Librería LCD-C32
« Respuesta #7 en: 16 de Noviembre de 2011, 16:07:31 »
Siguiendo la sugerencia de Suky, he modificado la librería para que la función de escritura de strings no requiera recibir el tamaño del string. Queda mucho más simple si podemos imprimir tanto un buffer como una constante de la siguiente manera:

Código: C
  1. lcd_init();
  2.    
  3.         sprintf(buf, "\f  Libreria LCD-C32\n  ================\n");
  4.         SendLCDBuffer(buf);
  5.  
  6.         SendLCDBuffer("Adaptada de FlexLCD\n  www.micropic.es");

La función ha quedado más sencillita, así:
Código: C
  1. /*******************************************************************************
  2. Función: void SendLCDBuffer(const char *buffer)
  3.  
  4.     Esta función envía una cadena al LCD
  5.  
  6. Entradas:       *buffer                 puntero a la cadena a imprimir
  7.  
  8. Salidas:        Nada
  9.  
  10. *******************************************************************************/
  11. void SendLCDBuffer(const char *buffer)
  12. {
  13.     while (*buffer)
  14.         lcd_putc(*(buffer++));
  15. }

Estas modificaciones están actualizadas en la descarga adjunta al primer mensaje del hilo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Librería LCD-C32
« Respuesta #8 en: 16 de Noviembre de 2011, 16:22:36 »
has probado si funciona bien con las 2 opciones?? Te lo digo porque yo he tenido casos de que al poner una variable en la ram y otra en la rom, en la funcion no la leia bien, solo lee la que declares en la funcion, creo que el c32 tambien funciona asi

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: Librería LCD-C32
« Respuesta #9 en: 16 de Noviembre de 2011, 16:26:54 »
Sí, claro, ese trozo de ejemplo que he pegado produce exactamente la misma imagen de la foto inicial.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Librería LCD-C32
« Respuesta #10 en: 16 de Noviembre de 2011, 18:37:04 »
Joya! Esto, que CCS no permite, simplifica muchas cosas aveces  ;-)


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

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Librería LCD-C32
« Respuesta #11 en: 16 de Noviembre de 2011, 19:07:30 »
Pero si te ingenias lo hace!!
Esto esta hecho y trabajando hace años en un PIC18 en CCS.

Código: C
  1. /**
  2.  *   Muestra < string > en el display LCD.
  3.  */
  4.    void lcdString(char *string)
  5.    {
  6.       while (*string != 0)
  7.       lcd_send_byte (1,*string++);
  8.    }
  9.  
  10.    void lcdText (unsigned int x, unsigned int y, char *text)
  11.    {
  12.       lcd_gotoxy (x, y);
  13.       lcdString (text);
  14.    }
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Librería LCD-C32
« Respuesta #12 en: 16 de Noviembre de 2011, 20:12:39 »
En este caso es simple. Igualmente necesitas manejarte con un arreglo en RAM para cargarlo y llamar a tu función. De funcionar, seguro que funciona. ;-)
No contesto mensajes privados, las consultas en el foro

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: Librería LCD-C32
« Respuesta #13 en: 31 de Octubre de 2012, 12:39:00 »
Que tipo de comunicación utiliza esta librería para el lcd???