Yo construyo estos secuenciadores de música .
Solo que no es exactamente un secuenciador, es una interfaz física para un secuenciador. El secuenciador es una aplicación que se ejecuta en una computadora portátil a la que se conecta el secuenciador, esto le permite al usuario hacer bucles de batería sobre la marcha. Es bastante divertido, pero requiere una computadora portátil porque el secuenciador no está 'integrado'.
Lo que me encantaría es hacer la secuencia a bordo de mi dispositivo.
Ahora supongamos que sé cómo resolver el cumplimiento de la clase para la conectividad USB MIDI, y también supongamos que puedo descubrir cómo conectar un arduino para enviar notas MIDI desde un puerto DIN de 5 pines. Lo que más me preocupa es la deriva del tempo a lo largo del tiempo debido al tiempo inconsistente en cantidades de minutos en cada ejecución del ciclo de eventos.
Algunas cosas que sé:
No debe confiar en
delay()
controlar el bucle de tempo. La demora detiene toda operación del firmware, y eso no puede funcionar porque necesito sondear la interfaz física del usuario para ver los cambios mientras se ejecuta la secuencia.Los cálculos basados en
millis()
son mejores porque el firmware puede continuar funcionando y actuar cuando ha transcurrido un cierto recuento.Aunque ninguno de mis controles físicos está activando rutinas de interrupción, algunas operaciones pueden retrasar la
loop()
ejecución de la unidad principal . Si diseño una función que espera la entrada del usuario, eso obviamente puede causar un problema de perder una "fecha límite" para actuar si lamillis()
cuenta ha terminado. Sé que este problema es de mi propio diseño ...
Preguntas:
A. ¿Es el arduino basado en AVR un microcontrolador apropiado para sondear una interfaz de usuario y ejecutar un ciclo de sincronización de misión crítica? Sé que ahora hay un Arduino basado en ARM que es mucho más rápido. ¿Teensy 3.0 sería una mejor alternativa? Ambas son placas de 3.3V, así que ese es otro conjunto de problemas con los que trabajar ... pero lo ignoraré por ahora.
B. ¿Debería dividir la tarea en dos microprocesadores? Uno para manejar el sondeo y actualizar la interfaz de usuario y otro para el ciclo de sincronización de misión crítica.
C. ¿Algo más?
Mi objetivo principal es no tener que usar una computadora en absoluto. También quiero calcular el swing, pero en este caso, el swing no significa nada si no tengo un tempo bloqueado y preciso. ¡Gracias por su consejo!
noInterrupts();
detiene el jitter, pero también detiene todas las interrupciones deseadas.