Costruisco questi sequencer musicali .
Solo che non è esattamente un sequencer, è un'interfaccia fisica per un sequencer. Il sequencer è un'applicazione che gira su un laptop a cui si collega il sequencer, questa cosa consente all'utente di realizzare loop di batteria al volo. È piuttosto divertente, ma richiede un laptop perché il sequencer non è "integrato".
Quello che mi piacerebbe è fare il sequenziamento a bordo del mio dispositivo.
Ora supponiamo che io sappia come risolvere la conformità di classe per la connettività USB MIDI e supponiamo anche che io possa capire come collegare un arduino per inviare note MIDI da una porta DIN a 5 pin. Ciò di cui sono più preoccupato è la deriva del tempo nel tempo a causa di un tempo incoerente in quantità minime su ogni esecuzione del loop degli eventi.
Alcune cose che so:
Non dovresti fare affidamento sul
delay()
controllo del tempo loop. Il ritardo interrompe tutte le operazioni del firmware e questo non può funzionare perché devo eseguire il polling dell'interfaccia utente fisica per le modifiche mentre la sequenza è in esecuzione.I calcoli basati su
millis()
sono migliori perché il firmware può continuare a funzionare e agire quando è trascorso un determinato conteggio.Sebbene nessuno dei miei controlli fisici stia attivando routine di interruzione, alcune operazioni possono ritardare l'
loop()
esecuzione del main . Se progetto una funzione che attende l'input dell'utente, ciò può ovviamente causare un problema di mancato rispetto di una "scadenza" se ilmillis()
conteggio è finito. So che questo problema è di mio disegno ...
Domande:
R. L'arduino basato su AVR è un microcontrollore appropriato per eseguire il polling di un'interfaccia utente ed eseguire un loop di temporizzazione mission-critical? So che c'è un Arduino basato su ARM ora che è molto più veloce. Un Teensy 3.0 sarebbe un'alternativa migliore? Entrambe sono schede da 3,3 V, quindi è un'altra serie di problemi con cui lavorare ... ma per ora lo ignorerò.
B. Dovrei dividere l'attività in due microprocessori? Uno per gestire il polling e l'aggiornamento dell'interfaccia utente e uno per il loop di temporizzazione mission-critical.
c. Qualcos'altro?
Il mio obiettivo principale è non dover usare affatto un computer. Voglio anche calcolare lo swing, ma in questo caso lo swing non significa nulla se non ho un tempo bloccato e con tempismo preciso. Grazie per il tuo consiglio!
noInterrupts();
ferma il jitter, ma ferma anche tutti gli interrupt desiderati