Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

03/07/2010 #1


Ayuda con LCD 2x16, no logro insertar caracter especial
Buenas, de antemando gracias por interesarse en el tema (es mi primera vez que posteo ) . Hace poco tiempo empece a involucrarme al mundo de los PIC mediante la programacion en Proton IDE, resulta que estoy intentando hacer una especie de animacion en una LCD 2x16 para lo que necesito caracteres especiales, que segun lo que se, yo mismo debo incluir en la RAM de la LCD, en proton encontre una aplicacion llamada "LCD Chr Generator" con la cual puedo configurar uno por uno los displays (si se puede llamar asi) de mi LCD dibujando el caracter que deseo una vez que utilizo esta aplicacion me aparece la siguiente linea de comando

Print $FE,$40,$00,$1F,$1F,$18,$18,$1F,$1F,$00

Segun lo que he investigado el $FE corresponde a un comando especial que seguido de $40 indica que se escribira en Chr(0) y de ultimo $00 indica que se termino de ingresar los datos de la cadena.

Mi problema es que agrego esta linea de codigo a mi programa pero no logro visualizar nada en la pantalla LCD de la simulacion



Les adjunto el codigo para que lo revisen aunque la configuracion creo que esta bien hecha


Código:
 Device 16F877A
XTAL 20
ALL_DIGITAL 1

LCD_DTPIN = PORTB.4
LCD_RSPIN = PORTB.2
LCD_ENPIN = PORTB.1
LCD_INTERFACE = 4
LCD_LINES = 2
LCD_TYPE = 0



Input PORTA.1
Output PORTB

inicio:
If PORTA.1 = 1 Then
GoTo Imprime
EndIf
If PORTA.1 = 0 Then
Cls
GoTo inicio
EndIf

Imprime:
Cls
Print $FE,$40,$00,$1F,$1F,$18,$18,$1F,$1F,$00
DelayMS 100

GoTo inicio
04/07/2010 #2

Avatar de mecatrodatos

Respuesta: Ayuda con LCD 2x16, no logro insertar caracter especial
Que tal intenta esta configuración el carácter es una especia de ª

Código:
Device 16F877A
XTAL 20
ALL_DIGITAL 1

LCD_DTPIN = PORTB.4
LCD_RSPIN = PORTB.2
LCD_ENPIN = PORTB.1
LCD_INTERFACE = 4
LCD_LINES = 2
LCD_TYPE = 0

Symbol CGRAM = $64 ' Apuntador a la Memoria CGRAM del LCD

Input PORTA.1
Output PORTB

inicio:
If PORTA.1 = 1 Then
GoTo Imprime
EndIf
If PORTA.1 = 0 Then
Cls
GoTo inicio
EndIf

Imprime:
Print Cls ' Limpia la pantalla LCD
Print $40,$00,$1F,$1F,$18,$18,$1F,$1F,$00
DelayMS 100

GoTo inicio
06/07/2010 #3


Respuesta: Ayuda con LCD 2x16, no logro insertar caracter especial
Alguien sabe como borrar un caracter específico del LCD?
07/07/2010 #4

Avatar de cosmefulanito04

Respuesta: Ayuda con LCD 2x16, no logro insertar caracter especial
Para modificar un caracter en pantalla, simplemente tendrias que modificar el valor del contenido de la direccion en donde queres hacer el cambio.

No recuerdo bien, pero creo que las direcciones eran:

0x00 -----> 0x10 (16 columnas)
0x40 -----> 0x50 (16 columnas)

Entonces, si quisieras modicar el caracter en la 3era posicion de la fila 1, deberia hacer esto:

1- Seteo la direccion 0x03, para lo cual debo mandar 0x83 (1000-0011, el 1er 1 indica que se trata de una direccion).

2- Enviar el ascii.
13/09/2013 #5


Ayuda con LCD 2x16, no logro insertar caracter especial
Hola, a todos, tengo una duda, como puedo hacer para escribir palabras con tilde en una pantalla LCD 16x2.... y tambien como puedo hacer que salga la letra "ñ" .

EJM:
Quisiera que en la pantalla salga: " sólo " //(en particular me refiero sólo a la tilde..)


Ahh... lo olvidaba, estoy trabajando con un ARDUINO uno.
Gracias a sus posible respuestas.
13/09/2013 #6

Avatar de ByAxel

Debes de manipular la memoria CGRAM del LCD.
22/08/2016 #7

Avatar de Chelouruguay

Estimados,
estoy teniendo problemas con la creación de caractéres especiales en un lcd 16x2.
En Proteus simula barbaro, pero al momento de la realidad no aparecen los caracteres en el display o aparecen otros diferentes a los grabados en la CgRam.
Adjunto extracto del código:
Código:
char customChar[8] = {
	0b01110,
	0b11011,
	0b10001,
	0b10001,
	0b10001,
	0b10001,
	0b11111,
	0b11111
};
Código:
void LCDCharBuilder(unsigned char loc, unsigned char *p){
	unsigned char i;
	if(loc<8){
		comandXLCD(0x40+(loc*8));
		for(i=0;i<8;i++)
			putcXLCD(p[i]);
		}
		comandXLCD(0x80);
	}
Código:
void LCD (void){
	OpenXLCD (FOUR_BIT & LINES_5X7 ); //
	comandXLCD (0x06); //
	comandXLCD (0x0C); //
	comandXLCD(0x01);
	
	LCDCharBuilder(1, customChar);

	gotoxyXLCD(3,1);
	putcXLCD(0x01);
Aclaro que el LCD está funcionando correctamente, ya que puedo visualizar caractéres de la ROM perfectamente usando el coomando putrsXLCD.

Muchas gracias por cualquier ayuda.
22/08/2016 #8
Moderador

Avatar de D@rkbytes

¿Cuál es el modelo de tu pantalla?
22/08/2016 #9

Avatar de Chelouruguay

Es una Winstar1602 con controlador ST7066.
23/08/2016 #10

Avatar de Chelouruguay

Al final pude resolver el tema de los caracteres especiales.
Estoy usando una versión de LCD que ya tiene en su ROM los caracteres de español, como la ñ que era justamente lo que queria visualizar.

Adjuntando un BusyXLCD() entre lineas pude enviar correctamente el codigo binario de la letra/simbolo que quiero mostrar, segun la tabla del fabricante del LCD.

Adjunto codigo:
Código:
putrsXLCD("  Cumplea");
    BusyXLCD();
    putcXLCD(0b10011011); //Letra ñ según tabla del fabricante.
    putrsXLCD("os");
Muestra en pantalla: "Cumpleaños".
Saludos!

---------- Actualizado ----------


Adjunto header para manejo fácil de los caractéres especiales:

Código:
#ifndef __Char_Especiales_H
#define __Char_Especiales_H

#include <p18cxxx.h>
#include <xlcd.h>

/********************************************************************
*       Function Name:  Char_Especiales                             *
*                                           *
*       Parameters:     data byte to be written to LCD              *
*       Description:    Esta rutina asigna nombres a los comandos    *
*        de caracteres especiales en LCD Winstar 1602 con             *
*        controlador ST7066 y ROM 0B.                                *
*********************************************************************/


#define enie putcXLCD(0b10011011)
#define a_tilde putcXLCD(0b10100000)
#define u_tilde putcXLCD(0b10100011)
#define i_tilde putcXLCD(0b10100001)
#define o_tilde putcXLCD(0b10100010)
#define e_tilde putcXLCD(0b10000010)
#define enie_mayus putcXLCD(0b10011100)
Para escribir "Cumpleaños" entonces:

Código:
putrsXLCD("Cumplea");
BusyXLCD();
enie;
putrsXLCD("os");
Solamente hay que incluir la libreria en el archivo main.
Código:
#include "Char_Especiales.h"
y adjuntarlo al Project en el árbol de desarrollo.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.