Pianola

Il DSP

 

Scheda e ambiente di sviluppo

Texas Instruments C6713 DSP Development Board con DSP TMS320C6713 è la scheda utilizzata per la realizzazione del progetto. Dispone del DSP Texas Instruments TMS320C6713, un dispositivo che opera ad una frequenza massima di 225 MHz ed è in grado di computare fino a 1800 MIPS e 1350 MFLOPS. La scheda presenta 512 kword di memoria Flash e 16 MB di memoria SDRAM, quattro jack audio da 3.5mm per microfono, line in, altoparlante e line out e di un codec stereo a 24 bit. La comunicazione con la scheda avviene via USB grazie all'interfaccia JTAG presente sulla scheda stessa.

Foto scheda DSP

Texas Instruments C6713 DSK Code Composer Studio è l'ambiente di sviluppo fornito con la scheda. Comprende il software per la compilazione, il linking ed il debugging del codice sorgente del progetto realizzato. Sono presenti anche un tool di diagnostica per verificare il corretto funzionamento della scheda e numerose opzioni per la visualizzazione di segnali campionati (nel tempo e nella frequenza).

Il programma per il DSP

L'algoritmo che abbiamo implementato nel DSP è molto semplice. Il DSP riceve due ingressi: l'impulso proveniente dal trasmettitore, che indica la variazione di frequenza del segnale trasmesso (int04), e il segnale proveniente dal ricevitore (int05).

Gli interrupt 04 e 05 si attivano al fronte di salita del segnale. Dunque quando si attiva l'interrupt 04 significa che c'è stata variazione di frequenza al trasmettitore ed è necessario far partire il conteggio del tempo di volo. I valori dei periodi letti al ricevitore iniziano a essere accumulati in una variabile. Quando si attiva l'interrupt 05, significa che è iniziato un periodo del segnale ricevuto: la prima volta il conteggio del Timer1 viene avviato, partendo da zero; le successive il valore del Timer1 viene letto e assegnato alla variabile che contiene il periodo corrente, dopo che il valore prima contenuto in tale variabile è stato assegnato alla variabile che contiene il periodo precedente. Se si è avuta la variazione di frequenza (dalla frequenza più bassa a quella più alta) al ricevitore, cioè se il periodo precedente è maggiore di una certa soglia e il periodo corrente è minore, anziché sommare il valore del periodo alla variabile corrispondente al tempo di volo, si arresta l'accumulo dei periodi. Il valore contenuto allora nella variabile corrisponde alla distanza temporale fra trasmettitore e ricevitore.

Un aggiustamento è necessario nell'interrupt 04, che si attiva al fronte di salita dell'impulso relativo al trasmettitore: appena arriva l'impulso dal trasmettitore, bisogna leggere nel Timer1 il valore dello sfasamento temporale tra l'arrivo dell'impulso e l'ultimo fronte di salita che si è avuto al ricevitore. Ciò è necessario per eliminare l'incertezza (di ampiezza un periodo) nella lettura del primo periodo: tale incertezza che dipende da quando è arrivato l'impulso dal trasmettitore rispetto alla scansione dei periodi a frequenza 38,2 / 41,5 kHz. Infatti, da quando arriva l'impulso relativo al trasmettitore, si inizia ad accumulare il valore dei periodi al ricevitore a partire dal fronte di salita successivo all'arrivo dell'impulso. In questo modo però si perderebbe il tempo trascorso tra l'arrivo del impulso e il primo fronte di salita che fa partire l'accumulo dei vari periodi. Per evitare ciò, alla variabile corrispondente al tempo di volo si somma il valore di un periodo meno il valore letto nel Timer1 all'arrivo dell'impulso, che è proprio la quantità che altrimenti si perderebbe.

Poiché la distanza spaziale può essere ottenuta moltiplicando la differenza di tempo per la velocità del suono, il valore del tempo di volo ottenuto consente immediatamente di determinare qual è il tasto che l'utente vuole selezionare e dunque la corrispondente nota che deve essere suonata. Naturalmente, per ottenere la distanza dell'emettitore dall'inizio della tastiera, è necessario tenere conto di un offset, pari alla distanza tra il ricevitore e l'inizio della tastiera.

Ora vengono creati i campioni destro e sinistro: sono valori discreti di una sinusoide con la frequenza opportuna, che vengono emessi dal DSP, tramite l'interrupt 11, alla frequenza di campionamento scelta (8 kHz).

Nella versione alternativa del programma, che prevede la presenza di un pulsante che deve essere premuto per ottenere il suono, in modo del tutto equivalente alla pressione del tasto su un pianoforte, c'è la presenza aggiuntiva dell'interrupt 06, che abilita l'emissione di una nota di durata predeterminata solo in seguito alla pressione del pulsante.