TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: superprp en 30 de Marzo de 2008, 09:46:51

Título: LCD 4 bits
Publicado por: superprp en 30 de Marzo de 2008, 09:46:51
Mirando en el foro sobre ésto he visto que practicamente el 80% de los mensajes que se refieren al LCD de 4 bits lo hacen con el código que proporciona el libro de aplicaciones del 16F84, pero mi duda es que aquí realmente lo que dice que hace es esto:

; 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.


entiendo que lo que hace es usar los 8 bits del puerto B pero después vuelve a sacar por 4 de ellos el dato que tenía anteriormente para no modificarlo, ésto para mi no es usar 4 bits, ¿hay alguna forma de hacerlo con 4 bits realmente? no dispongo de 8 pines para la conexión y los otros 4 no se pueden cambiar ni si quiera un instante

Además, parece que solo envia los 4 bits de más peso del dato a enviar, ¿y los otros 4 bits? no acabo de entender ese código

aquí lo pongo para que lo veais los que no lo hayais visto aun:

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.        ¿¿¿¿¿AQUÍ NO SERÍA TRISB???????
   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
Título: Re: LCD 4 bits
Publicado por: flacoclau en 30 de Marzo de 2008, 13:40:18
Me parece que ese código está mal, en realidad si es un bus de datos para el lcd de 4 bits, lo que está faltando es un SWAPF ya que utiliza 4 pines para enviar los 8 bits al lcd EN PARALELO, y el método normal en un lcd de la norma hitachi es enviar los 4 bits de mayor peso y luego los restantes.
saludos
Título: Re: LCD 4 bits
Publicado por: LeSs en 31 de Marzo de 2008, 16:23:47
superprp

La conexión del Microcontrolador al LCD se puede realizar con conexión a 4 bits(Utiliza 4 Lineas de Salida) y 8bits(8 Lineas de Salida). Al utilizar el modo de conexión a 4 bits se utiliza la tecnica de multiplexación, que como lo indica flacoclau envia los 4 bits de mayor peso y luego los restantes.
Citar
¿hay alguna forma de hacerlo con 4 bits realmente?
No tengo muy clara tu pregunta, pero debes tener en cuenta que todo dato que se envie al LCD debe ser de 8bits, solo que para ahorrar lineas de entrada/salidas que pueden ser indispensables para otras aplicaciones se deja a criterio del Usuario el tipo de conexión a utilizar.

Con las subrutinas que utilizas no se deben alterar el estado de los bits de menor peso, ya que solo haces uso de los de mayor peso, por medio de multiplexación.


Citar
   bsf   STATUS,RP0      ; Acceso al Banco 1. Cambiamos 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.        ¿¿¿¿¿AQUÍ NO SERÍA TRISB???????
   bcf   STATUS,RP0      ; Acceso al Banco 0.

Como se cambio al Banco 1, es por eso que da igual que se escriba  PORTB,F  como TRISB ya que al estar en ese banco se apunta directamente al registro 0x86h .


Saludos!