I've always been a big fan of old Motorola gear. Among other things, I had an A3 Hand Held Control Head (HHCH) complete with wiring harness that adapted it to a DB-25 connector, but no radio to connect it to. Somewhere along the line I had the bright idea to connect it to a CB radio. My ideal target was a Radio Shack TRC-420A, it was the smallest radio in my collection and had the simplest set of controls. It was perfect for this project. Sticking with what I had on hand, I decided to use an Arduino as the brains of the project.
Some research yielded good news all around. The HHCH has an MM5480 LED display driver. The data and clock pins are exposed at the HHCH connector. On the CB side, channel selection doesn't look to be too bad either. The CB uses an HD42853 PLL Frequency Synthesizer which has six pins that ultimately determine which channel the CB is tuned to. It looks like the project is feasible.
As it turns out, the manual for the HHCH did NOT have the pinout for the specific cable that I have that interfaces to the HHCH. I had to pin it out by hand, as well as my test jig DB25-breadboard cable. The good news is now I can start rebuilding the project from the ground up (I may have ripped all the jumpers off the breadboards last night...). Before I called it a night I was able to get my old test program working with the channel up and down buttons and the serial console. It's not as cool as the LED display, but it's a start.
I have dusted this project off after a bit of a hiatus and a move to a new place. I have now scanned the manual for the HHCH and uploaded it to the project. I wasted a lot of time today trying to find a spreadsheet mapping the control head ultimately to my breadboard. In the end it turned out that I had never recorded that information off my white board because I knew it was in the manual. Once I remembered I had the manual, I decided it ought to be digitized so it could be added to my collection of project files to reduce the chance of losing what was my only copy.
I couldn't make heads or tails of what I was doing to switch the second 7805 on and off with a single transistor. My attempts to make it work failed. In the end I settled for switching the output. Both 7805s will draw from the 12v battery lead all the time. I'll have to measure the current draw, but I imagine it's fairly low when the HHCH is off.
I still need to make sense of the rest of the project. It's really tempting to clear the breadboard and start over. First I'll see if I can't make sense of what I've got.
I stumbled across a manual for the Hand Held Control Head and discovered it did not run on 8v as I previously thought (based on something I saw on the datasheet for the LED driver). It is supposed to run entirely on 5v. I also now have the entire schematic which is invaluable for determining how to interface with the various controls. When I moved the control head power off the radio's 8v bus to it's 5v bus, it wouldn't run at all. I put a meter on it and found that it was dragging it down to around 1v. Further experimentation with the control head and a power supply revealed that it draws over 120mA when the LEDs are lit. I needed a new 5v supply. I tossed a 7805 and the requisite capacitors on the breadboard and tied it to the switched 12v bus. While I was at it, I fed the Arduino from this as well. I found the 7805 was quickly reaching temperatures hot enough to burn my fingers. I added a couple of aluminum clip-on soldering heat shields to help cool it and consulted with #Hacker Channel, where I learned that between the voltage drop from 12v to 5v and the current draw I was going to have a pretty serious amount of heat to dissipate. While discussing how I intended to provide the heat sink, one of the members pointed out that ground loops would be an issue if I simply bolted it to the frame of the radio. He suggested looking in old power supplies for ground isolation mounts for TO220 packages. I had a dead PSU in the junk bin and found not only three mounts but a nice heat sink screwed onto the board. I pulled the whole heat sink out to use. I decided to split things into two separate 5v buses. One switched for the control head, and one unswitched to run the Arduino. I mounted both 7805s on the heatsink with the ground isolation kits and stuck them on a small breadboard and wired them up.
With the power supply sorted out, I'd like to fix the issue where flipping the power switch between ON and SCAN turns the radio off and back on. I'll get into more detail in the next log.
After a bit of troubleshooting the squelch pot has been replaced with a pair of MCP41050 50K ohm digital pots in series. After successfully testing the pots on with the Arduino and a multimeter on the breadboard, tried connecting them to the radio. Initially I there was no obvious change. The speaker would pop a little when I adjusted it each step but I couldn't unsquelch the radio. I had written a quick and dirty test program that let the control head up/down buttons cycle from 1-99 on the display and write the corresponding value to the pot. Taking a step back and trying to figure out what I was doing wrong, the answer came to me while I was chatting over on #Hacker Channel, I was assuming that minimum resistance was unsquelch, but what if maximum resistance (100K ohm) was unsquelch? A quick rearranging of wires on my breadboard confirmed this was in fact the case. Squelch is working properly!
Unfortunately I discovered something about the volume while I was playing with squelch and injecting a signal with the service monitor. Apparently the volume knob isn't really doing much. It seems to have a small effect in the middle of it's travel, but turning the volume down all the way does not silence the audio, it is still quite loud. Reversing the leads on the volume connection had no effect, it wasn't a case of confusing minimum and maximum as I initially thought. I'm going to have to dig a lot deeper into the volume control.
I removed the volume knob/power switch from the CB and tested those controls with the HHCH, success!
The power switch uses a 12v SPST relay to turn on the CB. One leg of the coil is always hot, the other is provided with ground by the power switch on the HHCH.
The volume was as simple as replacing one with the other. The CB had a 10K pot for volume, while the HHCH has a 20K. I removed the pot from the radio, and via the breadboard connected the volume knob on the HHCH. I added a 22Kohm resistor in parallel so that the maximum resistance would be approximately 10Kohm, although the difference in lower volumes with and without the resistor is negligible.
Next up to figure out will be squelch, it's going to take a bit of work as it's going to be a digital pot driven by the Arduino. I've not worked with digital pots before.
I had started this project a couple of years ago, but I honestly couldn't remember what kind of shape the radio was in. At the time I lacked any test equipment to properly check it. Any tests I would have done would have been over the air with an antenna and a second radio. To further complicate things, I apparently had dived straight in and ripped out the channel selector knob and attached wires to the appropriate pins on the PLL so that the Arduino could change channels. I even have a sketch that drives the HHCH and the PLL to do just that. But back to the present, I was still unsure about the state of the radio.
With the radio connected to a service monitor I attempted to test it, but even with no audio into the proper pin on the mic jack I was getting 100% (or more, the monitor maxes out at 99.9%) modulation with all sorts of tones and chirps. Inspecting the radio and my test setup, the first thing I noticed was that several of the wires for the PLL channel selection had pulled out of the breadboard. At 30 AWG, they don't stay in very well. I soldered them to pin headers to prevent this from happening again. The problem persisted. The radio most likely remained on the selected channel (40) when the wires pulled out because it is selected by pulling all pins low. I can only assume that is the default state of the pins on the PLL.
The next logical place to look was the mic test cable. I removed it, and shorted the connections on the back of the mic jack manually and the radio keyed with a silent carrier as it should. So the problem was in my cable or my keying setup. I dismantled the connector on my mic cable, and in the process accidentally broke one of the wires off the connector. Now too short to reach, I had to completely redo the end of the cable, while I was at it I rearranged the wires so the colors would make a little more sense and made sure the mic audio was using the shielded coax inside the cable. It should be noted that the other end of this cable terminates to pin headers that plug into to breadboard.
With the mic cable redone, I was able to use it to key the radio with a nice silent carrier. When I applied a tone to the mic input it came across beautifully. I started to get a hunch as to where I went wrong, to confirm my suspicion I tried connecting the TX line from the mic cable to chassis GND instead of mic GND and sure enough, the audio went nuts again. My problem was that when I read "Grounded to Pin 1" on the mic datasheet I assumed it was the same as GND for the rest of the radio. This proved not to be the case.