Eso suena más problema de hardware que firmware.
¿Está presente el voltaje en todos los pines de energización?
¿El pin MCLR está en 5V?
Muchas veces es problema del oscilador. ¿Tienes un osciloscopio para ver si está oscilando el cristal?
¿Tienes capacitores de desacople conectados a los terminales del oscilador?
Publicando esa enormidad de código es como buscar una aguja en un pajar.
BAJAR BTFSS PORTA,3 ;CHECA SI SE PRESIONA EL BOTON DE DISMINUIR, SI NO SE PRECIONA BRINCA A SUBIR
GOTO SUBIR ;BRINCA A MONITOREAR EL SIGIENTE BOTON
CALL PUNTOUNSEGUNDO
BTFSC PORTA,3 ;CHECA SI YA SE SOLTO EL BOTON
GOTO $-1 ;GENERA BUCLE PAA ESPERAR A QUE SE SUELTE EL BOTON
;COMIENZA IDENTIFICACION DE CARACTER A MODIFICAR ;
BTFSS UBICADOR,1 ;SI ES 0 BRINCA ABAJANDO TERCERO, SI ES 1 CHECA SI ES SEGUNDO O PRIMERO
GOTO BAJANDO_TERCERO
BTFSS UBICADOR,0 ;SI ES 0 BRINCA A SEGUNDO, SI ES 1 BRINCA A PRIMERO
GOTO BAJANDO_SEGUNDO
GOTO BAJANDO_PRIMERO ;
SUBIR BTFSS PORTE,0 ;CHECA SI SE PRESIONA EL BOTON DE AUMENTAR
GOTO FIJAR ;BRINCA A MONITOREAR EL SIGIENTE BOTON
CALL PUNTOUNSEGUNDO ;ESPERA PARA DISMINUIR EL EFECTO REBOTE
BTFSC PORTE,0 ;CHECA SI YA SE SOLTO EL BOTON
GOTO $-1 ;GENERA BUCLE PAA ESPERAR A QUE SE SUELTE EL BOTON
;COMIENZA IDENTIFICACION DE CARACTER A MODIFICAR
BTFSS UBICADOR,1 ;SI ES 0 BRINCA ABAJANDO TERCERO, SI ES 1 CHECA SI ES SEGUNDO O PRIMERO
GOTO SUBIENDO_TERCERO
BTFSS UBICADOR,0 ;SI ES 0 BRINCA A SEGUNDO, SI ES 1 BRINCA A PRIMERO
GOTO SUBIENDO_SEGUNDO
GOTO SUBIENDO_PRIMERO
FIJAR BTFSS PORTE,1 ;CHECA SI SE PRESIONA EL BOTON DE FIJAR
GOTO CONTANDO ;BRINCA A MONITOREAR EL SIGIENTE BOTON
CALL MEDIOSEG ;ESPERA PARA DISMINUIR EL EFECTO REBOTE
BTFSC PORTE,1 ;CHECA SI YA SE SOLTO EL BOTON
GOTO $-1 ;GENERA BUCLE PAA ESPERAR A QUE SE SUELTE EL BOTON
GOTO FIJANDO ;SALTA A LA RUTINA PARA FIJAR NUMERO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CONTANDO DECFSZ D1, F ;LE RESTA 1 A D1 Y GUARDA EL RESULTADO EN D1, BRINCA SI LLEGA A CERO
GOTO $+2 ;BRINCA DOS LUGARES HACIA ADELANTE
DECFSZ D2, F ;LE RESTA 1 A D2 BRINCA SI LLEGA ACERO
GOTO $+2 ;BRINCA DOS LUGARES
DECFSZ D3, F ;LE RESTA 1 A D3 BRINCA SI LLEGA A CERO
GOTO DELAY_CONTEO ;REGRESA A CHECAR BOTONES Y CONTAR
GOTO DESPLEGAR ;BRINCA A DESPLEGAR
RETURN
;;;;;;;;;;;SUBRUTINAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BAJANDO_PRIMERO ;
DECF PRIMERO,F ;LE RESTA UNO AL VALOR ALMACENADO EN PORTADOR, QUE CORRESPONDE AL NUMERO QUE SE MUESTRA EN EL LCD
GOTO VISUALIZAR ;
RETURN ;
SUBIENDO_PRIMERO ;
INCF PRIMERO,F ;
GOTO VISUALIZAR ;
RETURN ;
BAJANDO_SEGUNDO ;
DECF SEGUNDO,F ;
GOTO VISUALIZAR ;
RETURN ;
SUBIENDO_SEGUNDO ;
INCF SEGUNDO,F ;
GOTO VISUALIZAR ;
BAJANDO_TERCERO ;
DECF TERCERO,F ;
GOTO VISUALIZAR ;
RETURN ;
SUBIENDO_TERCERO ;
INCF TERCERO,F ;
GOTO VISUALIZAR ;
RETURN ;
FIJANDO ;
DECFSZ UBICADOR,F ;
GOTO VISUALIZAR ;
GOTO COMPROBAR_CLAVE ;
Cada cual busca bugs a su manera. Yo prefiero el fuente completo listo para compilar y el archivo de Proteus.
CitarBAJAR BTFSS PORTA,3 ;CHECA SI SE PRESIONA EL BOTON DE DISMINUIR, SI NO SE PRECIONA BRINCA A SUBIR
GOTO SUBIR ;BRINCA A MONITOREAR EL SIGIENTE BOTON
CALL PUNTOUNSEGUNDO
BTFSC PORTA,3 ;CHECA SI YA SE SOLTO EL BOTON
GOTO $-1 ;GENERA BUCLE PAA ESPERAR A QUE SE SUELTE EL BOTON
;COMIENZA IDENTIFICACION DE CARACTER A MODIFICAR ;
BTFSS UBICADOR,1 ;SI ES 0 BRINCA ABAJANDO TERCERO, SI ES 1 CHECA SI ES SEGUNDO O PRIMERO
GOTO BAJANDO_TERCERO
BTFSS UBICADOR,0 ;SI ES 0 BRINCA A SEGUNDO, SI ES 1 BRINCA A PRIMERO
GOTO BAJANDO_SEGUNDO
GOTO BAJANDO_PRIMERO ;
SUBIR BTFSS PORTE,0 ;CHECA SI SE PRESIONA EL BOTON DE AUMENTAR
GOTO FIJAR ;BRINCA A MONITOREAR EL SIGIENTE BOTON
CALL PUNTOUNSEGUNDO ;ESPERA PARA DISMINUIR EL EFECTO REBOTE
BTFSC PORTE,0 ;CHECA SI YA SE SOLTO EL BOTON
GOTO $-1 ;GENERA BUCLE PAA ESPERAR A QUE SE SUELTE EL BOTON
;COMIENZA IDENTIFICACION DE CARACTER A MODIFICAR
BTFSS UBICADOR,1 ;SI ES 0 BRINCA ABAJANDO TERCERO, SI ES 1 CHECA SI ES SEGUNDO O PRIMERO
GOTO SUBIENDO_TERCERO
BTFSS UBICADOR,0 ;SI ES 0 BRINCA A SEGUNDO, SI ES 1 BRINCA A PRIMERO
GOTO SUBIENDO_SEGUNDO
GOTO SUBIENDO_PRIMERO
FIJAR BTFSS PORTE,1 ;CHECA SI SE PRESIONA EL BOTON DE FIJAR
GOTO CONTANDO ;BRINCA A MONITOREAR EL SIGIENTE BOTON
CALL MEDIOSEG ;ESPERA PARA DISMINUIR EL EFECTO REBOTE
BTFSC PORTE,1 ;CHECA SI YA SE SOLTO EL BOTON
GOTO $-1 ;GENERA BUCLE PAA ESPERAR A QUE SE SUELTE EL BOTON
GOTO FIJANDO ;SALTA A LA RUTINA PARA FIJAR NUMERO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CONTANDO DECFSZ D1, F ;LE RESTA 1 A D1 Y GUARDA EL RESULTADO EN D1, BRINCA SI LLEGA A CERO
GOTO $+2 ;BRINCA DOS LUGARES HACIA ADELANTE
DECFSZ D2, F ;LE RESTA 1 A D2 BRINCA SI LLEGA ACERO
GOTO $+2 ;BRINCA DOS LUGARES
DECFSZ D3, F ;LE RESTA 1 A D3 BRINCA SI LLEGA A CERO
GOTO DELAY_CONTEO ;REGRESA A CHECAR BOTONES Y CONTAR
GOTO DESPLEGAR ;BRINCA A DESPLEGAR
RETURN
;;;;;;;;;;;SUBRUTINAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BAJANDO_PRIMERO ;
DECF PRIMERO,F ;LE RESTA UNO AL VALOR ALMACENADO EN PORTADOR, QUE CORRESPONDE AL NUMERO QUE SE MUESTRA EN EL LCD
GOTO VISUALIZAR ;
RETURN ;
SUBIENDO_PRIMERO ;
INCF PRIMERO,F ;
GOTO VISUALIZAR ;
RETURN ;
BAJANDO_SEGUNDO ;
DECF SEGUNDO,F ;
GOTO VISUALIZAR ;
RETURN ;
SUBIENDO_SEGUNDO ;
INCF SEGUNDO,F ;
GOTO VISUALIZAR ;
BAJANDO_TERCERO ;
DECF TERCERO,F ;
GOTO VISUALIZAR ;
RETURN ;
SUBIENDO_TERCERO ;
INCF TERCERO,F ;
GOTO VISUALIZAR ;
RETURN ;
FIJANDO ;
DECFSZ UBICADOR,F ;
GOTO VISUALIZAR ;
GOTO COMPROBAR_CLAVE ;
esta parte es la que me causa conflictos
dominus el tiempo para eliminar el rebote es de medio segundo, ademas tengo hardware para eliminar el rebote, incluso ya jugue con el valor del tiempo y del capacitor en el hardware, mi interes es mas por el lado de si se puede que le hechen un vistazo al software, quiza estoy usando una instruccion incorrectamente, por eso subi parte del programa, ahora ya la reduje pero aun asi me gustaria un vistobueno al sofware si tu o alguien mas pudiera hacerlo, gracias
si alguien puede decirme si hay diferencia entre "incf tercero,1", "incf tercero,f" y "incf tercero"?????????????? segun yo es lo mismo, pero no estoy seguro, segun yo cambia solo si escribo "incf tercerp,0" es correcto?
...Dije el código completo y el archivo en Proteus porque ya lo tiene. Pero es suficiente un código donde salte el error con los bloques necesarios para que compile. Lo mismo el Proteus, con las entradas salidas para que funcione.
Obviamente compartiendo hasta el archivo del proteus, implica que todo su proyecto sea público.
Para algunos no será importante, para otros no, ya que implica revelar su trabajo, y muchos son reservados con eso, que nunca comparten ni una porción del código, sólo con palabras tratan de explicar.Ese fantasma lo tienen muchos, pero la principal causa es creer que de un vistazo otro se va a dar cuenta y por lo tanto no hacen falta detalles.
Para este caso que indica que el problema sucede físicamente y no en el simulador, posiblemente tengas que probar físicamente su hardware para determinar que pasa.Además de ser imposible, si fuera asi, para qué un fragmento de código?
Hola compañeros, agradesco se tomen la molestia de leer mi post, les cuento, hice un programa para mover una prensa y cuente el tiempo de prensado en base a dos digitos que son capturados y guardados en la eeprom, se usa un lcd 20x4 y al correr el software en proteus todo perfecto, pero en la pcb se bloquea al ingresar los digitos, si no ingreso esos digitos nunca se traba ni hace cosas extrañas, eso me hace descartar la fuente y cosas como rizado, agregue tiempo para evitar el rebote y ademas agrege software para esperar a que se suelte el boton, nunca habia usado incrementar o decrementar, el mismo sistema de captura de la señal de los botones para subir y bajar (una divisora con resistencias, y un capacitor, despues lo paso por un ic inversor dos veces) es el mismo que se usa para los sensores por ejemplo y en esos no tengo problema, ademas ese sistema ya lo he usado en otras tarjetas y nunca he tenido problema, creo que es algo referente a la captura y almacenamiento de los datos en el software, no soy bueno programando y he aprendido viendo videos y copiando como otros hacen sus programas, disculpen si hay maneras mas simples y yo no las uso, péro seguramente es porque las desconozco, si me pudieran orientar les agradeceria, adjuntare parte de programa en cuestion, gracias!!!
SUBIR1 BTFSS PORTE,0 ;CHECA SI SE PRESIONA EL BOTON DE AUMENTAR
GOTO FIJAR1 ;BRINCA A MONITOREAR EL SIGIENTE BOTON
CALL MEDIOSEG
BTFSC PORTE,0 ;CHECA SI YA SE SOLTO EL BOTON
GOTO $-1 ;GENERA BUCLE PAA ESPERAR A QUE SE SUELTE EL BOTON
;COMIENZA IDENTIFICACION DE CARACTER A MODIFICAR
BTFSC UBICACION,0 ;SI ES 0 BRINCA A SEGUNDO, SI ES 1 BRINCA A PRIMERO
GOTO SUBIENDO_DECENA ;
GOTO SUBIENDO_UNIDAD ;
FIJAR1 BTFSS PORTE,1 ;CHECA SI SE PRESIONA EL BOTON DE FIJAR
GOTO CONTANDO1 ;BRINCA A MONITOREAR EL SIGIENTE BOTON
CALL MEDIOSEG
BTFSC PORTE,1 ;CHECA SI YA SE SOLTO EL BOTON
GOTO $-1 ;GENERA BUCLE PAA ESPERAR A QUE SE SUELTE EL BOTON
GOTO FIJANDO1 ;SALTA A LA RUTINA PARA FIJAR NUMERO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CONTANDO1 DECFSZ D1,F ;LE RESTA 1 A D1 Y GUARDA EL RESULTADO EN D1, BRINCA SI LLEGA A CERO
GOTO $+2 ;BRINCA DOS LUGARES HACIA ADELANTE
DECFSZ D2, F ;LE RESTA 1 A D2 BRINCA SI LLEGA ACERO
GOTO $+2 ;BRINCA DOS LUGARES
DECFSZ D3, F ;LE RESTA 1 A D3 BRINCA SI LLEGA A CERO
GOTO DELAY_CONTEO1 ;REGRESA A CHECAR BOTONES Y CONTAR
GOTO DESPLEGAR ;BRINCA A DESPLEGAR Y TERMINO TIEMPO DE ESPERA
RETURN
;;;;;;;;;;;SUBRUTINAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BAJANDO_UNIDAD ;
DECF UNIDAD,F ;LE RESTA UNO AL VALOR ALMACENADO EN PORTADOR, QUE CORRESPONDE AL NUMERO QUE SE MUESTRA EN EL LCD
GOTO VISUALIZAR1 ;
RETURN ;
SUBIENDO_UNIDAD ;
INCF UNIDAD,F ;
GOTO VISUALIZAR1 ;
RETURN ;
BAJANDO_DECENA ;
DECF DECENA,F ;
GOTO VISUALIZAR1 ;
RETURN ;
SUBIENDO_DECENA ;
INCF DECENA,F ;
GOTO VISUALIZAR1 ;
FIJANDO1 ;
DECFSZ UBICACION,F ;
GOTO VISUALIZAR1 ;
CALL ESCRIBIRU ;GUARDA EL NUMERO EN EEDATA
CALL ESCRIBIRD ;GUARDA EL NUMERO EN EEDATA
GOTO DESPLEGAR ;
RETURN ;
Dominus, la verdad no tengo la menor idea de debugar con hardware como lo mencionas, ojalá pudieras explicarme un poco;. referente al retardo al soltar el botón, te comento los siguiente: había subido bastante parte del programa para que supieran que es lo que hace a grandes rasgos, se incrementa un dígito y se muestra de inmediato en la pantalla del lcd, así como se graba en la memoria, en el LCD se ven los números consecutivos, no hay brincos (nunca, ni si quiera una sola vez), lo que me hace pensar que es algo relacionado con el acceso a la memoria, no sé si el poco rizado que tenga en la línea sea el que me bloquea el pic al ingresar a la memoria, o las instrucciones que uso para ingresar a la memoria, motivo por el cual había subido todas esas partes ( donde se incrementa, dónde se captura el dígito, donde se guarda, donde se leé, etcétera, hay algun dato importante a tener en cuenta al acceder a la Eeprom?