Date post: | 12-Mar-2015 |
Category: |
Documents |
Upload: | maribel-jimenez |
View: | 263 times |
Download: | 5 times |
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.
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.
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
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
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
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
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
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
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