CD changer controller

In 1995 I puchased several Sony CDK-006 60-disc CD changers. This model was intended to be controlled via a proprietary interface through a DC37 connector on the back panel, for use in jukeboxes and radio station automation systems. The service manual provides enough information to design a controller.The CDK-006 has only one user-accessible control on the front panel: an "open" button to allow swapping of the 60-disc magazine. On the main PCB inside the unit are additional push buttons allowing manual operation of the unit for test purposes.

The changers I purchased had been modified by Personics to run at approximately 2.5 times normal speed with a proprietary digital output for use in a high speed CD to cassette dubbing system.

There is a restoration procedure which may be used to restore the changer to factory specifications for standard audio use.

I no longer need these players, and am offering them for sale on an as-is basis for $200 plus shipping.

The PIC-based controller

It is possible to connect the interface to a parallel printer port, but since I purchased more than one unit and my parallel ports are already all in use, I decided that it would suit my needs better to build daisy chainable RS-232 interfaces for the changers using PICs.

Some of the newest PICs (such as the 16C65, 16C73, and 16C74) have a hardware UART, but they are expensive, hard to find, and take a *long* time to erase. The PIC16C84 is EEPROM based, which makes it much easier to use for development. This led me to spend some time thinking about how to write decent bit-banging serial code.

The PIC is converting the parallel binary to serial ASCII hex. I implemented some control codes for addressing units so I can daisy chain more than one from the serial port. The entire interface fits inside a DB-37 connector shell, and is powered from the CD changer since it only needs a few milliamps. I used RJ-11 modular connectors for the serial input and output.

host (computer)                 interface #0                    interface #1
---------------|        |---------------------------|        |------------
         RS232 |        |                           |        |
         out   |------->| in -------    ------- out |------->|
               |        |          |    |           |        |  ...
         in    |<-------| out -    |    |    --- in |<-------|
               |        |     |    |    |    |      |        |
---------------|        |     |    |    |    |      |        |
                        |MAX  ^   ---   ^   ---     |
                        |232 / \  \ /  / \  \ /     |
                        |    ---   v   ---   v      |
                        |     |    |    |    |      |
                        |mux /-\   |   /-\   |      |
                        |   |   |  |  |   |  |      |
                        |   --^--  |  --^--  |      |
                        |    |  |  |   |  |  |      |
                        |    |  |  +---- GND |      |
                        |    |  |  |         |      |
                        |    |  |  |         |      |
                        |    |  ---u----------      |
                        |    |     |                |
                        |    |     |                |
                        |    |     |   PIC16C84     |
                        |  |---------------------|  |
                        |  |                     |  |
                        |  |                     |  |
                        |  |                     |  |
                        |  |---------------------|  |
                        |     | |       / \         |
                        |    \---/     /---\        |
                        |     \ /       | |         |
                        |---------------------------|
                              | |       / \
                             \---/     /---\
                              \ /       | |
                        |---------------------------|
                        |                           |
                        |  Sony CDK-006 CD Changer  |
                        |                           |
                        |---------------------------|
Ordinarily you can't attach multiple devices to an ordinary RS-232 port (without violating the RS-232 specifications). I considered using RS-485, which was specifically designed for multidrop applications, but then I would have had to build an RS-232 to RS-485 interface. Okay, admittedly that would be trivial, but I still would have to have DIP switches or something to assign unique addresses to the interfaces, so I decided I was best off with an active daisy chain arrangement, in which case it may as well be RS-232.

Since the PIC16C84 is somewhat short on I/O pins, I use a 74HC259 addressable latch (not shown) to provide eight extra outputs, and a 74HCT151 multiplexer to provide eight extra inputs. It takes six lines from the PIC to control these chips, for a gain of ten lines.

One output controls a section of a 74HC4053 multiplexer to control whether the incoming serial from upstream (the host or a lower numbered interface) is passed downstream to higher numbered interfaces. Another output controls another multiplexer section which determines whether the interface provides its own output to the upstream device, or just passes along the output of the downstream device. These multiplexers are used to allow automatic assignment of interface addresses, and to allow the interfaces to be daisy chained on a single RS-232 port. (The multiplexer control lines are not shown in the crude diagram above.)

At power up, none of the interfaces has an address, and none of them forward the upstream input to the downstream interface. The host sends an "assign address zero" command. Only the first interface receives the command, so it learns that its address is zero, sends an "acknowledge" to the host, and and then enables the upstream input to be passed downstream, and the downstream input to be passed upstream. The host then sends an "assign address one" command. Interface #0 already has an address so it ignores the command. The next interace receives it and sets its address to one, sends an "acknowledge" back to the host, and sets its multiplexers. Eventually the host will send an "assign address n" command which doesn't generate an ack; then it knows that there are n interfaces.

I considered avoiding the use of multiplexers by having the PIC be responsible for forwarding in the upstream and downstream directions as appropriate, but I think that there would be problems with retiming the bits as they passed through multiple daisy-chained interfaces.


Chris Derossi has also designed a controller for the CDK-006, called the CD Master 100. His controller his the distinct advantage that it actually works! He has some nice photos of the changer and the controller.

December 30, 2007

Copyright 1995, 2004, 2007 Eric Smith

eric@brouhaha.com

hacker emblem
Best Viewed With Any Browser Valid HTML 4.01!

check now