inleiding
|
De Yaesu FT-8x7 zendontvangers zijn uitgerust met een CAT (Computer Aided Transceiver) poort. Dat wil zeggen dat door middel van een dataverbinding informatie naar de zendontvanger is te sturen en vanaf de zendontvanger is te ontvangen. Dit heeft geen betrekking op uitgezonden en ontvangen packet berichten, uitsluitend voor bediening en status informatie van de zendontvanger. Aanvankelijk is het ontworpen om de zendontvanger (anno 2001) met een antenne tuner of computer te kunnen verbinden, maar gezien de nieuwere ontwikkelingen met Arduino controllers is het ook mogelijk om de status van de zendontvanger op een groter scherm weer te laten geven door een Arduino met scherm aan de CAT poort te verbinden.
De Yaesu FT-817, FT-857 en FT-897 hebben nagenoeg dezelfde systeem architectuur, dus het is aannemelijk dat onderstaande informatie op deze drie modellen van toepassing is. In de handleiding worden ook een aantal gemeenschappelijke instructies beschreven, maar opgemerkt moet worden dat niet in elke handleiding alle instructies staan. Wel is het aannemelijk dat de instructies voor de drie modellen van toepassing zijn.
Informatie zoals de gewenste frequentie, DCS toon, CTCSS toon, split, PTT, vergrendeling tot aan de geheugen informatie is via de CAT poort uit te wisselen. Enkele instructies staan in de handleiding beschreven, maar diverse amateurs hebben nog meer mogelijkheden zoals het uitlezen en programmeren van de EEPROM uitgeplozen. Er is veel informatie te vinden, maar vaak is het onoverzichtelijk en incompleet. Ik probeer hierbij een beknopt overzicht te geven van de beschikbare informatie. Houd er rekening mee dat er héél veel meer te vinden is op het internet als er naar gezocht wordt.
Let op! De CAT poort is direct met de microprocessor verbonden! Zorg dat er geen piekspanningen en dergelijke op de CAT poort terecht komt omdat dit de microprocessor kan beschadigen! Het is verstandig om bij zelfbouw elektronica op strategische plaatsen zener diodes in de schakeling op te nemen om overspanning op de CAT ingang te voorkomen. Het vervangen van een CPU is vaak lastig en economisch al niet meer aantrekkelijk.
|
verbinding
|
De eerste stap is om het protocol goed te begrijpen. De data verbinding bestaat uit "enen en nullen" ofwel "bits". Op hardware niveau betekent dit dat een laag (0) signaal overeen komt met 0 VDC ofwel massaverbinding en hoog (1) overeenkomt met + 5 VDC ofwel Vcc van de microprocessor. Er wordt gebruik gemaakt van één start bit, acht data bits, twee stop bits, geen pariteit bit en geen "handshake". De snelheid van communiceren is op 4.800, 9.600 of 38.400 baud (bits per seconde) in te stellen via menu item 14.
baudrate: 4.800, 9.600 of 38.400 baud (in te stellen via menu item 14) start bit: 1 data bits: 8 stop bits: 2 parity: 0 handshake: geen levels: TTL (0/5 VDC)
|
structuur
|
Om met Yaesu FT-8x7 zendontvanger te kunnen communiceren wordt er gebruik gemaakt van een data structuur van 5 byte instructies. Acht data bits vormen één byte. De eerste vier byte's bevatten inhoudelijk informatie en de laatste byte van de reeks bevatten het commando. Tussen elke byte zou volgens de handleiding 200 ms tijd moeten zitten, naar verluid blijkt dit niet te werken en zou de tijd tussen de byte's kleiner moeten zijn...
bits, byte's en nibbles De data structuur bestaat dus uit 5 bytes. Eén byte bestaat uit acht bits, ofwel acht nullen of enen zoals bijvoorbeeld: "00000000". Voor de acht data bits wordt een start bit (1) geplaatst en na de acht data bits worden twee stop bits (11) geplaatst. Er is geen pariteit bit van toepassing. Een pariteit bit is een controle bit om te controleren of de ontvangen informatie klopt. Als de pariteit bit niet overeen komt met de data bits, dan is er informatie verloren gegaan en daarmee de data onbetrouwbaar. Deze pariteit bit is niet toegepast omdat de mate van betrouwbaarheid bij het CAT protocol niet van belang is geacht. Wanneer de data reeks "00000000" is, dan wordt er dus "10000000011" verzonden voor één byte. Elke CAT instructie bestaat dus uit vijf blokken van elf bits.
De laagste data byte (acht bits) waarde is binair "00000000". De grootste waarde is "11111111". Eén byte is in tweeën te splitsen. Beide delen heten een "nibble". Nibble is de engelse vertaling voor "een klein hapje", ofwel een een "hapje" (nibble) van een "grote hap" (byte). Elke nibble heeft een waarde van 0000 tot en met 1111. Met vier posities één of nul zijn 16 verschillende mogelijkheden te maken. Elke opcode instructie bestaat uit twee karakters waardoor gebruik wordt gemaakt van hexadecimale weergave. In het hexadecimale stelsel zijn er 16 mogelijkheden weer te geven in één karakter. Elke opcode bestaat uit twee hexadecimale karakters van 00 tot en met FF. Voor de verduidelijking staat hieronder een tabel met de relatie tussen de binaire, decimale en hexadecimale waarde weergegeven. In de praktijk worden hexadecimale waarden aangeduid met 0x als "prefix". "0x" heeft dus niets met de inhoudelijke waarde te maken, maar is alleen een aanduiding dat het een hexadecimale waarde betreft. Het getal 255 [DEC] wordt binair weergegevens als 11111111 [BIN en hexadeximaal als 0xFF [HEX].
decimaal | binair | hexadecimaal | 0 | 0000 | 0x0 | 1 | 0001 | 0x1 | 2 | 0010 | 0x2 | 3 | 0011 | 0x3 | 4 | 0100 | 0x4 | 5 | 0101 | 0x5 | 6 | 0110 | 0x6 | 7 | 0111 | 0x7 | 8 | 1000 | 0x8 | 9 | 1001 | 0x9 | 10 | 1010 | 0xA | 11 | 1011 | 0xB | 12 | 1100 | 0xC | 13 | 1101 | 0xD | 14 | 1110 | 0xE | 15 | 1111 | 0xF |
[data1][data2][data3][data4][commando]
Waarschijnlijk is het volgende voorbeeld inzichtelijker. Wanneer "43 02 75 00 01" naar de zendontvanger wordt gestuurd, dan is de laatste byte (01 in dit geval) het commando. Commando "01" zorgt ervoor dat de zendontvanger op de gewenste frequentie wordt ingesteld. In dit geval is de gewenste frequentie 430,2750 MHz. De frequentie informatie is in dit geval opgenomen in de eerste vier data byte's.
In de praktijk zal de data stroom er dus uit zien zoals hieronder weergegeven. De groene bits representeren de daadwerkelijke informatie. De zwarte bits zijn de start en stop bits.
43 02 75 00 01 = 10100001011 10000001011 10111010111 10000000011 10000000111
Het is ook mogelijk om een instructie te sturen naar de zendontvanger waarbij de data byte's niet relevant zijn zoals bij het in en uitgschakelen van de PTT. De zendontvanger gaat zenden met het commando "00 00 00 00 08" en stopt met zenden met instructie "00 00 00 00 88". "08" bekekent PTT inschakelen en "88" betekent PTT uitschakelen. De nullen zijn niet relevant voor het schakelen van de PTT, maar deze "dummy" data moet wel mee gestuurd worden omdat er altijd vijf byte's worden verwacht door de zendontvanger.
Er kan ook informatie van de zendontvanger op worden gevraagd. Met commando "00 00 00 00 E7" wordt bijvoorbeeld de status van ontvangst opgevraagd zoals de s-meter waarde, CTCSS/DCS informatie en squelch toestand. Met commando "00 00 00 00 F7" wordt de status van zenden opgevraagd zoals de PTT stand, melding van hoge reflectie (VSWR) en split.
In de handleiding van de betreffende FT-8x7 zijn 17, door Yaesu beschikbaar gemaakte, commando's te vinden.
|
TTL en RS232 signalen
|
Houd er rekening mee dat de signalen van de CAT poort TTL niveau (transistor-transistor level) hebben, dus hoog (1) = 5 VDC en laag (0) = 0 VDC. Het is mogelijk om de zendontvanger met een seriële poort van een computer te verbinden. Een RS232 poort werkt met andere spanningen, namelijk hoog (1) = -3...-25 VDC en laag (0) = +3...+25 VDC. De spanningen verschillen dus en het signaal is "omgekeerd"; een 1 = 0 en 0 = 1. Er is een Yaesu CT-62 kabel nodig om deze signalen te kunnen converteren. Maar het is uiteraard ook mogelijk om zelf een schakeling te maken zoals met een MAX232 chip om de signalen aan te passen. Ik heb ooit een kabel zelf gebouwd, maar zonder succes. Omdat de CAT signalen direct aan de microprocessor zitten is de kans op kostbare schade door "een foute" reëel. Vandaar dat ik de originele (seriële) CT-62 kabel heb gekocht om risico's te vermijden.
|
officiële instructie codes (opcodes)
|
command line | data byte 1 | data byte 2 | data byte 3 | data byte 4 | opcode[/splittd] | notes | power on/off | × | × | × | × | 8F | power off Likely only for the FT-817. Certainly not for FT-857. | × | × | × | × | 0F | power on Likely only for the FT-817. Certainly not for FT-857. | set panel lock | × | × | × | × | 00 | LOCK ON [00] respond = changed as desired / [F0] respond = unchanged; already in desired state | × | × | × | × | 80 | LOCK OFF [00] respond = changed as desired / [F0] respond = unchanged; already in desired state | set TX/RX (PTT) | × | × | × | × | 08 | TX [00] respond = changed as desired / [F0] respond = unchanged; already in desired state | × | × | × | × | 88 | RX [00] respond = changed as desired / [F0] respond = unchanged; already in desired state | set frequency | P1 | P2 | P3 | P4 | 01 | P1...P4: frequency digits (0...9) 12,34,56,78,(01) = 123,456.78 MHz [00] respond as confirmation | set operating mode | 00 | × | × | × | 07 | LSB | 01 | × | × | × | 07 | USB | 02 | × | × | × | 07 | CW | 03 | × | × | × | 07 | CWR | 04 | × | × | × | 07 | AM | 08 | × | × | × | 07 | FM (wide) | 0A | × | × | × | 07 | DIG | 0C | × | × | × | 07 | PKT | 88 | × | × | × | 07 | FMN (narrow FM) | set clarifier | × | × | × | × | 05 | clarifier ON [00] respond = changed as desired / [F0] respond = unchanged; already in desired state | × | × | × | × | 85 | clarifier OFF [00] respond = changed as desired / [F0] respond = unchanged; already in desired state | set clarifier frequency | P1 | × | P3 | P4 | F5 | P1 = 00: positive offset P1 = not 00: negative offset P3 = nn,00 kHz / P4 = 00,nn kHz (P3, P4 = 12,34 = 12,34 kHz | set VFO A/B | × | × | × | × | 81 | toggle between VFO A and B [00] respond as confirmation | set split | × | × | × | × | 02 | split ON [00] respond = split changed / [F0] respond = split was inready in the desired state | × | × | × | × | 82 | split OFF [00] respond = split changed / [F0] respond = split was inready in the desired state | set repeater shift | 89 | × | × | × | 09 | simplex [00] respond as confirmation | 09 | × | × | × | 09 | negative (-) shift [00] respond as confirmation | 49 | × | × | × | 09 | positive (+) shift [00] respond as confirmation | set repeater offset frequency | P1 | P2 | P3 | P4 | F9 | P1...P4: frequency digits (0...9) 12,34,56,78,(F9) = 12,345.678 MHz | set tone mode | 8A | × | × | × | 0A | tone off | 0A | × | × | × | 0A | DCS ON | 0B | × | × | × | 0A | DCS DECODER ON | 0C | × | × | × | 0A | DCS ENCODER ON | 2A | × | × | × | 0A | CTCSS ON | 3A | × | × | × | 0A | CTCSS DECODER ON | 4A | × | × | × | 0A | CTCSS ENCODER ON | set CTCSS tone | P1 | P2 | P3 | P4 | 0B | P1 = nn,00 Hz TX CTCSS tone P2 = 00,nn Hz TX CTCSS tone P3 = nn,00 Hz RX CTCSS tone P4 = 00,nn Hz RX CTCSS tone Note: P3 and P4 are not used for the FT-817. | set DCS tone | P1 | P2 | P3 | P4 | 0C | P1 = nn,00 Hz TX DCS tone P2 = 00,nn Hz TX DCStone P3 = nn,00 Hz RX DCStone P4 = 00,nn Hz RX DCS tone Note: P3 and P4 are not used for the FT-817. | send RX status request | × | × | × | × | E7 | See note 1 below for response. Replies 1 byte. | send TX status request | × | × | × | × | F7 | See note 2 below for response. Replies 1 byte. | send frequency/mode request | × | × | × | × | 03 | See note 3 below for response. Replies 5 byte. | TX metering information request | × | × | × | × | BD | See note 4 below for response. Replies 2 bytes. | Master reset | × | × | × | × | BE | This will reset your rig fully to factory defaults! This will also erase all the memory information service menu settings. Don't use this unless you're realy sure what you're doing. Always make a service menu backup first! After reset, the rig isn't aligned anymore! | × = Any value between 00 and FF hexadecimal. Normally 00 and never empty! |
Note 1: RX status reques response bits | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | squelch status 0 = off 1 = on | tone squelch 0 = matched or off 1 = unmatched | discriminator 0 = centered 1 = off center | dummy data | s-meter reading |
Note 2: TX status reques response bits | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | PTT status 0 = RX 1 = TX | SWR status 0 = no HI SWR 1 = HI SWR | split status 0 = split ON 1 = split OFF | dummy data | PO-meter reading |
Note 3: frequency and mode status reques response bits | byte 1 | byte 2 | byte 3 | byte 4 | byte 5 | nn0 MHz | n,n MHz | nn kHz | 0,nn kHz | 00 = LSB 01 = USB 02 = CW 03 = CWR 04 = AM 06 = WFM 08 = FM(N) 0A = DIG 0C = PKT | 43,21,09,87,0C = 432,10987 MHz PKT |
Note 4: TX metering information request response bits | nibble 1 | nibble 2 | nibble 3 | nibble 4 | first four bits of first byte | second four bits of first byte | first four bits of zecond byte | second four bits of second byte | PWR (Power) meter value. | VSWR (Vertical Standing Wave Ratio) meter value. | ALC (Auto Level Control) meter value. | MOD (modulation) meter value. | In RX mode "0x00" is replied. In TX mode the response above is replied. |
KA7OEI did a lot of research about the commands above!
|
fouten in documentatie
|
Let op! In de officiële documentatie is onjuiste en tegenstrijdige informatie te vinden. Dit kan verwarring opleveren. Ter opheldering zijn de volgende onvolkomenheden te benoemen:
- In de "CAT tabel" van de Yaesu FT-817 manual staat bij "CLAR frequency" vermeld dat de offset positief is als P1 "00" is en negatief als P1 "00" is. Dit klopt niet. Als P1 "00" is, dan is de offset positief, in alle andere situaties (01...FF) is de offset negatief.
- In het paragraaf "CAT data protocol" van de Yaesu FT-817 manual staan twee grafische weergaven van de data structuur. De rechter weergave laat de 5-byte commando structuur zien. Echter zijn er zes blokken afgebeeld. Het eerste "Command Data" blok dient te worden weggelaten omdat de juiste structuur begint met vier parameter byte's gevolgd door één opcode byte.
- In de CAT instructie staat dat er 200 ms tussen de bytes aanwezig moet zijn. Dit blijkt in de praktijk niet te functioneren. Aannemelijk is het dat alle vijf bytes binnen 200 ms ontvangen moeten worden.
|
praktijk testen
|
Voorheen heb ik naar vaker volle tevredenheid gewerkt met de (betaalde) FTBasicMMO applicatie om geheugenkanalen te programmeren en uit te lezen. Met een computer en een Excel lijst de frequenties en kanaalnamen instellen gaat namelijk véél makkelijker dan karakter voor karakter. Ook zijn er diverse applicatie voor CAT besturing zoals "Hamradio Deluxe" (HRD) en "FT-817 commander". Maar het is lastig gebleken om informatie te vinden hoe de communicatie op bit niveau werkelijk werkt. Vandaar dat ik hiermee aan het experimenteren gegaan ben. In november 2019 heb ik voor het eerst getest met het manueel aansturen van een Yaesu FT-857. Aanvankelijk gebruikte ik Puttytel voor seriële verbindingen, maar de Yaesu CAT poort heeft HEX code nodig en geen leesbare ASCII, dus Puttytel is onbruikbaar. (Daarbij is Puttytel "lastig" omdat bij veranderen van de parameters de applicatie elke keer herstart moet worden...) Na een "speurtocht" naar handige software ben ik bij Termite en Realterm uitgekomen. Termite werkt prettiger dan Puttytel, maar kan alsnog alleen leesbare ASCII tekens versturen. Termite is alleen bruikbaar voor seriële verbindingen, dus beperkter dan Puttytel, maar voor RS232 data prettiger in gebruik. De fijnste applicatie is Relaterm. Met Realterm is het ook mogelijk om hexadecimale (HEX) code te versturen en te ontvangen zoals voor de CAT poort nodig is. Ook kan de ontvangen data weergegeven worden als binaire (BIN) data, dat soms ook handig kan zijn. Ook kunnen de poort parameters worden gewijzigd zonder de applicatie te herstarten. (Voor werken met een TNC is Realterm ook handiger omdat niet (ASCII) leesbare code wel als binaire of hexadecimale zichtbaar is.) Hieronder staan enkele hints voor het gebruik van Realterm voor CAT besturing.
Hierboven is zichtbaar dat de weergave van de informatie (in het zwarte veld) als Hexadecimale data moet worden weergegeven. Binaire (EN: Binary) weergave kan ook handig zijn. De standaard ASCII weergave (All Chars) is niet werkbaar voor CAT control omdat niet alle verstuurde/ontvangen data leesbaar is. Voor de rest hoeven er geen instellingen te worden gewijzigd.
Op het tweede (Port) tabblad moeten de hardware instellingen van de seriële poort worden ingesteld. De data snelheid moet overeenkomen met die van de CAT poort en dat is in de meeste gevallen 9600 baud. De snelheid is in het menu van de zendontvanger te variëren van 4.800, 9.600 tot 38.400 baud. Mijn voorkeur is 9.600 baud omdat dit vrij standaard is voor soortgelijke toepassingen en snel genoeg is. Let er trouwens ook op dat de poort op "CAT" gezet wordt en niet op "LIN" of "TUNER" in het menu van de zendontvanger. De pariteit, data bits en vooral stop bits (!) moeten juist worden ingesteld op 8N2. Meestal is één stop bit toegepast, maar bij de CAT poort zijn dit er twee! Met de knop [Change] kunnen de instellingen worden geactualiseerd.
Na het instellen van Realterm kan daadwerkelijk data worden verzonden. In de basis zendt de zendontvanger nooit CAT data uit, tenzij er door een extern apparaat om gevraagd wordt. Het is verstandig om te testen met commando "0x0000000081". De data is binair als volgt "0000.0000 0000.0000 0000.0000 0000.0000 1000.0001. (De punt middenin de byte is om de twee nibbles visueel beter leesbaar te maken.) De verzonden bits zijn dan "10000000011 10000000011 10000000011 10000000011 11000000111 omdat de start bits en stop bits aan de data zijn toegevoegd. Deze verzonden data is met een oscilloscoop zichtbaar te maken. De vier data bytes zijn hiermee "00" en de (instructie) opcode is "81". Opcode "81" is de code voor het schakelen tussen VFO A en B. Door op [as Hex] te klikken, wordt de ingevoerde HEX code uitgezonden. En als het goed is, schakelt de zendontvanger nu van de ene naar de andere VFO. Handig is het om per VFO een andere band te kiezen zodat het schakelen tussen de VFO's duidelijk zichtbaar is en een band relais klikt voor een auditieve indicatie van omschakelen. Elke data regel uit de CAT tabel is op deze wijze te versturen. Wanneer "00000000E7" (RX informatie) of "00000000F7" (TX informatie) verstuurd wordt, wordt er (binaire) data teruggezonden over de status. Het antwoord van de zendontvanger is één byte zoals bijvoorbeeld "0xFF" ofwel binair "1111.1111". Als de TX informatie wordt opgevraagd tijdens ontvangen wordt "0xFF" teruggezonden en wanneer de RX informatie wordt opgevraagd tijdens zenden wordt "0xFF" teruggezonden ter indicatie van een onlogische vraag. De TX info kan alleen bij zenden worden opgevraagd en vice versa voor RX informatie. Handig is het om de ontvangen data binair te bekijken omdat elke losse bit vaak een aparte betekenis heeft zoals in de CAT opcode tabel hierboven zichtbaar is. Een mooie mogelijkheid is om (via het oranje vlak) een hexadecimaal bestand te laden en herhaaldelijk uit te laten zenden. Door Repeate op "0" te zetten wordt het zenden herhaald totdat het zenden handmatig wordt gestopt. Selecteer een hexadecimaal (!) bestand met het gewenste CAT commando (zoals 0x00000000E7) en klik op [Send file] om het automatisch uitzenden te starten. Met overige parameters is ook de snelheid van herhalen in te stellen, maar dat is vast zelf uit te vinden en gaat te ver voor deze verklarende uitleg.
Via https://hexed.it is een gewenst hexadecimaal bestand te maken. Op bovenstaande weergave is het bestand gemaakt om de RX informatie op te vragen. Door dit hexadecimale bestand herhaaldelijk door Realterm uit te zenden, wordt de ontvangst informatie zoals signaalsterkte en squelch status continu opgevraagd en het antwoord van de zendontvanger wordt vervolgend weergegeven.
Bovenstaande heeft geen directe toepassing, anders dan het protocol en de mogelijkheden testen en begrijpen. Wel is het bijvoorbeeld hiermee mogelijk om een Arduino (met een scherm) te programmeren zodat interessante informatie uitgebreid kan worden weergegeven. Zo kan op een extern scherm de frequentie, modus, signaalsterkte en meer relevante informatie worden weergegeven dat niet op het scherm van een FT-817 past. Ook is het denkbaar om een Racal Cougar afstandbediening om te bouwen naar een FT-8x7 remote. De Racal Cougar afstandbediening is zeer robuust en hier kan een Arduino in worden gebouwd voor de besturing. Zo kan met de kanaalkeuzeknop bijvoorbeeld keuze gemaakt worden uit tien instellingen zoals frequentie, subtoon, modus en meer dat via CAT in te stellen is. Zo is een robuuste bediening mogelijk voor een vrij kwetsbare Yaesu FT-8x7. Kortom, bovenstaande kan dienen als inspiratie voor mooie projecten. ;-)
|
|