Program Yaesu FTM-500DR (without a Cable)
This post explains how to program the memories of a Yaesu FTM-500DR via the microSD card (instead of a cable).
Even though the FTM-500DR has a microSD card slot, it isn’t straightforward to program its memories from a computer. I came up with this simple python program to convert CSV files from the Australian Repeater list to a form digestible by the Yaesu FTM-500D Programmer ADMS-16 software, available under Files from the Yaesu website.
Specifically, the program converts the chirpM_Sydney.csv
file. The resulting output file can be downloaded from here and directly imported in the Yaesu ADMS-16 software.
If you would like to customise the program, it is available below.
73 VK2APL
#!/usr/bin/python3
# Program to convert csv files from https://www.wia.org.au/members/repeaters/data/
# to a form digestible by the Yaesu FTM-500D Programmer ADMS-16 software
import re
import sys
import csv
fname = 'chirpM_Sydney.csv'
# we include all these names in our scan list
scancalls = ['VK2RBV', 'VK2RCG', 'Paddo', 'VK2RON', 'VK2RHC', 'VK2RCF', 'THills', 'Asqith', 'Dural', 'HCote']
# initial memory entries
initialmem = ['145.175,145.175,0.0,OFF,FM,AMS,AUS APRS,OFF,91.5 Hz,023,1500 Hz,RX 00,TX 00,MID,NO,5.0KHz,OFF,OFF,,0']
with open(fname) as csv_file:
csv_reader = csv.DictReader(csv_file)
lcount = 0
for x in initialmem:
lcount += 1
print(f'{lcount},{x}')
for r in csv_reader:
# print(f'Column names are {", ".join(r)}')
# process rx and xx frequency
rxfreq = float(r['Frequency'])
duplex = '+RPT' if r['Duplex'] == '+' else '-RPT'
offset = float(r['Offset'])
txfreq = rxfreq + offset if duplex == '+RPT' else rxfreq - offset
# only interested in 2m and 70cm
if not ((rxfreq < 148 and rxfreq > 144) or (rxfreq < 450 and rxfreq > 430)):
continue
if not ((txfreq < 148 and txfreq > 144) or (txfreq < 450 and txfreq > 430)):
continue
if not (r['Mode'] == 'FM'):
continue
# other parameters
mode = r['Mode'] # choices are AM,FM
diganalog = 'AMS' # choices are AMS,FM,DN
name = r['Name']
tonemode = 'TONE' if r['Tone'] == 'Tone' else 'OFF' # choices are OFF,TONE,TONE SQL,DCS,REVTONE,PR FREQ,PAGER
ctcssfreq = r['rToneFreq'] # choices are OFF,TONE,TONE SQL,DCS,REVTONE,PR FREQ,PAGER
dtcscode = r['DtcsCode'] # choices are OFF,TONE,TONE SQL,DCS,REVTONE,PR FREQ,PAGER
userctss = '1500 Hz'
txpower = 'MID' # choices are HIGH,MID,LOW
if any(x in r['Name'] for x in scancalls):
scan = 'YES' # choices are YES,NO
else:
scan = 'NO'
# print(r)
lcount += 1
print(f'{lcount},{rxfreq:.5f},{txfreq:.5f},{offset},{duplex},{mode},{diganalog},{name},{tonemode},{ctcssfreq} Hz,{dtcscode},{userctss},RX 00,TX 00,{txpower},{scan},5.0KHz,OFF,OFF,,0')
#if lcount > 525:
#break
# print(f'Processed {lcount} lines.')
for i in range(lcount + 1, 1000):
print(f'{i},,,,,,,,,,,,,,,,,,,,0')