[zxspectrum] Re: Logic Analyzer

  • From: Luca Alimandi <luca.alimandi@xxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Fri, 28 Nov 2014 23:32:17 +0100

Enrico Maria Giordano ha scritto:


Il 28/11/2014 08:01, Luca Alimandi ha scritto:

Ecco il link per chi vuole provare a scaricarlo:

https://drive.google.com/file/d/0B2gTtPKDTuD_Y3VpSWs1YUlGbmc/view?usp=sharing

Fatemi sapere se questa volta va!

Sì, ora funziona! :-)

Come devo fare per vederlo in azione?

EMG

Allora, comincio a scrivere qualche cosa al volo, ma spero prima o poi di scrivere un manualetto per l'utente, magari con degli screenshot (roba professionale! ;-) ) ...

Quando il programma parte, potete subito premere il *tasto X *per leggere una *mini-schermata di help* (in inglese...) dove sono riassunte le *funzionalità *e i *tasti *da premere per cambaire i *parametri*, *avviare *la scansione e *salvare *o *caricare *un file con i campioni acquisiti (per afere eventualmente degli studi successivi...). Per *uscire dal programma *e tornare al Basic, *premere Q *(e confermare con Y).

In primis et ante omnia, corbezzoli!, a che serve?
Lo scopo è quello di utilizzare lo Spectrum come un *logic analyzer*, cioè come uno strumento per catturare dei segnali digitali e poi visualizzarli con calma sullo schermo, per evidenziare i tempi in cui avvengono i cambiamenti di stato di ciascun segnale. In pratica si comporta in modo simile ad un oscilloscopio, solo che memorizza i campioni in un'unica, lunga passata, e poi permette di andare avanti e indietro tra i campioni muovendosi sull'asse dei tempi.

Per campionare segnali esterni, utilizzo delle *porte di I/O* che normalmente sullo Spectrum (direttamente o tramite delle interfacce) possono essere collegate a dei circuiti digitali. Nella fattispecie possiamo acquisire *4 segnali o "canali"* campinando fino a *16384 campioni*.*
*Le *porte *che al momento è possibile usare sono (indirizzi decimali):

*31*    = Kempston Joystick oppure Disciple Joystick 1
*254*   = Mic Input (CH 1)  oppure Disciple Joystick 2
*61438* = 128+2 Joystick 1  oppure tasti 0, 9, 8 e 7
*63486* = 128+2 Joystick 2  oppure tasti 1, 2, 3 e 4.

Normalmente il bit 0 della porta viene inviato sul canale 1, il bit 1 sul canale 2, il bit sul canale 3 e il bit 3 sul canale 4. Nel caso si sia scelta la *porta 254 *(Mic input) il bit 5 viene inviato sul *canale 1*. Fino ad ora non ho potuto sperimentarlo sul campo per cui do per scontato che funzionino, ma non lo posso dare per certo... Lo confermerò quando potrò (e spero presto!) provarlo su uno Spectrum "vero"!... Per il momento ho fatto delle semplici prove utilizzando le porte 61438 (premendo i tasti 0, 9, 8 e 7) e 63486 (premendo i tasti 1, 2, 3 e 4).

Per collegare le *porte reali* ad un *circuito *è possibile *autocostruirsi un cavo* che da una parte è collegato ad un *connettore Canon DB9* (quelli che venivano usati per l'RS232) e *dall'altro 5 cavetti *terminanti con dei *coccodrilli *(clips), del tipo che si usavano per collegare, ad esempio, le alimentazioni ai circuiti elettrici. 4 sono per i segnali ed uno per la massa.

Più avanti vi fornirò uno *schema elettrico *e delle *foto *di uno che feci anni e anni fa (l'ho riprovato al volo con dei comandi IN da Basic sul +2 e va ancora alla grande!)

Il connettore DB9 lo si collega poi ad una delle porte Joystick della Disciple o alla porta del Joystick Kempston (per chi ha quelle interfacce). Per chi ha un 128+2 può usare le sue porte Joystick. Per altri modelli potrebbero funzionare altre porte, ma non ho sperimentato. Mi pare, ma non sono sicuro, che il 128K abbia qualcosa di simile al +2, ma forse con connettori non standard...
In ogni caso potete fare prima delle *prove con la tastiera*.
Per cambiare la porta utilizzata premere il *tasto P*.

Visto che noi umani non siamo dei fulmini in quanto a velocità rispetto alle macchine, in questo caso occorre *campionare con frequenze piuttosto basse*, diciamo da 10 Hz a 1 KHz. Oltre sarebbe talmente rapido e breve che non si fa in tempo a vedere quasi nulla! Le frequenze di campionamento possono essere selezionate tra *10 Hz, 100 Hz, 1 KHz, 10 KHz e 100 KHz.* Può sembrare 100 KHz rappresentino una frequenza di campionamento bassa (per l'audio si usa normalmente 44 KHz!...) ma siamo ai limiti gestibili in LM con il clock dello Spectrum a 3,5 MHz (ovviamente si si vuole prendere la più alta frequenza possibile che sia multiplo di 10!).
Per cambiare la frequenza di campionamento premre il *tasto F*.

Scelta la porta e la frequenza, è possibile *avviare l'acquisizione* premendo il *tasto ENTER*. La scansione si ferma *automaticamente *quando vengono campionati tutti i 16384 campioni, oppure può essere *interrotta manualmente* premndo di nuovo *ENTER*.

Nella parte più bassa dello schermo, in colore blu, è riportata una scala con il numero di campioni numerati da 0 a 16384, in passi di 2048 campioni. Appena sopra i numeri, quando si avvia il campionamento, si vedrà una linea che parte da zero e si allunga man mano che i campioni vengono acquisiti. Questa vi darà un'idea visuale sia del progresso del campionamento, sia del numero di campioni fin'ora acquisiti. Tenete presente che con frequenze sotto i 1 KHz il campionamento si fa più lento. A 10 Hz sembra quasi che non procede, ma ci mette solo un sacco di tempo. Ho comunque inserito anche questa frequenza per catturare eventi molto lenti nel tempo

Ancora poco sopra una piccola *lineetta *rappresenta (in una pseudo-proporzione) *il blocco di campioni *attualmente mostrato sulla parte alta dello schermo.

*Finita l'acquisizione*, infatti, il *numero di campioni acquisiti *viene mostrata sulla riga in blu (Samples > *Captured*) e si può iniziare la *fase di analisi*, cioè spostarsi avanti e indietro in blocchi di campioni per evidenziare gli istanti in cui avvengono le transizioni 1 -> 0 e 0 -> 1 dei vari segnali. Lo *spostamento *avviene premendo il *tasto J *(verso *sinistra*, cioè verso il primo campione) e *il tasto K* (verso *destra*, cioè verso tempi crescenti (verso l'ultimo campione acquisito). Premendo i *tasti H e L* rispettivamente ci si posiziona sul *primo blocco* di campioni e sull'*ultimo*.

Nella parte bassa, in *blu*, sulla destra viene mostrato il *range di campioni *visualizzato (*From - To*).

E' possibile *cambiare lo Zoom* dei campioni mostrati premendo *il tasto Z*, passando così dal valore *x1, *a *x2, *poi a *x4 *e infine a *x8*. Premendo ancora Z si torna a x1. In tal modo possono essere visualizzati meglio e confrontati tra loro eventi che durano un solo campione o pochi campioni. Il numero dei *campioni visualizzati* cambia con il valore di Zoom. Con *Zoom = x1*, l'intera schermata mostra un blocco di *512 *campioni; con *Zoom = x2* i campioni mostrati diventano *256*, e poi *128* per Zoom = *x4* e infine *64* per Zoom = *x8*.

Sotto i quattro *diagrammi temporali *(in verde) che rappresentano i *4 canali*, c'è l'*asse dei tempi*, in cui i valori di riferimento dei tempi vengono aggiornati sulla base del movimento verso destra e verso sinistra e in base al valore di Zoom.

Con il *tasto S* è possibile *salvare i campioni acquisiti* su un *file *(per ora solo su *cassetta*...), mentre con il *tasto L *è possibile *ricaricare in memoria* i campioni da un file precedentemente salvato. Se non si specifica un nome (lasciando vuota la stringa) verrà caricato il primo file trovato. Insieme ai campioni, vengono *salvate *anche *la porta *usata per il campionamento, la *frequenza di campionamento* e il *numero di campioni*, in modo che al caricamento vengano mostrati i giusti intervalli temporali.

Infine è possibile *cancellare *il contenuto della *memoria *(cioè i campioni finora acquisiti) premendo il *tasto C* (Clear).

Direi che per il momento è tutto!!!
Aggiungo solo che nelle mie intenzioni, come upgrade futuri, ci sono la possibilità di far partire l'acquisizione in modo automatico sulla transizione di uno dei quattro segnali ("Auto-Triggering"), e quella di impostare dei marker per la misura degli intervalli di tempo (queste sono funzionalità tipiche dei log analyzer commerciali...).

Iniziate a fare qualche prova (magari solo con la tastiera, così lo potete fare anche su un emulatore! Più avanti vorrei anche fornirvi la descrizione dettagliata del *listato assembler*. Mi pare un'ottima occasione per fare un ripasso sullo Z80! E poi siamo nell'era dell'Open Source, no?! (Beh, in questo lo Spectrum forse era un pioniere gia 30 anni fa! ;-) )

Fatemi sapere come va, ed anche le vostre impressioni sul programma.
Garzie :-))





--

|_ /-\

Other related posts: