La funcion Delay desactiva los timers?

#1
Hola
Tengo una pequeña pregunta, primero, tengo que activar una interrupcion cada 1000us, ya la programé y todo bien, el depurador de proteus me indica que se activa la ISR cada 1.0021 ms, pero sólo cuando el pic no hace nada entre interrupciones; cuando ya hace algo (enviar comandos I2C y esperar con un delay_ms()) la interrupcion salta en tiempos diferentes que parecen ser aleatorios entre 900us y 1200us...
Mi pregunta concreta es: Ese delay que se ejecuta fuera de la ISR podría interferir en que la interrupcion salte en tiempos diferentes?
Gracias.
 
#2
Puede que proteus no simule bien.
Se supone que el timer va aunque estés en un delay, si no es así otro motivo mas para no usar delay.
 
#4
La función Delay no desactiva timers.

Al microcontrolador le llegan pulsos de clock, que es un "aviso" que dice "che, hacé esto" cada cierto tiempo. En los PIC y microcontroladores accesibles, generalmente se ejecuta 1 instrucción cada 4 ciclos de reloj, pero no viene al caso.

La función delay no interrumpe los timers, estos se incrementan (si son internos, obviamente), con cada instrucción, si no tiene preescala. La función delay, en realidad depende del timer interno del microcontrolador.

Y dicho sea de paso, si ejecutás 1 instrucción cada 200ns por ejemplo, no vas a poder generar 1us de delay, sino 800ns o 1200ns, porque el timer cambia de valor cada 200ns, y es este mismo el que controla el "delay", que en realidad son valores del timer.
 
#5
tengo una pregunta, estoy utilizando el ccs compiler y PIc para encender luces siguiendo una secuencia. el problema que tengo es que no mide bien el tiempo de pausa que dejo encendido cada led.
¿Que podria ser?

estoy trabajando con 18f4550, 20MHz y 22pF (cristal, capacitores). Sera alguna configuaracion o es el cristal ??
 
#6
tengo una pregunta, estoy utilizando el ccs compiler y PIC para encender luces siguiendo una secuencia. el problema que tengo es que no mide bien el tiempo de pausa que dejo encendido cada led.
¿Que podría ser?

Estoy trabajando con 18f4550, 20MHz y 22pF (cristal, capacitores). ¿Será alguna configuración o es el cristal?
Lo más seguro es la palabra de configuración que estás usando.
Como no la debes tener bien, el microcontrolador está trabajando a otra frecuencia con el oscilador interno.

Usa esta para trabajar a con un cristal de 20MHz sin USB.

#fuses NOPBADEN, NOBROWNOUT, NOVREGEN
#use delay (crystal = 20MHz)

Suerte.
 
Arriba