Uso de pantalla lcd lm016l con p16f84a

Buen día amigos, estoy estudiando con el libro Microcontrolador pic16f84 de ENRIQUE PALACIOS y otros.
La cuestión es que llegue al capitulo 13, donde se introduce ahora el visualizador lcd lm016l, explica la teoría y el control que debo hacer para poderla usar..

Bien aquí muestran el montaje de la pantalla, en conexión 4bit y conexión 8bit, y me dicen que el código de los ejemplos fue elaborado para utilizar conexión de 4bit con la pantalla, me dispongo a montar en proteus la conexión para poder probar los ejemplos y hacer los ejercicios que mandan al final del capitulo, y bueno no los puedo hechar andar, ya revise los ejemplos de ellos y es mas están tan bien documentados que dicen donde debería ir cada conexión, y el problema es que sigo las instrucciones y la pantalla nada que funciona..

Es un poco frustrante porque llevaba un buen ritmo de aprendizaje y bueno, llevo unos cuantos días estancado aquí sin saber como resolver esto...

En el fichero .rar esta, el proyecto en mplab y el montaje en proteus.
Les voy a montar tanto el proteus, como el proyecto de mplab con su codigo y librerias y chequean a ver que mal hice..
 

Adjuntos

  • proyecto-prueba.rar
    85 KB · Visitas: 19
En tu proyecto tienes seleccionado el PIC16F874A y en el código tienes declarado el PIC16F84A
Corrige ese detalle y sustituye la librería LCD_4BITS.INC que estás usando, por la que adjunto.
La librería que usas no funciona ya que tiene algunas incompatibilidades, y la que adjunto ya está corregida.

Saludos.
 

Adjuntos

  • LCD_4BIT.rar
    3.5 KB · Visitas: 24
  • 16F84A LCD16x2 SCH.jpg
    16F84A LCD16x2 SCH.jpg
    56.9 KB · Visitas: 39
Última edición:
Buen dia amigo, siguiendo con el tema de la pantalla lcd, ahora quiero rediseñar la libreria LCD_4BIT a una LCD_8BIT. En el libro me hablan de que es mas rapido, lo malo es que creo que voy a tener que escribirme una desde 0 xq no encuentro como modificar la que me proveen ellos, y de paso no me explican bien el control de la pantalla. Te voy a mostrar un diagrama de flujo que si lo lograra entender podria por lo menos escribir la rutina de inicializar el lcd.

Lo que quiero saber es, que es lo que debo enviar a la pantalla para poderla inicializar. Porque no se si lo primero que debo hacer es borrar o limpiar la pantalla y luego poner RS O RW a 0, y como ya no voy a tener que enviar primero un nibble y despues otro saber como le hago para enviar todo los bits de una sola vez...

O me podrias explicar que es lo primero que se debe mandar a la pantalla cuando se conecta la energia.

Buen dia amigo, siguiendo con el tema de la pantalla lcd, ahora quiero rediseñar la libreria LCD_4BIT a una LCD_8BIT. En el libro me hablan de que es mas rapido, lo malo es que creo que voy a tener que escribirme una desde 0 xq no encuentro como modificar la que me proveen ellos, y de paso no me explican bien el control de la pantalla. Te voy a mostrar un diagrama de flujo que si lo lograra entender podria por lo menos escribir la rutina de inicializar el lcd.

Lo que quiero saber es, que es lo que debo enviar a la pantalla para poderla inicializar. Porque no se si lo primero que debo hacer es borrar o limpiar la pantalla y luego poner RS O RW a 0, y como ya no voy a tener que enviar primero un nibble y despues otro saber como le hago para enviar todo los bits de una sola vez...

O me podrias explicar que es lo primero que se debe mandar a la pantalla cuando se conecta la energia.

Buen dia amigo, siguiendo con el tema de la pantalla lcd, ahora quiero rediseñar la libreria LCD_4BIT a una LCD_8BIT. En el libro me hablan de que es mas rapido, lo malo es que creo que voy a tener que escribirme una desde 0 xq no encuentro como modificar la que me proveen ellos, y de paso no me explican bien el control de la pantalla. Te voy a mostrar un diagrama de flujo que si lo lograra entender podria por lo menos escribir la rutina de inicializar el lcd.

Lo que quiero saber es, que es lo que debo enviar a la pantalla para poderla inicializar. Porque no se si lo primero que debo hacer es borrar o limpiar la pantalla y luego poner RS O RW a 0, y como ya no voy a tener que enviar primero un nibble y despues otro saber como le hago para enviar todo los bits de una sola vez...

O me podrias explicar que es lo primero que se debe mandar a la pantalla cuando se conecta la energia.



Aqui esta el codigo del inicializa pantalla pero en comunicación 4bit
Código:
LCD_Inicializa
	bsf	STATUS,RP0		; Configura las líneas conectadas al pines RS,
	bcf	LCD_PinRS		; R/W y E.
	bcf	LCD_PinEnable
	bcf	LCD_PinRW
	bcf	STATUS,RP0
	bcf	LCD_PinRW		; En caso de que esté conectado le indica
					; que se va a escribir en el LCD.
	bcf	LCD_PinEnable		; Impide funcionamiento del LCD poniendo E=0.
	bcf 	LCD_PinRS		; Activa el Modo Comando poniendo RS=0.
	call	Retardo_20ms
	movlw	b'00110000'	
	call	LCD_EscribeLCD		; Escribe el dato en el LCD.
	call	Retardo_200micros
	movlw	b'00110000'	
	call	LCD_EscribeLCD
	call	Retardo_20micros	; Retardo necesario para simular en PROTEUS.
	movlw	b'00110000'	
	call	LCD_EscribeLCD
	call	Retardo_20micros	; Retardo necesario para simular en PROTEUS.
	movlw	b'00100000'		; Interface de 4 bits.
	call	LCD_EscribeLCD
	call	Retardo_20micros	; Retardo necesario para simular en PROTEUS.

; Ahora configura el resto de los parámetros: 

	call	LCD_2Lineas4Bits5x7	; LCD de 2 líneas y caracteres de 5x7 puntos.
	call	LCD_Borra		; Pantalla encendida y limpia. Cursor al principio
	call	LCD_CursorOFF		; de la línea 1. Cursor apagado.
	call	LCD_CursorIncr		; Cursor en modo incrementar.
	return

; Subrutina "LCD_EscribeLCD" -----------------------------------------------------------
;
; Envía el dato del registro de trabajo W al bus de dato y produce un pequeño pulso en el pin
; Enable del LCD. Para no alterar el contenido de las líneas de la parte baja del Puerto B que
; no son utilizadas para el LCD (pines RB3:RB0), primero se lee estas líneas y después se
; vuelve a enviar este dato sin cambiarlo.

LCD_EscribeLCD
;	andlw	b'11110000'		; Se queda con el nibble alto del dato que es el
	movwf	LCD_Dato		; que hay que enviar y lo guarda.
	movf	LCD_BusDatos,W		; Lee la información actual de la parte baja
	andlw	b'00001111'		; del Puerto B, que no se debe alterar.
	iorwf	LCD_Dato,F		; Enviará la parte alta del dato de entrada
					; y en la parte baja lo que había antes.
	bsf	STATUS,RP0		; Acceso al Banco 1.
	movf	TRISB,W			; Guarda la configuración que tenía antes TRISB.
	movwf	LCD_GuardaTRISB
	movlw	b'00001111'		; Las 4 líneas inferiores del Puerto B se dejan 
	andwf	PORTB,F			; como estaban y las 4 superiores como salida.
	bcf	STATUS,RP0		; Acceso al Banco 0.
;
	movf	LCD_Dato,W		; Recupera el dato a enviar.
	movwf	LCD_BusDatos		; Envía el dato al módulo LCD.
	bsf	LCD_PinEnable		; Permite funcionamiento del LCD mediante un pequeño
	bcf	LCD_PinEnable		; pulso y termina impidiendo el funcionamiento del LCD.
	bsf	STATUS,RP0		; Acceso al Banco 1. Restaura el antiguo valor en
	movf	LCD_GuardaTRISB,W	; la configuración del Puerto B.
	movwf	PORTB			; Realmente es TRISB.
	bcf	STATUS,RP0		; Acceso al Banco 0.
	return

Sera posible rescatar algo de aqui, o es mejor reescribirla¿?
 

Adjuntos

  • diagramaflujo4bit.png
    diagramaflujo4bit.png
    127.3 KB · Visitas: 14
Última edición:
Amigo, mira el que hice, tengo un error en el proteus como si hubiese un ciclo infinito, y los unicos ciclos que utilizo son los del retardo que es una libreria que la e utilizado para casi todos los practicas..
Lo voy a montar..

Aqui estoy tratando de diseñar la rituna para controlar el lcd a 8 bit, solo envie un caracter para mostrar en pantalla pero no funciono..
 

Adjuntos

  • proyecto-lcd-aprendiendo2.rar
    50.7 KB · Visitas: 25
Tu código está muy incompleto.
Mejor mira este ejemplo para que veas cómo se hace, y adjunto una guía de inicio sobre el HD44780.
También lee la hoja de datos del controlador Hitachi HD44780, que es dónde viene más información.

Saludos.
 

Adjuntos

  • 16F84A LCD16x2 8Bits SCH.jpg
    16F84A LCD16x2 8Bits SCH.jpg
    69.5 KB · Visitas: 16
  • 16F84A LCD_Test.zip
    23.2 KB · Visitas: 19
  • HD44780 LCD Starter Guide.pdf
    890.1 KB · Visitas: 34
Buen dia amigos, para seguir con el tema, hice un program para poder controlar la lcd y ahora con un teclado matricial y luego si lograba mostrar en pantalla el valor correcto del teclado le sumaria un l293 para mover un motor dc, pero tengo un error. En las hojas del hd44780 aparecen unos caracteres que supongo yo son los que vamos mandar a la lcd para mostrarlos.. Voy a montar lo que hice, basicamente lo que deberia hacer el pic + teclado + motor, era que si pulsaba 1 se moviera a adelante, 2 hacia atras y 3 detenerse. Claro aun no esta conectado porque cuando pulso una tecla deberia mandar lo que tiene serigrafiado sobre la tecla, pero manda otro valor como por ejemplo, espacios en blanco, solo la tecla 3 manda a la pantalla su valor de 3 y en el proteus no me da error cuando pulso esa tecla, pero basta nada mas que presione otra y explota... Poco a poco lo hiba puliendo..
 

Adjuntos

  • proyecto-motor-lcd.zip
    81.4 KB · Visitas: 7
Amigos, ya resolvi el inconveniente, cuando vean el primero que subi y comparen con este ultimo que voy a subir, veran que en mi libreria de teclado, al momento de hacer el retlw k, le puse un mecanismo que solo enviara el boton presionado cuando lo deje de presionar y funciona, de todas formas me gustaria escuchar sus criticas para ver como podria mejorarlo..
 

Adjuntos

  • proyecto-motor-lcd.zip
    81.4 KB · Visitas: 27
Atrás
Arriba