Bueno, he logrado lo que quería y con una versión que lleva la cuenta discriminando hasta 10 useg dos entradas... tu dirás si es o no suficiente.
El esquema usando un 74hc4072 que tiene mejor tiempo de propagación que su versión CMOS 4072 a secas.
Aca expreso todo lo que te había sugerido anteriormente.
Se trata de 4 barreras representdas por los generadores de pulsos que luego describo en detalle.
Las 4 entradas van a un PORT yo use A0..A3 por comodidad pero puedes usar cualquiera.
También van a una compuerta OR que me gustó mas en tu sugerencia que la AND. Todo depende de como vengan los pulsos si Normal ALTO o Normal BAJO como yo los definí.
Bien, la OR se conecta al pin2 que es nuestra INT0.
Cada pulso en HIGH provoca el disparo de la interrupcción.
En la rutina se lee el puerto y se compara con un dato anterior (acá aun le falta algun detalle).
El valor anterior lo guardo cuando el flanco cae.
Según sea el valor leido uso un switch para incrementar cada contador.
El resto no merece explicación.
Este es el código
const byte interruptPin = 2;
volatile byte dato, datoAnt = 0;
volatile bool flag = false;
volatile unsigned int contador[4] = {0,0,0,0};
void setup() {
Serial.begin(115200);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), contadores, RISING);
attachInterrupt(digitalPinToInterrupt(interruptPin), contacero, FALLING);
DDRC = B00001111;
}
void loop() {
if (flag) {
char buffer[30];
sprintf(buffer, "%4d %4d %4d %4d", contador[0], contador[1], contador[2], contador[3]);
Serial.println(buffer);
flag = false;
}
}
void contadores() {
dato = PINC;
if (dato != datoAnt) {
switch(dato) {
case 1: contador[0]++;
break;
case 2: contador[1]++;
break;
case 4: contador[2]++;
break;
case 8: contador[3]++;
break;
}
}
flag = true;
}
void contacero() {
datoAnt = dato;
}
Los generadores de pulsos estan a 100Hz o sea cada 10 mseg con flancos de subida y bajada de 1useg
5 useg de nivel HIGH en 5V
Tambien cambie los tiempos en los que se muestran
Pulso 1 Start 10useg
Pulse 2 Start 20useg
Pulso 3 Start 4mseg
Pulso 4 Start 5mseg
Los pulsos tienen esta configuración

Se ve que todo lo que he descripto. Ancho del pulso 5 useg.
Los demás solo se desplazan en su arranque, para poder probar situaciones complicadas.
He capturado algunas situaciones para que veas como todos los contadores se incrementan.
Puedo hacer que Pulso1 y 2 se aproximen mas si quieres?
Aca se ve como funciona todo, a la izquierda el osciloscopio mostrando dos pulsos (1 y 2) proximos entre si, y sin embargo el si código no los pierde. No los puse suficientemente próximos como para solaparse.
Ahora me dirás si esto es lo que querías?

