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.
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).
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.