9
www.cosasdeingenieria.com Pantalla LCD 16x2 controlada por un PIC16f887 y sensado de temperatura con un LM35DZ Material necesario: 1 PIC16F887 1 pantalla LCD de 16 caracteres por 2 lineas 1 potenciómetro de 10kohms 1 protoboard 1 LM35DZ 1 resistencia de 10kohms 1 resistencia de 330ohms 1 capacitor de .1uF alambre para protoboard de colores headers macho Los headers, hay que soldarlos a la pantalla, como se ve a continuación. [email protected] 1

Tutorial LCD16x2 y LM35

Embed Size (px)

Citation preview

Page 1: Tutorial LCD16x2 y LM35

www.cosasdeingenieria.com

Pantalla LCD 16x2 controlada por un PIC16f887

y sensado de temperatura con un LM35DZ

Material necesario:

1 PIC16F8871 pantalla LCD de 16 caracteres por 2 lineas1 potenciómetro de 10kohms1 protoboard1 LM35DZ1 resistencia de 10kohms1 resistencia de 330ohms1 capacitor de .1uFalambre para protoboard de coloresheaders macho

Los headers, hay que soldarlos a la pantalla, como se ve a continuación.

[email protected] 1

Page 2: Tutorial LCD16x2 y LM35

www.cosasdeingenieria.com

El puerto D del PIC, ira a los pines de datos de la pantalla.El pin RS de la pantalla va al pin 2 del PORTCEl pin EN de la pantalla va al pin 1 del PORTCEl pin R/W de la pantalla va a tierra en este ejercicioEl pin Vo es el del contraste y va al pin medio del potenciómetro.El pin de salida del sensor LM35DZ debe ir a RA0

El alambrado debe quedar como en la siguiente imagen.

La resistencia de 10kohms va al pin MCLR del microcontrolador.La resistencia de 330ohms va en el pin del anodo del Backlight del LCD.

Adicionalmente, en la dirección:http://www.megaupload.com/?d=OIGKREFResta un archivo en zip, con imagenes de alta calidad del circuito.Y en la direccion:http://www.youtube.com/miniroboticael video del funcionamiento.

[email protected] 2

Page 3: Tutorial LCD16x2 y LM35

www.cosasdeingenieria.com

El codigo es el siguiente.

#INCLUDE <P16F887.INC> ;declaración de librería

;******************* D E C L A R A C I O N D E R E G I S T R O S****************CBLOCK 0X20NUM1,NUM2,NUM3

;*********************************************************************************

POINTER ;REGISTROS UTILIZADOS EN UNIDADES, DECENAS ;BINBCD Y EN LA ADQUISICION DE CENTENAS,MILLARES ;DATOSDATOHUNIDADEST, DECENAST CENTENAST,MILLARESTSAMPLESHIFT

;*********************************************************************************

PROMEDIOCONTADORENDC

CBLOCK 0X70 ;SE COLOCA A DATOL EN UNA DE LAS LOCALIDADES DEDATOL ;MEMORIA QUE ESTAN ESPEJEADAS EN BANCO 0 Y BANCO1ENDC

;***D E C L A R A C I O N D E L O S B I T S D E C O N F I G U R A C I O N****__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF &

_INTRC_OSC_NOCLKOUT

__CONFIG _CONFIG2, _WRT_OFF & _BOR21V;*********************************************************************************

;D E C L A R A C I O N D E L O S P I N E S D E C O N T R O L D E L A L C D

#DEFINE RS PORTC,2 #DEFINE EN PORTC,1

;*********************************************************************************

;**********PUERTO DONDE ESTARAN LOS PINES DE DATOS DE LA LCD**********

PORTLCD EQU PORTD

;*********************************************************************************

;*********************************************************************************;COMANDOS DE LA PANTALLA

LIMPIAR EQU B'00000001' ;LIMPIA TODA LA PANTALLARENGLON1 EQU B'10000000' ;COLOCA EN EL RENGLON 1RENGLON2 EQU B'11000000' ;COLOCA EN EL RENGLON2DISON EQU B'00001100' ;ENCIENDE EL DISPLAYHOME EQU B'00000010' ;VA A LA DIDERCCION 0SHIFTDL EQU B'00011100' ;ROTA EL LCD A LA IZQUIERDASHIFTDR EQU B'00011000' ;ROTA EL LCD A LA DERECHASHIFTCL EQU B'00010100' ;ROTA EL CURSOR A LA IZQUIERDASHIFTCR EQU B'00010000' ;ROTA EL CURSOR A LA DERECHA

;*********************************************************************************

ORG 0X00 ;VECTOR DE RESERGOTO INICIO ;SALTO AL INICIO DEL CODIGO

ORG 0X04 ;VECTOR DE INTERRUPCION

;****T A B L A S D E D A T O S P A R A L A S U B R U T I N A B I N B C D****TABLAU ;TABLA DE UNIDADES

MOVF POINTER,WADDWF PCL,FRETLW D'2'RETLW D'6'RETLW D'8'RETLW D'4'RETLW D'2'RETLW D'6'RETLW D'8'RETLW D'4'RETLW D'2'RETLW D'1'

TABLAD ;TABLA DE DECENASMOVF POINTER,WADDWF PCL,F

[email protected] 3

Page 4: Tutorial LCD16x2 y LM35

www.cosasdeingenieria.com

RETLW D'1'RETLW D'5'RETLW D'2'RETLW D'6'RETLW D'3'RETLW D'1'RETLW D'0'RETLW D'0'RETLW D'0'RETLW D'0'

TABLAC ;TABLA DE CENTENASMOVF POINTER,WADDWF PCL,FRETLW D'5'RETLW D'2'RETLW D'1'RETLW D'0'RETLW D'0'RETLW D'0'RETLW D'0'RETLW D'0'RETLW D'0'RETLW D'0'

;*********************************************************************************INICIO: BSF STATUS,RP0 ;CAMBIO A BANCO 1

CLRF TRISD ;CONFIGURO TODO PORTD COMO SALIDABCF TRISC,1 ;CONFIGURO PORTC,1 COMO SALIDA (EN)BCF TRISC,2 ;CONFIGURO PORTC,2 COMO SALIDA (RS)

BCF STATUS,RP0 ;CAMBIO A BANCO 0

CLRF PORTD ;APAGO POSIBLES LATCHS EN PORTDCLRF PORTC ;APAGO POSIBLES LATCHS EN PORTC

CALL INIT_ADQUI ;LLAMO A LA SUBRUTINA DE CONFIGURACION DE;EL MODULO ADC

CALL INITLCD ;LLAMO A LA SUBRUTINA DE INICIALIZACION ;DE LA PANTALLA LCD 16X2

START CALL D16X2 ;LLAMO A LA SUBRUTINA QUE ESCRIBE EL MENSAJE UNICIAL

;-------------------------------------------------------------------------------;CODIGO QUE HACE QUE SE EJECUTE EL COMANDO DE ROTACION A LA DERECHA;46 VECES

MOVLW .46MOVWF SHIFT

VUELTA CALL RETARDOMOVLW SHIFTDR ;COMANDO DE ROTACIONCALL CMD

DECFSZ SHIFT,FGOTO VUELTA

;-------------------------------------------------------------------------------

MOVLW LIMPIAR ;COMANDO DE LIMPIEZA DE PANTALLACALL CMD

OPERA MOVLW RENGLON1 ;COMANDO PARA EMPEZAR A ESCRIBIR A PARTIRCALL CMD ;DE LA PRIMERA DIRECCION DEL RENGLON1

CLRF PROMEDIO ;SE LIMPIA AL REGISTRO PROMEDIO

CALL ADQUI ;SE LLAMA A LA SUBRUTINA DE ADQUISICION DE ;DATOS DEL ADC

CALL BINBCD ;LLAMO LA SUBRUTINA QUE CONVIERTE DE BINARIO;A ASCII

;-------------------------------------------------------------------------------MOVF MILLARES,W ;MANDO LOS DATOS ADQUIRIDOS A LA lcdCALL DATO

MOVF CENTENAS,WCALL DATO

MOVF DECENAS,WCALL DATO

MOVF UNIDADES,WCALL DATO

;-------------------------------------------------------------------------------

MOVLW B'11011111' ;DATO PARA EL SIMBOLO DE GRADOCALL DATO

[email protected] 4

Page 5: Tutorial LCD16x2 y LM35

www.cosasdeingenieria.com

MOVLW 'C' ;LA C DE CELSIUSCALL DATOGOTO OPERA ;REGRESO AL INICIO DEL PROGRAMA PRINCIPAL

;****************S U B R U T I N A D E L O S M E N S A J E S*****************

D16X2 MOVLW "w"CALL DATO

MOVLW "w"CALL DATO

MOVLW "w"CALL DATO

MOVLW "."CALL DATO

MOVLW "C"CALL DATO

MOVLW "o"CALL DATO

MOVLW "s"CALL DATO

MOVLW "a"CALL DATO

MOVLW "s"CALL DATO

MOVLW "d"CALL DATO

MOVLW "e"CALL DATO

MOVLW "I"CALL DATO

MOVLW "n"CALL DATO

MOVLW "g"CALL DATO

MOVLW "e"CALL DATO

MOVLW "n"CALL DATO

MOVLW "i"CALL DATO

MOVLW "e"CALL DATO

MOVLW "r"CALL DATO

MOVLW "i"CALL DATO

MOVLW "a"CALL DATO

MOVLW "."CALL DATO

MOVLW "c"CALL DATO

MOVLW "o"CALL DATO

MOVLW "m"CALL DATO

MOVLW B'11000000'CALL CMD

[email protected] 5

Page 6: Tutorial LCD16x2 y LM35

www.cosasdeingenieria.com

MOVLW " "CALL DATO

MOVLW " "CALL DATO

MOVLW "L"CALL DATO

MOVLW "C"CALL DATO

MOVLW "D"CALL DATO

MOVLW " "CALL DATO

MOVLW "1"CALL DATO

MOVLW "6"CALL DATO

MOVLW "X"CALL DATO

MOVLW "2"CALL DATO

MOVLW " "CALL DATO

MOVLW "B"CALL DATO

MOVLW "/"CALL DATO

MOVLW "N"CALL DATO

MOVLW " "CALL DATO

MOVLW " "CALL DATO

RETURN;*******************************************************************************;**********S U B R U T I N A D E A D Q U I S I C I O N D E L A D C**********ADQUI: CALL SampleTime ;RETARDO DE ADQUISICION

BSF ADCON0,GO ;INICIA LA CONVERSIONBTFSC ADCON0,GO ;YA SE TERMINO LA CONVERSION?GOTO $-1 ;NO? PREGUNTA DE NUEVOBANKSEL ADRESH ;SI, CONTINUAMOVF ADRESH,W ;LEE LA PARTE MAS SIGNIFICATIVAMOVWF DATOH ;GUARDALO EN DATOHBANKSEL ADRESL ;CAMBIO A BANCO1MOVF ADRESL,W ;LEE LA PARTE MENOS SIGNIFICATIVAMOVWF DATOL ;GUARDALO EN DATOLBANKSEL PORTB ;CAMBIO A BANCO 0

bcf STATUS,C ;BORRA EL BIT DE ACARREORRF DATOH,F ;ELIMINO EL BIT MENOS SIGNIFICATIVORRF DATOL,F ;PARA OCUPAR SOLO 9 BITSreturn

SampleTime: MOVLW .255MOVWF SAMPLE

ESPERA_S: NOPNOPDECFSZ SAMPLE,FGOTO ESPERA_SRETURN

;********************************************************************************;S U B R U T I N A D E I N I C I A L I Z A C I O N L C DINITLCD: MOVLW B'00110000';1

CALL CMDMOVLW B'00110000';2CALL CMDMOVLW B'00110000';3CALL CMDMOVLW B'00111100';4CALL CMDMOVLW B'00001000';5

[email protected] 6

Page 7: Tutorial LCD16x2 y LM35

www.cosasdeingenieria.com

CALL CMDMOVLW B'00000001';6CALL CMDMOVLW B'00000110';7CALL CMD

MOVLW DISON;8CALL CMD

MOVLW HOMECALL CMDRETURN

;********************************************************************************

;SUBRUTINA QUE ENVIA LOS CARACTERES A LA LCDDATO MOVWF PORTLCD

BSF RSNOPNOPNOPBSF ENCALL RETARDO5MSBCF EN

RETURN;********************************************************************************;SUBRUTINA QUE ENVIA LOS COMANDOS A LA LCDCMD MOVWF PORTLCD

BCF RSNOPNOPNOPBSF ENCALL RETARDO5MSBCF ENRETURN

;********************************************************************************RETARDO5MS

MOVLW D'1'MOVWF NUM3

OTRA25 MOVLW D'100'MOVWF NUM2

OTRA15 MOVLW D'166'MOVWF NUM1

OTRA5 DECFSZ NUM1,FGOTO OTRA5

DECFSZ NUM2,FGOTO OTRA15

DECFSZ NUM3,FGOTO OTRA25RETURN

;********************************************************************************

RETARDO MOVLW D'3'MOVWF NUM3

OTRA25A MOVLW D'200'MOVWF NUM2

OTRA15A MOVLW D'166'MOVWF NUM1

OTRA5A DECFSZ NUM1,FGOTO OTRA5A

DECFSZ NUM2,FGOTO OTRA15A

DECFSZ NUM3,FGOTO OTRA25ARETURN

;*************************************************************

;*********************************************************;subrutina de conversion de binario a codigo ASCIIBINBCD CLRF MILLARES

CLRF UNIDADESCLRF DECENASCLRF CENTENASCLRF POINTER

OTRABTFSS DATOH,7GOTO ROTA

[email protected] 7

Page 8: Tutorial LCD16x2 y LM35

www.cosasdeingenieria.com

CALL TABLAUADDWF UNIDADES,F

CALL TABLADADDWF DECENAS,FCALL TABLACADDWF CENTENAS,F

;**************************************MOVF UNIDADES,WSUBLW D'10'BTFSS STATUS,CGOTO MAYOR GOTO MENOR

MAYOR INCF DECENAS,FMOVLW D'10'SUBWF UNIDADES,FGOTO DECE

MENOR MOVLW D'10'SUBWF UNIDADES,WBTFSS STATUS,ZGOTO DECEGOTO MAYOR

;**************************************

DECE MOVF DECENAS,WSUBLW D'10'BTFSS STATUS,CGOTO MAYORD GOTO MENORD

MAYORD INCF CENTENAS,FMOVLW D'10'SUBWF DECENAS,FGOTO CENTE

MENORD MOVLW D'10'SUBWF DECENAS,WBTFSS STATUS,ZGOTO CENTEGOTO MAYORD

;**************************************CENTE MOVF CENTENAS,W

SUBLW D'10'BTFSS STATUS,CGOTO MAYORC GOTO MENORC

MAYORC INCF MILLARES,FMOVLW D'10'SUBWF CENTENAS,FGOTO MILLA

MENORC MOVLW D'10'SUBWF CENTENAS,WBTFSS STATUS,ZGOTO MILLAGOTO MAYORC

;**************************************MILLA MOVF MILLARES,W

SUBLW D'10'BTFSS STATUS,CGOTO MAYORM GOTO MENORM

MAYORM MOVLW D'10'SUBWF MILLARES,FGOTO ROTA

MENORM MOVLW D'10'SUBWF MILLARES,WBTFSS STATUS,ZGOTO ROTAGOTO MAYORM

;**************************************ROTA

RLF DATOL,FRLF DATOH,FINCF POINTER,FMOVF POINTER,WSUBLW D'10'BTFSS STATUS,ZGOTO OTRA

MOVLW 0X30ADDWF UNIDADES,F

[email protected] 8

Page 9: Tutorial LCD16x2 y LM35

www.cosasdeingenieria.com

MOVLW 0X30ADDWF DECENAS,F

MOVLW 0X30ADDWF CENTENAS,F

MOVLW 0X30ADDWF MILLARES,F

RETURN

INIT_ADQUI: BANKSEL ADCON1 ;MOVLW B'00000000' ;JUSTIFICACIÓN A LA IZQUIERDAMOVWF ADCON1 ;Vdd Y Vss COMO VrefBANKSEL TRISA ;BSF TRISA,0 ;PONEMOS A RA0 COMO ENTRADABANKSEL ANSEL ;BSF ANSEL,0 ;PONEMOS A RA0 COMO ANALOGICOBANKSEL ADCON0 ;MOVLW B'11000001' ;ELEGIMOS EL RELOJ Frc DEL ADCMOVWF ADCON0 ;Y ENCENDEMOS EL CONVERTIDORRETURN

END ;FINAL DEL PROGRAMA

Una vez que se ha hecho el alambrado y el código ha sido programado, el sistema debe funcionar sin problemas, no queda mas que jugar con el código y ver las diferentes opciones que se podrían conseguir.

Saludos Cordiales!

Atte.Ing. Miguel Angel Piedra AngelesGerente de Investigación y Desarrollowww.cosasdeingenieria.com

[email protected] 9