Paso 9:40 kHz frecuencia de muestreo
Para configurar la interrupción es necesario copiar las siguientes líneas en la función setup():
cli (); //disable interrupciones
interrupción de timer0 sistema a 40kHz
TCCR0A = 0; / / todo TCCR0A registro para 0
TCCR0B = 0; / / única para TCCR0B
TCNT0 = 0; //initialize valor de contador a 0
compara Set match registrarse incrementos de 40khz
OCR0A = 49; / / = (16 * 10 ^ 6) / (40000 * 8) - 1 (debe ser < 256)
Activar modo de CTC
TCCR0A | = (1 << WGM01);
Establezca el bit CS11 para 8 prescaler
TCCR0B | = (1 << CS11);
habilitar interrupción de timer en comparación
TIMSK0 | = (1 << OCIE0A);
SEI (); //enable interrupciones
el contenido de la rutina de interrupción se encapsula en la siguiente función:
ISR(TIMER0_COMPA_vect) {//40kHz rutina de interrupción
}
Desea mantener la rutina de interrupción más corta posible, solamente las necesidades. Puede hacer todas sus otras tareas (comprobación de botones, encendido de leds, etc.) en el loop(). También tenga en cuenta que configurar interrupciones puede afectar otras funciones de Arduino como analogWrite y retraso.
En el código a continuación, utilizar la función de interrupción para enviar un nuevo valor de seno [] a PORTD a una velocidad de 40 kHz e incrementar la variable "t". Higos 1 y 2 muestran la salida (sin filtrar) del código en un osciloscopio. Podemos calcular la frecuencia como sigue:
frecuencia = (frecuencia de muestreo) / (pasos por ciclo)
frecuencia = 40.000 / 100 = 400 hz
a una frecuencia de muestreo de 40kHz que esperamos la duración de cada paso a ser:
duración de cada paso de la muestra = 1 / (frecuencia de muestreo)
duración de cada paso de la muestra = 1/40.000 = 25us
//Sine out w/ 40kHz sampling rate //by Amanda Ghassaei