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

7

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. Los problemas se producen porque necesito poder cambiar la condición de disparo de borde ascendente a borde descendente para algunas líneas en función de las condiciones, y algunas líneas seguirán siendo altas después de haber recibido servicio, por lo que un codificador de prioridad sufrirá la condición de que una prioridad más alta la interrupción enmascararía una prioridad más baja. 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 de la serie 7400 o similares, pero algo más exótico también estaría bien.

    
pregunta BD at Rivenhill

4 respuestas

3

Un Arduino Mega tiene "solo" 24 interrupciones de cambio de pin para sus 80 pines. Aún así, eso puede ser suficiente para el póster original, y puede que él no haya estado al tanto de esta posibilidad, porque los pines "INT" tienen soporte API en el entorno Arduino, mientras que las interrupciones de cambio de pines no lo hacen.

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

    
respondido por el microtherion
3

Puede usar un Controlador de interrupción programable (PIC) como 82C59A . Caerá en cascada si necesita más de las ocho interrupciones que proporciona. Es un poco anticuado, pero creo que manejará todos tus requisitos. De estas diapositivas de conferencias :

  

Diagrama de bloques de 82C59A

     
  • El procesador central lo trata como un dispositivo periférico.
  •   
  • El controlador del host lo configura para seleccionar funciones.
  •   
  • Chip Select se usa de nuevo para abordar el 82C59A cuando es necesario.   
    • \ $ \ text {A0} \ $ address selecciona diferentes palabras de comando dentro del 8259
    •   
  •   
  • \ $ \ text {INT} \ $ y \ $ \ overline {INTA} \ $ ared se utiliza como la interfaz de intercambio.   
      La salida de
    • \ $ \ text {INT} \ $ se conecta al pin \ $ \ text {INTR} \ $ del maestro y se conecta a un pin IR maestro en un esclavo
    •   
    • En un sistema con maestro y esclavos, solo la señal maestra \ $ \ overline {INTA} \ $ está conectada.
    •   
  •   
  • Las entradas de interrupción \ $ \ text {IR} _ {0} \ $ a \ $ \ text {IR} _ {7} \ $ se pueden configurar como sensible al nivel o Entradas activadas por el borde . Las entradas activadas por flancos se activan en transiciones de 0 a 1.
  •   
  • Interfaz en cascada \ $ \ text {CAS} _ {0} \ $ - \ $ \ text {CAS} _ {2} \ $ y \ $ \ overline {SP} \ $ / \ $ \ overline {EN} PS   
    • La interfaz en cascada \ $ \ text {CAS} _ {0} \ $ - \ $ \ text {CAS} _ {2} \ $ lleva la dirección del esclavo que se va a reparar.
    •   
    • \ $ \ overline {SP} \ $ / \ $ \ overline {EN} \ $: = 1 selecciona el chip como maestro en el modo en cascada.
    •   
  •   

Actualmente producido por Intersil y en stock en Digikey .

    
respondido por el embedded.kyle
3

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

    
respondido por el lhballoti
0

Sé que esta respuesta es un poco tarde, pero estoy respondiendo por cualquier lector tardío a esta pregunta.

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

respondido por el Steven McConnon

Lea otras preguntas en las etiquetas