venerdì 30 dicembre 2022

Controllo del ricevitore YAESU FRG-8800 con FLDIGI

FLDIGI è un programma sviluppato da David Freese W1HKJ ed altri radioamatori; essenzialmente è un modem che permette di operare via radio con una moltitudine di modulazioni e modi attraverso la scheda audio del PC.

Integra in sé anche un controllo degli apparati via CAT, rendendo completo ed automatico l'utilizzo della radio.

La descrizione ed il funzionamento dell'interfaccia hardware computer - radio è descritta in vari post nel mio blog.

Il programma FLDIGI permette di controllare il ricetrasmettitore oppure il ricevitore attraverso due modalità:

  • Controllo via RigCAT;
  • Controllo via HamLib.

Controllo via Hamlib

E' la modalità più utilizzata con questo programma. Essa usa la libreria HAMLIB ormai diventata uno standard: praticamente tutti i programmi che permettono il controllo via seriale di una radio ne dispone l'uso, a parte qualche rara eccezione.

Questa libreria interfaccia una notevole quantità di apparati diversi, integra tutti i comandi seriali da inviare alla radio e gestisce le risposte provenienti dalla stessa.

Permette anche il controllo dei più comuni rotori per antenne.


Per la configurazione, si seleziona la radio da controllare, si imposta la porta seriale e tutto dovrebbe funzionare.

Le Hamlib contengono le definizioni per i comandi dello Yaesu FRG-8800 in versione Untested. Ma sfortunatamente, con FLDIGI, non c'è modo di farle andare: il ricevitore non esegue alcun comando.

Controllo via RigCAT

Questa è una modalità personalizzabile. Vengono eseguiti dei file in formato xml, ovvero degli script in eXtensible Markup Language, nei quali vengono codificati tutti i comandi seriali della radio.


Un elenco ufficiale di questi files si trova all'indirizzo https://sourceforge.net/projects/fldigi/files/xmls/, ma qui purtroppo non si trova quello per FRG-8800.

Non resta altro che realizzarne uno.

Programmazione del file RigCAT

Il Rig Control CAT di FLDIGI non è altro che un parser di comandi seriali. Quando si lancia FLDIGI ed è stata configurata una radio con RigCAT, vengono eseguiti, quando richiamati dal software, i comandi inseriti nel file di configurazione xml.

Questo file adopera come formattazione un preciso standard: usa, per separare le singole informazioni, dei TAG del tipo

<tag>comando</tag>

I comandi non sono purtroppo tutti spiegati nel manuale on-line di FLDIGI, ne mancano diversi. L'elenco è disponibile presso l'indirizzo http://www.w1hkj.com/FldigiHelp/rig_xml_page.html.

Manca una descrizione del range di valori applicabili; manca infine soprattutto una descrizione di come questi comandi vengano eseguiti quando si avvia FLDIGI e si controlla una radio con questo metodo.

Per realizzare un file xml, l'autore consiglia di studiarsi i file xml pubblicati per le altre radio, crearlo quindi secondo le proprie esigenze e salvarlo con il nome della nuova radio.

Da quanto ho appreso dal manuale d'uso, fondamentalmente il file xml del RigCAT di FLDIGI è composto da queste sequenze di comandi:

  • Inizia sempre con il tag <RIGDEF>;
  • Una intestazione, con i tag <RIG>, <PROGRAMMER>, <STATUS> e <TITLE>;
  • Settaggio porta seriale;
  • <MODES>, definizione dei modi;
  • <BANDWIDTHS>, definizione della larghezza di banda passante;
  • <COMMAND>, un elenco di comandi;
  • <REPLY>, un parser delle risposte della radio;
  • Si chiude con </RIGDEF>.

Tra i comandi, vi sono <INIT> per inizializzazione della radio, <SETFREQ> con <SETMODE> per il settaggio di frequenza e modo e <GETFREQ> con <GETMODE> per ottenere la frequenza e modo come risposta dalla radio.

Ci sono pure alcuni comandi per l'impostazione e la lettura della potenza RF, per il set dello squelch e per la lettura dello S-Meter, oltre ad alcuni comandi per il debug.

All'avvio, il programma esegue un <INIT>, seguito da una richiesta di <GETFREQ> e di <GETMODE>.

I valori di frequenza e la codifica del modo restituiti dalla radio vengono letti da <REPLY>.

Se la radio non risponde entro un timeout preimpostato, il parser si ferma e chiude la comunicazione seriale. Quindi, se all'avvio <GETFREQ> non ottiene risposta, oppure <REPLY><FREQ> non restituisce il valore atteso, i comandi sembrano non funzionare più e la radio non reagisce come atteso.

Molto utile è il debug della seriale fornito nel menù Help. Per usarlo, inserire nell'xml dopo <RIGDEF> la stringa

<DEBUG>true</DEBUG>

Sin qui tutto bene, se non altro che l'FRG-8800 ha disponibile solo la linea RX data (Serial Input), vedi il precedente post. Quindi nessuna risposta può pervenire dalla radio. E quindi un file xml impostato in questo modo può non funzionare.

Ma c'è un modo per imbrogliare la lettura dalla radio: ho scoperto che basta istruire il programma in modo che la risposta REPLY contenga un dato a zero byte.

La codifica dei comandi dello Yaesu FRG-8800 è tratta dal manuale utente della radio:


Non è chiaro se il parser xml di FLDIGI preferisca avere come "codice di interruzione di riga" solo il Line Feed LF oppure la sequenza Carriage Return CR seguito da LF. Ho scritto la sequenza di comandi usando il programma gratuito Notepad++, scaricabile all'indirizzo

https://notepad-plus-plus.org/downloads/

ed ho usato la funzionalità testo Unix, che per interruzione di riga mette solo il LF. Il programma FLDIGI funziona sia sotto Windows® che Linux, quindi ci potrebbe essere un problema di compatibilità se l'xml non è scritto secondo lo standard Unix. Non ho verificato.

Possiamo allora scrivere la sequenza di comandi, che sarà la seguente:

        <RIGDEF>

Si inizia con questo tag. Segue poi l'intestazione:

        <RIG>Yaesu FRG-8800</RIG>

        <PROGRAMMER>
         Nome Cognome NOMINATIVO
         Tested by:  NOMINATIVO
        </PROGRAMMER>

        <STATUS>
         Beta
         Version: 1.00
         Date:  17 December 2022
        </STATUS>

        <TITLE>RigCAT - FRG-8800</TITLE>

Al posto degli spazi si può usare la tabulazione. E' importante chiudere sempre il tag aperto con il corrispondente </tag>. Andiamo poi a configurare la seriale:

        <ECHO>false</ECHO>
        <TIMEOUT>2000</TIMEOUT>
        <RETRIES>1</RETRIES>
        <WRITE_DELAY>5</WRITE_DELAY>
        <BAUDRATE>4800</BAUDRATE>
        <RTSCTS>true</RTSCTS>
        <ECHO>false</ECHO>
        <CMDPTT>false</CMDPTT>
        <STOPBITS>2</STOPBITS>
        <RTSCTS>false</RTSCTS>
        <POLLINT>500</POLLINT>

Definiamo qui i modi:

        <MODES>
         <ELEMENT>
          <SYMBOL>LSB</SYMBOL>
          <BYTE>01</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>USB</SYMBOL>
          <BYTE>02</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>CW-W</SYMBOL>
          <BYTE>03</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>CW-N</SYMBOL>
          <BYTE>0B</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>AM-W</SYMBOL>
          <BYTE>00</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>AM-N</SYMBOL>
          <BYTE>08</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>FM-W</SYMBOL>
          <BYTE>04</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>FM-N</SYMBOL>
          <BYTE>0C</BYTE>
         </ELEMENT>
        </MODES>

Non so se questa stringa è obbligatoria; <LSBMODES> dovrebbe includere tutti i modi disponibili nella radio che lavorano in banda laterale inferiore (LSB):

        <LSBMODES>
         <STRING>LSB</STRING>
        </LSBMODES>

Definiamo quindi l'INIT; viene richiamato all'avvio del programma e pone la nostra radio in modalita CAT:

        <COMMAND>
         <SYMBOL>INIT</SYMBOL>
         <SIZE>5</SIZE>
         <BYTES>00 00 00 00 00</BYTES>
        </COMMAND>

Questo comando non è documentato ma permette l'uscita dalla modalità CAT della radio quando si chiude il programma:
 
         <COMMAND>
         <SYMBOL>CLOSE</SYMBOL>
         <SIZE>5</SIZE>
         <BYTES>00 00 00 80 00</BYTES>
        </COMMAND>
 
Questo il comando per settare la frequenza nella radio:

        <COMMAND>
         <SYMBOL>SETFREQ</SYMBOL>
         <SIZE>5</SIZE>
         <DATA>
          <DTYPE>BCD</DTYPE>
          <SIZE>7</SIZE>
          <MAX>29000000</MAX>
          <MIN>150000</MIN>
          <RESOL>10</RESOL>
          <REV>true</REV>
         </DATA>
         <BYTE>01</BYTE>
        </COMMAND>

E di seguito il comando per settare il modo:

        <COMMAND>
         <SYMBOL>SETMODE</SYMBOL>
         <SIZE>5</SIZE>
         <BYTES>00 00 00</BYTES>
         <DATA>
          <DTYPE>BINARY</DTYPE>
          <SIZE>1</SIZE>
          </DATA>
         <BYTE>80</BYTE>
        </COMMAND>

Quindi i comandi fasulli per richiedere la frequenza ed il modo, con la lunghezza della parola a zero bytes:

        <COMMAND>
        <SYMBOL>GETFREQ</SYMBOL>
         <SIZE>0</SIZE>
         <INFO>FREQ</INFO>
        </COMMAND>

        <COMMAND>
         <SYMBOL>GETMODE</SYMBOL>
         <SIZE>0</SIZE>
         <INFO>MODE</INFO>
        </COMMAND>

E come risposta ai comandi fasulli delle reply fasulle:

        <REPLY>
         <SYMBOL>FREQ</SYMBOL>
         <SIZE>0</SIZE>
         <DATA>
          <DTYPE>BCD</DTYPE>
          <SIZE>0</SIZE>
          <MAX>0</MAX>
          <MIN>0</MIN>
          <RESOL>0</RESOL>
         </DATA>
        </REPLY>

        <REPLY>
         <SYMBOL>MODE</SYMBOL>
         <SIZE>0</SIZE>
         <DATA>
          <DTYPE>BINARY</DTYPE>
          <SIZE>0</SIZE>
         </DATA>
        </REPLY>

Per chiudere il file si usa questo tag:

        </RIGDEF>

Non mi è chiaro se questa sintassi sia corretta, ma così per ora funziona. Non sembrano esserci errori durante il debug. Quando poi avrò controllato a fondo il file, vedrò se sarà possibile farlo pubblicare nell'elenco ufficiale. Ogni consiglio sarà ovviamente ben accetto.

Buona sperimentazione!

73 de Andy IV3ONZ


Link utili e bibliografia:



domenica 18 dicembre 2022

CAT per Yaesu FRG-8800

 

La possibilità del controllo via computer della radio permette di aggiungere nuove possibilità di utilizzo, soprattutto se si opera con i modi digitali.

E questo vale anche se si tratta di un ricevitore.

La cosa fondamentale è che il ricevitore abbia una porta di comunicazione seriale, UART o USB, che ne permetta il controllo delle funzioni.

Il ricevitore

Il ricevitore è un vecchio ma ancora efficiente Yaesu FRG-8800. E' un ottimo apparato giapponese prodotto tra il 1985 ed il 1993. Copre le frequenze da 150 kHz a 30 MHz e, con l'opzione VHF, da 118 a 174 MHz, in AM (SSB e CW) ed FM.

Ha un'ottima resa sonora, che lo rende adatto all'ascolto del broadcasting.

Completato con il preselettore FRT-7700, permette l'ascolto con antenne filari o dipoli attenuando contemporaneamente i segnali fuori banda e, di conseguenza, possibili intermodulazioni o desensibilizzazione.


Il CAT

Il controllo via CAT fornito da questo apparato è alquanto semplificato. Le specifiche sono piuttosto scarne: dal manuale d'uso si sa che è disponibile un connettore DIN a 6 poli, del quale riporta lo schema:

Di utile ha soltanto l'ingresso dati (SI, Serial IN) e funziona con l'interfaccia proprietaria Yaesu FIF-232:




Non ha nulla di particolare. Ha un convertitore di livelli da RS-232 a UART ed invia questi segnali all'apparato tramite un opto isolatore.

Gli opto isolatori ed i trasformatori di isolamento per i segnali analogici sono fondamentali per evitare i ground loop e proteggere il lato ricevitore da scariche ESD o tensioni pericolose. Quindi, io evito sempre di collegare direttamente il PC a qualsiasi radio, se non usando una interfaccia isolata.

I comandi disponibili sono una manciata. Vi è il controllo della frequenza, del modo, attua l'accensione e lo spegnimento della radio ed ha il comando di inizializzazione ed uscita del modo CAT.


Si sa inoltre che le impostazioni della seriale sono:

  • Bit rate 4800 Baud;
  • 8 bit;
  • Nessuna parità;
  • 2 bit di stop;
  • Nessun controllo di flusso.
Le scansioni sono prese dal manuale d'uso della radio.

L'interfaccia

Senza voler rifare l'interfaccia originale, che peraltro vuole una RS-232 dal computer, qui si può usare tranquillamente un convertitore USB-UART della FTDI.

Il problema sta infine nella logica dei segnali, se invertiti o meno.

Nella stragrande maggiornaza dei transceiver, la logica dei segnali UART è non invertita rispetto alla RS-232. Generalmente Yaesu implementa la logica invertita.

Per verificare se anche questo ricevitore rispetta lo standard, diamo un'occhiata allo schema elettrico, reperibile sul Service Manual:

Il processore è un Hitachi HD63A05, percisamente la versione a 64 pin. Dal datasheet si scopre che il pin 26 corrisponde a C6/RX, il pin 39 a D6/INT3. Sembra poi che, da come lavora il clock (fronte di discesa), la logica sia invertita.

La traccia in blu arriva all'uscita di uno stabilizzatore 7805, realizza quindi un pull-up per l'ingresso SI attraverso un resistore da 680 Ω.

Dovremmo avere quindi tutto per realizzare l'interfaccia. Il convertitore FTDI è un TTL-232R-5VWE** con uscita su sei fili (ma va benissimo anche la versione a 3 V, usare un resistore da 330 Ω ).


Resistori da 0.25 W tipo SMD package 1206 oppure, se a componenti tradizionali, usare un 2N2222. Il collegamento con il plug DIN va fatto obbligatoriamente con un buon cavo schermato lungo al massimo 30 cm e possibilmente con una ferrite snap-it materiale 46.

La stessa interfaccia, senza il BJT, andrebbe bene per pilotare un Kenwood. Mancherebbe solo la linea TX.

Il segnale, misurato tra il collettore e l'emettitore dell'LVT827 sarà questo:

Non ci sono tarature. Se correttamente costruito, deve andare al primo colpo.

Buon divertimento!

73 de Andy IV3ONZ


Link utili e bibliografia: