viernes, 12 de febrero de 2016

Display LCD via I2C - 18F4550 - 18F2550

Gobierno de un display LCD via I2C 

18F4550 - 18F2550 - CCS Compiler

– Ejemplo para un PIC:

El esquema de montaje es el siguiente :
esquema_pic_i2c
– Ejemplo para un PIC:
El esquema de montaje es el siguiente (pulsa botón derecho “ver imagen” para ampliarla):
/*
#include <16F88.h>                        //pic a utilizar
#fuses NOWDT,NOPROTECT,PUT,NOLVP, NOMCLR,INTRC_IO, NODEBUG  
#use delay (clock=8000000)                  //Fosc=8Mhz
#use standard_io(A)
#use standard_io(B)
#use i2c(Master,Fast=100000, sda=PIN_B1, scl=PIN_B4,force_sw)
#include <i2c_Flex_LCD.h>                //libreria manejo lcd
/**/
#include <18f4550.h>
#device ICD = TRUE
#device ADC=10
#use delay (clock=48000000)
//#use i2c(Master,Fast=100000, sda=PIN_D6, scl=PIN_D7,force_sw)
#use i2c(Master,Fast=100000, sda=PIN_B0, scl=PIN_B1,force_sw)
#include <i2c_Flex_LCD.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,USBDIV,PLL5,CPUDIV1,DEBUG // configura fuses
/**/
void main()
{
//Char="Test";
int16 test=1;

  lcd_init();
  i2c_lcd_backlight_On();

   while(TRUE)
   {
         test=test+1;
        
         lcd_clear();  //Clear Display
         printf(LCD_PUTC,"\1%s","LCD Line 1");  //Print on LCD line 1
         delay_ms(2000);

         printf(LCD_PUTC,"\2%s","LCD Line 2");  //Print on LCD line 2
         delay_ms(2000);
      
         printf(LCD_PUTC,"\f\1%s","LCD Line 1");
  //Clear display, print again on Line 1
         delay_ms(2000);
        
         printf(LCD_PUTC,"\f\2%s","LCD Line 2");
  //Clear display, print again on Line 2
         delay_ms(2000);
        
         i2c_lcd_backlight_Off();
         printf(LCD_PUTC,"\f\1%s\2%s","LCD BackLight","     OFF      "); //Clear display, print again on Line 1
         delay_ms(2000);
        
         i2c_lcd_backlight_On();
         printf(LCD_PUTC,"\f\1%s\2%s","LCD BackLight","     ON      "); //Clear display, print again on Line 2
         delay_ms(2000);
        
         //Al estilo tradicional:
         lcd_clear();
         lcd_gotoxy(1,1);
         printf(LCD_PUTC,"Linea 1 - Tradicional");
         delay_ms(2000);
         lcd_gotoxy(1,2);
         printf(LCD_PUTC,"Linea 2 - Tradicional");
         delay_ms(2000);
   }  
}


El ejemplo está programado con el compilador CCS, se hace necesaria una librería para gobernar el modulito, esta es la llamada “i2c_Flex_LCD.h” creada por el autor: Hugo Silva. se puede descargar junto con el ejemplo de aquí: lcd_i2c.
La librería nos da funciones para escribir en la pantalla LCD de varias formas, una es del modo tradicional con goto_xy:
         lcd_gotoxy(1,1);
         printf(LCD_PUTC,”Linea 1″);
primero nos posicionamos en la coordenada deseada, y luego se escribe a partir de ahí. La otra forma es especificando la línea dentro de las comillas “1”:
         printf(LCD_PUTC,”1%s”,”LCD Line 1″);
También dispone de otras funciones para encender y apagar la luz del display de fondo:
          i2c_lcd_backlight_On();
          i2c_lcd_backlight_Off();
 así como para borrar el display:
           lcd_clear();
-Dirección del bus I2C:
Una cosa muy importante a tener en cuenta es la dirección del bus I2C, en este modulo, se pueden usar ocho diferentes según esta tablita:
Las direcciones en caso del PIC son las siguientes:
Jp3 Jp2 Jp1
A2 A1 A0  Hex
L L L  0x40
L L H  0x42
L H L  0x44
L H H  0x46
H L L  0x48
H L H  0x4A
H H L  0x4C
H H H  0x4E
Y se especifican en la librería en la línea:
    #define LCD_ADDR       0x4E //I2C slave address for LCD module
Descargas: lcd_i2c.

8 comentarios :

  1. Hay posibilidad de subir la librería a un nuevo servidor.. les agradezco.

    ResponderEliminar
  2. no esta la libreria seria bueno que alguien la suba porfavor

    ResponderEliminar
  3. buen dia me podra proporcionar la libreria

    ResponderEliminar
  4. https://www.ccsinfo.com/forum/viewtopic.php?t=54063

    ResponderEliminar
  5. alguien tiene las librerias para mplab. estoy buscando el i2c con las librerias de la lcd mil gracias.

    ResponderEliminar
  6. el circuito lo monté en proteus y en protoboard y no me funcionó, por lo visto la comunicacion 12c esta bien, pero no me muestra nada en la pantalla... alguien me podria decie en donde esta el error por favor

    ResponderEliminar