# Simular LCD en ISIS, Proteus



## sanlara (Jul 2, 2012)

¿debo hacer alguna configuración a una LCD es isis, para que esta me simule el texto? he intentado ya simularlo y tan solo me enciende la pantalla, al pasarlo a baquela me lo lee normal, ¿que debo hacer para que en la simulación en proteus?


----------



## LaElectronicaMeOdia (Jul 2, 2012)

> ¿debo hacer alguna configuración a una LCD es isis, para que esta me simule el texto?



normalmente el LCD de isis va acompañado de un microcontrolador, de otra manera seria algo complicado.

publica tu diagrama y si usas un microcontrolador pon el codigo que utilizas.


----------



## Vick (Jul 8, 2012)

Sube el circuito de Proteus, y da mas datos para que alguien pueda ayudarte, que tipo de LCD usaste, estas usando un microcontrolador?

Sin más datos de lo que tienes es difícil saber que es lo que estas haciendo y por qué no funciona.

PD. muevo el tema al foro correcto...


----------



## sanlara (Jul 18, 2012)

subo la foto del montaje simulado en isis proteus, los botones azul y rojo significan que esta corriendo el programa, aun no se porque no me muestra letras en el montaje


----------



## Rigeliano (Jul 18, 2012)

Aunque no veo muy bien la imagen me parece que el problema esta en el código del PIC, por que no subes el programa para ver que esta faltando.


----------



## sanlara (Jul 22, 2012)

escrito en assembler

;******************************************************
;CONTROL DE TEMPERATURA 
;******************************************************

	LIST P=16F873A		;ESCOGEMOS EL PIC QUE VAMOS A UTILIZAR
	#INCLUDE "P16F873A.INC"	;INCLUIMOS LA LIBRERIA 
	RADIX	HEX
	ERRORLEVEL -302
	__CONFIG 3F39H


LCD_VAR		EQU	20H	;VARIABLE DE TEMPORIZADOR LCD
LCD_TEMP_2	EQU	21H	;VARIBLE DE RETARDO LCD
LCD_TEMP_1	EQU	22H	
TA1			EQU	23H	;- SIGNIFICATIVO TEMPERATURA ACTUAL
TA2			EQU	24H
TA			EQU	25H
CONT1		EQU	26H	;CONTADOR RETARDO
CONT2		EQU	27H
COND		EQU	28H	;
TEDI		EQU	29H	;TEMP DIGITAL
OPCION		EQU	081H	;REGISTRO OPTION_REG


	ORG	00H
	GOTO	INICIO



;**********************************************************
;DECLARACION DE VARIABLES E INICIO DEL PROGRAMA
;**********************************************************

INICIO	CALL 	UP_LCD
		CALL	LCD_INI		;RUTINA DE INICIACION
		CALL	BORRA_Y_HOME	;RUTINA QUE CLAREA LA PANTALLA Y DEVUELVE EL CURSOR AL INICIO
		CALL	DISPLAY_ON_CUR_OFF	;RUTINA DE CONFIGURACION
		CALL	MJE2		;MENSAJE PRIMERA LINEA
GTO		CALL	CONVER		;RUTINA DE CONVERCION ANALOGA DIGITAL
		BSF 	PCLATH,3		;CAMBIO DE PAGINA, PARA EJECUTAR CONVER QUE SE ENCUENTRA EN LA PAGINA 1
		CALL	TABLA
		MOVWF	TA
		MOVLW	B'00001111'
		ANDWF	TA,0
		MOVWF	TA2
		MOVF	TA,0
		MOVWF	TA1
		SWAPF	TA1,1
		MOVLW	B'00001111'
		ANDWF	TA1,1
		CALL	MJE2
		GOTO	GTO

CONVER	BSF		ADCON0,2	;INICIA CONVERSION
LOO		BTFSC	ADCON0,2	;PREGUNTA SI TERMINO CONVERSION
		GOTO	LOO
		MOVF	ADRESH,0
		MOVWF	TEDI
		CALL	RETARDO
		MOVLW	67H
		SUBWF	TEDI,0
		BTFSC	STATUS,0	;EN UNO ES QUE ES MAYOR
		GOTO	LOO11		;ES MAYOR 
		MOVF	TEDI,0		;ES MENOR
		RETURN	
LOO11	MOVLW	67H
		MOVWF	TEDI
		RETURN


MJE2	MOVLW	0X80		;PALABRA PARA SELECCIONAR DDRAM 
		CALL	LCD_REG		
		MOVLW	B'00000110'	;ENTRY MODE SET. INC DE CURSOR
		CALL	LCD_REG		;es decir en la linea 0
		MOVLW	"T"
		CALL	ESCR 
		MOVLW	"E"
		CALL	ESCR
		MOVLW	"M"
		CALL	ESCR
		MOVLW	"P"
		CALL	ESCR
		MOVLW	"E"
		CALL	ESCR
		MOVLW	"R"
		CALL	ESCR
		MOVLW	"A"
		CALL	ESCR
		MOVLW	"T"
		CALL	ESCR
		MOVLW	"U"
		CALL	ESCR
		MOVLW	"R"
		CALL	ESCR 
		MOVLW	"A"
		CALL	ESCR
		MOVLW	" "
		CALL	ESCR 
		MOVLW	" "
		CALL	ESCR 
		MOVLW	" "
		CALL	ESCR
		MOVLW	" "
		CALL	ESCR 
		MOVLW	" "
		CALL	ESCR
		MOVLW	0XC0		;CAMBIAMOS PARA ESCRIBIR EN LA LINEA 2
		CALL	LCD_REG
		MOVLW	0XC0		;CAMBIAMOS PARA ESCRIBIR EN LA LINEA 2
		CALL	LCD_REG 
		MOVLW	" "
		CALL	ESCR
		MOVLW	" "
		CALL	ESCR
		MOVLW	"D"
		CALL	ESCR
		MOVLW	"E"
		CALL	ESCR
		MOVLW	"L"
		CALL	ESCR
		MOVLW	" "
		CALL	ESCR
		MOVLW	"M"
		CALL	ESCR
		MOVLW	"O"
		CALL	ESCR
		MOVLW	"T"
		CALL	ESCR 
		MOVLW	"O"
		CALL	ESCR
		MOVLW	"R"
		CALL	ESCR
		MOVLW	" "
		CALL	ESCR 
		MOVLW	" "
		CALL	ESCR
		MOVLW	30H	
		ADDWF	TA1,0
		CALL	ESCR
		MOVLW	30H	
		ADDWF	TA2,0
		CALL	ESCR
		MOVLW	B'11011111'
		CALL	ESCR
		RETURN

ESCR	CALL	LCD_DATO	;RUTINA PARA ESCRIBIR EN LA LCD
		CALL	RETARDO	
		RETURN
RETARDO:MOVLW	.80	;180 VELOCIDAD DE APARICION DE LAS LETRAS 
		MOVWF	CONT2	;EN LA PANTALLA LCD
LOOP1:	MOVLW	.50	;150,40
		MOVWF	CONT1
LOOP:	NOP
		NOP
		NOP
		NOP
		NOP
		NOP	
		NOP
		DECFSZ	CONT1,1
		GOTO	LOOP
		DECFSZ	CONT2,1
		GOTO	LOOP1
		RETURN

;***************************************
;EL CONJUNTO DE RUTINAS QUE SE PRESENTAN
;A CONTINUACIÓN PERMITEN REALIZAR LAS TA-
;REAS BASICAS DE CONTROL DEL MODULO DEL 
;LCD.
;**************************************
#define ENABLE 		BSF PORTC,7  ;ACTIVA E (PIN6)
#define DISABLE		BCF PORTC,7  ;DESACTIVA E (PIN 6)
#define LEER		BSF PORTC,6  ;PONE LCD EN EL MODO LEER(PIN5)
#define ESCRIBIR 	BCF PORTC,6  ;PONE LCD EN MODO ESCRIBIR(PIN 5)
#define OFF_COMANDO	BCF PORTC,5  ;DESACTIVA RS SELECCION DE REGIS, ESCRIBE OPERACION (MODO COMANDO)(PIN 4)
#define ON_COMANDO	BSF PORTC,5  ;ACTIVA RS LEE LA OPERACION(MODO DATO)(PIN 4)

;****************************************
;LA SIGUIENTE RUTINA CONFIGURA EL PIC PA-
;RA QUE TRABAJE CON EL LCD.
;****************************************
UP_LCD:	BSF		STATUS,RP0		;BANCO 1
		MOVLW	B'10000111'	;PALABRA PARA EL REGISTRO OPTION, CON EL FIN DE DIVIDIR LA FRECUENCIA EN 1/256
		MOVWF	OPCION
		CLRF	TRISB	 	;PORTB= OUT LCD
		CLRF	TRISC		;COMO SALIDA 		
		MOVLW	B'00000000'	;JUSTIFICAMOS DONDE QUEREMOS LOS DATOS Y ESCOGEMOS EL CANAL ANALOGO
		MOVWF	ADCON1		;CONFIGURAMOS LA CONVERCION ANALOGA DIGITAL
		BCF		STATUS,RP0	;BANCO 0
		MOVLW	B'00000001'	;SELECIONAMOS EL CANAL Y LA FREC. DE OSC, ACTIVAMOS EL MODULO A/D
		MOVWF	ADCON0		;EN LA PALABRA DE CONFIGURACION
		OFF_COMANDO		;REGISTRO DE COMANDO (INSTRUCCION)
		DISABLE			;DESACTIVA LA LCD
		RETURN
;********************************************
;LA SIGUIENTE RUTINA CHEQUEA EL ESTADO DE LA 
;BANDERA DE OCUPADO DEL LCD. LA CUAL INDICA SI	RUTINA DE OCUPADO
;YA SE TERMINO DE EJECUTAR EL COMANDO ANTERIOR
;Y NO RETORNA HASTA QUE LO EJECUTE TOTALMENTE
;*********************************************
LCD_BUSY:	LEER			;R/W = 1
			BSF		STATUS,RP0	;BANCO 1
			MOVLW	H'FF' 		;PUERTO B COMO IN
			MOVWF	PORTB
			BCF		STATUS,RP0	;BANCO 0
			ENABLE                  ;E = 1
			NOP
L_BUSY:		BTFSC	PORTB,7         ;MIRANDO SI EL LCD ESTA 
		GOTO    L_BUSY          ;OCUPADO BF =1, CUANDO ES CERO YA TERMINO
		DISABLE			;E =0, ES DECIR DESACTIVA LA LCD
		BSF		STATUS,RP0      ;PORTB = OUT
		CLRF	PORTB		
		BCF		STATUS,RP0	;BANCO 0
		ESCRIBIR		;R/W = 0 (MODO ESCRITURA)
		RETURN
;****************************************
;LA SIGUIENTE RUTINA SE ENCARGA DE GENERAR
;UN IMPULSO DE 1 MICRSEG EN RA2, LA CUAL 
;SE UTILIZA PARA SEÑAL ENABLE DEL LCD
;****************************************
LCD_E:		ENABLE	;ACTIVA E
			NOP
			DISABLE ;DESACTIVA E
			RETURN	
;*******************************************
;LA SIGUIENTE RUTINA ESCRIBE EL CONTENIDO DEL
;REGISTRO W, EL CUAL CONTIENE UN CARACTER AS-
;CII, AL PUERTO B, PARA VISUALIZARLO POR EL
;LCD O PARA ESCRIBIRLO EN LA CGRAM.
;*******************************************
LCD_DATO:	OFF_COMANDO	;DESACTIVA RS (MODO COMANDO)
		MOVWF 	PORTB
		CALL	LCD_BUSY;ESPERA EL LCD LIBRE
		ON_COMANDO	;ACTIVA RS(MODO DATO)
		CALL	LCD_E	;GENERA UN PULSO EN E
		RETURN
;***********************************************
;ESTA RUTINA ES PARECIDA A LA ANTERIOR LA UNICA
;DIFERENCIA ES QUE AHORA SE ESCRIBE UN COMANDO O INSTRUCCION
;AL LCD.
;***********************************************
LCD_REG		OFF_COMANDO    	;DESACTIVA RS(MODO COMANDO)
		MOVWF	PORTB
		CALL	LCD_BUSY;LCD LIBRE
		CALL 	LCD_E	;RUTINA DE DESACTIVACION Y ACTIVACION
		RETURN
;*************************************************
;LA SIGUIENTE RUTINA SE ENCARGA DE HACER LA SECUEN-
;CIA DE INICIALIZACÓN DE LA LCD DE ACUERDO CON LOS 
;TIEMPOS DADOS POR EL FABRICANTE (15 MS).SE ESPECI-
;FICAN LOS VALORES DE DL, N, Y F, ASI COMO LA CON-
;FIGURACIÓN DE UNA INTERFAZ D 8 LINEAS CON EL BUS
;DE DATO DEL PIC, Y 2 LINEAS DE 16 CARACTERES DE
; 5X7 PIXELES. ES 
;*************************************************
LCD_INI:	MOVLW	B'00111000'	;PALABRA FUNCION SET (TAMAÑO, LINEA)
		CALL 	LCD_REG		;CODIGO DE INSTR.
		CALL	LCD_DELAY	;TEMPORIZA
		MOVLW	B'00111000'	;
		CALL	LCD_REG
		CALL	LCD_DELAY
		MOVLW	B'00111000'
		CALL	LCD_REG
		CALL	LCD_DELAY
		RETURN
;*********************************************
;LA SIGUIENTE RUTINA BORRA EL LCD Y RETORNA AL
;CURSOR A LA POSICION 0 (HOME)
;*********************************************
BORRA_Y_HOME:	MOVLW	B'00000001'	;CLAREA EL DISPLEY Y VUELVE AL INICIO
		CALL	LCD_REG		;ESCRIBE LA INSTRUCCION EN EL DISPLEY
		RETURN
;*********************************************
;LA SIGUIENTE RUTINA CONTROLA EL DISPLAY Y CUR-
;SOR. ACTIVA EL DISPLAY Y DESACTIVA EL CURSOR
;*********************************************
DISPLAY_ON_CUR_OFF:
		MOVLW	B'00001100'	;PALABRA DYSPLEY ON/OFF CONTROL
		CALL	LCD_REG		;ESCRIBE EN EL DISPLEY
		RETURN
;******************************************
;LA SIGUIENTE RUTINA PRODUCE UN RETARDO DE
;5 MILISEGUNDOS.
;******************************************
LCD_DELAY:	MOVLW	10
		MOVWF	LCD_TEMP_1
		CLRF	LCD_TEMP_2
LCD_DELAY_1:	DECFSZ	LCD_TEMP_2,F
		GOTO	LCD_DELAY_1
		DECFSZ	LCD_TEMP_1,F
		GOTO	LCD_DELAY_1
		RETURN 

;****************************************************************************
;CAMBIO DE PAGINA
;****************************************************************************
		ORG		800H

TABLA	CALL	TABLA1
		BCF 	PCLATH,3
		RETURN
TABLA1	ADDWF	PCL,1
	RETLW	00H	;0
	RETLW	00H	;1
	RETLW	01H	;2
	RETLW	01H	;3
	RETLW	02H	;4
	RETLW	02H	;5
	RETLW	03H	;6
	RETLW	04H	;7
	RETLW	05H	;8
	RETLW	05H	;9 - 10
	RETLW	06H	;A
	RETLW	06H	;B
	RETLW	07H	;C
	RETLW	07H	;D
	RETLW	08H	;E
	RETLW	09H	;F
	RETLW	10H	;10
	RETLW	11H	;11
	RETLW	12H	;12
	RETLW	13H	;13
	RETLW	14H	;14
	RETLW	15H	;15
	RETLW	16H	;16
	RETLW	17H	;17
	RETLW	18H	;18
	RETLW	19H	;19
	RETLW	20H	;1A
	RETLW	21H	;1B
	RETLW	22H	;1C
	RETLW	23H	;1D
	RETLW	24H	;1E
	RETLW	25H	;1F
	RETLW	26H	;20
	RETLW	27H	;21
	RETLW	28H	;22
	RETLW	29H	;23
	RETLW	30H	;24
	RETLW	31H	;25
	RETLW	32H	;26
	RETLW	33H	;27
	RETLW	34H	;28
	RETLW	35H	;29
	RETLW	36H	;2A
	RETLW	37H	;2B
	RETLW	38H	;2C
	RETLW	39H	;2D
	RETLW	40H	;2E
	RETLW	41H	;2F
	RETLW	42H	;30
	RETLW	43H	;31
	RETLW	44H	;32
	RETLW	45H	;33
	RETLW	46H	;34
	RETLW	47H	;35
	RETLW	48H	;36
	RETLW	49H	;37
	RETLW	50H	;38
	RETLW	51H	;39
	RETLW	52H	;3A
	RETLW	53H	;3B
	RETLW	54H	;3C
	RETLW	55H	;3D
	RETLW	56H	;3E
	RETLW	57H	;3F
	RETLW	58H	;40
	RETLW	59H	;41
	RETLW	60H	;42
	RETLW	61H	;43
	RETLW	62H	;44
	RETLW	63H	;45
	RETLW	64H	;46
	RETLW	65H	;47
	RETLW	66H	;48
	RETLW	67H	;49
	RETLW	68H	;4A
	RETLW	69H	;4B
	RETLW	70H	;4C
	RETLW	71H	;4D
	RETLW	72H	;4E
	RETLW	73H	;4F
	RETLW	74H	;50
	RETLW	75H	;51
	RETLW	76H	;52
	RETLW	77H	;53
	RETLW	78H	;54
	RETLW	79H	;55
	RETLW	80H	;56
	RETLW	81H	;57
	RETLW	82H	;58
	RETLW	83H	;59
	RETLW	84H	;5A
	RETLW	85H	;5B
	RETLW	86H	;5C
	RETLW	87H	;5D
	RETLW	88H	;5E
	RETLW	89H	;5F
	RETLW	90H	;60
	RETLW	91H	;61
	RETLW	92H	;62
	RETLW	93H	;63
	RETLW	94H	;64
	RETLW	95H	;65
	RETLW	96H	;66
	RETLW	97H	;67		

	END


----------



## Magdiel291093 (Mar 18, 2013)

PIC16F877A

// Lcd pinout settings
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;

// Pin direction
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;

void main() 
{
 Lcd_Init();
 Lcd_Out(1, 1, "Hola BB");
 Lcd_Cmd(_LCD_CURSOR_OFF);
}

y el videotutorial con el que me guie fue: 




alguien me puede decir como meterle mas datos y que se vallan metiendo mas y mas y la pantalla los muestre


----------

