Paso 4: Configurar la interrupción para el hardware activado versión
Este método es muy similar a la versión de software.
Accionar se maneja diferentemente.
Puerto digital que dos deben estar conectado a la entrada analógica 1, para que funcione.
Esencialmente si no disparo está seleccionada, se habilita la interrupción del adc y datos se capturan inmediatamente. Si se selecciona la activación de una interrupción en el puerto digital 2 se utiliza para permitir la interrupción en el puerto 1 del adc.
Puerto digital 2 se puede configurar para leer señales analógicas y generar una interrupción subiendo o bajando los bordes de los datos. Es muy rápido.
Mi rutina de interrupción se llama gotinterrupt y como estoy usando digital puerto 2 el id de interrupción 0.
byte const ExtInterrupt = 2;
pinMode(ExtInterrupt,INPUT);
attachInterrupt (0, gotinterrupt, RISING);
attachInterrupt (0, gotinterrupt, caer);
.
La bandera activa controles si la interrupción del puerto digital 2 comienza la interrupción de puerto analógico 1. Cuando es false la interrupción comienza la interrupción adc cuando detecta un borde en la entrada analógica.
.
igual el software interrumpir código hasta aquí...
SBI(ADCSRA,Aden); permiten ADC
entonces...
Si (gatillo == 0) {}
SBI(ADCSRA,ADSC); iniciar medidas de ADC en interrupción
startTime=micros();
} else {}
permite la interrupción pw2 iniciar la interrupción del adc
activa = false;
}
SEI(); habilitar interrupciones
.
El código de interrupción
1) la interrupción del puerto 2 es alimentado por gotinterrupt
Esta interrupción se activa por un borde positivo o negativo en el puerto 2.
No hace nada hasta que es falso.
void gotinterrupt() {}
Si (! activa) {}
activa = true;
SBI(ADCSRA,ADSC); iniciar medidas de ADC en interrupción
startTime=micros(); starttime récord para el cálculo del intervalo
}
}
2) interrumpir el adc es alimentado por ISR(ADC_vect)
Bufcount variable almacena la posición en el búfer, cuyo tamaño es BUF_SIZE (= 1000)
Los datos se almacenan en lugares bufa(0) a bufa(999)
Cuando el buffer está lleno writeit bandera está verdadera y el adc está deshabilitado. (cbi(ADCSRA,ADEN);)
.
Rutina de interrupción del ADC
Esta es la clave para el programa!
{ISR(ADC_vect)}
bufa [bufcount] = ADCH;
bufcount ++; contador de búfer de incremento
Si (bufcount == BUF_SIZE) {}
CBI(ADCSRA,Aden); desactivar la ADC
EndTime=micros(); endtime récord para el cálculo del intervalo
writeit = true; bandera que una escritura es necesario
}
}