Over 2 years ago, I started gathering parts to replicate an OEM car phone installation in my 93 VR4 (3S Wiki article with info about the phone system). These phones used “1G” analog cellular service that has been extinct for about 14 years now, so it’s impossible to activate them to make/receive calls. I almost immediately started dreaming up ideas for how I could modify the phone to actually make/receive calls.
The obvious solution that many people have suggested is to hack up the phone handset with the internals of a Bluetooth headset. Nah. Not refined enough for me. It would lose all the charm of the original phone display, button sounds, etc., and would basically turn the car phone handset into a glorified speaker and microphone. I want the phone’s original display and buttons to function. I want the phone’s original ringer sound when there’s an incoming call. I want to be able to actually dial a number on the keypad, see the digits appear on the screen, then press “SEND” to make the call happen.
So I took a slightly more complicated approach that will give me everything I want without requiring any modification at all to the original phone. It all started with a dual RJ-45 socket “breakout” board that I can use to connect inline between the handset and transceiver. First I wired it up as a direct passthrough:
After some quality time with an oscilloscope, I had reverse-engineered what all 8 wires between the handset and transceiver are used for. I identified and decoded digital communications so that I could completely take over control of the handset:
- Print any text I want to the screen, clear the screen, make the text blink, etc.
- Control the “viewing angle” adjustment of the LCD display.
- Turn all status indicators on/off at will.
- Turn the backlight on/off.
- Turn the 2 speakers and microphone on/off individually.
- Detect the pressing and releasing of all button.
- Detect when the handset is “on hook” or “off hook”.
(Intercepted digital communications between the handset and transceiver)
(early proof that I could control the handset)
Being a software engineer with some hobby experience in microcontroller (embedded) programming, this means that I could hypothetically make the phone do anything I want. The only limits are my imagination, and my electronics knowledge/skills (which are pretty weak).
Here’s where I’m at now after a little more than 3 months of effort:
That mess on a breadboard is my custom Bluetooth adapter and complete re-implementation of a substantial amount of the original car phone functionality (still a work in progress, both the hardware and software).
- The original transceiver is being used only as a power supply and its power on/off functionality.
- When the transceiver powers on, power is supplied to my circuit. The power supply and ground are passed through to the handset so that it also powers on.
- There is no longer any digital communication or audio connection from the transceiver to the handset. Instead, my circuit connects directly to the handset audio and digital communication wires.
- A microcontroller is custom programmed to implement all phone functionality and interface with both the handset and a Bluetooth module.
- It can be paired with any modern cell phone that supports Bluetooth “Hands-Free Profile” (HFP). Once paired/connected, then the car phone can send/receive calls through the modern cell phone.
Here’s a video showing off some of the functionality (including both incoming and outgoing calls):
I’ve posted several other videos demonstrating various other features. Check my youtube channel for more.
The handset is basically a dumb display, microphone, and pair of speakers, so I had to rebuild all the functionality from scratch. A surprising (to me) amount of effort has gone into audio:
- I have to generate my own sounds for button presses, ringtones, etc.
- I have to manage volume levels of sounds myself. There is no volume control built into the handset.
- There is only one channel of audio input to the handset, so…
- I have to manage turning the appropriate speaker (ear speaker or loud speaker) on/off depending on where I want the sound to come out.
- I have to manage switching between audio sources (voice audio from Bluetooth, or generated tones/beeps from my microcontroller).
- This gets quite complicated when different types of sounds can come from different sources, have independent user-adjustable volume settings, need to be sent to different speakers on the handset, and one of these sounds can “interrupt” the other. For example, incoming voice audio from the Bluetooth module when in a call plays out of the ear speaker (when “off hook”), but then pressing a button needs to play a button beep sound from the microcontroller at a different volume level through the loud speaker.
- Most of the complexity in my circuit is all about audio:
- Op-amp to boost the power of the raw output from the microcontroller.
- Low-pass filter to smooth out the digitally-generated sound.
- Switching circuitry/IC for controlling multiple audio flows (enable/disable mic output from handset to Bluetooth; switch between Bluetooth and microcontroller generated sounds as input to the handset).
- Digital potentiometer to control volume.
- Special op-amp for generating an inverted “copy” of the audio for the handset.
- Handset uses “differential” audio input to help minimize noise interference on the audio signal (noise on both wires cancels itself out when the handset subtracts one signal from the other to produce a single audio signal).
- Requires an additional component on the board to generate a negative 5V power supply.
I have quite a bit of the original phone’s functionality replicated:
- 5 separate volume levels can be adjusted.
- Adjustable LCD viewing angle.
- Recall the last called number.
- 3 speed dial numbers (P1, P2, P3 buttons).
- Directory of saved names and phone numbers.
- Passcode-protected storage of credit card numbers (which can be referenced in saved phone numbers to be sent as dial tones after establishing the call).
- Keeps track of time spent in the current call. You can view the time spent in the last call, and total accumulated time spent in calls.
- Ability to mute the microphone when in a call.
- Ability to mute all button press sounds when in a call. You can dial an entire string of digits onto the display, then press a button sequence to send it all as dial tones (like a conference call room code).
- An optional “warning beep” 10 seconds before the end of every minute while in a call (per-minute prices were high back in the day!)
I also added several ringtones to choose from.
I’ve hit the wall of getting 80% done with 20% time invested. I’m dealing with all the difficult remaining 20% of the project:
- Audio issues caused by hardware/circuitry.
- “pops” in the audio when turning on the speaker, switching between audio sources, etc.
- Sometimes induces interference onto the digital communication lines and makes random stuff happen on the handset.
- Digital noise in the audio.
- Some is likely just from being a sloppy circuit on breadboards.
- “pops” in the audio when turning on the speaker, switching between audio sources, etc.
- Lots of sloppy code that results in intermittent strange bugs, like getting stuck when trying to make a call (requires a power cycle to recover from it).
I also need to obtain a working “hands-free controller unit” or repair the one I have (water damage), then add additional circuitry to interface with its microphone output so I can take full advantage of the OEM hands-free integration with mic/buttons on the steering column and phone audio hijacking the car speakers.
If you made it this far, then thanks for reading! As a reward, here’s a demonstration of some ringtones I programmed for the phone:
If you are interested in more technical details, then check out this thread on an electronics forum where I detailed my progress from the beginning (including all the reverse-engineering), and got a lot of help frome people that know electronics way better than me: Making a Bluetooth adapter for a Car Phone from the 90's | Electronics Forum (Circuits, Projects and Microcontrollers)