Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

13/04/2014 #1


La funcion Delay desactiva los timers?
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.
14/04/2014 #2

Avatar de Scooter

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.
14/04/2014 #3

Avatar de cosmefulanito04

Debe ser el proteus, ¿no tenés un debug (aunque sea simulado) en el IDE? ahí vas a obtener los tiempos ideales.
15/04/2014 #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.
21/04/2014 #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 ??
21/04/2014 #6
Moderador

Avatar de D@rkbytes

Sant0 dijo: Ver Mensaje
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.
21/04/2014 #7


Gracias por la pronta respuesta. Voy a probarlo y luego les cuento como me fue.
22/04/2014 #8

Avatar de Gudino Roberto duberlin

Hola, bueno en realidad utilizar delay, junto con interrupciones no es para nada recomendable. Utiliza el timer en lugar de delays.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.