Paso 9: Interrupciones y doble búfer
A 22 Khz un byte de datos de audio se genera cada ms 0,045
512 bytes (el tamaño del búfer) se lee en ms 2,08.
Así que el buffer puede no leer en la SDCard en un escritura ciclo.
Sin embargo se escriben 512 bytes en el puerto de 23.22ms.
Lo único que tenemos que hacer es configurar un archivo nuevo Lee cada vez que se vacía el búfer de y tenemos tiempo suficiente para obtener los datos antes de un nuevo bloque de datos se requiere... Suponiendo que utilizamos dos buffers, uno vaciado, llenamos otra.
Se trata de doble búfer.
El archivo a leer será frenado por la interrupción repetida, pero va hacer.
.
Tengo dos tampones 512 bytes setup se llama bufa y bufb.
Si es cierto la bandera ya leemos de porta si no que leemos de portb
Cuando llega a la posición del búfer (bufcount) el tamaño del búfer (BUF_SIZE 512) ponemos una bandera llamada readit en true.
La rutina bucle vacío busca esta bandera y comienza un bloque de lectura:
{if(readit)}
Si (! ya) {}
iniciar bloque SDCard leer a bufa
tempfile.Read (bufa, BUF_SIZE);
} else {}
iniciar bloque SDCard leer a bufb
tempfile.Read (bufb, BUF_SIZE);
}
readit = false;
}
Cuando haya terminado la rutina banderas readit = false.
Dentro de la rutina de interrupción debemos comprobar que el bucle vacío ha terminado marcando si readit == false.
Siendo este el caso nos señal que otro Lea es necesario marcar esta ya para cambiar amortiguadores.
Si todavía está leyendo la tarjeta SD tenemos que seguir una lectura (contador--; bufcount--;) y salir de la interrupción a intentarlo más tarde. (Clic en la señal de salida de audio implica que esto ha ocurrido).
Cuando todos los datos se lee la interrupción se cancela, el puerto el valor medio del voltaje de 128 y el archivo de audio a la posición cerrado.
.
Antes de ejecutar el script de dac2.ino por primera vez, ajuste el volumen al 50%. Esta va a ser demasiado fuerte, pero es mejor que 100%!
Si su control de volumen funciona a la inversa, intercambiar los cables en los extremos opuestos del potenciómetro de 10K.
Me dejan saber cómo suena.