Autor Tema: Problemas con el uso de interrupciones  (Leído 6670 veces)

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

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Problemas con el uso de interrupciones
« en: 28 de Julio de 2025, 06:40:33 »
Hola buenos días, resulta que estoy implementando un sistema donde utilizo interrupciones y veo que estas están afectando al funcionamiento del sistema,  mi pregunta es ¿hay alguna manera de solucionar esto?, he intentado desactivar las interrupciones globales cuando voy a leer un dispositivo por SPI o a escribir un dato en el LCD pero algo me falla por que se bloquea, o tan solo con desactivar las interrupciones del periférico en cuestión es suficiente?, ¿algún consejo o pauta para poner hacer que mi código sea más estable?.

Saludos y gracias
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 214
Re:Problemas con el uso de interrupciones
« Respuesta #1 en: 28 de Julio de 2025, 09:26:19 »
Hola, si, tenes que dejar de hacer operaciones que lleven tiempo dentro de las interrupciones, en ellas solo lo minimo, cambio de estado de pines, incrementar contadores o flags, y yerbas asi....

Aumenta la velocidad del microcontrolador al maximo, y si no alcanza, cambia por uno de 32bits con periféricos especializados.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Problemas con el uso de interrupciones
« Respuesta #2 en: 28 de Julio de 2025, 09:35:53 »
Hola, si, tenes que dejar de hacer operaciones que lleven tiempo dentro de las interrupciones, en ellas solo lo minimo, cambio de estado de pines, incrementar contadores o flags, y yerbas asi....

Aumenta la velocidad del microcontrolador al maximo, y si no alcanza, cambia por uno de 32bits con periféricos especializados.

¿Se podría deshabilitar las interrupciones cuando el código vaya a utilizar los protocolos de comunicación o a escribir en el LCD?
Esto lo he probado desactivando las interrupciones globales pero el micro que queda pillado, no me funciona
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 214
Re:Problemas con el uso de interrupciones
« Respuesta #3 en: 28 de Julio de 2025, 09:54:10 »
Obvio que se pueden deshabilitar, TODAS, o alguna en particular, pero te podrías perder el evento.

Ya probaste empleando un micro con hardware SPI especializado?  porque alli una vez que inicia la comunicación, lo hace solo, sin intervención del micro, menos del programa del usuario.

PD: Vos no tendrás el código plagado de delays, incluso dentro de las interrupciones, ¿no?.
« Última modificación: 28 de Julio de 2025, 10:33:55 por AleSergi »

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Problemas con el uso de interrupciones
« Respuesta #4 en: 28 de Julio de 2025, 16:19:48 »
Obvio que se pueden deshabilitar, TODAS, o alguna en particular, pero te podrías perder el evento.

Ya probaste empleando un micro con hardware SPI especializado?  porque alli una vez que inicia la comunicación, lo hace solo, sin intervención del micro, menos del programa del usuario.

PD: Vos no tendrás el código plagado de delays, incluso dentro de las interrupciones, ¿no?.

Hola, si utilizo el protocolo SPI por hardware en un PIC18F4620 y compilado con C18, el tema es que estoy capturando un tacómetro de un ventilador y eso genera muchas interrupciones, también tengo el micro con un cristal de 4MHz en HSPLL que según  cálculos va a 16MHz, pero voy a probar a ponerle un cristal de 20MHz para subir la frecuencia de trabajo.
Otra cosa intento desactivar las interrupciones globales cuando voy a leer de una sonda de temperatura por SPI y el micro se bloquea. lo que pasa es que en el display empiezan a salir caracteres raros y al final el sistema peta
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Problemas con el uso de interrupciones
« Respuesta #5 en: 28 de Julio de 2025, 18:22:14 »
Obvio que se pueden deshabilitar, TODAS, o alguna en particular, pero te podrías perder el evento.

Ya probaste empleando un micro con hardware SPI especializado?  porque alli una vez que inicia la comunicación, lo hace solo, sin intervención del micro, menos del programa del usuario.

PD: Vos no tendrás el código plagado de delays, incluso dentro de las interrupciones, ¿no?.

Hola, si utilizo el protocolo SPI por hardware en un PIC18F4620 y compilado con C18, el tema es que estoy capturando un tacómetro de un ventilador y eso genera muchas interrupciones, también tengo el micro con un cristal de 4MHz en HSPLL que según  cálculos va a 16MHz, pero voy a probar a ponerle un cristal de 20MHz para subir la frecuencia de trabajo.
Otra cosa intento desactivar las interrupciones globales cuando voy a leer de una sonda de temperatura por SPI y el micro se bloquea. lo que pasa es que en el display empiezan a salir caracteres raros y al final el sistema peta

Tal vez deberías compartir tu código y el esquemático del proyecto. Posiblemente así sería más fácil entender que está mal.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 214
Re:Problemas con el uso de interrupciones
« Respuesta #6 en: 30 de Julio de 2025, 11:26:57 »
si, tenes que ser más conciso, dar más datos, porque así, solo  se te puede decir cosas genéricas y obvias.
Que rango de frecuencias pretendes o crees que medirás, cual es el dispositivo SPI visualizador, que otras interrupciones empleas, aparte de lo que te indica DominusDRR.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Problemas con el uso de interrupciones
« Respuesta #7 en: 01 de Agosto de 2025, 04:46:53 »
Hola a todos, pues creo que ya lo he solucionado, lleva funcionando sobre las 24 horas y ni un problema.

Lo que quiero hacer es capturar las revoluciones de un ventilador PWM y mostrarlas en pantalla, para ello he implementado una señal PWM por hardware para mover el ventilador y el módulo CCP2 configurado en modo captura, al principio lo configuré para que capturara todos los flancos de subida, como el ventilador emite dos pulsos por revolución, pues lo que hice es que en la interrupción con una variable ir contando los pulsos, luego ya fuera de esa función de interrupción implementé un contador con el TIMER0 que me contara un segundo y leyera los pulsos guardados, luego los dividiera por dos y los multiplicara por 60 que es lo que equivale a un minuto. (no se si esta es la mejor manera ya que el módulo CCP como captura utiliza el TIMER1 o TIMER3 para calcular el tiempo de cada flanco).

   Con esta configuración la pantalla LCD empezaba a desplegar símbolos raros sobre los 5 minutos y se iba todo al traste, luego dejaba de funcionar la PWM y etc...
   Lo que hice fue configurar el registro CCP2CON para que saltara la interrupción a los 16 flancos de subida con la misma filosofía que lo anterior, una variable que capturara cada interrupción y luego ya en una función de trabajo tratar el dato para averiguar las vueltas en un segundo con esto bajaba la carga del módulo de captura y me fue mejor pero todavía se pillaba el sistema.

   Seguí estudiando el caso y me di cuenta que estaba utilizando la librería CCP de micro chip para configurar el módulo CCP2 y esa librería me estaba configurando otros módulos, la eliminé de mi proyecto y configuré el módulo a mano.

   En la librería XLCD de microchip, yo había implementado ciertas funciones para automatizar trabajos, como por ejemplo guardar un carácter personalizado en la memoria del LCD y luego pintarlo en la pantalla, otra para el manejo de la línea y la posición donde se quiere pintar,.. etc.. que estaban mal escritas, no le había puesto en el lugar correcto la función de comprobación de bus libre que trae por defecto la librería de microchip y creo que eso estaba afectando el correcto funcionamiento del LCD.

   Al cambiar todo eso pues ya parece que va bien.

Gracias a todos por la ayuda
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...