Alla scoperta dei D.S.P. Sesta puntata – 3

Alla scoperta dei D.S.P

Provate ora a collegare un microfono alla presa d’ingresso della scheda DSP e pronunciate qualche parola, vedrete muoversi tutte le linee. I trattini rossi che sovrastano le linee bianche rappresentano i picchi raggiunti da queste ultime.

Nello schermo in basso troviamo tre lettere A, R e Q che indicano i possibili comandi da impartire allo strumento; queste lettere coincidono rispettivamente con la scelta del tipo di campionamento, il reset del programma e l’uscita. Premendo il tasto “A” noterete che le linee bianche si muovono più lentamente e che più aumenterà il valore scritto in fianco alla voce AVERAGE più il movimento delle righe bianche sarà lento. Ciò avviene poiché i valori campionati dal DSP, prima di essere visualizzati, verranno mediati tra loro in modo da aggiornare la schermata video ogni 2, 4, 8 frame.

Premendo il tasto R è possibile resettare il programma, mentre premendo Q l’esecuzione viene terminata. Con questo analizzatore di spettro è possibile, ad esempio, vedere quali frequenze compongono, la nostra voce rispetto a quella di un nostro amico oppure vedere quanto disturbo contiene un segnale elettrico. In ogni caso occorre ricordare che la massima ampiezza del segnale in ingresso non deve superare i 6 volt e la frequenza gli 8 Khz. Se la natura del segnale da misurare è di dubbia provenienza è sempre consigliabile disaccoppiare quest’ultimo dalla scheda del DSP onde evitare di danneggiarla.

Qualora applicando un microfono alla scheda e parlando in quest’ultimo non vedrete muoversi alcuna riga dello strumento dovrete interporre tra la scheda del DSP e il vostro microfono un amplificatore per aumentare l’ampiezza del segnale. Passiamo ora ad analizzare il programma sorgente ovvero quello scritto in assembler (Spec50.asm). Allo scopo, utilizziamo un qualsiasi editor per MS-DOS per visualizzarne il listato.

;**************************************************************************
;SUBROUTINE INIT_S - Inizializza buffer dei dati
;*************************************************************************
Init_S:
LAR AR6,#_D_base ;Carica indirizzo D BASE in AR6
LAR AR7,#511 ;Carica in AR7 il valore 511
MAR *,AR7 ;Seleziona il registro AR7
CLRC INTM ;Abilita interrupt per ricevere dati
FILL:BANZ FILL,*,AR7 ;Resta in attesa di aver caricato
;tutti i dati
SETC INTM ;Disabilita gli interrupt
LAR AR5,#_B_base ;Carica AR5 con indir. BASE B
LAR AR6,#_D_base ;Carica AR6 con indir. BASE D
LAR AR7,#255 ;Carica AR7 con il valore FF hex
MAR *,AR6 ;Seleziona registro ausiliario AR6
FILLX:
LACC *+,0,AR5 ;Carica in Acc il valore contenuto
;all’indirizzo presente in AR6,
;incrementa il suo contenuto
;e utilizza AR5
SACL *+,0,AR7 ;Salva Acc nella locaz. memoria
;indicata da AR5, incrementa il
;suo valore e passa al reg. AR7
BANZ FILLX,*-,AR6 ;Esegui questa operazione
;fino ad azzerare il contenuto
;del registro
LAR AR7,#255 ;Carica AR7 con FF hex
LAR AR5,#_D_base ;Carica l’indirizzo di base in AR5
MAR *,AR6 ;Seleziona AR6
FILLY:
LACC *+,16,AR5 ;Carica Acc con il contenuto
;spostato di 16 posti della prima
;locazione di memoria specificata
;dal registro AR5 e incrementa
;il suo valore
SACH *+ ;Memorizza la parte alta del
;nuovo indirizzo e incrementa AR5
SACL *+,0,AR7 ;Memorizza la parte bassa di Acc
;incrementa il reg. AR5 e
;seleziona il reg. AR7
BANZ FILLY,*-,AR6 ;Salta alla label Filly fino a quando
;il registro AR7 non è 0
RET ;Ritorno dalla subroutine
;**************************************************************************
;**************************************************************************
;SUBROUTINE TO_HOST - Trasmetti dati al PC
;**************************************************************************
TO_HOST:
LACC #80h ;Carica Acc con il valore 80 hex
CALL BCXMIT ;Chiama la subroutine di sincronizz.
CALL BRECV ;Chiama la subroutine di attesa
;per l’invio dei primi 16 bit
SUB #01Bh ;Sottrai 1B hex dall’acc.
BCND TO_HOST,NEQ ;Salta all’inizio della subroutine
;se acc. diverso da 0
LAR AR3,#_D_base ;Carica in AR3 l’indirizzo di
;partenza del nuovo array
LAR AR5,FFT_S/2-1 ;Carica AR5 con il valore
;determinato dall’espressione
MAR *,AR3 ;Seleziona il registro AR3
more2:
LACC *+ ;Carica Acc. con il valore
;presente all’indirizzo specificato
;da AR3 e incrementa il suo valore
MAR *+ ;Incrementa AR3
RPT #7 ;Ripeti l’istruzione seguente 7 volte
SFR ;Muovi contenuto di Acc a destra
CALL XMIT ;Chiama subroutine di
;trasmissione seriale
MAR *,AR5 ;Seleziona registro AR5
BANZ more2,*-,AR3 ;Salta alla label MORE2 se il
;valore di AR5 è diverso da 0
RET ;Ritorno dalla subroutine
;**************************************************************************

Il kit è disponibile da Futura Elettronica

STAMPA     Tags:,

Leave a Reply