viernes, 24 de agosto de 2012

MATERIAL:

1-LCD 16x2.

LCD (pantalla de cristal líquido) es un módulo de visualización electrónica para una amplia gama de aplicaciones.Una pantalla LCD de 16x2 significa que puede mostrar 16 caracteres por línea y hay 2 líneas de este tipo. En esta pantalla cada carácter se muestra en la matriz de píxeles 5x7. Esta pantalla LCD tiene dos registros, a saber, el mando y datos.
El registro de comando almacena las instrucciones dadas al mando LCD. Un comando es una instrucción dada a LCD para realizar una tarea predefinida como inicializarla, despejando su pantalla, ajuste la posición del cursor, el control de la pantalla, etc El registro de datos almacena los datos que se muestran en la pantalla LCD. Los datos son el valor ASCII del carácter a visualizar en la pantalla LCD.

lcd 16x2

 Pin No
 Function
 Name
1
Ground (0V)
Ground
2
Supply voltage; 5V (4.7V – 5.3V)
 Vcc
3
Contrast adjustment; through a variable resistor
 VEE
4
Selects command register when low; and data register when high
Register Select
5
Low to write to the register; High to read from the register
Read/write
6
Sends data to data pins when a high to low pulse is given
Enable
7
8-bit data pins
DB0
8
DB1
9
DB2
10
DB3
11
DB4
12
DB5
13
DB6
14
DB7
15
Backlight VCC (5V)
Led+
16
Backlight Ground (0V)
Led-

1-PIC 16f84A.
1-Cristal 4MHz.
2-Capacitores cerámicos 22pF.

Circuito en proteus:


Se programo el PIC en .asm con MPLAB IDE.

PROGRAMA ASM:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 LIST        p=16F84A
        __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
        INCLUDE    <P16F84A.INC>
        STATUS           EQU    0X03
        PORTA            EQU    0X05
        PORTB            EQU    0X06
        TRISA            EQU    0X85
        TRISB            EQU    0X86
        LCD_LINEA1     EQU    80  
        LCD_LINEA2     EQU    0C0  
        LCD_CLR         EQU    01   
        LCD_CASA     EQU    02   
        LCD_INC         EQU    06   
        LCD_DEC         EQU    04   
        LCD_ON         EQU    0C   
        LCD_OFF         EQU    08   
        CURSOR_ON     EQU    0E   
        CURSOR_OFF     EQU    0C   
        CURSOR_PARP     EQU    0F
        LCD_IZDA     EQU    18   
        LCD_DECHA     EQU    1C   
        CURSOR_IZDA     EQU    10   
        CURSOR_DECHA     EQU    14   
        LCD_FUNCIÓN     EQU    38   
        LCD_CGRAM     EQU    40   
        CBLOCK 0x0D
        ENDC
        ORG    00                       
INICIO   
                bsf         STATUS,RP0
                   movlw        b'00011000'   
        movwf        TRISA       
        clrf        TRISB       
        bcf             STATUS,RP0               
        clrf        PORTA       
        clrf        PORTB
        movlw        LCD_FUNCIÓN   
        call        LCD_COMANDO   
        call        PAUSA_5ms   
        movlw        LCD_FUNCIÓN   
        call        LCD_COMANDO   
        call        PAUSA_5ms   
        movlw        LCD_FUNCIÓN   
        call        LCD_COMANDO   
        call        PAUSA_5ms   
        movlw        LCD_CLR       
        call        LCD_COMANDO   
        movlw        LCD_INC       
        call        LCD_COMANDO   
        movlw        LCD_ON       
        call        LCD_COMANDO   
        movlw        80       
        call        LCD_COMANDO   
ver
                               
        movlw    80
        call    LCD_COMANDO
            movlw    'B'
        call    LCD_CARACTER       
        movlw    'L'           
        call    LCD_CARACTER       
        movlw    'O'                        
        call    LCD_CARACTER       
        movlw    'G'                    
        calL    LCD_CARACTER
        movlw    ' '                    
        calL    LCD_CARACTER               
        movlw    'R'
        call    LCD_CARACTER       
        movlw    'O'           
        call    LCD_CARACTER       
        movlw    'B'                        
        call    LCD_CARACTER       
        movlw    'O'                    
        calL    LCD_CARACTER       
        movlw    'T'           
        call    LCD_CARACTER
        movlw    ' '           
        call    LCD_CARACTER
        movlw    'R'           
        call    LCD_CARACTER       
        movlw    'H'           
        call    LCD_CARACTER               
        movlw    0C0
        call    LCD_COMANDO
             movlw    'E'
        call    LCD_CARACTER       
        movlw    'L'           
        call    LCD_CARACTER       
        movlw    'E'                        
        call    LCD_CARACTER       
        movlw    'C'                    
        calL    LCD_CARACTER
        movlw    'T'                    
        calL    LCD_CARACTER               
        movlw    'R'
        call    LCD_CARACTER
        movlw    'O'                        
        call    LCD_CARACTER       
        movlw    'N'                    
        calL    LCD_CARACTER
        movlw    'I'                    
        calL    LCD_CARACTER               
        movlw    'C'
        call    LCD_CARACTER
                movlw    'A'
        call    LCD_CARACTER
        sleep   
subrutinas      
          CBLOCK
        CONTA1
        CONTA2
        GUARDA_CARÁCTER
        ENDC
PAUSA_5ms   
                movlw        7
        movwf        CONTA2       
        clrf        CONTA1       
RETRASO1   
                decfsz        CONTA1,1   
        goto        RETRASO1   
        decfsz        CONTA2,1   
        goto        RETRASO1   
        return               
LCD_COMANDO   
                clrf        PORTA       
        movwf        PORTB       
        call        LCD_CHEQUEA
        goto        LCD_HABILITA
LCD_CARACTER
        clrf    PORTA           
        call    LCD_CARÁCTER_ESPECIAL
        movwf    PORTB           
        call    LCD_CHEQUEA       
        bsf     PORTA,0               
        goto    LCD_HABILITA       
LCD_CARÁCTER_ESPECIAL
        movwf    GUARDA_CARÁCTER       
        sublw    'ñ'            
        btfss    STATUS,Z       
        goto    LCD_EÑE_MAYÚSCULA   
        movlw    b'11101110'       
        movwf    GUARDA_CARÁCTER   
        goto    LCD_FIN_CARACTER_ESP   

LCD_EÑE_MAYÚSCULA
        movfw    GUARDA_CARÁCTER       
        sublw     'Ñ'            
        btfss       STATUS,Z       
        goto       LCD_GRADO       
        movlw    b'11101110'       
        movwf    GUARDA_CARÁCTER       
        goto       LCD_FIN_CARACTER_ESP   
LCD_GRADO
        movfw    GUARDA_CARÁCTER       
        sublw      'º'           
        btfss      STATUS,Z           
        goto       LCD_FIN_CARACTER_ESP   
        movlw    b'11011111'       
        movwf    GUARDA_CARÁCTER       

LCD_FIN_CARACTER_ESP
        movfw    GUARDA_CARÁCTER   
        return           
LCD_CHEQUEA           
        bsf         STATUS,RP0               
        movlw        0FF       
        movwf        TRISB       
        bcf         STATUS,RP0           
        bcf         PORTA,0           
        bsf         PORTA,1           
BUCLE       
        bsf         PORTA,2               
        movf        PORTB,0       
        bcf         PORTA,2               
        addlw        84   
        btfsc        STATUS,C        
        goto        BUCLE       
        bsf         STATUS,RP0               
        clrf        TRISB       
        bcf         STATUS,RP0               
        bcf         PORTA,1       
        return       
LCD_HABILITA   
        bsf         PORTA,2               
        nop               
        bcf         PORTA,2               
        return
        END   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SIMULACION EN PROTEUS:



PCB:

Vista real del PCB.

DESCARGA SIMULACION, PCB, HEX:






11 comentarios:

moto_raton dijo...

hola estoy aprendiendo a poner un mensaje y estoy usando tu fuente, de verdad no se programar mucho, y logre poner un mensaje en la pantalla de 16x2 pero no me da el 1er caracter ni en la linea 1 ni la 2 solo me da 15 caracteres, como puedo hacer, estoy dandome duro con tu codifo y por cierto mil gracias

microcontroladores-ing-elec-rh dijo...

aca te dejo un ejemplo donde se pueden ver los 16 caracteres o al cambiar ver
https://rapidshare.com/files/3115026797/lcd%208.rar
movlw 81
call LCD_COMANDO por
movlw 80
call LCD_COMANDO
y en la segunda linea
movlw 0C1 por
movlw 0C0
con esto te aprecera el primer caracter

Anónimo dijo...

hola! tengo q armar un proyecto final con el pic16f84a y me cuesta mucho programar. Sera q me pueden pasar algun correo asi les explico detalladamente ?

microcontroladores-ing-elec-rh dijo...

mi correo es robotrh23@gmail.com, se programar poco en asm, si te puedo a yudar seria en C

Anónimo dijo...

Hola sabes que debo hacer un proyecto con el Pic 16f84A y una pantalla LCD de 16x2 no se si me puedes ayudar con el programa y saber que puedo hacer, de ante mano gracias :)

microcontroladores-ing-elec-rh dijo...

el proyecto es en lenguaje ensamblador o se puede realizar en lenguaje C ya que es mucho mas sencillo, yo hice algo muy sencillo cuando estaba en la universidad, puse una ldr y cuando se oscurecia se ponia en la LCD que era de noche, cuando habia luz ponia en la LCD que era de dia y ademas cuando era de noche se activaba un relevador y este a su vez prendia un foco de 127 volts no se si te podria servir aunque esta en lenguaje C. Si quieres aprender C, en el blog estoy subiendo tutoriales para el compilador CCS apenas voy por el segundo checalos y avisame si el proyecto que te mensione te sirve
.

Rodolfo Daniel Carbajal dijo...

Ya quedo si lo hace, el problema que tengo es que he tratado de borrar eso y reescribir otra cosa en un cierto tiempo y no queda, me podrías ayudar?

Anónimo dijo...

Hola, estoy aprendiendo a usar el pic16f84a, me gustaría saber como sirven los comandos, si me pudieras informas, te dejo mi correo: aabigail94@hotmail.com
Gracias

Unknown dijo...

Alguien puede ayudarme con el programa de la cerradura electronica con el pic16f84a pero que tenga opcion de cambiar clave usando MPLAB.
Saludos!!

Martin dijo...

como le puedo hacer para que el mensaje se recorra de derecha a izquierda ?

Facu Romano dijo...

Buenas !!! Este pic me servirá? :
Necesito controlar un motor paso a paso , de manera tal que con un teclado ya sea de calculadora pueda ingresar un valor donde pueda ordenarle al motor que de "n" numero de vueltas (0-9999) y el número se represente en forma creciente o decreciente en una pantalla LCD o en siete segmentos ! Alguna idea ?

SIGUEME EN FECEBOOK

MI TWITTER

Translate