4 votos

¿Una interrupción externa interrumpe el ADC o el ADC paraliza la interrupción?

Estoy trabajando en una aplicación RTC con un reloj de 1Hz conectado al pin de interrupción externa en un PIC16f887. También tengo operaciones ADC continuas sucediendo junto con el reloj de 1Hz.

Mi pregunta es si el ADC o la interrupción tendrían prioridad si ambos ocurren al mismo tiempo. ¿Qué pasa si la interrupción se produce durante una operación ADC? ¿Se detiene la operación para permitir que se ejecute la interrupción? Obviamente, esto invalidaría la lectura. ¿O la interrupción espera a que termine el ADC?

16voto

aryeh Puntos 1594

En general, corresponde al diseñador dar prioridad a las interrupciones.

En su caso concreto, si tiene algo más importante que el CAD para usted, entonces puede optar por abandonar la lectura del CAD. Pero normalmente una actualización de reloj de 1 Hz tolerará ser ignorada durante un periodo variable mientras el ADC se completa.

7voto

RelaXNow Puntos 1164

No, la interrupción que se produce no tiene ningún efecto sobre el A/D. El A/D funciona a partir del reloj de instrucciones o de su propio reloj, dependiendo de cómo lo configures. Ambos siguen funcionando durante una interrupción a menos que ejecutes deliberadamente una instrucción SLEEP para detener el reloj del procesador.

A lo sumo, la interrupción de 1 Hz podría retrasar la rutina de interrupción de procesamiento de la conversión A / D hecho, si usted está haciendo esto mediante el uso de interrupciones en absoluto. No hay ningún requerimiento de que los resultados A/D sean manejados usando interrupciones. Incluso si así fuera, el A/D realizará su conversión y escribirá el resultado en ADRESH:ADRESL independientemente de si el procesador está tomando una interrupción o no. De hecho, el propio procesador no está realmente "en" una interrupción. Eso es sólo una abstracción del software. Cuando se dan las condiciones adecuadas para una interrupción, el procesador ejecuta una llamada a la posición 4 y desactiva el bit GIE en INTCON. Eso es todo. El resto depende del firmware.

Una vez que el A/D ha terminado una conversión, el resultado estará disponible en ADRESH:ADRESL. Depende del firmware qué hacer con eso. El valor permanecerá allí hasta que se complete una nueva conversión. Si el firmware no inicia una nueva conversión hasta leer el resultado de la anterior, entonces no se puede perder nada. Si una nueva conversión se inicia automáticamente, entonces es posible que los datos anteriores se pierdan si el firmware no llega a leer ADRESH:ADRESL a tiempo. Mira el tiempo de adquisición y conversión del A/D y la tasa de instrucción, y verás que generalmente hay un montón de ciclos de instrucción para agarrar un resultado de conversión, incluso si una nueva conversión se inicia automáticamente por el disparador de eventos especiales de un módulo CCP. Sólo asegúrate de que el código de interrupción de tictac de reloj no sea tan largo que tarde más de lo que tarda el A/D en hacer un nuevo resultado. Esto debería ser fácil. Cualquier procesamiento largo se maneja mejor estableciendo una bandera y dejando que el código de primer plano lo haga cuando lo haga. El código de interrupción debe manejar sólo el servicio inmediato del dispositivo.

4voto

steve Puntos 28

No tengo mucha experiencia práctica con la familia PIC, pero puedo decirte lo que pasaría en un chip AVR. Sospecho que son muy similares. El módulo ADC en tu microprocesador trabaja en paralelo a tu rutina de programa. El ADC actualizará su lectura después de la conversión. Si se produce una interrupción entre la inicialización de la lectura del ADC y la actualización de la salida, ocurrirá la siguiente secuencia:

  1. En su main() se inicializa la lectura del ADC.
  2. Comienza la conversión ADC
  3. En paralelo:
    1. La interrupción se denomina
    2. Al finalizar la conversión ADC, el resultado se almacena en un registro especial
  4. La interrupción termina finalmente, su procesador vuelve a main() y lee el resultado de la lectura del ADC.

Este no es el uso más apropiado para los diagramas de forma de onda, pero espero que represente esta secuencia lo suficientemente bien para ti:

enter image description here

3voto

GetFree Puntos 495

El PIC que utilizas sólo tiene una interrupción, que en realidad es el OR de varias fuentes de interrupción. Cuando dos fuentes de interrupción ocurren simultáneamente el efecto sigue siendo que se produce una interrupción. Depende de tu rutina de interrupción manejar Y BORRAR las fuentes de interrupción que quiere manejar. Si una de las fuentes de interrupción está todavía activa cuando la rutina de interrupción termina, se producirá una nueva interrupción y la rutina de interrupción será llamada una y otra vez, hasta que todas las fuentes de interrupción (habilitadas) sean borradas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X