Adding USB tuning support to a Kenwood TS-680s

Written 2013-06-10

Tags:USB Ham Radio FTDI Kenwood Circuit Hack 

So, a few weeks ago I bought a ham radio. Kenwood made a series of these radios, TS-680, TS-680s, TS-140, and several others during the late 80s and early 90s. They're solid-state; however, there are a few niceties missing that are available on current radios. These include the lack of a simple computer-control port.

Kenwood did add a small expansion slot though, that can hold a card called an IF-10C. The IF-10C consists of an 8251 USART configured asynchronously, a clock generator and divider circuit, and some inverters. This must be coupled with an IF-232 device that sits outside the radio and converts the inverted logic back and then level shifts it to normal RS-232 levels. Finally, you need another device - a USB to serial adapter to connect to a legacy-free PC. Lastly, Kenwood doesn't sell the IF-10C any more, and they are around $80 used. I can do better.

Over the last week, my TS-680s has been flipped on its back, Z80 CPU bus wired into a breadboard. Instead of wiring up a USART and level-shifter, a faster and more direct solution is to use an FTDI USB FIFO like the FT245R. However, the FT245R is not a direct replacement for the 8251 CPU interface - some external logic is required. Here's what the control lines look like when just combining the read and chip-select lines, along with the write and chip-select lines.

FTDI8251

Here's what happens:

  • The RXF line goes low to signal that there is a byte available.
  • Nearly 40 microseconds later, the Z80 responds to the interrupt, chip-selects the UART, and reads a byte from the FIFO, clearing the RXF event
  • The Z80 reconfigures the 8251 interface for command/status mode, and reads the status register. It is important to note that the Z80 bus uses pull-up resistors.
  • Due to the lack of a status register, the Z80 sees the following: Framing error, break signal, parity error, and overrun error.
  • Due to the error condition, the Z80 sends the following bytes to the UART, a byte with the reset bit set, a mode-configuration byte, and a command-byte to enable the UART
  • Due to the error and break signals, the Z80 ignores input

So it appears that an emulated status register is also required. The proper solution would be to use a tri-state buffer, but one can also take advantage of the bus pull-ups by using simple NPN transistors to pull the lines low when needed.

And after adding the transistors, here's what happens:

fifo_working

And now the radio responds with IF00014249290, which is the current frequency, and some additional status text.