En este tercer ejemplo, vamos a ver como escribir en una LCD con controlador HD44780 mediante Pinguino PIC. La comunicación emplea 4 bits de datos, dichos pines del Pinguino PIC serán el 0,1,2 y 3 pero se pueden elegir modificando estos en el código escrito. Y 2 pines , que serán el 8 y el 9, para enviar comandos al LCD y para el Enable (habilitación del mismo).
Además emplearemos la retroiluminación que traen los LCD de 16 patillas, conectando los pines 15 y 16 del LCD a VCC y GND respectivamente. Una descripción de los pines es la siguiente:
La conexión del LCD gráficamente la podemos ver aqui en el siguiente esquemático:
Una foto del funcionamiento del LCD con el programa cargado en el Pinguino PIC:
Aquí un video del funcionamiento:
Y por último os dejo el código, y como podréis observar es facilisimo empezar a trabajar con un lcd:
/* Programa realizado por Regata para tallerarduino.wordpress.com */ // Comenta esta linea si usas un pinguino con PIC18F2550 //#define PIC18F4550 void borrarlinea(uint8_t linea); //Declaracion de la función de borrado de linea //Función de configuración, donde indicaremos que usamos modo 4 bits void setup() { //Modo 8 bits //lcd(8, 9, 0, 1, 2, 3, 4, 5, 6, 7); // RS, E, D0 ~ D7 //Modo 4 bits, no se emplean los últimos 4 bits lcd(8, 9, 0, 1, 2, 3, 0, 0, 0, 0); // RS, E, D4 ~ D8 //Indicamos el formato del lcd, en este caso 20x4 lcd.begin(20,4); } //Función repetitiva void loop() { //Posicionamos el cursor del lcd en posición 0,0 del lcd lcd.setCursor(0,0); lcd.print("Bienvenidos a:"); // Escribimos la cadena que deseamos //Posicionamos el cursor del lcd en posición 3,1 del lcd lcd.setCursor(3,1); lcd.print("Taller Arduino"); // Escribimos la cadena que deseamos //Posicionamos el cursor del lcd en posición 0,2 del lcd lcd.setCursor(0,2); lcd.print(" tu blog referencia"); // Escribimos la cadena que deseamos //Posicionamos el cursor del lcd en posición 1,3 del lcd lcd.setCursor(1,3); lcd.print("Pinguino y Ardu"); // Escribimos la cadena que deseamos //Escribimos a continuación de la última posición escrita lcd.print("ino"); delay(1000); //Esta es una función que he hecho para borrar una linea en concreto, //donde el numero indicado es el número de linea del lcd borrarlinea(0); //También podemos usar lcd.clear(); para borrar todo el lcd delay(500); } //Función creada por mi para cuando necesito borrar una linea entera del lcd //y no todo el lcd void borrarlinea(uint8_t linea) { int i; //Declaramos una variable que usaremos para contar el número de caracteres lcd.setCursor(0,linea); //Posicionamos el cursor para comenzar a borrar en la posicion 0 de la linea que indicamos for (i=0;i<20;i++) //Borramos desde el caracter 0 hasta el 19 lcd.print(" "); }
Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.
Excelente justo queria ver un ejemplo del LCD, gracias regata!
De nada Henry!! Oye me gustaría poner un enlace en mi blog en la parte de páginas de interés para que la gente pueda acceder a tu blog. Si no te importa claro.
El próximo capítulo será con un teclado 4×4 matricial pero adaptado con divisores de tensión mediante resistencias para emplear un único pin Analógico, pero a lo mejor hasta que acabe con los examenes de la Universidad no tendré mucho tiempo.
muy buen ejemplo pero me marca error a la hora de compilar, me podiras decir que version usaste para compilar
Hola Miguel, para esta serie de ejemplos he estado usando la versión beta9 de pinguino, de momento es la que mejor me funciona, ya que en la IDE X.3 no me reconoce las funciones del lcd. Un saludo!
ok mcuhas gracias si ya vi era mi compilador oye como podria conectar mi teclado de matricial 4×4 al pinguino
Hola Miguel!! Ante todo perdón por la demora en contestar a tu comentario, he estado liado con trabajos ajenos a la web.
Para conectar tu teclado matricial a tu pinguino, bien puedes mirar de adapatarlo a un teclado analógico mediante divisores de tensión y un condensador de 100nF, puedes ver el esquemático en este blog aquí: https://tallerarduino.wordpress.com/2011/06/11/shield-teclado-v1-1-con-1-pin/ como podrás observar es bastante sencillo de montar en una protoboard y conectar tu teclado según indica el esquemático, en este caso solo vas a ocupar un pin (analógico) de tu pinguino. Después tienes varios métodos que puedes encontrar por la red, te pongo un ejemplo a ver si te sirve: http://www.ehu.es/micros-virtual/unidad14/index.htm , en este caso vas a ocupar más pines de tu pinguino, y tendrás que comprobar que fila y que columna estan activadas para determinar la tecla pulsada. Si tienes alguna duda más ya sabes!! Un saludo
Pasa lo siguiente:….TENGO UN ARDUINO UNO, UNA LCD 20X4 Y UNAS XBEE, quiero hacer una comunicacion inalambrica, ya puedo enviar datos del X-CTU(programa de comunicacion inalamrica) pero en el momento de que me escriba los dattos en la LCD, el programa me los tomo como defecto, es una LCD 16X2; y los datos que envio me aparecen en la primera y tecerra linea, QUISIERA SABER COMO CONFIGURO LA LCD PARA QUE DEL X-CTU,ME LOS ENVIE DE FORMA ORDENADA, OCUPANDO LAS CUATRO LINEAS,ya intente con LCD.BEGIN(20,4),,,, LCD.SETCURSOR(X,Y),,,,
#include
PERO NO ME FUNCIONADA NADA, ME PUEDEN AYUDAR?? ES MUY URGENTE
Hola Juanita!! perdón por tardar en contestarte, pero es que no tengo tiempo para nada últimamente. En cuanto a lo de la pantalla, pues no sé porque no te funciona correctamente, yo también tengo una lcd de 20×4 y me funciona perfectamente tanto con arduino (tengo el modelo uno, mega y nano) como con pinguino pic (modelo 2550 y 4550). Si puedes subir algo del código para ver a que puede ser debido el fallo, y además decirme que versión del ide de arduino empleas y la librería para la pantalla que usas (supongo que será la LiquydCristal). El programa X-CTU no lo he usado nunca así que no te sabría decir nada de él. Un saludo!!
de que dimensiones es el lcd que utilizaron en el ejemplo… gracias
Hola Marlon!! Esta pantalla presenta 20 caracteres por fila y presenta 4 filas. Las dimensiones de la misma son las siguientes:
Buenas tardes estimado, recien comienzo soy nuevo en este asunto y he leido sobre el tema de Pinguino, ya logre montar mi placa en un proto y lo he puesto a funcionar luego de varios tropiezos, a lo mejor muy basicos pero no tengo muchos conocimientos de electronica, hoy me he dado de cabeza varias veces tratando de compilar los ejemplos con pantalla LCD y nada siempre hay un error de compilacion en la linea donde defino el LCD, no logro salir de este tema y mira que he buscado si tengo algun error y nada que me aconsejas gracias, estoy usando el IDE X.3 y el 4 en ambos tengo el mismo problema. Gracias de antemano
Hola Ringo!!! ¿Podrías ponerme el código que usas? Al igual que tú ando liado con el tema de Pinguino para ir haciendo alguna entrada más en el blog sobre este tema, pero también tengo a veces errores de compilación al emplear LCD, a veces compila y otras no, no se a que es debido, estoy intentando buscar información. Encima han desactivado la depuración CDC, que podíamos emplear en lugar de usar un LCD para ver los datos que quisiéramos de nuestros programas.
Estoy intentando probar varios IDE y diferentes revisiones a ver si encuentro una que funcione correctamente. En cuanto sepa algo lo comentaré por aquí. Un saludo!!
Buenas noches, necesito programar un LCD pero es de 16×2 y quería saber si este que usted montó el de 20×4 me sirve como guía para programar el mío, o cambia mucho la programación, gracias. y que pena la preguntadera, pero me puedes explicar mas o menos la función de 4 bits o 8 bits, es decir que significan… muchas gracias de antemano.
Hola Marlon!!
Si realizas la programación con arduino y una pantalla lcd con controlador compatible hitachi hd44780 (básicamente casi todas las que puedes encontrar para trabajar con arduino y demás placas de desarrollo) ,la programación es exactamente la misma para una LCD 16×2 que para una LCD 20×4, yo tengo ambas y funcionan correctamente. En cuanto a lo de los 4 bits y 8 bits, eso es que hay librería que emplean los 8 bits del bus de datos de la LCD (D0 a D7) para enviar la información a la LCD y otra librería hace el mismo trabajo pero solamente empleando 4 bits del bus de datos de la LCD(D4 a D7).
Un saludo!!
Hola brother, una consulta yo he incorporado el netbeans con el pinguino pero en la libreria que he usado no esta el comando lcd sino solo los basicos como digitalwrite,etc, no se si tendrias la libreria o un metodo para usar las funciones led,Muchas gracias esperare tu respuesta
Hola Michael Martin!! Pues no he empleado nunca netbeans para programar, las librerías que tengo vienen ya incorporadas en el propio IDE de Pinguino y supongo que vendrán dentro de alguna de sus carpetas. Prueba a descargarte su IDE y a ver si encuentras las librerías por ahí y te valen para poder importar y emplear con netbeans. Siento no poder ayudar mucho más. Un saludo!!
Ringo prueba a cambiar lcd por lcd.pins cuando defines el modo