Translate, Traductor

martes, 31 de agosto de 2010

Modulos LCD con PICs

;Los modulos LCD son otra opcion para la visualizacion de datos, diferente a los display de 7 segmentos, los modulos LCD tienen sus procpios controladores  quienes interpretan las ordenes y memoria donde almacenan los simbolos que se quieren visualizar. Usan el codigo de caracteres ASCII.




vista frontal
vista trasera

;Es un estandar que tengan 14 pines, aunque algunos tienen dos mas para el control de la luz (back litgh) los pines 15 y 16

NOMBRE DE LOS PINES

;  Vss   VDD   contraste    R/S   R/W  enable     DO    D1    D2     D3    D4          
;   1         2            3             4      5         6             7      8       9      10      11

12      13     14  
D5     D6    D7  

DESCRIPCION DE LOS PINES

; Vss    GND

; VDD    +5v

;CONTRASTE    Aumenta o disminuye el contraste del modulo, se puede conectar un potenciometro de 10K, los extremos a +5v y GND y el centro al este PIN

;R/S    Se indica si es un dato o una orden lo que se le quiere enviar al modulo
     0 = instruccion,   1 = dato

;R/W    Se indica la operacion es de escritura o de lectura.
     0 = escritura,   1 = lectura
     normalmente lo mantenemos con un cero '0'

;ENABLE    Habilita el modulo para cualquier operacion.

;DO....D7    Se escribe el dato o el comando que se quiere dar al modulo.


UTILIZACION

Entre las ordenes y los datos que se le envian al modulo es necesario agregar
retardos, segun los fabricantes son del orden de los microsegundos, yo voy usar
retardos de 1ms para todo el programa.


    INICIALIZACION

Para el funcionamiento es necesario primero inicializar el modulo.
Se deben seguir los siguientes pasos:

    1   RS = 0

    2    E = 0

    3    cargar el comando para configurar el modo de funcionamiento en 0..D7
           comunicacion a 8 bits
           usar las dos lineas del modulo
           tamano del caracter  7x5

    4   E = 1

    5    espera un tiempo  ( 1ms)

    6   E = 0

    7  cargo comando

        enciendo el LCD
        enciendo el cursor
        cursor intermitente

    8   E = 1

    9    espera un tiempo  ( 1ms)

    10   E = 0
       
        revisar el manual para mas comandos
   
    y todo listo

    este es el pedazo de codigo que hace lo indicado

    BCF           PORTA,0    ;RS = 0
    BCF           PORTA,1    ;E = 0
    MOVLW    B'00111000'    ;8 BITS 2 LINEAS 7X5
    MOVWF    PORTB  
    BCF           PORTA,0    ;RS=0
    BSF           PORTA,1    ;E=1 HABILITO ESCRITURA
    CALL        RET_1MS
    BCF           PORTA,1    ;E = 0
    CALL        RET_1MS
    MOVLW    B'00001111'    ;ON LCD, ON CURSOR, ON INTER  
    MOVWF    PORTB  
    BCF           PORTA,0    ;RS=0
    BSF           PORTA,1    ;E=1 HABILITO ESCRITURA
    CALL        RET_1MS
    BCF          PORTA,1    ;E = 0
    CALL        RET_1MS


    ESCRIBIR UN DATO

    1  Cargo el dato en D0 a D7

    2  RS = 1

    3  E = 1

    4  espero un momento

    5  E = 0

    ejemplo visualizando la letra E

    MOVLW    A'E'
    MOVWF    PORTB
    BSF           PORTA,0
    BSF           PORTA,1
    CALL        RET_10MS
    BCF          PORTA,1
    CALL        RET_10MS
circuito de prueba  click para ver grande

CODIGO DE PRUEBA COMPLETO      

    LIST    P=16F88
    INCLUDE    P16F88.INC
    ERRORLEVEL -302
  
    CBLOCK    0X20
    PDel0 , PDel1
    ENDC

    ORG    00
    GOTO    CONFIGURACION
;Retardo geneerado con el PCIDEL, agradezco a su autor
;
RET_10MS  movlw     .8        ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .249      ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 cycle delay
        decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done

RET_1MS  movlw     .248      ; 1 set number of repetitions
        movwf     PDel0     ; 1 |
PLoop01  clrwdt              ; 1 clear watchdog
        decfsz    PDel0, 1  ; 1 + (1) is the time over?
        goto      PLoop01    ; 2 no, loop
PDelL11  goto PDelL21         ; 2 cycles delay
PDelL21  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done



CONFIGURACION  NOP
    BANKSEL    ADCON1
    CLRF           ANSEL
    CLRF          TRISA
    CLRF          TRISB
    BANKSEL    ADCON0
    CLRF           PORTA
    CLRF           PORTB
  
    CALL        RET_1MS
    BCF          PORTA,0    ;RS = 0
    BCF          PORTA,1    ;E = 0
    MOVLW    B'00111000'    ;8 BITS 2 LINEAS 7X5
    MOVWF    PORTB  
    BCF           PORTA,0    ;RS=0
    BSF           PORTA,1    ;E=1 HABILITO ESCRITURA
    CALL         RET_1MS
    BCF          PORTA,1    ;E = 0
    CALL        RET_1MS
  
    MOVLW    B'00001111'    ;ON LCD, ON CURSOR, ON INTER  
    MOVWF    PORTB  
    BCF           PORTA,0    ;RS=0
    BSF           PORTA,1    ;E=1 HABILITO ESCRITURA
    CALL         RET_1MS
    BCF           PORTA,1    ;E = 0
    CALL        RET_1MS

  

    MOVLW    A'E'    ; Cargo el ASCII de la E
    MOVWF    PORTB    ;Envio la E al puerto
    BSF           PORTA,0
    BSF           PORTA,1
    CALL        RET_10MS
    BCF          PORTA,1
    CALL       RET_10MS

INICIO        NOP
    GOTO     INICIO  

  
    END
      
Copyright 2010 EDWIN ESPINOSA
      
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles.

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".

2 comentarios: