TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: PICDEIVID1.1 en 03 de Diciembre de 2003, 16:50:00
-
Hola que tal , muy buen sitio!!!!

Soy un estudiante de ingenieria en electrónica
apenas estoy programando mi primer pic el grandiosisimo 16f84A
pero tengo un problemita espero alguien me pueda ayudar. 
He metido al pic un sencillo programa para que funcione como un semáforo. no utilizo interrupciones, solo utilizo la instrucción DECFSZ para saltar un goto en una subrutina que sirve para hacer un DELAY de 0.5 Segundos. el problema es que al momento de probar el programa en el pic este se reinicia solo sin terminar de hacer todas las instrucciones.
Ya he intentado lo siguiente:
Desactive el WatchDog desde el encabezado
list p=16f84A
include <p16f84A.inc>
_WDT_OFF EQU H\"3FFB\"
_RC_OSC EQU H\"3FFF\"
Desactivo el bit GIE del registro INTCON (ya intente desactivando los demas)
El programa lo inicio desde la posición h\"20\" de la EEPROM para brincarme la 05 que es donde esta la interrupcion
en org 0 le doy un goto INICIOpara irme a la 20
y por si a caso entra la interrupcion en la 05 tengo un RETFIE
Solo utilizo el PORTB como salidas
para salir de dudas ya intenté haciendo el programa sencillo sin subrutinas y suprimiendo la instrucción DECFSZ y de todos modos en algun lugar el pic se reinicia.
estare muy agradecido ya que hice y deshice el programa y pues llegué a la brillante deducción de que el problema es de una parte del pic que desconozco aun. 
no pude adjuntar el programa pero aqui esta el encabezado
list p=16f84A
include <p16f84A.inc>
_WDT_OFF EQU H"3FFB"
_RC_OSC EQU H"3FFF"
AA equ H"0C" ; Variable utilizada en la subrutina MEDSEG
BB equ H"0D" ; " " " "
CC equ H"0E" ; " " " "
DD equ H"0F" ; Utilizada en la subrutinas DOSSEG y SEISSEG y para el numero de
; parpadeos del led verde
ORG 0
GOTO CERO
ORG 5
RETFIE
CERO ORG 20 ; Inicia en la posicion Cero del programa
BCF INTCON,GIE
BCF INTCON,EEIE
BCF INTCON,T0IE
BCF INTCON,INTE
BCF INTCON,RBIF
BCF INTCON,T0IF
BCF INTCON,INTF
BCF INTCON,RBIE
BSF STATUS,RP0
MOVLW d"00"
MOVWF TRISB
GOTO INICIO
INICIO MOVLW b"00100001" ; Enciende Rojo, Verde
MOVWF PORTB ; Envia el dato al puerto BB
CALL SEISSEG ; Llama a un retardo de 6 seg.
MOVLW d"004"
MOVWF DD ; DD = 4
FLIP MOVLW b"00100001"
MOVWF PORTB ;Enciende Rojo, Verde
CALL MEDSEG ;Retardo de 0.5Segundos
MOVLW b"00100000"
gracias y un saludo a los picmaniacos
-
hola, creo esta mal el encabezamiento...
prueba con esto
LIST P=16F84A
#INCLUDE "p16f84A.inc"
ERRORLEVEL -302, -307 ;(NO FIGURAN LOS ERRORES DE CAMBIO DE PAGINA)
;---------------------------------------------------------------------------
__CONFIG _CP_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC ;CONFIGURO
;PARA LA GRABACION, CODE PROTECT On, RESET DE ENCENDIDO PERRO GUARDIAN=SI,ETC
reset org 00h ;el vector de reset es la dirección 00
goto inicio ;se salta al inicio del programa
fijate que te falta la palabra __config
para cargar archivos, lo puedes hacer en www.todopic1.foro.st que es el almacen, ya que aqui no hay mas lugar...
Suerte!
Norberto
pd... las barras a la izquierda no corresponden...
-
Ya que hablan de esto quiero comentarles mi experiencia a ver si a alguno le sirve de algo, monte un reloj contador descendente y tenia un problema similar, el PIC se reiniciaba cuando el contador llegaba a determinado numero, despues de perder mi tiempo revisando el firmware, watchdog y todo eso, entre a revisar el circuito, pues resulta que tenia un pin del puerto configurado en salida que estaba en corto con otro y al hacerse uno alto y otro bajo hacian corto circuito y el pic se reiniciaba.
Asi que cuando les ocurra esto no siempre es firmware.
Suerte en sus proyectos.
Saludos,
AChamber.
-
Hola, otra cosita, le pusiste la resistencia de 4k7 entre MCLR (pin 4)
y Vcc
Yo siempre me olvido y me pasa eso, se reeinicia en cualquier parte
Saludos
-
Se te reiniciará seguramente por culpa del "perrito". Este lo puedes desactivar (si no lo vas a usar) bien en la palabra de configuración, como bien te indica Norberto, bien desde el programa grabador del PIC (por ejemplo el ICPROG). Si lo quieres usar hay que incluir en el programa la instrucción clrwdt
Un saludo
-
Eso es, ratifico lo que apunta Pocher. Utiliza el perro guardián y pon la instrucción clrwdt cada vez que inicies un bucle.
Saludos!
Elena
-
Tambièn puede ser que el programa en determinada parte estè con el PCLATH desubicado y le salta para donde no es... y se le bloquea o se và para inicio, podrìa ocurrir al utilizar un GOTO, ò un ADDWF ò un CALL etc.
-
Hola revisando el codigo que proporcionas, me doy cuenta que estas trabajando la RAM en un banco equivocado. En tu código tienes:
BSF STATUS,RP0
MOVLW D"00"
MOVWF TRISB
GOTO INICIO ;Aqui esta tu problema
Tu codigo debería ser:
BSF STATUS,RP0 ;Coloca RAM en el banco 1
MOVLW D"00"
MOVWF TRISB
BCF STATUS,RP0 ;Regresa al banco 0 de la RAM
GOTO INICIO
-
yo tuve el mismo problema con un programa super sencillo de pender un led al activar un pin, y no era para nada el software, lo que debes hacer es crear un programa sencillo si tienes el mismo problema de reinicios y reinicios, lo mas seguro que sea es la fuente mi amigo, yo cambie mi fuente y dejo de tener esos errores, el por que??? no lo se pero la cambie y todos mis programas han funcionado sin ese problema.
baygon
-
Adhiero a la rta de EJMC, tenes que poner un 1 en (MCLR, ya que trabaja con logica inversa y está activado con cero) basta con una resistencia de 1k a Vcc
-
Hola.
Te aconsejaria que revises el tema de la fuente de alimentacion.
Esta el condensador entre las patas de alimentacion del pic lo mas proximo posible.
Esta la tension totalmente estabilizada.
El reset esta a uno.
Me gustaria leer el codigo completo.
Suerte El_cuarenton