Saltar al contenido

Hola controleros y controleras, en esta entrada vamos a aprender a utilizar un LCD con PIC de forma fácil usando el PIC C Compiler. Aquí trataremos los LCD más comunes como el LCD 16×2 o el LCD 20×4, sin embargo esto puede ser extendido a cualquier LCD que tengas.

Antes que nada te hago la invitación de que veas

👉👉👉 CURSO GRATIS DE MICROCONTROLADORES PIC

👉👉👉 TODOS LOS VIDEOS EN YOUTUBE

LCD con PIC

Manejo del LCD con PIC

Existe en el compilador un driver para manejar un display de cristal líquido (LCD) de 2 líneas por 16 caracteres cada una.

El procedimiento para trabajar con el LCD 16×2 con PIC es parecido al procedimiento del teclado telefónico.

La conexión entre el LCD y el microcontrolador es la siguiente:

Conexión LCD con PIC

Los pasos que se deben seguir para manejar el LCD son:
1. Incluir en el encabezado del programa el driver para manejar el teclado.

#INCLUDE<LCD.C>

2. Por defecto el LCD se conecta al puerto D, si se desea conectar el LCD en el puerto B  se incluye esta línea en el encabezado:

#DEFINE USE_PORTB_LCD TRUE

3. En el programa principal se inicializa el driver

LCD_INIT();

4. Se usan las funciones del LCD que tiene implementadas el driver:

LCD_PUTC(c);// Muestra el caracter “C” en la próxima posición del LCD.
LCD_PUTC("/f”);//Borra todo lo que haya en el display.
LCD_PUTC(“/n”);// Va al inicio de la segunda línea.
LCD_PUTC(“/b”); //Se mueve una posición hacia atrás.
LCD_GOTOXY(x,y); //Ubica el cursor en la posición indicada por “X” y ”Y”.
                 //La posición de la esquina superior izquierda es (1,1).
LCD_GETC(x,y); //Retorna el carácter ubicado en la posición X,Y del LCD.

Un LCD 16×2 PIC (Mostrado en la figura al inicio) esta conformado por 16 columnas y 2 filas

Sin embargo también existen en el mercado otros tipos de LCDs como por ejemplo el LCD 20×4 PIC que tiene 20 columnas y 4 filas.

Quizas te pueda interesar ver como configurar una Pantalla LCD con Arduino.

LCD PIC – EJEMPLOS

A continuación se encuentran los 4 Ejemplos del video, donde podrás ver y descargar el código en lenguaje C y también los archivos de simulación del Proteus, para que puedas reproducirlos por ti mismo y practiques con el uso del LCD. Para tener acceso a todos estos códigos, debes compartir el contenido de este blog con cualquiera de los siguientes 3 botones, asi ayudas a que la pagina sea más conocida y contribuyes a que siga aportando mucho más contenido de interes,

Códigos

A continuación están disponibles los códigos de ejemplos vistos en los videos para descarga y reproducción de los mismos.

[sociallocker id=948]

>> DESCARGAR CÓDIGOS Y ESQUEMA EN PROTEUS <<

Ejemplo 1 – Mensaje en el LCD

#INCLUDE <16F887.H>
#USE DELAY(CLOCK=4000000)
#INCLUDE <LCD.C>
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
void MAIN()
{
   LCD_INIT();       //Inicializa el LCD
   LCD_PUTC("\f");   //Borrar el contenido del LCD
   WHILE(TRUE)
   {
      LCD_GOTOXY(5,1);        //Se ubica En la columna 5 fila 1
      LCD_PUTC("Control");    //Muestre el mensaje “Control”
      LCD_GOTOXY(3,2);        //Ubicarse en la columna 3 fila 2
      LCD_PUTC("Automatico"); // Sacar el mensaje “Automatico”
   } //Cierra while true
}

Ejemplo 2 – Animación de Desplazamiento en LCD

#INCLUDE <16F887.H>
#fuses XT, NOPROTECT, NOWRT, NOPUT, NOWDT, NOLVP, NOCPD //Órdenes para el programador
#use delay (clock=4000000)
#include <lcd.c>  // Librería para el manejo del lcd              
const char mensaje[]= {"Control Automatico Educacion"};
///PROGRAMA
void main(void)
{
   char y=1; //índice fíla
   signed char x=16; //índice columnas (posiciones)
   lcd_init(); //inicializa lcd 
   while(TRUE){ //bucle...
      lcd_gotoxy(x,y) ; //ubica cursor para escribir mensaje
      lcd_putc(mensaje ) ; //muestra por pantalla el mensaje
      delay_ms(100);
      x--; //incremento indice de columnas
      if(x<-28)
      {
         //¿se ha mostrado mensaje entero en la primera fila?
         x=16; //SI, índice columna x=-16, para que inicie el último caracter en la primera posición
         y++; //incremento índice fila (mostrar texto en segunda columna)
         if(y>2) //¿se ha mostrado mensaje por segunda fila?
            y=1; //SI, restaurar índice de fila
      }
      lcd_putc("\f" ) ; //borra pantalla
   } //...infinito
}

Ejemplo 3 – LCD y Teclado en el mismo Puerto B

#INCLUDE <16F887.H>
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
//Definiciones para colocar el LCD y el teclado en el puerto B
#DEFINE USE_PORTB_LCD TRUE
#DEFINE USE_PORTB_KBD TRUE  
//Librerías del LCD y Teclado
#INCLUDE <LCD.C>
#INCLUDE <KBD.C>  
// Variables Globales
CHAR K;
INT DIR;
//Programa Principal
VOID MAIN()
{
   lcd_init(); //Inicializa el LCD
   kbd_init(); //Inicializa el Teclado
   //Configura las Resistencias PULL-UP del Puerto B
   port_b_pullups(0xFF); //PIC16F887
   //port_b_pullups(TRUE); //PIC16F877A
   LCD_PUTC("\f"); //Limpia el LCD
   
   //Ciclo infinito
   WHILE(1)
   {
      DIR=0;
      LCD_PUTC("\f");
      while (DIR<17)
      {
         k=kbd_getc();  //Llamar la función del teclado y almacenar el
                        //valor digitado en una variable tipo carácter. Si
                        //no se oprime ninguna tecla el teclado
                        //retornara el carácter nulo.*/
         WHILE( (k=='
#INCLUDE <16F887.H>
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
//Definiciones para colocar el LCD y el teclado en el puerto B
#DEFINE USE_PORTB_LCD TRUE
#DEFINE USE_PORTB_KBD TRUE  
//Librerías del LCD y Teclado
#INCLUDE <LCD.C>
#INCLUDE <KBD.C>  
// Variables Globales
CHAR K;
INT DIR;
//Programa Principal
VOID MAIN()
{
lcd_init(); //Inicializa el LCD
kbd_init(); //Inicializa el Teclado
//Configura las Resistencias PULL-UP del Puerto B
port_b_pullups(0xFF); //PIC16F887
//port_b_pullups(TRUE); //PIC16F877A
LCD_PUTC("\f"); //Limpia el LCD
//Ciclo infinito
WHILE(1)
{
DIR=0;
LCD_PUTC("\f");
while (DIR<17)
{
k=kbd_getc();  //Llamar la función del teclado y almacenar el
//valor digitado en una variable tipo carácter. Si
//no se oprime ninguna tecla el teclado
//retornara el carácter nulo.*/
WHILE( (k=='\0')) //si no se oprime ninguna tecla sigue llamando al teclado.
{
k=kbd_getc();
}
if( (k!='*')&&(k!='#'))
{
lcd_putc(k);
DIR++;
}
}
}
}
')) //si no se oprime ninguna tecla sigue llamando al teclado. { k=kbd_getc(); } if( (k!='*')&&(k!='#')) { lcd_putc(k); DIR++; } } } }

Ejemplo 4 – LCD con Teclado para Contraseña

#INCLUDE <16F887.H>
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
//Usadas para conectar el LCD y Teclado en el Puerto B
#DEFINE USE_PORTB_LCD TRUE
#DEFINE USE_PORTB_KBD TRUE
//Librerías del LCD y Teclado
#INCLUDE<KBD.C> 
#INCLUDE<LCD.C>
#BYTE PORTC=7
#DEFINE LED1 PORTC,7
#DEFINE LED2 PORTC,4
 //Variables Globales
CHAR K;
INT MIL,CEN,DEC,UNI,VAL;
//Función Teclado
VOID TECLADO()
{
   k=kbd_getc(); //Llamar la función del teclado y almacenar
   //el valor digitado en una variable tipo
   //carácter. Si no se oprime ninguna tecla el
   //teclado retornara el carácter nulo.*/
   WHILE(k=='
#INCLUDE <16F887.H>
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
//Usadas para conectar el LCD y Teclado en el Puerto B
#DEFINE USE_PORTB_LCD TRUE
#DEFINE USE_PORTB_KBD TRUE
//Librerías del LCD y Teclado
#INCLUDE<KBD.C> 
#INCLUDE<LCD.C>
#BYTE PORTC=7
#DEFINE LED1 PORTC,7
#DEFINE LED2 PORTC,4
//Variables Globales
CHAR K;
INT MIL,CEN,DEC,UNI,VAL;
//Función Teclado
VOID TECLADO()
{
k=kbd_getc(); //Llamar la función del teclado y almacenar
//el valor digitado en una variable tipo
//carácter. Si no se oprime ninguna tecla el
//teclado retornara el carácter nulo.*/
WHILE(k=='\0') //si no se oprime ninguna tecla sigue llamando al teclado.
{
k=kbd_getc();
}
IF( (k!='\0'))
{
IF(K=='0')//Si K es igual a cero
VAL=0;//Val es igual a cero
IF(K=='1')
VAL=1;
IF(K=='2')
VAL=2;
IF(K=='3')
VAL=3;
IF(K=='4')
VAL=4;
IF(K=='5')
VAL=5;
IF(K=='6')
VAL=6;
IF(K=='7')
VAL=7;
IF(K=='8')
VAL=8;
IF(K=='9')
VAL=9;
}
}
VOID MAIN()
{
LCD_INIT(); //Inicializa el LCD 
KBD_INIT(); //Inicializa el Teclado 
//Configura las Resistencias PULL-UP del Puerto B 
PORT_B_PULLUPS(0xFF); //PIC16F887 
//port_b_pullups(TRUE); //PIC16F877A
//Configura el puerto C como Salida
SET_TRIS_C(0);
//Programa Principal
WHILE(TRUE)
{
LCD_GOTOXY(1,1);
LCD_PUTC(" BIENVENIDOS ");
LCD_GOTOXY(1,2);
LCD_PUTC(" DIGITE CLAVE ");
DELAY_MS(1000);
TECLADO();
LCD_PUTC("\f");
LCD_GOTOXY(1,1);
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
UNI=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
DEC=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
CEN=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
MIL=VAL;
}
TECLADO();
WHILE((k!='#'))
{
TECLADO();
}
IF((UNI==1)&&(DEC==2)&&(CEN==3)&&(MIL==4)) //Aquí se compara si
//los números digitados
//están correctos.*/
{
LCD_PUTC("\f"); //Se borra LCD
LCD_GOTOXY(1,1);//Se ubica en la posición 1,1
LCD_PUTC(" CLAVE CORRECTA ");
BIT_SET(LED1);
DELAY_MS(2000);
BIT_CLEAR(LED1);
}
ELSE
{
LCD_PUTC("\f");
LCD_GOTOXY(1,2);
LCD_PUTC(" CLAVE INVALIDA ");
BIT_SET(LED2);
DELAY_MS(4000);
BIT_CLEAR(LED2);
}
}
}
') //si no se oprime ninguna tecla sigue llamando al teclado. { k=kbd_getc(); } IF( (k!='
#INCLUDE <16F887.H>
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
//Usadas para conectar el LCD y Teclado en el Puerto B
#DEFINE USE_PORTB_LCD TRUE
#DEFINE USE_PORTB_KBD TRUE
//Librerías del LCD y Teclado
#INCLUDE<KBD.C> 
#INCLUDE<LCD.C>
#BYTE PORTC=7
#DEFINE LED1 PORTC,7
#DEFINE LED2 PORTC,4
//Variables Globales
CHAR K;
INT MIL,CEN,DEC,UNI,VAL;
//Función Teclado
VOID TECLADO()
{
k=kbd_getc(); //Llamar la función del teclado y almacenar
//el valor digitado en una variable tipo
//carácter. Si no se oprime ninguna tecla el
//teclado retornara el carácter nulo.*/
WHILE(k=='\0') //si no se oprime ninguna tecla sigue llamando al teclado.
{
k=kbd_getc();
}
IF( (k!='\0'))
{
IF(K=='0')//Si K es igual a cero
VAL=0;//Val es igual a cero
IF(K=='1')
VAL=1;
IF(K=='2')
VAL=2;
IF(K=='3')
VAL=3;
IF(K=='4')
VAL=4;
IF(K=='5')
VAL=5;
IF(K=='6')
VAL=6;
IF(K=='7')
VAL=7;
IF(K=='8')
VAL=8;
IF(K=='9')
VAL=9;
}
}
VOID MAIN()
{
LCD_INIT(); //Inicializa el LCD 
KBD_INIT(); //Inicializa el Teclado 
//Configura las Resistencias PULL-UP del Puerto B 
PORT_B_PULLUPS(0xFF); //PIC16F887 
//port_b_pullups(TRUE); //PIC16F877A
//Configura el puerto C como Salida
SET_TRIS_C(0);
//Programa Principal
WHILE(TRUE)
{
LCD_GOTOXY(1,1);
LCD_PUTC(" BIENVENIDOS ");
LCD_GOTOXY(1,2);
LCD_PUTC(" DIGITE CLAVE ");
DELAY_MS(1000);
TECLADO();
LCD_PUTC("\f");
LCD_GOTOXY(1,1);
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
UNI=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
DEC=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
CEN=VAL;
}
TECLADO();
IF((k!='#')&&(k!='*'))
{
lcd_putc('*');
MIL=VAL;
}
TECLADO();
WHILE((k!='#'))
{
TECLADO();
}
IF((UNI==1)&&(DEC==2)&&(CEN==3)&&(MIL==4)) //Aquí se compara si
//los números digitados
//están correctos.*/
{
LCD_PUTC("\f"); //Se borra LCD
LCD_GOTOXY(1,1);//Se ubica en la posición 1,1
LCD_PUTC(" CLAVE CORRECTA ");
BIT_SET(LED1);
DELAY_MS(2000);
BIT_CLEAR(LED1);
}
ELSE
{
LCD_PUTC("\f");
LCD_GOTOXY(1,2);
LCD_PUTC(" CLAVE INVALIDA ");
BIT_SET(LED2);
DELAY_MS(4000);
BIT_CLEAR(LED2);
}
}
}
')) { IF(K=='0')//Si K es igual a cero VAL=0;//Val es igual a cero IF(K=='1') VAL=1; IF(K=='2') VAL=2; IF(K=='3') VAL=3; IF(K=='4') VAL=4; IF(K=='5') VAL=5; IF(K=='6') VAL=6; IF(K=='7') VAL=7; IF(K=='8') VAL=8; IF(K=='9') VAL=9; } } VOID MAIN() { LCD_INIT(); //Inicializa el LCD KBD_INIT(); //Inicializa el Teclado //Configura las Resistencias PULL-UP del Puerto B PORT_B_PULLUPS(0xFF); //PIC16F887 //port_b_pullups(TRUE); //PIC16F877A //Configura el puerto C como Salida SET_TRIS_C(0); //Programa Principal WHILE(TRUE) { LCD_GOTOXY(1,1); LCD_PUTC(" BIENVENIDOS "); LCD_GOTOXY(1,2); LCD_PUTC(" DIGITE CLAVE "); DELAY_MS(1000); TECLADO(); LCD_PUTC("\f"); LCD_GOTOXY(1,1); IF((k!='#')&&(k!='*')) { lcd_putc('*'); UNI=VAL; } TECLADO(); IF((k!='#')&&(k!='*')) { lcd_putc('*'); DEC=VAL; } TECLADO(); IF((k!='#')&&(k!='*')) { lcd_putc('*'); CEN=VAL; } TECLADO(); IF((k!='#')&&(k!='*')) { lcd_putc('*'); MIL=VAL; } TECLADO(); WHILE((k!='#')) { TECLADO(); } IF((UNI==1)&&(DEC==2)&&(CEN==3)&&(MIL==4)) //Aquí se compara si //los números digitados //están correctos.*/ { LCD_PUTC("\f"); //Se borra LCD LCD_GOTOXY(1,1);//Se ubica en la posición 1,1 LCD_PUTC(" CLAVE CORRECTA "); BIT_SET(LED1); DELAY_MS(2000); BIT_CLEAR(LED1); } ELSE { LCD_PUTC("\f"); LCD_GOTOXY(1,2); LCD_PUTC(" CLAVE INVALIDA "); BIT_SET(LED2); DELAY_MS(4000); BIT_CLEAR(LED2); } } }

[/sociallocker]

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (38)

hola estoy empezando a introducirme a los pics pero quiero saver cual fuses son lo que no te bloquean el pic en pic c compiler en Mplab x ide utiliso los siguiente configuración
// Configuración del PIC
#pragma config FOSC = INTRC_NOCLKOUT // Oscilador HS
#pragma config WDTE = OFF // Watchdog Timer deshabilitado
#pragma config PWRTE = OFF // Power-up Timer deshabilitado
#pragma config BOREN = OFF // Brown-out Reset deshabilitado
#pragma config LVP = OFF // Low-Voltage Programming deshabilitado
#pragma config CPD = OFF // Data Code Protection deshabilitado
#pragma config WRT = OFF // Write Protection deshabilitado
#pragma config CP = OFF // Code Protection deshabilitado
la verdad me ayudaria a saver como lo puedo poner estas mismas en el compiladar pic c compiler

Responder

Hola. Estoy haciendo n circuito que al apaarecer el mensaje utiliza la LCD y 3 leds que encienden y apagan al pasar del tiempo. En un inicio el LCD funciona bastante bien y sin problemas. Pero despues de pasar un corto periodo de tiempo empieza a parpadear, muestra los mansajes mal o simplemente se vuelve muy opaca y ya no es capaz de mostrar mensajes.
Estoy utilizando un cargador de 5v para alimentar al circuito entero (dos displays de 7 segmentos, y 8 leds, pero al uso de la lcd solo se encienden los 3 leds)¿Cuál crees que sea mi problema? Se debe a la fuente que estoy utilizando o a una mala soldadura de las terminales de la lcd?

Responder

Hola Diego, basándome en los detalles proporcionados, parece que el problema podría estar relacionado con la fuente de alimentación o posiblemente con las conexiones de la LCD. Aquí te dejo algunas recomendaciones para solucionar el inconveniente:

1. Revisa la Fuente de Alimentación: Asegúrate de que el cargador de 5V que estás utilizando puede suministrar suficiente corriente para todos los componentes de tu circuito, incluida la LCD y los LEDs. Si la demanda total de corriente supera la capacidad del cargador, considera usar una fuente de alimentación con mayor capacidad de corriente.

2. Inspecciona las Soldaduras: Revisa cuidadosamente las soldaduras en los terminales de la LCD y asegúrate de que no haya soldaduras frías o conexiones flojas. Una mala conexión puede causar los problemas que estás experimentando.

3. Considera la Distribución de la Carga: Si es factible, intenta distribuir la carga entre múltiples fuentes de alimentación para evitar sobrecargar una única fuente.

4. Instala Condensadores de Desacoplamiento: Coloca condensadores de desacoplamiento cerca de la alimentación de la LCD para ayudar a estabilizar la tensión y reducir el parpadeo.

Responder

Buen dia profesor Sergio, estoy trabajando en un proyecto para mi universidad pero estoy teniendo problemas con la programacion del microcontrolador ya que no tengo mucha experiencia en ello, quisiera saber si usted podria brindarme asesoría pagada en mi proyecto, de ser asi indiqueme como podria contactarlo porfavor.

Responder

Gracias por compartir todo esto realmente a todos aquellos que queremos saber mas y mas de esto y nos apasiona, nos ayudas muchísimo. Quisiera saber si tienes algún vídeo de ayuda acerca de modificar librería LCD para utilización de caracteres especiales .

Responder

Gracias Manuel, por el momento no tengo un video realizando esta explicación.

Responder

hola buen día consulta al cambiar, en el ccs compiler, el nombre no me deja y siempre manda el mismo mensaje a que se debe.

Responder

¡Hola!
¿Pudieras explicarme por qué se usa «x<-28" en el ejemplo 2? ¿Por qué el número negativo si las columnas van desde 1 hasta 16?
Gracias de antemano.

Responder

Hola Edi, efectivamente el LCD vá de 1 a 16 en las columnas, por lo tanto las letras que se encuentren en ese rango van a aparecer en el LCD, y todas las letras que esten fuera de este rango no serán vistas, es decir por debajo de 1. Para lograr el efecto del desplazamiento, en este código coloqué un mensaje de 28 letras «Control Automático Educación» y las voy desplazando de 1 en 1, sin embargo, las letras que serán vistas son las que esten entre 1 a 16, las otras letras fuera de ese rango no serán vistas, y cada 100 ms se desplazan entonces comenzarán a aparecer letras que no habían sido mostradas y también comenzarán a desaparecer letras que ya fueron mostradas, pues saldrán del rango de 1 a 16.

Responder

Hola amigo estaba viendo un video tuyo de Lcd con pic yo estoy realizando un proyecto con un Lcd y un 74164 y el teclado ya esta la programado pero al oprimir el teclado en el lcd no me sale nada me podrías ayudar gracias

Responder

Un saludo sergio. No recuerdo en que video realizaste un pequeño menu con lcd2x16 en donde podias desplazar mas opciones en el eje «Y» lcd_gotoxy(,). Ahora lo en buscado entre todos los videos y no lo encuentro. Podrias decirme….

Responder

Hola Abner, eso lo hicimos en el video de la identifición del Motor-Generador para posteriormente hacer un control PID. Te dejo el link: https://controlautomaticoeducacion.com/microcontroladores-pic/control-pid-motor-generador/

Responder

Gracias por compartir tus conocimientos no solo teoricos si o praticos tambien. Sos un genio.

Responder

Hola, que tal Sergio, muchas gracias por hacer estos videos, solo tengo una duda con el uso del void, ya que el programa donde se debe recorrer el mensaje en el display, tú usas el void main(void), pero yo lo quiero usar con void pulblic() y así no me corre, podrias explicarme el por qué ? gracias por hacer estos videos, son de mucha ayuda !!!

Responder

Hola Pedro, el compilador usa C Ansi o C estándar. La función principal siempre es «main» generalmente con los argumentos de entrada y salida vacios «void».

Responder

saludos. amigo, quiero montar algunas cosas pon pic, arduino y lcd, solo para entrenarme en este mundo. Dispongo de un Pic16f88 un arduino nano y un LCD que no se como identificar las patas para conectarlo, me puedes alludar a identificarl las patas de este LCD??? en la parte de atras dice:
GDM16032D, nos se si entre el 16 y el 32 hay una letra O, o un numero cero.

Gracias

Responder

Lo mejor es buscar los datasheets o hojas de datos de cada componente que tienes, de esa forma podrás identificar los pines de cada dispositivo de una forma más directa.

Responder

Interesante video. hay que realizar la practica.

Responder

Hola Sergio yo de nuevo jajaj, disculpa, los códigos me funcionan bien y al compilar no me marcan ningún error, solamente que al hacer la simulación en el proteus, me aparecen errores y no me aparece ningún mensaje, creo que las conexiones las tengo mal, ya que estoy usando un pic 18f2550 y no he encontrado como conectarlo al ldc 16*2, tú no sabrás como? Saludos

Responder

Intentaste usar la definición del cristal como:
#USE DELAY(CLOCK=4000000,CRYSTAL)
En esa familia del 18F he notado que toca especificar el cristal externo.

Responder

Sii sí utilicé esa función, y también coloqué el cristal con los capacitores en los pins de osciladores, pero me sigue marcando error, y hasta en unos pins del lcd, el cuadro aparece amarillo

Responder

Pero usar ese PIC no tiene misterio, se conecta exactamente igual que mostrado en el post, solo que en el puerto B. Incluso puedes descargar los archivos del proteus, y solo basta con sustituir el pic16f887 por el pic 18f2550. Recuerda colocar el pin 1 a positivo.

Responder

Que tal Sergio! Muy buena explicación y muy buenos ejemplos, tan solo que tengo un problema, y es mío, propio de mi compilador y no sé que hacer, ya que al añadir la librería lcd.d, al compilar el programa que he hecho me marca error en la librería, que no identifica ningún «delay», y no sé que hacer ni porqué será, espero sepas qué sucede, saludos!

Responder

Ya solucioné el problema por si a alguien más le ocurre! Lo único que tuve que hacer fue colocar el #include al final del encabezado y con eso ya funcionó correctamente jajaja

Responder

Profesor Sergio, una pregunta lo intento simular con el pic 16f628a y tengo un problema, el cual cociste en que el pic no logra activar las resistencias en pull-ups al momento de simularlo en proteus, lo intente con otros pics y tampoco funciona, noce que registro tenga que linea de código deba aumentar.

Responder

Puedes probar poner:

port_b_pullups(0xFF);  
delay_us(10);

O quizas también sirva:

port_b_pullups(TRUE);
delay_us(10);
Responder

Es posible conectar el teclado4x4 y LCD solo en el puerto en el puerto D?

Responder

Si es posible, pero debes colocar las resistencias Pull-Up fisicamente en el puerto D, ya que internamente en el PIC estas resistencias solo estan en el puerto B.

Responder

Sergio, ante todo un saludo..
Quisiera pedirte ayuda porque me esta ocurriendo un problema que me tiene loco.
Hasta el momento no he tenido problemas al realizar los programas, pero el ejercicio 3 no encuentro manera de que funcione… Descargue tu contenido para utilizar tu código del ejercicio 3 y tu plantilla de proteus y funcionan PERO, si abro tu código en ccs y lo compilo (sin modificare nada a tu código) la simulación simplemente no funciona, no hace nada… Pareciera que el archivo .HEX generado desde mi programa no funciona para este ejercicio, pero si utilizo el .HEX que descargue de esta pagina si, no entiendo que esta pasando. Podrias ayudarme por favor?

Responder

Hola Pedro, no se a que pueda deberse ese problema. Los otros ejemplos de funcionan bien? Quizas sea la version del compilador

Responder

Saludos antes que nada Sergio, me ha servido mucho tu curso pero tengo el mismo problema que Pedro no me funciona de ninguna manera, podría saber ¿que versión del compilador estás ocupando?

Responder

Hola Dulce, he modificado el código del Ejemplo 3 y ahora se encuentra actualizado y funcional. Realmente lo compilé de nuevo y parecia que en las versiones actuales del compilador no rodaba, reestructuré la programación y ahora funciona bien. Descargalo de nuevo. Saludos!!

Responder

Saludos Sergio, tengo unas duda con el ejercicio 3.
-La primera: Porque en el encabezado del código configuramos el puerto C si luego no lo usamos o conectamos en la simulación?
-La segunda: Porque cuando introduzco un valor por el teclado telefónico, este se muestra en la LCD uno al lado del otro en vez de sobrescribirse. Lo pregunto porque en ningún momento veo que se este cambiando la coordenada. Eso acaso lo hace de forma automática? no se si me doy a explicar

Responder

Hola Pedro.
1. Puedes borrar las lineas de la configuración del Puerto C, eso no se esta usando. Seguramente ese programa lo hice sobre un programa antiguo que tenia.
2. Al usar las instrucciones del LCD automaticamente se desplaza hacia la otra linea. Eso lo hace la libreria por defecto.

Responder

Sergio C mencionarme el deposito de 2 dólares para contribuir a la causa de la educación, en que banco en Lima – Perú
Saludos cordiales

Responder

Hola Alipio gracias por tu interés en ayudar en este programa de educación. El único medio de pago para la doncación es através de PayPal, que recibe en la mayoria de paises porque yo no tengo banco en Lima. Saludos y muchos éxitos.

Responder

sALUDOS amigo
que curioso en el ejemplo 1 configuras el puerto como salida.
en el dos no configuras el puerto como nada.
y en el ejercicio 3 se debe poner el puerto como salida.

ahora una pregunta ¿por que en el ejemplo 3 se debe configurar el puerto como salida?

si tiene la lcd y el teclado conectado al mismo puerto
sera por cuestion de la libreria amigo sergio???

Responder

No es necesario configurar los puertos, yo lo hago por costumbre pero ya la propia librería configura los puertos para usar el periférico, si lo deseas puedes borrar esas lineas de código. Saludos!!

Responder