Menú
Foros
Nuevos mensajes
Buscar en foros
Novedades
Nuevos mensajes
Nuevos recursos
Última actividad
Recursos
Últimas revisiones
Buscar recursos
Acceder
Registrarse
Novedades
Buscar
Buscar
Buscar sólo en títulos
De:
Nuevos mensajes
Buscar en foros
Menú
Acceder
Registrarse
Install the app
Instalar
Foros
Diseño digital
Microcontroladores y sistemas embebidos
Problema con LCD 16x02 por puerto B
JavaScript está desactivado. Para una mejor experiencia, por favor, activa JavaScript en el navegador antes de continuar.
Estás usando un navegador obsoleto. No se pueden mostrar este u otros sitios web correctamente.
Se debe actualizar o usar un
navegador alternativo
.
Responder al tema
Mensaje
[QUOTE="darwblk, post: 845245, member: 234731"] Bueno un cordial a los mienbros del foro soy nuevo por aqui y bueno necesito de su ayuda lo que pasa es que estoy tratando de medir la temperatura con el lm35 y displayarla, mi codigo corre y lo simule en proteus logro visualizar la medicion y mando un mensaje como introduccion al inicio del programa tu bien hasta ahi ocurre que lo armo en el proto y no manda nada pense que el LCD estaba mal o que mi quemador estaba mal pero probe con otro programa y si funciona nose que pueda estar pasando si el error esat en mi codigo Help me!! por favor mi codigo esta en asembler y adjunto la simulacion en proteus y el .HEX aqui lo dejo gracias [code]; ZONA DE DATOS ********************************************************************** LIST P=16F877A INCLUDE <P16F877A.INC> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ORG 0 pcl equ 0x02 ;Contador de programa (Parte baja) estado equ 0x03 ;Registro de estados ptoa equ 0x05 ;Puertos de E/S ptob equ 0x06 ptoc equ 0x07 intcon equ 0x0B ;Controlador de interrupciones eedata equ 0x0C ;Registro de datos de la EEPROM eeaddr equ 0x0D ;Registro de direccion de la EEPROM adres equ 0x1E ;Resultado de la conversión A/D (HIGH / LOW) adcon equ 0x1F ;Configuración del conversor A/D uni equ 0x20 ;Usados para manejar los datos a mostrar en display dec equ 0x21 cen equ 0x22 tiempo1 equ 0x23 ;Usados para temporizar tiempo2 equ 0x24 letra equ 0x25 ;Usado para apuntar la letra a colocar en el LCD tempact equ 0x26 ;Temperatura de activación corract equ 0x27 ;Corriente de activacion buffer equ 0x28 ;Usado como registro temporal ; El contador a visualizar. #define CARRY estado, 0 ;Bit de acarreo #define CERO estado, 2 ;Flag indicador de resultado cero #define R0 estado, 5 ;Bit 0 selector de página de memoria #define R1 estado, 6 ;Bit 1 selector de página de memoria #define ADGO adcon, 2 ;Bit que inicia la conversión (1) / Indica finalización (0) #define EEREAD eedata, 0 ;Bit que inicia la lectura de la EEPROM #define EEWRITE eedata, 1 ;Bit que inicia la escritura de la EEPROM - Indica finalización #define EEWREN eedata, 2 ;Bit que habilita la escritura en la EEPROM #define EEAREA eedata, 7 ;Bit que selecciona el área de EEPROM a utilizar (0=AREA DE DATOS) #define MINS ptoa, 1 ;Sube el punto mínimo #define MINB ptoa, 2 ;Baja el punto mínimo #define MAXS ptoa, 3 ;Sube el punto máximo #define MAXB ptoa, 4 ;Baja el punto máximo #define BUZZER ptoc, 3 ;Salida al aviso acústico #define RELE ptoc, 4 ;Relé que maneja la carga (calefactor / enfriador) #define LCDE ptoc, 6 ;Habilitación del LCD #define LCDRS ptoc, 7 ;Selección de modo del LCD ; ZONA DE CÓDIGOS ******************************************************************** Inicio bsf R0 ; Acceso al Banco 1. bcf R1 movlw b'00011111' ;Configura puerto A movwf ptoa clrf ptob ;Puerto B completo como salidas (bus del LCD) clrf ptoc ;Puerto B completo como salidas movlw b'10001110' ;Configura el coversor A/D ADCS1=1 AADCS0=0 => Fosc=/32 ;CHS2=0 CHS1=0 CHS0=1 Canal AN1 por donde entrara la señal movwf adcon ;AN0 como única entrada análoga(ojo) bsf R1 ;Acceso al banco 3 bcf EEAREA ;Selecciona el banco de EEPROM de datos bcf R1 ;Acceso al banco 0 bcf R0 movlw b'01000001' ;Enciende y configura el convertidor A/D - Selecciona AN0 como entrada movwf adcon clrf ptoa ;Apaga todo clrf ptob clrf ptoc call LCD call LECTURA ;llama a la lectura de la eeprom call CICLO LECTURA bsf R1 ;Acceso al banco 2 clrf eeaddr ;Direcciona la primera posición de la EEPROM bsf R0 ;Pasa a la página 3 de memoria bsf EEREAD ;Inicia la lectura de la EEPROM bcf R0 ;Acceso al banco 2 movf eedata, 0 ;Dato Leído de la EEPROM -> W (eedata,0 mueve el valor de eedata en w (0 indica en w)) movwf tempact ;Guarda el dato leído de la EEPROM en tempact (punto de activación del relé x temperatura) incf eeaddr ;Direcciona a la segunda posición de la EEPROM bsf R0 ;Pasa a la página 3 de memoria bsf EEREAD ;Inicia la lectura de la EEPROM bcf R0 ;Vuelve a la página 3 de memoria movf eedata, 0 ;Dato Leído de la EEPROM -> W movwf corract ;Guarda el dato leído de la EEPROM en corract (punto de desactivación del relé x corriente) bcf R1 ;Acceso banco 0 return LCD movlw b'00111000' ;Comunicación con el LCD a ocho bits - Dos líneas de texto call CONTROL movlw d'2' call DEMORA ;Demora 2ms movlw b'00000110' ;Mensaje estático, se desplaza el cursor hacia la derecha call CONTROL movlw d'2' call DEMORA ;Demora 2ms movlw b'00001100' ;Enciende el display - Oculta el cursor - Caracter fijo call CONTROL movlw d'2' call DEMORA ;Demora 2ms movlw b'00000001' ;Limpia la pantalla y pone cursor en posición inicial call CONTROL movlw d'2' call DEMORA ;Demora 2ms clrf letra ;Coloca el título en el LCD call OTRA call OTRA2 call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms movlw b'00000001' ;Limpia la pantalla y pone cursor en posición inicial call CONTROL return OTRA movf letra, 0 ;Letra actual -> W call LINEA1 ;Obtiene el caracter a colocar desde la tabla call DATO ;Envía el caracter al LCD incf letra, 1 movf letra, 0 ;Comprueba si ya envió los 16 caracteres del título sublw d'16' btfss CERO goto OTRA ;Si no llego a la letra 16 sigue enviando movlw 0xC0 ;Posiciona el cursor en la 2da. linea call CONTROL movlw d'1' call DEMORA ;Demora 1ms clrf letra ;Coloca el título en el LCD return OTRA2 movf letra, 0 ;Letra actual -> W call LINEA2 ;Obtiene el caracter a colocar desde la tabla call DATO ;Envía el caracter al LCD incf letra, 1 movf letra, 0 ;Comprueba si ya envió los 16 caracteres del título sublw d'16' btfss CERO goto OTRA2 ;Si no llego a la letra 16 sigue enviando return CICLO bsf ADGO ;Inicia la conversión A/D btfsc ADGO ;Espera que termine de convertir goto $ -1 bsf R0 ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado) movf adres, 0 ;Resultado de conversión -> W bcf R0 ;Pasa a página 1 movwf buffer ;Guarda el dato obtenido de ADRESL en el buffer temporal bcf CARRY ;Limpia el CARRY btfsc adres, 0 ;Mira el bit menos significativo de ADRESH (Bit 8) bsf CARRY ;Si está en 1 pone en uno el carry rrf buffer, 1 ;Hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por el 7 de ADRESL movf buffer, 0 ;Dato digitalizado -> W call DECIMAL ;Obtiene UNI, DEC y CEN con el agregado de 30h para la tabla ASCII movlw 0x8D ;Coloca el cursor en la posición 0Dh de la pantalla. call CONTROL movf cen, 0 ;Coloca en el LCD las centenas call DATO movf dec, 0 ;Coloca las decenas call DATO movf uni, 0 ;Coloca las unidades call DATO goto CICLO ;Vuelve a medir y mostrar LINEA1 addwf pcl, 1 ;Suma el contenido de W al contador de programa (para explorar la tabla) retlw "R" retlw "E" retlw "L" retlw "E" retlw " " retlw "E" retlw "L" retlw "E" retlw "C" retlw "T" retlw "R" retlw "O" retlw "N" retlw "I" retlw "C" retlw "O" LINEA2 addwf pcl, 1 ;Suma el contenido de W al contador de programa (para explorar la tabla) retlw " " retlw " " retlw " " retlw " " retlw " " retlw " " retlw "U" retlw "C" retlw "S" retlw "M" retlw " " retlw " " retlw " " retlw " " retlw " " retlw " " CONTROL bcf LCDRS ;Pone en bajo la línea de modo del LCD (Control) goto ENVIAR ;Se saltea la sig. línea DATO bsf LCDRS ;Pone en alto la línea de modo del LCD (Dato) ENVIAR movwf ptob ;Coloca el dato o control a enviar en el bus del LCD movlw d'1' call DEMORA ;Demora 1ms bsf LCDE ;Habilita el LCD movlw d'1' call DEMORA ;Demora 1ms bcf LCDE ;Deshabilita el LCD movlw d'1' call DEMORA ;Demora 1ms return DECIMAL movwf uni ;Convierte el dato presente en W en UNI, DEC y CEN clrf dec clrf cen movlw d'100' ;Determina la cant. de centenas CENTENA subwf uni, 1 btfss CARRY goto CIEN incf cen, 1 goto CENTENA CIEN addwf uni, 1 movlw d'10' ;Determina la cant. de decenas DECENA subwf uni, 1 btfss CARRY goto DIEZ incf dec, 1 goto DECENA DIEZ addwf uni, 1 ;Uni queda con la cant. de unidades (sin decenas ni centenas) movlw 0x30 ;Le suma 30h a los valores de UNI, DEC y CEN para que queden en ASCII addwf uni, 1 addwf dec, 1 addwf cen, 1 return DEMORA movwf tiempo2 ;Demora tantos milisegundos como valor en w TOP2 movlw d'110' movwf tiempo1 TOP1 nop nop nop nop nop nop decfsz tiempo1, 1 goto TOP1 decfsz tiempo2, 1 goto TOP2 return CBLOCK R_ContA ; Contadores para los retardos. R_ContB ENDC Retardo_500ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'500' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardos_ms movwf R_ContB ; Aporta 1 ciclo máquina. R1ms_BucleExterno movlw d'249' ; Aporta Mx1 ciclos máquina. Este es el valor de "K". movwf R_ContA ; Aporta Mx1 ciclos máquina. R1ms_BucleInterno nop ; Aporta KxMx1 ciclos máquina. decfsz R_ContA,F ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar). goto R1ms_BucleInterno ; Aporta (K-1)xMx2 ciclos máquina. decfsz R_ContB,F ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar). goto R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina. return ;org 0x2100 ;Guarda los parámetros por default en la EEPROM ;data 0x28 ;Punto de activación: 40 grados ;data 0x32 ;Punto de desactivación: 50 grados end [/code] Bueno amigos buscando y buscando e intentando encontre la falla es la cabecera de los fusibles que estaba usando para este modelo de PIC debia de ser __CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF estaba usando la cabecera mal debido a que me guiaba en el libro del pic16f84 de Enrique Palacios buenoa terminar mi rele electronico y cuando lo termine lo subire para que lo puedan mejorar saludos!!! [/QUOTE]
Verificación
Responder
Foros
Diseño digital
Microcontroladores y sistemas embebidos
Problema con LCD 16x02 por puerto B
Arriba