Autor Tema: Problema conceptual sobre cómo hacer una rutina temporizada con interrupción  (Leído 1087 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado vra

  • PIC10
  • *
  • Mensajes: 27
Hola a todos, espero estén bien y les deseo un muy prospero y productivo año 2020.

Tengo una duda conceptual sobre mi proyecto y la aplicación de una interrupción temporizada, mi intención es hacer un proyecto para controlar un motor BLDC pero tengo una duda, quiero hacer una rutina que se inicie por ejemplo cada 100ms y la opción que parece obvia es hacer una interrupción temporizada y a su vez pensé en meter el código necesario en la rutina de servicio de interrupciones el PIC24F que estoy utilizando pero en el manual de microchip dicen que se aconseja no meter mucho código en esa rutina por cuestiones de latencia.

La otra opción es utilizar una bandera y meter el código en un función que se active mediante una bandera activada dentro de la rutina de interrupción.

Qué me aconsejan ustedes?, en caso de haber una opción adicional no considerada por mi serán bien recibidos sus consejos.

Gracias de antemano por la ayuda brindada.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema conceptual sobre cómo hacer una rutina temporizada con interrupción
« Respuesta #1 en: 31 de Diciembre de 2019, 11:15:28 »
En ningun micro deberias tener una rutina de interrupcion demasiado larga o que ocupe demasiado tiempo ( cero delays ). Es entrar, hacer y salir.

Si los 100ms no importa que sean exactos entonces lo envias al main con un flag. Pero si importan entonces no deberias hacerlo.

Tambien si tenes otra interrupcion vas a necesitar definir prioridades, que es mas importante para vos.

Casi que todo depende de que estas buscando hacer con esa interrupcion.
Por ejemplo si fuera leer el ADC, en la interrupcion del timer le das a iniciar la lectura del ADC ( a pesar que seguramente tenes algo que te lo activa por hardware ) y luego usas la interrupcion del ADC para cuando este listo.

Resumen: Tiempo destinado en las interrupciones es tiempo que no se permite correr a la funcion main. La implementacion todo depende de las prioridades que necesites tener, y siempre atendiendo a lo que dije en la primer frase. A no ser que lo que tengas en el main no importe para nada, entonces ahi podes poner delays como mas te guste. :P