Múltiples interrupciones con Arduino

Hola,
Estoy haciendo un proyecto con un Arduino Nano en el que voy a necesitar 4 o 5 interrupciones para poder hacer caso rápidamente a la activación de varios pulsadores.
Mi idea es conectar todos esos pulsadores a un registro de desplazamiento 74HC165 (también ando justo de pines en el Arduino) y en paralelo conectarlos todos a la entrada de una puerta OR, de tal modo que la salida de la puerta OR me active la interrupción.
Una vez activada la interrupción, llamaría al código que me lee las entradas del 74HC165.
Para las puertas OR he comprado un 74HC32. Al buscar por internet, me sale por todas partes el 74HC4078 que parece que ya está fuera de mercado. Existe alguna otra alternativa mejor?

No sé si esta es la mejor solución de usar las puertas OR es correcta o estoy inventando algo que ya se ha resuelto de una manera más sencilla. Conocéis alguna alternativa?

Adjunto esquema para 3 pulsadores, aunque pienso usar más.


PD: sé que hay una librería (PinChange Interrupt) que permite usar interrupciones un todos los pines, pero esta solución, por lo que he leido, da problemas y además me consumiría 1 pin por cada pulsador, cosa que con la solución que yo propongo no ocurre.
 

Adjuntos

  • Muchas interrupciones_esquemático.jpg
    Muchas interrupciones_esquemático.jpg
    50.8 KB · Visitas: 27
Última edición:
Se me ocurre que puedes usar el PCF8574 (8 Bits) o el PCF8575 (16 Bits)
Ambos se controlan por I2C y cuentan con salida de interrupción por cambio de estado.
Otra opción sería el MCP23017 pero es más sofisticado.
 
Se puede hacer por hardware como vienen hablando, o por software.

Por software me refiero a usar cualquier entrada disponible y hacer un escaneo de las entradas cada X tiempo (100 ms por ejemplo). Lo más simple a considerar es hacer:
Código:
while(1) { //o el equivalente que sea que use Arduino 
  LeerPulsadores();   
  if (cambioEstadosPulsadores() ) {     
    ProcesarPulsadores(); //o actualizar sistema, llamar funciones, etc   
  }    

  //otro codigo no relacionado con los pulsadores, que no tarde mucho!!! 
}

Claro... después esta el tema de los rebotes (como son pulsadores...), pero es para dar una idea lo más básica posible.

Ah sí, y todo el código que se ejecute dentro del while(1) va a tener que tomar menos tiempo que el tiempo de escaneo (lectura) de los pulsadores, sino vas a apretar el pulsador y el sistema no lo va a "ver". Bueno, se puede llamar más de una vez por ciclo a LeerPulsadores.

Dependerá de si estás más cómodo poniendo más cables e integrados o escribiendo más código.
 
Última edición:
Eso se llama polling, y es por definición la antiinterrupcion.
Aunque ciertamente gastar una interrupción por pulsador es un poco exagerado, o no...
Los AVR permiten interrupción por cualquier pin aunque arduino en principio no lo soporta, seguramente exista una librería para ello, hace tiempo leí sobre esto y estaba a medias la cosa.



 
Atrás
Arriba