BeoController -- my latest project

24 replies

 

Hi everyone!

A month ago, or so, I got the idea to do something about the annoying separation between my Beosystem 7000 and my Mac. The BS is of course nicely controlled with the remote, but the Mac is not. I do listen to both my iTunes library and Spotify a lot, so the nuisance was kind of there all the time. I figured that it must be possible to use the data signals sent from the beomaster to the other units and have the computer act accordingly.

I started searching the forum, thinking that others had done this before, but to my surprise I found almost nothing (and that's why I figured I'd write this post.) I then googled for microcontrollers, and the choice fell on the Aurdino Uno Rev 3. In part because an electronics retailer not 10 minutes walk from my home has them, but mainly because it's dead cheap, about the equivalent of $30. I went and got one the same day.

My next problem was that I don't have an oscilloscope, and even if I had one, I'm not sure I know how to use one, and even if I did it wouldn't be one of those expensive ones that can record signals for off-line inspection. I found the MCL2 technical description on the site which describes the MCL2 format, and I thought that it'd be worth a shot. I connected the board to the TAPE 2 socket on the back of the BM and wrote a program to record whatever the BM was sending. It made no sense at all. The MCL2 standard uses PWM coding, and interpreting datalink signals as PWM gives you jibberish, I assure you. :-) I then figured it might be standard serial communication, so I tried that. Success!  It worked. It turned out that the datalink format uses the same bit-times as the MCL2 format (3,125 millis), and that was just a lucky guess.

The datalink format, as far as I can tell, works thus: it is serial communication with 8 bit bytes sent MSB first. The first bit is always a 1, to allow synchronization, then 7 information carrying bits. It is active low (so low means 1), and each bit is 3125 us long (the MCL2 standard allows a maximum error of 312 us, and possibly there is something similar for datalink, but since you can resynch every 8 bits, it shouldn't be anything to worry about.)

 

Some commands are:

Play:   0xAB
Stop:   0xB5
>>:     0xB1
<<:     0xAF
Up:     0x99
Down:   0xB3
Number: 0xBC
Stby:   0xCB

Numers are sent in decimal form and one digit at a time. So 12 would be sent as first the 1 and then the 2. Also, before the numbers 0xBC is sent to start the sequence. The sequence of numbers is terminated by 0xAB (Play). Now for some reason the numbers are shifted one bit to the left, eg 1 is 10000011. So you need to right-shift them to get the right number (and also unset the MSB of course).

There are lots of other things sent as well, in particular when you swith to CD, and I haven't figured out what half of those things are, and since I don't need them I probably wont bother.

Anyway, I wrote some code to receive these commands and relay to the computer via USB. The Arduino board has a simple and easy-to-use library to for serial communication over USB. All I had to do was to write a program on the Mac that detects when the board is connected (and disconnected) and opens a serial port to talk to the board. Then it waits for commands and acts appropriately, by sending AppleScript events to either iTunes or Spotify, whichever is playing at the moment.

I realize now that this post didn't get as technical as I'd hoped. Apparently it's easier to write prose and be vague than to write down hard-core details in a note like this. Even so, I'll be happy to answer any questions you might have!

What turned out to be trickiest with this project was to build a suitable box for the thing. It's kind of prototypical, because I used stuff I had home or stuff I could get quickly and easily to build it. I might build a prettier one some day, now that I've learnd a thing or two (especially how to make holes that are not round).

Here is is:

One end has USB and two phono connecttions. This is the "computer end". 

The other end has a 7-pin din socket to connect to the BM:

The inside looks like this:

So what was the end result? I'm a much happier man, having done this project. My (old spare) Mac sits connected to the beomaster all the time and is happily responding to my commands on the remote.

As I said, I'll be happy to answer any questions, should you like to proceed on a similar project!

/  Johan

Edit: I decided to put in a little extra circuit, and the reason is twofold: first, I wanted to limit the current flowing between the two uCs. Second, I realized that when the board is connected to the BM but the USB is disconnected the board shorts and hogs the uC in the BM, which doesn't work properly. So, I put in a transistor and a couple of resistors (very similar to the relevant part in the BG CD5500 service manual). I would also like to acknowledge and thank Mika (tournedos) who helped me with this. /  Johan

Well, all I can say is very nice & well done :) Now knowing all the mac lovers on this forum, I wouldn't be surprised if you get a few commissions :)

Thanks! Yeah, it's been a satisfying project, in many ways. :-)

Note, though, that this is not bound to the Mac, per se, writing the equivalent program for M$ or some Linux is probably not that difficult for someone who knows those platforms (or is willing to learn.)

/  Johan

very interesting. It would be nice if you can post the connection scheme to the Arduino bord and the code 🙂

How would you compare the capabilities of your solution with B&O's BeoPort ?

I suspect the BeoPort offers a number of "bells and whistles", but compared to what the "average" B&O user wants you may tick all the boxes ?

elephant wrote:

How would you compare the capabilities of your solution with B&O's BeoPort ?

I suspect the BeoPort offers a number of "bells and whistles", but compared to what the "average" B&O user wants you may tick all the boxes ?

Well, I guess it's really only a matter of how much work one wants to put into it. The hardware would probably allow most of what the BeoPort can do, it's the software that does the real work. I only bothered to implement the things I use (though that might change in the future, who knows..?), i.e., Play/Stop/Next/Prev and standby. I see no real limitations. Also, the software I have right now does not send anything back to the BM, but I might fix that. I will be moving shortly, and in my new place I will build myself a link setup. There it would be nice to have a display in the kitchen revealing the source, volume etc of the main system.

Any particular feature you were thinking of?

Disclaimer: I've never used a BeoPort (or even seen one), so I'm not really sure what it can do. There may be things that are harder to implement than other things, but in my experience it's usually only a matter of subbornness and time to get what you want.

/  Johan

pacificocean wrote:

very interesting. It would be nice if you can post the connection scheme to the Arduino bord and the code 🙂

Personally, I hope the OP keeps this to himself, to prevent unscrupulous individuals selling his hard work ;-)

Amazing work Johan, really !

 

Congratulations... 🤒

Step1 wrote:

pacificocean wrote:

very interesting. It would be nice if you can post the connection scheme to the Arduino bord and the code 🙂

Personally, I hope the OP keeps this to himself, to prevent unscrupulous individuals selling his hard work ;-)

The connection to the board couldn't be any simpler: ground pin on board to ground on 7-pin din socket, and one of the digital pins (whichever you like) to pin 7 on the din. That's it.

I won't post the code, partly because it needs a clean-up. :-)

I will, however, happily answer any questions and give tips etc. to any fellow beoworlder who wants to build one. It's really not that difficult.

For the record, the hardware I used is:

1 Aurdino Uno Rev 3 ($30 - $35 or in the vicinity)
1 7-pin din socket ($1)
2 phono plugs (from a few cents to infinity)
The usb socket is the one from the board, which I desoldered. But those are probably around $2, or something.
And some cable.

Pretty cheap, not counting the hours of work figuring out the datalink protocol.. but even that was a lot simpler than I had thought.

/  Johan

Emmanuel92 wrote:

Amazing work Johan, really !

 

Congratulations... 🤒

Thanks! :-)

/  Johan

or
BeoWorld Gold Membership card
Join BeoWorld

Register to access the forums, reference material, and exclusive member benefits — including our monthly prize draw.

Become a Member

December 2026 Prize Draw

Gold Members Only

As a Gold member you're automatically entered into our exclusive prize draw — your chance to win iconic Bang & Olufsen products. A unique benefit of BeoWorld Gold membership, every draw brings a new opportunity to win something special.