You are on page 1of 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 potencimetro 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 continuacin.

info@cosasdeingenieria.com

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 PORTC El pin EN de la pantalla va al pin 1 del PORTC El pin R/W de la pantalla va a tierra en este ejercicio El pin Vo es el del contraste y va al pin medio del potencimetro. 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 direccin: http://www.megaupload.com/?d=OIGKREFR esta un archivo en zip, con imagenes de alta calidad del circuito. Y en la direccion: http://www.youtube.com/minirobotica el video del funcionamiento. info@cosasdeingenieria.com 2

www.cosasdeingenieria.com El codigo es el siguiente.


#INCLUDE <P16F887.INC> ;declaracin de librera ;******************* D E C L A R A C I O N D E R E G I S T R O S**************** CBLOCK 0X20 NUM1,NUM2,NUM3 ;********************************************************************************* POINTER ;REGISTROS UTILIZADOS EN UNIDADES, DECENAS ;BINBCD Y EN LA ADQUISICION DE CENTENAS,MILLARES ;DATOS DATOH UNIDADEST, DECENAST CENTENAST,MILLAREST SAMPLE SHIFT ;********************************************************************************* PROMEDIO CONTADOR ENDC CBLOCK DATOL ENDC 0X70 ;SE COLOCA A DATOL EN UNA DE LAS LOCALIDADES DE ;MEMORIA QUE ESTAN ESPEJEADAS EN BANCO 0 Y BANCO1

;***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 & _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 #DEFINE RS EN PORTC,2 PORTC,1

_PWRTE_ON & _WDT_OFF &

;********************************************************************************* ;**********PUERTO DONDE ESTARAN LOS PINES DE DATOS DE LA LCD********** PORTLCD EQU PORTD ;********************************************************************************* ;********************************************************************************* ;COMANDOS DE LA PANTALLA LIMPIAR RENGLON1 RENGLON2 DISON HOME SHIFTDL SHIFTDR SHIFTCL SHIFTCR EQU B'00000001' EQU B'10000000' EQU B'11000000' EQU B'00001100' EQU B'00000010' EQU B'00011100' EQU B'00011000' EQU B'00010100' EQU B'00010000' ;LIMPIA TODA LA PANTALLA ;COLOCA EN EL RENGLON 1 ;COLOCA EN EL RENGLON2 ;ENCIENDE EL DISPLAY ;VA A LA DIDERCCION 0 ;ROTA EL LCD A LA IZQUIERDA ;ROTA EL LCD A LA DERECHA ;ROTA EL CURSOR A LA IZQUIERDA ;ROTA EL CURSOR A LA DERECHA

;********************************************************************************* ORG GOTO ORG 0X00 INICIO 0X04 ;VECTOR DE RESER ;SALTO AL INICIO DEL CODIGO ;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,W ADDWF PCL,F RETLW 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 MOVF ADDWF ;TABLA DE DECENAS POINTER,W PCL,F

info@cosasdeingenieria.com

www.cosasdeingenieria.com
RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW TABLAC D'1' D'5' D'2' D'6' D'3' D'1' D'0' D'0' D'0' D'0'

;TABLA DE CENTENAS MOVF POINTER,W ADDWF PCL,F RETLW 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 BCF BCF BCF CLRF CLRF CALL CALL TRISD TRISC,1 TRISC,2 STATUS,RP0 PORTD PORTC ;CONFIGURO TODO PORTD COMO SALIDA ;CONFIGURO PORTC,1 COMO SALIDA (EN) ;CONFIGURO PORTC,2 COMO SALIDA (RS) ;CAMBIO A BANCO 0 ;APAGO POSIBLES LATCHS EN PORTD ;APAGO POSIBLES LATCHS EN PORTC

INIT_ADQUI ;LLAMO A LA SUBRUTINA DE CONFIGURACION DE ;EL MODULO ADC INITLCD ;LLAMO A LA SUBRUTINA DE INICIALIZACION ;DE LA PANTALLA LCD 16X2 ;LLAMO A LA SUBRUTINA QUE ESCRIBE EL MENSAJE UNICIAL

START

CALL

D16X2

;------------------------------------------------------------------------------;CODIGO QUE HACE QUE SE EJECUTE EL COMANDO DE ROTACION A LA DERECHA ;46 VECES MOVLW .46 MOVWF SHIFT VUELTA CALL MOVLW CALL RETARDO SHIFTDR CMD ;COMANDO DE ROTACION

DECFSZ SHIFT,F GOTO VUELTA ;------------------------------------------------------------------------------MOVLW CALL OPERA MOVLW CALL CLRF CALL CALL LIMPIAR CMD ;COMANDO DE LIMPIEZA DE PANTALLA

RENGLON1 ;COMANDO PARA EMPEZAR A ESCRIBIR A PARTIR CMD ;DE LA PRIMERA DIRECCION DEL RENGLON1 PROMEDIO ;SE LIMPIA AL REGISTRO PROMEDIO ADQUI BINBCD ;SE LLAMA A LA SUBRUTINA DE ADQUISICION DE ;DATOS DEL ADC ;LLAMO LA SUBRUTINA QUE CONVIERTE DE BINARIO ;A ASCII

;------------------------------------------------------------------------------MOVF MILLARES,W ;MANDO LOS DATOS ADQUIRIDOS A LA lcd CALL DATO MOVF CALL MOVF CALL MOVF CALL CENTENAS,W DATO DECENAS,W DATO UNIDADES,W DATO

;------------------------------------------------------------------------------MOVLW CALL B'11011111' DATO ;DATO PARA EL SIMBOLO DE GRADO

info@cosasdeingenieria.com

www.cosasdeingenieria.com
MOVLW CALL GOTO 'C' DATO OPERA ;LA C DE CELSIUS ;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 CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL "w" DATO "w" DATO "w" DATO "." DATO "C" DATO "o" DATO "s" DATO "a" DATO "s" DATO "d" DATO "e" DATO "I" DATO "n" DATO "g" DATO "e" DATO "n" DATO "i" DATO "e" DATO "r" DATO "i" DATO "a" DATO "." DATO "c" DATO "o" DATO "m" DATO B'11000000' CMD

info@cosasdeingenieria.com

www.cosasdeingenieria.com
MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL "" DATO "" DATO "L" DATO "C" DATO "D" DATO "" DATO "1" DATO "6" DATO "X" DATO "2" DATO "" DATO "B" DATO "/" DATO "N" DATO "" DATO "" 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 CONVERSION BTFSC ADCON0,GO ;YA SE TERMINO LA CONVERSION? GOTO $-1 ;NO? PREGUNTA DE NUEVO BANKSEL ADRESH ;SI, CONTINUA MOVF ADRESH,W ;LEE LA PARTE MAS SIGNIFICATIVA MOVWF DATOH ;GUARDALO EN DATOH BANKSEL ADRESL ;CAMBIO A BANCO1 MOVF ADRESL,W ;LEE LA PARTE MENOS SIGNIFICATIVA MOVWF DATOL ;GUARDALO EN DATOL BANKSEL PORTB ;CAMBIO A BANCO 0 bcf RRF RRF return STATUS,C DATOH,F DATOL,F ;BORRA EL BIT DE ACARREO ;ELIMINO EL BIT MENOS SIGNIFICATIVO ;PARA OCUPAR SOLO 9 BITS

SampleTime: MOVLW .255 MOVWF SAMPLE ESPERA_S: NOP NOP DECFSZ SAMPLE,F GOTO ESPERA_S RETURN ;******************************************************************************** ;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 D INITLCD: MOVLW B'00110000';1 CALL CMD MOVLW B'00110000';2 CALL CMD MOVLW B'00110000';3 CALL CMD MOVLW B'00111100';4 CALL CMD MOVLW B'00001000';5

info@cosasdeingenieria.com

www.cosasdeingenieria.com
CALL MOVLW CALL MOVLW CALL MOVLW CALL CMD B'00000001';6 CMD B'00000110';7 CMD DISON;8 CMD

MOVLW HOME CALL CMD RETURN ;******************************************************************************** ;SUBRUTINA QUE ENVIA LOS CARACTERES A LA LCD DATO MOVWF PORTLCD BSF RS NOP NOP NOP BSF EN CALL RETARDO5MS BCF EN RETURN ;******************************************************************************** ;SUBRUTINA QUE ENVIA LOS COMANDOS A LA LCD CMD MOVWF PORTLCD BCF RS NOP NOP NOP BSF EN CALL RETARDO5MS BCF EN RETURN ;******************************************************************************** RETARDO5MS MOVLW D'1' MOVWF NUM3 OTRA25 MOVLW MOVWF MOVLW MOVWF DECFSZ GOTO DECFSZ GOTO D'100' NUM2 D'166' NUM1 NUM1,F OTRA5 NUM2,F OTRA15

OTRA15 OTRA5

DECFSZ NUM3,F GOTO OTRA25 RETURN ;******************************************************************************** RETARDO OTRA25A OTRA15A OTRA5A MOVLW MOVWF MOVLW MOVWF MOVLW DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO RETURN D'3' NUM3 D'200' NUM2 D'166' MOVWF NUM1,F OTRA5A NUM2,F OTRA15A NUM3,F OTRA25A NUM1

;************************************************************* ;********************************************************* ;subrutina de conversion de binario a codigo ASCII BINBCD CLRF MILLARES CLRF UNIDADES CLRF DECENAS CLRF CENTENAS CLRF POINTER OTRA BTFSS DATOH,7 GOTO ROTA

info@cosasdeingenieria.com

www.cosasdeingenieria.com
CALL ADDWF CALL ADDWF CALL ADDWF TABLAU UNIDADES,F TABLAD DECENAS,F TABLAC CENTENAS,F

;************************************** MOVF UNIDADES,W SUBLW D'10' BTFSS STATUS,C GOTO MAYOR GOTO MENOR MAYOR INCF MOVLW SUBWF GOTO DECENAS,F D'10' UNIDADES,F DECE

MENOR

MOVLW D'10' SUBWF UNIDADES,W BTFSS STATUS,Z GOTO DECE GOTO MAYOR ;************************************** DECE MOVF SUBLW BTFSS GOTO GOTO INCF MOVLW SUBWF GOTO MOVLW SUBWF BTFSS GOTO GOTO DECENAS,W D'10' STATUS,C MAYORD MENORD CENTENAS,F D'10' DECENAS,F CENTE D'10' DECENAS,W STATUS,Z CENTE MAYORD

MAYORD

MENORD

;************************************** CENTE MOVF CENTENAS,W SUBLW D'10' BTFSS STATUS,C GOTO MAYORC GOTO MENORC MAYORC INCF MOVLW SUBWF GOTO MILLARES,F D'10' CENTENAS,F MILLA

MENORC

MOVLW D'10' SUBWF CENTENAS,W BTFSS STATUS,Z GOTO MILLA GOTO MAYORC ;************************************** MILLA MOVF MILLARES,W SUBLW D'10' BTFSS STATUS,C GOTO MAYORM GOTO MENORM MAYORM MOVLW SUBWF GOTO D'10' MILLARES,F ROTA

MENORM

MOVLW D'10' SUBWF MILLARES,W BTFSS STATUS,Z GOTO ROTA GOTO MAYORM ;************************************** ROTA RLF DATOL,F RLF DATOH,F INCF POINTER,F MOVF POINTER,W SUBLW D'10' BTFSS STATUS,Z GOTO OTRA MOVLW ADDWF 0X30 UNIDADES,F

info@cosasdeingenieria.com

www.cosasdeingenieria.com
MOVLW ADDWF MOVLW ADDWF MOVLW ADDWF RETURN INIT_ADQUI: BANKSEL MOVLW MOVWF BANKSEL BSF BANKSEL BSF BANKSEL MOVLW MOVWF RETURN END 0X30 DECENAS,F 0X30 CENTENAS,F 0X30 MILLARES,F

ADCON1 ; TRISA ANSEL ADCON0 B'00000000' ;JUSTIFICACIN A LA IZQUIERDA ADCON1 ;Vdd Y Vss COMO Vref ; TRISA,0 ;PONEMOS A RA0 COMO ENTRADA ; ANSEL,0 ;PONEMOS A RA0 COMO ANALOGICO ; B'11000001' ;ELEGIMOS EL RELOJ Frc DEL ADC ADCON0 ;Y ENCENDEMOS EL CONVERTIDOR ;FINAL DEL PROGRAMA

Una vez que se ha hecho el alambrado y el cdigo ha sido programado, el sistema debe funcionar sin problemas, no queda mas que jugar con el cdigo y ver las diferentes opciones que se podran conseguir. Saludos Cordiales!

Atte. Ing. Miguel Angel Piedra Angeles Gerente de Investigacin y Desarrollo www.cosasdeingenieria.com

info@cosasdeingenieria.com

You might also like