TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: chealva en 02 de Marzo de 2020, 15:47:39
-
Hola, un saludo soy nuevo en este foro.
Mi problema es que cuando hago un porgrama con el pic 16F88 en asm, al simularlo o al probar con el propio pic, los tiempos que utilizo para retardos por ejemplo, no se corresponde con el tiempo real. Ya instale una version diferente de MPLAB X IDE y sigue el problema. Parece ser que es algo de configuracion. Espero comentarios. Gracias
-
Tenes que configurar correctamente los FUSES y hacer correctamente la rutina de delays para esperar los ciclos correctos.
Tambien podes plantearte medir el tiempo del delay que estas teniendo, y el supuesto, de esa forma vas a tener alguna relacion, ya sea un delay 2,4,8 veces mas rapido o mas lento. Como para ir pensando que puede ser.
-
Gracias. El caso es que ya he revisado los fuses comprobandolo con otros ejemplos en la red, y todo parece estar bien.Ya he medido el retardo, y me va unas 8 veces mas rapido de lo normal. No se que puede ser. Seguire investigando. Un saludo
-
Hola de nuevo. He hecho un programa sencillo, que es el parpadeo de un led, y el retardo deberia de ser de unos 62,5 ms segun el programa para cada cambio de estado del led, sin embargo el tiempo real es de mas o menos un segundo. Os muestro el programa:
LIST P=PIC16F88
INCLUDE <P16F88.INC>
; CONFIG1
; __config 0x2F09
__CONFIG _CONFIG1, _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CCPMX_RB3 & _CP_OFF
; CONFIG2
; __config 0x3FFC
__CONFIG _CONFIG2, _FCMEN_OFF & _IESO_OFF
ORG H'00'
BANCO0 MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANCO1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
#DEFINE CUENTA1 H'20'
#DEFINE CUENTA2 H'21'
BANCO1
MOVLW H'00'
MOVWF TRISB
BANCO0
INICIO BSF PORTB,0
CALL RETARDO
BCF PORTB,0
CALL RETARDO
GOTO INICIO
RETARDO MOVLW D'250'
MOVWF CUENTA1
VUELVE2 MOVLW D'250'
MOVWF CUENTA2
VUELVE1 DECFSZ CUENTA2
GOTO VUELVE1
DECFSZ CUENTA1
GOTO VUELVE2
RETURN
END
-
Que tal chealva,
Para comenzar diré que tu rutina de delay para nada genera un delay de 62,5ms. Realizando la simulación la rutina genera un delay de 188.505 ms. Eso es casi tres veces lo que tu pensabas, no es simplemente 250 X 250 como tú lo supones. Recuerda quecada instrucción tiene un tiempo de ejecución que por lo regular es 1 ciclo instrucción (en tu caso si el cristal es de 4MHz, entonces el ciclo instrucción es de 1us), y 2 ciclos instrucción para las intrucciones que realizan salto (DECFSZ, GOTO, CALL, etc).
Por lo tanto si realizas correctamente la cuenta de los cilcos instrucción te darás cuenta de que es imposible que tu rutina sea de 62,5 ms.
Digamos que tu código está bien, pero tienes que estar seguro que tu cristal es de 4MHz y que no sea un crital serie, de lo controario no funcionará correctamente.
elreypic.
-
Hola y gracias por contestar. Ok tienes razón evidentemente. No tuve en cuenta todos los tiempos, por ir directamente al grano. El caso es q con ese retardo el led cambia de estado cada 1 segundo, muy por encima del tiempo q debería de ser. Lo he probado tanto con el proteus como físicamente, con lo cual no creo q sea ni el oscilador ni ningún componente. El caso es q antiguamente con mi ordenador viejo q tenia instalado windows 7, funcionaba todo perfectamente, y ahora con Windows 10 no hay manera. No sé si será eso. Un saludo
-
Yo lo simulé tanto en MpLAB como con proteus y todo funciona bien.
Coloca un osciloscopio en el pin que activa el led y mide la señal, obviamente en el proteus tu pudieras ver que se enciende más lento pero fíjate en el reloj del proteus o bien como te dije, coloca un osciloscopio y realiza las mediciones
Elreypic
-
Cuando la simulacion es demasiado pesada el proteus se retrasa y aparece cpu limit o similar, quitale animacion y probes bajale los frame, usa un frecuencimetro
-
Hola. Al final parece que di con el problema. Hice lo mismo en otro ordenador, y me funciona todo a la perfeccion. No se que problemas es el que habia con mi ordenador, pero seguramente lo voy a formatear por que va lento y asi aprovecho. Una vez formateado probare otra vez en mi ordenador aver. Muchas gracias por vuestra molestia, y un saludo, adios