TODOPIC

Simuladores, editores de PCB, etc => Ejemplos para simular => Mensaje iniciado por: ICEMAN1984 en 20 de Julio de 2009, 02:09:04

Título: escribir caracteres en el CGRAM del LCD
Publicado por: ICEMAN1984 en 20 de Julio de 2009, 02:09:04
Hola que tal, estoy tratando de escribir caracteres especiales en una pantalla LCD (HD44780), encontre aqui, un código (el cual voy a poner mas adelante) y lo que no entiendo es la parte final del mismo, para ser mas especifico: lcd_send_byte(1,0).....

código
lcd_send_byte(0,0x40); // escribimos en la cgram (0), en la direccion 0x40
lcd_send_byte(1,0x00); // | | | | | |
lcd_send_byte(1,0x0C); // | |x|x| | |
lcd_send_byte(1,0x12); // |x| | |x| |
lcd_send_byte(1,0x12); // |x| | |x| |
lcd_send_byte(1,0x0C); // | |x|x| | |
lcd_send_byte(1,0x00); // | | | | | |
lcd_send_byte(1,0x00); // | | | | | |
lcd_send_byte(1,0x00); // | | | | | |


lcd_send_byte(0,0x48); // escribimos en la cgram en las siguientes posiciones libres 0x48
lcd_send_byte(1,0x09); // | |x| | | |
lcd_send_byte(1,0x16); // |x| |x|x| |
lcd_send_byte(1,0x00); // | | | | | |
lcd_send_byte(1,0x16); // |x| |x|x| |
lcd_send_byte(1,0x19); // |x|x| | |x|
lcd_send_byte(1,0x11); // |x| | | |x|
lcd_send_byte(1,0x011); // |x| | | |x|
lcd_send_byte(1,0x00); // | | | | | |

lcd_gotoxy(1,1);
lcd_send_byte(1,0); ----> no entiendo esto

lcd_gotoxy(2,2);
lcd_send_byte(1,1);  ---> no entiendo esto
}

Este código lo que hace es que imprime el pantalla el simbolo de grados y debajo una ñ, con lo demas no hay problema, pero por ejemplo: si quisiera colocar otro simbolo al lado de la ñ como haria, o mejor dicho, que tendria que poner en lcd_send_byte (porque ya se como sacar los simbolos)

Gracias
Título: Re: escribir caracteres en el CGRAM del LCD
Publicado por: Suky en 20 de Julio de 2009, 13:30:15
Código: C
  1. void lcd_send_byte(int8 address, int8 n)

address indica si se envía un comando o la dirección de un carácter, colocando el pin RS según corresponda.
n es el dato a enviar.
En tu caso envía que imprima el carácter almacenado en la dirección 0, y después en la dirección 1.


Saludos!
Título: Re: escribir caracteres en el CGRAM del LCD
Publicado por: ICEMAN1984 en 20 de Julio de 2009, 14:32:34
Suky, gracias por responder tan pronto, todavía no estoy muy claro, por ejemplo: lcd_send_byte(0,0x40);  esto quiere decir que se escribe cero en la dirección 0x40???  Esto (lcd_send_byte(int8 address, int8 n)) lo sabia pero donde todavía no estoy claro es en lo siguiente:
Para escribir la ñ por ejemplo:
lcd_send_byte(0,0x48); // escribimos en la cgram en las siguientes posiciones libres 0x48
lcd_send_byte(1,0x09); // | |x| | | |
lcd_send_byte(1,0x16); // |x| |x|x| |
lcd_send_byte(1,0x00); // | | | | | |
lcd_send_byte(1,0x16); // |x| |x|x| |
lcd_send_byte(1,0x19); // |x|x| | |x|
lcd_send_byte(1,0x11); // |x| | | |x|
lcd_send_byte(1,0x011); // |x| | | |x|
lcd_send_byte(1,0x00); // | | | | | |


lcd_gotoxy(2,2);
                         _______>  Este valor se mantiene en 1, esto siempre va a ser así???? Tanto para el
                        |                 símbolo de grados como para la ñ.
lcd_send_byte( 1 , 1 ); 
                             |
                             |________> Este otro es el que cambia, 1 para la ñ   y   0 para el símbolo de grado


}


Saludos…
Título: Re: escribir caracteres en el CGRAM del LCD
Publicado por: Suky en 20 de Julio de 2009, 15:11:25
--->Este valor se mantiene en 1, esto siempre va a ser así???? Tanto para el símbolo de grados como para la ñ.

--->Este otro es el que cambia, 1 para la ñ   y   0 para el símbolo de grado

El primero para mostrar el carácter creado por pantalla debe ser 1.

El segundo indica la dirección del primer banco de 8 bytes (Donde se ha almacenado la letra creada) de la CGRAM. Revisa un datasheet de un LCD, en la tabla de caracteres ascii, las primeras 8 posiciones son de la CGRAM.

Saludos!
Título: Re: escribir caracteres en el CGRAM del LCD
Publicado por: ICEMAN1984 en 21 de Julio de 2009, 14:52:46
Suky que tal, gracias por la ayuda, sabrás que al fin he logrado hacer lo que quería (dibujar una letra), bueno mas tarde voy a poner la imagen, no es la gran cosa, pero para mi si, ya que con esto voy comprendiendo mas a fondo el funcionamiento de las pantallas LCD.  Trabajo con una pantalla HD44780 de 16 x 4 (5x8), te queía preguntar algo mas, con este tipo de pantalla 16x4 (5x8), solo se pueden tener 16 caracteres definidos por el usuario???? 



Saludos....
Título: Re: escribir caracteres en el CGRAM del LCD
Publicado por: Suky en 21 de Julio de 2009, 15:47:53
16? creo que solo 8.  :?

Saludos!
Título: Re: escribir caracteres en el CGRAM del LCD
Publicado por: PalitroqueZ en 21 de Julio de 2009, 21:52:37
solo 8 caracteres si la fuente es 5x8 y la mitad si es 5x10

Título: Re: escribir caracteres en el CGRAM del LCD
Publicado por: Raybak en 29 de Abril de 2010, 06:41:46
Buenas a todos,

He estado intentando crear un simbolo para mi LCD pero no lo consigo y ya no se que mas hacer.... el problema puede estar en la libreria que utilizo para la LCD? estoy utilizando la que voy a adjuntar. En lugar de LCD_send_byte utilizo lcd_enviar que segun lo que he visto trata de lo mismo... pero no funciona, el compilador no me lo compila....

un saludo.
Título: Re:escribir caracteres en el CGRAM del LCD
Publicado por: dcsalg en 22 de Noviembre de 2015, 11:18:07
Hola alguien tiene para dibujar los caracteres pero con I2C en vez de paralelo?, no veo en internet ejemplos con el programa en ccs para ver como se hace los que si hay es en paralelo, pero necesitaria en I2C. Gracias
Título: Re:escribir caracteres en el CGRAM del LCD
Publicado por: KILLERJC en 22 de Noviembre de 2015, 14:07:34
es lo mismo nomas que mandas los comandos por I2C ... Busca uno cualquiera, y fijate en I2C que se envie la instruccion para escribir en la direccion 0x00 y de ahi vas llenando tus caracteres.
Título: Re:escribir caracteres en el CGRAM del LCD
Publicado por: PalitroqueZ en 22 de Noviembre de 2015, 14:16:08
pero no entiendo, es qué el controlador de la pantalla LCD acepta i2c o hay que construir un convertidor paralelo <-> i2c ?