¿Buena solución para más interrupciones en un arduino?

Estoy construyendo un circuito con un Arduino Mega y chips IC simples (por ejemplo, 7432) pero tengo muchas líneas para monitorear las condiciones de interrupción y no hay suficientes pines en el Atmel, así que estoy buscando una manera de expandir esto. Surgen problemas porque necesito poder cambiar la condición de activación de flanco ascendente a flanco descendente para algunas líneas según las condiciones, y algunas líneas permanecerán altas después de haber sido reparadas, por lo que un codificador de prioridad sufriría la condición de que una prioridad más alta la interrupción enmascararía una de menor prioridad. Para el último problema, estoy pensando en usar un registro y algunas puertas para permitir la desactivación de algunas interrupciones, pero no tengo una buena solución para el primero. ¿Alguien tiene alguna sugerencia? Estoy obteniendo nuevos chips según sea necesario, por lo que se agradecerían las soluciones que involucren circuitos integrados adicionales de la serie 7400 o similares,

Un CPLD básico como un XC9536XL es bastante económico, pero hay una curva de aprendizaje.

Respuestas (4)

Un Arduino Mega tiene "solo" interrupciones de cambio de 24 pines para sus 80 pines. Aún así, eso puede ser suficiente para el cartel original, y es posible que no haya sido consciente de esta posibilidad, porque los pines "INT" tienen soporte API en el entorno Arduino, mientras que las interrupciones de cambio de pin no.

Aquí hay un código bastante elaborado para adjuntar a las interrupciones de cambio de pin

Podría usar un controlador de interrupción programable (PIC) como el 82C59A . Se conectará en cascada si necesita más de las ocho interrupciones que proporciona. Es un poco de la vieja escuela, pero creo que manejará todos sus requisitos. De estas diapositivas de conferencias :

Diagrama de bloques de 82C59A

  • El procesador host lo trata como un dispositivo periférico.
  • Está configurado por el procesador de host para seleccionar funciones.
  • Chip Select se usa nuevamente para abordar el 82C59A cuando es necesario.
    • A0 dirección selecciona diferentes palabras de comando dentro del 8259
  • EN T y yo norte T A ¯ ared utilizado como interfaz de protocolo de enlace.
    • EN T la salida se conecta a la INTRO pin del maestro y está conectado a un pin IR maestro en un esclavo
    • En un sistema con maestro y esclavos, solo el maestro yo norte T A ¯ la señal está conectada.
  • Entradas de interrupción infrarrojos 0 a infrarrojos 7 se pueden configurar como entradas sensibles al nivel o activadas por flanco . Las entradas activadas por flanco se activan en las transiciones de 0 a 1.
  • Interfaz en cascada CAS 0 - CAS 2 y S PAG ¯ / mi norte ¯ :
    • Interfaz en cascada CAS 0 - CAS 2 llevar la dirección del esclavo a ser atendido.
    • S PAG ¯ / mi norte ¯ :=1 selecciona el chip como maestro en modo cascada.

Actualmente producido por Intersil y en stock en Digikey .

Usaría un expansor de E/S como el MCP23008 o el MCP23017 . Ambos tienen versiones SPI e I 2 C; las interrupciones se pueden configurar (sensible al borde, sensible al nivel) para cada entrada.

Los expansores de E/S de Semtech también tienen un precio razonable y son flexibles, aunque solo tienen paquetes QFN, por lo que los chips MCP son más fáciles de probar.

Sé que esta respuesta es un poco tardía, pero la respondo para los lectores tardíos de esta pregunta.

La versión de software de agregar más interrupciones sería hacer una "Interrupción de cambio de pin" . Hay bibliotecas para ello que permiten que cualquier pin pueda activar una interrupción porque ATMega es capaz con un poco de codificación inteligente.

En realidad, esto podría ser útil como respuesta, si contiene alguna explicación/código de muestra sobre cómo implementar interrupciones de cambio de pin y cómo usarlas para el propósito de la pregunta.
Si bien el AVR tiene interrupciones de cambio de pin para todos los pines, la pregunta original dice que "no hay suficientes pines en el Atmel". Eso significa obtener otro controlador o un expansor de E/S.