IC-900 Remote Controller Clone Project, Conclusion

Updated 07/22/2022

← (Back to the Projects page...)

← (Back to Part II...)

 

Part III…The Conclusion

It is hard to believe that it has been almost a year since I published the beginings of this story. Progress has been in fits and starts, but lately more intense. I was traveling over-the-road more than usual and this pressed me to think and work more towards a final target for the system. I also wanted to get the HM-133 remote connection established so that I could use the functionality it provides (and to which I have become accustomed when using the IC-901 that I currently have in my vehicle).

Part II concluded with the establishment of basic radio functionality. The ultimate completion of the design requires more advanced funtionality to allow the cloned controller to reproduce most, if not all, of the original functions (and some new ones). In addition, the inclusion of remote control capability is also an important aspect of the overall design allowing, at minimum, remote configuration of system memories. Real-time remote control is also desired but not a firm requirement. Here I describe the conclusion of my attempt to re-create the controller for an ICOM IC-900 multi-band radio system.

 

The Requirements are Forming in my MIND…

Most of my hobby projects are solo efforts. As such, I generally forego the rigor of a formal requirements document. At best, I will scribble notes into one of my engineering notebooks. Often, however, the requirements develop or crystalize during coding. If I'm lucky (and I rarely am), I will capture them in the source code comments. The result of this paradigm is that the end result often looks much different from than first imagined. This can happen in more formal design enviroments, but is almost assured in the less formal ones, like here. However, I am generally more agile in this environment and can adapt the design as it takes shape and I don't have to answer to any bosses or customers, except myself.

There are some features that just aren't likely to make the final cut. VFO scan and tone decode are two of these. I just don't ever use them, so they haven't gotten any traction. Other features evolve and priorities shift... the bluetooth interface is one that has fallen from prominence in my mind over the last year or so. Mostly due to the fact that I have had issues with my IC-901 remote control link. In spite of efforts to improve the RF performance of that system, I still find it to be less reliable than my comfort level allows. Somethings stay, and some things are lost (or, pushed back so far that they fall off the back of the table).

My first computer control command was geared at filling in the gap for the memory name string. Creating a user-interface for editing this string on the LCD just wasn't something I wanted to tackle right off the bat (if ever). This led to the full memory store command, and then other "setting" commands. Such give-and-take is a regular thing up here in the hack-a-day hardware and software shop.

 

The Big Push (or, lots of medium sized pushes)…

Once I got the memory support commands established, things cooled for a bit. I used the radio on the bench as often as possible, but not much code work. A couple of months ago, this changed (but I'm not exactly sure why) when I started working on the wired remote interface. This started from the same HM-133 bluetooth project I'd done for one of my IC-901 radios, but without the bluetooth. It works by hi-jacking one of the microphone signals (the up/down signal) to send the serial data to the host via the A-Unit. The HM-133 was modified (a duplicate HM-133 board, that is) to drive the up/down connection with the serial output signal. The up/down operation was then coded into a serial message. At the other end of the microphone connection is the IC-900 A-Unit - a small enclosure that houses the "hub" of the IC-900 radio system. Inside the A-Unit, a small MCU circuit (An ATTINY-1604) was placed to intercept the serial line that was once used for up/dn. This MCU then reproduces the up/dn signal which is routed to the appropriate point in the A-Unit to "complete the circuit" and restore the up/dn functionality.

From this point, the serial connection needed to be routed to/from the RDU. The RDU has a "debug" serial port connection, but there is no was to get that connection out of the enclosure using existing wiring. The only viable solution was to cut a hole in the back of the RDU case and attach a small connector for the serial port. At the same location, a 6-pin programming connector was also placed allowing access to program and debug the system without having to take the enclosure apart. This access port was "covered" by a 3D printed mounting bracket that featured a small opening with a pocketized cover for the port, as shown in Photo 1.

Photo 1. RDU mounting frame & serial/programming port ("pocket cover" shown removed).

The 3D-printed cover (with thanks to Jim, K5KTF) featured guide slots for cables which facilitated connecting a remote serial port. The existing RDU power/comm cable was combined with the serial cable in a mini-DIN 6-pin connector to simplify the removal of the RDU. The serial port was routed into the A-Unit where I located the nexus of the remote RDU serial data paths. Using the debug port solves one problem, but dedicating that port to the HM-133 remote means that the only other remote COM access is via bluetooth. To remove this as a requirement (I'm OK with having a bluetooth link LATER, but I don't want to be distracted with it now) the remote PC connection needs to be muliplexed with the HM-133 remote connection. The ATTINY-1604 was pressed into service to manage the serial port selection for the RDU. Using the RTS signal from a standard RS-232 COM port, the ATTINY can activate a switch that connects the PC to the RDU. With the RTS inactive or not connected, the connection is to the HM-133. At the very least, the HM-133 will only be offline when the PC is connected for configuration tasks. However, if the PC can manage the RTS signal it becomes possible for the PC and HM-133 to coexist with only minor conflicts. More on this later.

Once the connection details were worked out, it was then possible to begin coding the changes to the HM-133 software to remove the BT support and also code the ATTINY application. As part of the process, the notion of the FUNC button (present on the HM-133 microphones) was implemented to allow additional functions to be supported (such as volume and squelch, among others). The RDU application code also needed modification to be able to intercept the keypress messages from the HM-133 and interpret them. This turned out to be pretty straightforward when implemented as an extension of the existing button press software. By inserting a signal stream at the point where the button presses had been captured and decoded, it was a simple task to convert the inbound HM-133 messages into simulated button presses. This makes it possible for the HM-133 to emulate any button-press that currently exists on the RDU plus any "new" button-functions that were desired.

Photo 2. The A-Unit wired-remote interface installation.

The ATtiny MCU located in the A-Unit interface actually has several tasks to perform. It monitors the serial traffic on the data line from the HM-133 interface, and it also reads the analog voltage on this signal to support the presence of a standard HM-14 (or similar) microphone. It also monitors the RTS signal from the host and produces a CTS output signal for use with a non-handshake terminal. These peripheral connections allow the ATtiny to determine the type of microphone connected and switch the serial connection between the HM133 and the PC COM port based on the status of RTS.

That last task allows for an interesting PC interface paradigm. If the PC hosts an application that can activate RTS only when it is sending data, the HM133 wired-remote can still be used with relatively little risk of conflict, assuming that there is a low degree of traffic from the PC system (as is the generally expected case). Such an application is also part of this project. By adpating a VisualC application that I wrote for the FFront Project, I can produce a virtual radio display and control the IC-900 from a PC while still using the HM133 microphone for remote control activities.

 

Where's the Remote?!?!?

The CAT remote control application is a whole other project, in the midst of a whole other project. The good news is, it is a cut-n-paste from a working application whereby the overall gist of the two targets is the same. The RDU CAT control path simply has more commands and status variables that need to be managed. Merging this project with my Morse Keyboard has some interesting implications as that would allow for the placement of dials and dedicated buttons which could be used to send specific keystroke combinations to the VisualC application. Fodder for a future project, I suppose.

Of course, there is also the KPU (mentioned in a previous installment in this series) which could be deployed to interface to the IC-900 RDU to provide a remote terminal that can be placed in a location rather different from that of the RDU. This would allow for a reasonably eyes-free human interface without the arm-strain of reaching out at arms length to fiddle with the RDU controls. Again, fodder for a future effort.

Figure 1. An early concept of the user interface for the IC900 VisualC application.

I have pondered the idea of using an existing radio protocol (I'm familiar with the ICOM CIV and Kenwood protocols) to allow the use of an off-the-shelf radio control program. This would prevent a "re-invention of the wheel", saving effort while providing for a choice of software programs that have been well vetted by a broad user base. If not for the multiplexd serial port, I might put more effort into this idea. Perhaps if I ever get a bluetooth serial connection scheme worked out, I will revisit this idea.

For now, just getting the VisualC key-press based remote control up and running will present plenty enough challenge to keep me occupied for a while. The initial work of producing the support hooks in the RDU software is the main task for now, with the VisualC application being something that will likely draw out for a few months as it is tested and refined. In the meantime, TerraTerm can fill in to allow for simple memory management tasks.

 

Conclusion

One of the aspects of this design path is that serendipity played a major role in both the inception and the outcome. Many of the features implemented were unforseen at the begining and allowing the freedom to deviate from the original IC-900 operation allowed for many improvements that would have been difficult if not impossible to predict or specify at the outset.

The software is pretty involved, but it has proven to be a bit more robust than I had feared. I have been able to add features using previously designed structure without totally breaking the overall operation. I also have had luck with reading my previous comments, at least for the most part. Of course, it is a bit early to start celebrating, but the outlook is good.

As previously mentioned, there are some features that have been excluded from the final design but the list is short and I don't feel particularly guilty about declaring victory at this juncture. It is nice to "finish" a project once in a while even though my projects are NEVER truly finished. When they can be used with some degree of reliablity in real-world scenarios, then they have reached a milestone that is as finished as it gets around here. I look forward to using my newest, favorite radio. Not a moment to soon either, as my IC-901 in the car has now stopped working. Man, I HATE these radios sometimes...

This is a summary of the changes to the original operating interface:

Feature Description
Buttons Several buttons were modified from the original IC-900 operation: VFO, MR, CALL, DUP(HOLD), TONE(HOLD), CHECK & CHECK(HOLD), MHz, SET, SMUTE(HOLD), SQU-UP(HOLD), VOL_DN(HOLD)
MFmic The HM-133 interface project was adapted to provide full control of the radio from the HM-133 buttons
CAT Computer Aided Transciever. With the benefit of a system of added cabling and the HM-133 multiplexing interface, the "debug" serial port was adapted to allow for real-time radio control and configuration access. The addition of a PC-based application allows for remote control via a PC or other serial interface.
MEM Banks The relatively large NVRAM can be accessed as "banks" of memories using the SET key (up to 10 banks for the moment) to allow for more storage
PTT-SUB This feature first appeared in my IC-901 HM-133 interface and has been expanded upon here. This feature allows the radio configuration to be modified at each PTT transition. Basically, the radio "toggles" one of 3 features, or can be disabled: No-toggle, SUB-MUTE, SUB-Call, and MAIN-Call. This family of features is aimed at various full-duplex scenarios but the MAIN-Call mode is geared toward an ad-hoc "odd-offset" feature whereby the TX and RX frequency can be placed in the VFO and a CALL channel and then the system will toggle between the two for TX and RX.

The button-hold feature to jump into a deeper configuration level is perhaps the most moving of the changes. This elliminates the need for the (rather annoying) SET-LOOP to configure the radio. The access to the settings is more direct and intuitive than with the SET mode. The worst of the results is that the LCD segments and button nomenclature are fixed, which requires a lot of poetic license to add or re-arrange features. Such is the nature of the project, I suppose. Overall, the state of the IC-900 clone is such that it operates much more like a modern radio with microphone driven function buttons and available CAT-configuration and control capabilities.

With this design essentially complete, I can now start thinking more seriously about replicating the effort for the IC-901. Porting the code to the more imposing Tiva MCU will not be trivial (at least, that has been my prior experience with a similar porting effort) but the larger processor offers many opportunities for overall improvement. The IC-901 has the same number of buttons, but its LCD is somewhat different, so there will have to be some changes to the underpinnings of the code. Still, the essential similarity of the two radios promises to make the port of the high-level architecture rather straightforward. We shall see...

← (Back to the Projects page...)




Here is a listing of the various project documents that are directly relevant to this project:

SiLabs/Tiva Programming guide

RDU Clone Schematic

HM-133WR Schematic

A-Unit WR Schematic

RDU Clone git repo (contains hardware and software artifacts for the IC-900 RDU Tiva MCU)

RDU MFmic git repo (contains software artifacts for the ATtiny MCU)

HM133 git repo (contains hardware and software artifacts, the Wired Remote is contained in the 'F53x Software_HM133-WR_04' sub-folder)