Construyo estos secuenciadores de música .
Soloquenoesexactamenteunsecuenciador,esunainterfazfísicaparaunsecuenciador.Elsecuenciadoresunaaplicaciónqueseejecutaenunacomputadoraportátilalaqueseconectaelsecuenciador,estopermitealusuariohacerbuclesdebateríasobrelamarcha.Esbastantedivertido,perorequiereunacomputadoraportátilporqueelsecuenciadornoestá"a bordo".
Lo que me encantaría es hacer la secuenciación en mi dispositivo.
Ahora supongamos que sé cómo resolver el cumplimiento de clase para la conectividad MIDI USB, y también supongamos que puedo averiguar cómo cablear un arduino para enviar notas MIDI desde un puerto DIN de 5 pin. Lo que más me preocupa es la variación del tempo a lo largo del tiempo debido a un tiempo inconsistente en cantidades de minutos en cada ejecución del bucle de eventos.
Algunas cosas que sé:
-
No debes confiar en
delay()
para controlar el ciclo de tempo. La demora detiene todas las operaciones del firmware, y eso no puede funcionar porque necesito sondear la interfaz de usuario física para detectar 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 conteo. -
Aunque ninguno de mis controles físicos está activando rutinas de interrupción, algunas operaciones pueden retrasar la ejecución de
loop()
principal. Si diseño una función que espera la entrada del usuario, eso obviamente puede causar un problema de falta de una "fecha límite" para actuar si el recuento demillis()
está por encima. 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 tiempo crítico? Sé que hay un Arduino basado en ARM ahora que es mucho más rápido. ¿Sería un Teensy 3.0 una mejor alternativa? Ambos son tableros de 3.3 V, por lo que es otro conjunto de problemas con los que trabajar ... pero lo ignoraré por ahora.
B. ¿Debo dividir la tarea en dos microprocesadores? Uno para manejar el sondeo y la actualización de la interfaz de usuario y otro para el ciclo de tiempo 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, swing no significa nada si no tengo un tempo preciso bloqueado y sincronizado. Gracias por tu consejo!