I was used to use easy-to-use MDs in car with my Sony MDX-C5960R MD player. However, my new Ford Focus (year 2004 model) was going to be equipped as standard with Ford's own CD player 6000CD with remote control stalk near the steering wheel. Finally, after my friend already driving with Focus said that the remote controller is a great thing to have, I needed to find a solution for it when replacing the original player with my Sony.
Note that the interface described here applies only to cars equipped originally with a Ford 6000CD or compatible player (e.g. Ford Focus 2004). Cars designed for other player models may have a different remote controller interface.
As you guess, Ford's remote control and Sony's RM-X4S are not compatible with each other. However, after searching the web for a while, I found out that both of them are simple resistor networks (as the remote controller of my Sony MZ-R2 MD Walkman).
My measurements of the Focus controller matched with Half_Geek's message on the Unofficial Empeg BBS:I have checked later the Focus controller schematics from Ford's wiring diagrams, and it is correct. (Resistance values were not present in the manual.)
Because I do not own any Sony RM-X4S to measure, I had to rely on this Polish web page that shows the following circuit for the Sony RM-X2S remote control:My MDX-C5960R officially supports RM-X4S controller. However, it seems to work correctly with these RM-X2S resistances. Now the only thing I needed was a circuit that converts the resistances used in Ford's controller to those used by Sony. The Ford controller has five buttons and I decided to use them as follows:
Ford function |
Ford resistance |
Sony function |
Sony resistance |
---|---|---|---|
VOL- |
54 Ω |
VOL- |
23.6 kΩ |
VOL+ |
147 Ω |
VOL+ |
16.8 kΩ |
SEEK+ |
301 Ω |
SEEK+ |
8.8 kΩ |
SEEK- |
562 Ω |
SEEK- |
12.1 kΩ |
MODE |
1037 Ω |
SOURCE |
2.2 kΩ |
(none) |
5057 Ω |
(none) |
high impedance |
You may think that the simplest way to use the remote with Sony unit
would be changing the resistors in the Ford controller. However, there
are three reasons why I did not want to do it that way:
I decided to use inexpensive and easy-to-find microcontroller
PIC12C508. However, this most common (and old) 8-pin PIC does not have
any
integrated AD converter so I needed to read the Ford stalk by measuring
the time constant of an RC circuit with I/O pin GP2 (the only Schmitt
Trigger input). The resistor network for the Sony output required 4...5
output pins, and because GP3 is an input-only pin, it has no use in
this circuit. GP2 is then used for both sensing the capacitor voltage
(in the input mode) and charging the capacitor (in the output mode). Q1
amplifies the charcing current and ensures that the capacitor is
charged enough also when there is a low impedance on the FORD IN
connector.
Component |
Type |
Comment |
---|---|---|
U1 |
LP2950-5.0 |
Any low-quiescent current 5 V voltage regulator (up to 100 mA) |
U2 |
PIC12C508-04 |
One-Time-Programmable 8-pin
microcontroller + socket |
Q1 |
2N3904 |
Probably any NPN switching transistor
(check the pin-out!) |
D1 |
1N4005 |
Any rectifier diode |
C1, C2 |
10 µF 35 V tantalum |
Good margin for the voltage specification |
C3 |
100 nF |
Critical component, preferably a polyester
capacitor? |
R1 |
2 kΩ | Not so critical |
R2 |
21.4 kΩ | |
R3 |
10.0 kΩ | |
R4 |
2.1 kΩ | |
R5 |
16.9 kΩ | |
J1 |
pin header, 2.54 mm pitch |
Something to be attached to the Ford
connector |
J2 |
3.5 mm stereo plug |
Preferably a 90-degree plug? |
Note that
the newer mask version PIC12C508A has slightly different
electrical properties and may not work here without changes in the time
constants defined in the software.
I recommend using a screw connector for connections because it easies mounting the adapter on radio's wiring harness. The circuit board fits in a film box. DIL-packaged microcontroller allowed building the circuit on a copper-striped board without the effort of etching a PCB.
I used a five-pin pin header (actually a piece of some connector) for the Ford connection. Two pins are enough but five pins shows implicitly the place of the Ford connector where to plug the header (there is only one five-hole group on the connector). The plastic guides prevent reversed insertion of the header to the connector.
The cable is soldered to the correct pins on pin header (see
Figure 3) and then insulated with shrinking tubes and hot-melt glue.
When the device is idle, all GPIO pins are in high-impedance
state (i.e. configured as inputs). R1 keeps Q1 closed so the power
consumption is minimized. The Sony unit sees high impedance on J2 (= no
button pressed). When a reading cycle starts, C3 is charged via Q1 by
setting GP2 to output '1' level for 4 µs. Then the software waits for
five predefined moments checking the state of C3 with GP2 input after
each timeout.
When C3 has been
discharged via the resistors in the Ford
remote controller, the GP2
input changes to '0'. Because GP2 is a Schmitt Trigger input, the
voltage
over C3 must drop considerably before GP2 input detects the change. How
quickly this happen depends on the button pressed (if any) on the Ford
controller. If C3 is not discharged enough after those five timeouts,
the connected resistance is so high (> 3 kΩ) that no button is
pressed on the controller. In such case, the PIC goes into low-power
sleep mode and wakes up for a new reading cycle after watchdog timeout
(set to nominal 36 ms). This low-power operation drops the average
current
consumption of the circuit down to 150 µA (including the voltage
regulator loss) so the adapter may be connected to the car battery all
the time.
If '0' state is detected on GP2, the number of the timeout loop specifies the button which has been pressed on the Ford controller. To avoid incorrect results due to EMI or buttons pressed/released during the measurement cycle, the program repeats the reading cycle until 64 consecutive same results are detected. This will take time up to ~20 ms depending on the button pressed (if any).
After 64 same results, the PIC changes the output resistance by switching the pins GP0, GP1, GP4, and GP5 between '0' output and high-impedance. The selected combination depends on the detected button.
Sony function |
GP0 |
GP1 |
GP4 |
GP5 |
Resistance on J2 |
---|---|---|---|---|---|
VOL- |
0 |
Z |
Z |
Z |
23.5 kΩ |
VOL+ |
Z |
Z |
Z |
0 |
16.9 kΩ |
SEEK+ |
0 |
0 |
Z |
Z |
8.9 kΩ |
SEEK- |
Z |
0 |
Z |
Z |
12.1 kΩ |
SOURCE |
Z |
Z |
0 |
Z |
2.1 kΩ |
(none) |
Z |
Z |
Z |
Z |
high-impedance |
This simple way of using three-state outputs and resistors for
generating the output impedances works because the Sony unit reads the
remote control resistance using a voltage less than the PIC power
supply (5 V).
I made a mistake in the software of my own adapter which
reversed the SEEK+ and SEEK- functions (compared to the original Ford
radio and car handbook). However, I started to like the way of "going
back" (seek down, previous track) by pulling the SEEK button and "going
up" (seeking up, next track) by pushing it. You may select which way
you like:
File name |
Description |
---|---|
fordsony.hex |
Standard software (pull SEEK for SEEK+) |
fordsonr.hex |
Reversed SEEK button (push SEEK for SEEK+) |
fordsony.zip |
Source code for Microchip's MBLAB |
You may program your PIC with any compatible programming tool.
I used JDM's
incredible simple PIC programmer on MS-DOS.
To test the adapter, power it with a 12 VDC power supply or
battery.
Change on J2 |
T0 (original timeout) |
R0 (target resistance) |
Parameter name |
---|---|---|---|
23.5 to 16.9 kΩ | 10 µs |
100 Ω | VOL_DOWN |
16.9 to 8.9 kΩ | 23 µs |
224 Ω | VOL_UP |
8.9 to 12.1 kΩ | 44 µs |
432 Ω | SEEK_UP |
12.1 to 2.1 kΩ | 81 µs |
800 Ω | SEEK_DOWN |
2.1 kΩ to infinite |
310 µs |
3047 Ω | MODE |
For example, if the change from 23.5 kΩ to 16.9
kΩ on J2 is detected at potentiometer resistance R1 = 130 Ω, you need
to change the VOL_DOWN
parameter from T0 = ".10"
to T1
= 10 µs * 100 Ω / 130 Ω = 7.7 µs ~ ".8"
Note that PIC12C508 is one-time-programmable (OTP).
You need to use a new PIC for the changed timeout values. However,
there is some space reserved for timeout modifications in FORDSONY.ASM.
If you want to reuse the same PIC, remove one movlw H'FF'
in each five loops and add a nop
after the
last movlw
command. For example:
Original code |
Modify to |
---|---|
movlw H'FF' |
movlw H'FF' |
movlw H'FF' |
movlw VOL_DOWN |
movlw VOL_DOWN |
nop |
This allows you to program the same PIC again after changing the timeout values in FORDSONY.INC.
Ford does not
use standard ISO radio connectors so connecting a Sony to a Ford
requires an inexpensive Ford-to-ISO wiring harness adapter. That is why
the
complete harness will be rather huge.
To get
power for your adapter you need to add some wires to your wiring
harness: Branch the +12
V Continuous and Ground wires and isolate the branches
carefully. I recommend protecting the connections with shrinking tube.
(You may probably use also the +12 V Switched instead but the
current consumption of the adapter is so low that it does not drain
car's battery even if it is continuously powered.)
Connect the
power wires and input/output wires to the adapter and close the adapter
in its box before
connecting the wiring harness to your car. The pin header connector is
connected to the FORD IN and GND terminals, and the 3.5 mm plug is
connected to SONY OUT and GND terminal. (I used a 3.5 mm plug
from inexpensive headphones but the green cable was so thin that I had
to solder
it directly on the adapter circuit board instead of using the screw
terminal.) Be careful when making any
connections -- bad connections may cause
short-circuits, and the short-circuit current is limited only by car's
fuse!
Installation
of the adapter is simple. Just connect the pin
header to the correct pins (see Figure 3) on the Ford's
connector and plug the 3.5 mm plug into the Sony unit. -- And remember
to test the operation before inserting the main unit into the slot...