ARCHIVED FORUM -- March 2012 to February 2022READ ONLY FORUM
This is the second Archived Forum which was active between 1st March 2012 and 23rd February 2022
Hi,
Edit: Subject renamed from Beolink to more correctly "datalink"
I recently bought an Beomaster 6000 (225x) in an unknown state.
After some digging and measurement in the device I came to the conclution that the CPU was zapped and not working.
Looking at the schematics I came up with the idea of mimic the CPU with a modern microprocessor, and some days ago I started to wire up the new CPU and write my own implementation of the CPU-code.
To my surprice it works even better than I thought! I have now most of the machine working again! I can read the keys and select input, write and update the display etc. The next step is to implement the timers and clock and after that the frequency counter so I can show the correct radio-freqency in the display too.
The volume shouldn't be any problem - right now the CPU board is partly removed so I can flash and update the new CPU without removing it from the board. I managed to swap some pins on the new CPU and the IC-holder - so I don't have to do any modification on the main board - the new CPU (with my modifications) is pin-compatible - just plug-and-play!
After I get the volume and frequency counter working I will try to implement the remote control as well
Now to my main question - does anyone know how the datalink protocol is implemented in the Beomaster 6000? All I have is the service manual (which doesn't help much) - and I have no other Beo-equipment to check or test on ...
From the schematics it looks like the protocol is bi-directional, that is all I know.
And secondly (again since I have no other device to test on) - are the buttons just single presses - or can one hold down a button for repeated entry? I'm mainly thinking on the volume up and down - can one press the button and hold it so the volume increases/decreases as long as the button is pressed - or do you have to press it multiple times (one step for each press)?Cheers,Thomas
Hi Thomas,
interesting project! What microprocessor did you use?
You can find some info on the various B&O protocols here on Beoworld <beotech>.Unfortunately the download link on the <datalink page> doesn't work but the datakink '86 manual can be found easily on the net, e.g. <here>.Datalink'86 is the advanced version of the datalink protocol and you won't need most of it considering you're looking at the BM6000, which uses the predecessor datalink'80, but the protocol structure is the same.
It seems that several people have already hacked datalink (at least partially) and you can find several github projects on the net. <This> looks like an interesting Arduino project that allows you to log and analyze the actual codes for various actions - both for datalink 80 and 86.
Hi Manfy!
Thanks for your comment!
I'm using a PIC16F887 which have all I need, timers, GPIO's etc. It was not completely pin-compatible, so I had to swap some pins which can be seen on the "prototype build" in the picture below.
Thanks for the datalink info! But the more I think about it, and since I have no other B&O equipment, I'm thinking of using that pin for other stuff. Since I have the timers I need I have no need for the "675Hz" nor the "50/60Hz" input (can't see why the "50/60Hz" is there in the first place). With the use of the datalink-pin as well, I could use these pins to add some other device instead - e.g. a ESP8266 to get WiFi connectivity.
With that I could e.g. get the time from the internet to set the clock automatically (and keep it correct) and also control the device over WiFi, using a phone or SmartHome-devices as remote controls.
But first I will complete the restoration of the device. I have everything implemented except the timers, frequency counter, remote control and the datalink protocol. Yesterday I added a clock, so I can switch between the clock and frequency display. Now I will continue with the replacement of the trim-pots and capacitors so the amplifier runs smoothly, and when that works I have to update all leds in the display. As seen in the picture, several segments are gone, so all leds have to be replaced in the displays (in the picture I have written "000.0" and "TP5" to the display).
ThomasF: Thanks for the datalink info! But the more I think about it, and since I have no other B&O equipment, I'm thinking of using that pin for other stuff. Since I have the timers I need I have no need for the "675Hz" nor the "50/60Hz" input (can't see why the "50/60Hz" is there in the first place). With the use of the datalink-pin as well, I could use these pins to add some other device instead - e.g. a ESP8266 to get WiFi connectivity. With that I could e.g. get the time from the internet to set the clock automatically (and keep it correct) and also control the device over WiFi, using a phone or SmartHome-devices as remote controls.
Yes, indeed. Nobody forces you to re-code the BeoFirmware the very same way as the original.From a different thread I know that the 50/60Hz signal is used for the time display on the BM6000. If you have other means to keep the time display accurate, you won't need that signal.The 647Hz timebase seems to be used for syncing the FM display, but since you have prescalers in the PIC chip, this signal may not be needed. Just try it out and see how well the frequency display works without the hardware pre-scalers IC6/7 and link to IC8/IC9.If this were my own project, I might not want to give up on datalink so easily, though. Fair enough, you don't have any other B&O equipment right now, but what if you suddenly find an interesting beogram for a good price? Wouldn't you want to control the turntable from your remote without having to redesign and reprogram the BM6000 PIC?
Regarding the IR remote signal, you should be able to find a number of projects on the web that show the format of the IR-protocol. Maybe you can even find an actual B&O code library. I have been working on some universal remote control project around 10-15 years ago - not all of the info is easy to find and not all of it is ready to use, but with a bit of time on your hands it's possible to figure it out.
manfy: Yes, indeed. Nobody forces you to re-code the BeoFirmware the very same way as the original. ... If this were my own project, I might not want to give up on datalink so easily, though. Fair enough, you don't have any other B&O equipment right now, but what if you suddenly find an interesting beogram for a good price? Wouldn't you want to control the turntable from your remote without having to redesign and reprogram the BM6000 PIC?
Yes, indeed. Nobody forces you to re-code the BeoFirmware the very same way as the original.
...
If this were my own project, I might not want to give up on datalink so easily, though. Fair enough, you don't have any other B&O equipment right now, but what if you suddenly find an interesting beogram for a good price? Wouldn't you want to control the turntable from your remote without having to redesign and reprogram the BM6000 PIC?
Yes, that is true!
For timing I think I have what I need, so the timebase and 50/60Hz pins are free, and I also think there is another pin that is not used, "*FM-LOW OSC" which just seems to be grounded according to the schematics, so there should be enough pins to add something further down the road.
If I manage to fix the remote control, I think the datalink should be feasible as well, and I agree that in the best of worlds the replacement CPU should be compatible with all functionality of the BM6000!
Should keep my eyes open for a matching Beogram then ...
Cheers,Thomas
ThomasF: [...], and I also think there is another pin that is not used, "*FM-LOW OSC" which just seems to be grounded according to the schematics, [...]
[...], and I also think there is another pin that is not used, "*FM-LOW OSC" which just seems to be grounded according to the schematics, [...]
Yes, that is strange. And it's even stranger that the service manual shows a dashed line to GND! You should probably check whether that pin really is grounded! If so, you're free to use it for any purpose in your design.From other threads I know that the actual circuitry for the pre-scaler and frequency counter is somewhat different to what you see in the service manual.
I'm just guessing here but I think "FM-LOW OSC" is a typo and it should be "FM LO OSC", i.e. local oscillator frequency.Probably the designers planned to measure the local oscilaltor frequency and the IF frequency in an early design, but decided against it in the end.When you're coding the FM display don't forget to subtract the IF frequency of 10.7MHz divided by 512 from the signal coming from the hardware frequency counter to get the actual carrier frequency!
Ciao,manfy
Ciao manfy!
Thanks for your tips - it is slowly coming back to life!
Yesterday I got the volume going - the motor drivs the pot as expected - but I have one question regarding this.
When I press volume down I assume that the motor goes as long as the button is pressed - but what happens when we reach the bottom? In my implementation the motor just continue to run and the belt "slipps" - i.e. the potentiometer is stopped at the bottom. I can't see any logic in the schematics that will stop the motor - or is it some kind of trimming (I have followed the service manual to trim the motor) I have missed? The CPU have no knowledge about the position of the motor so I can't have the firmware to stop it. It just feels akward that the motor keeps on running (until I release the button) even if 0 is reached ...
How does a "real" 6000 behave when the volume down button is pressed for a long time? Will the motor continue to run? Stop at level 0? Or just stop after a timeout ... ?
With the other volume buttons (0-60), I had to insert a delay for ~2 seconds, since when releasing the button the motor stops immediately (before reaching the wanted volume) so I had to simulate that the button is pressed long enough until the wanted position is reached. Even if the button is pressed longer the motor stops when the position is reached (not so with up and down button ...).
Today I started to implement the frequency counter, and as shown in the video below - it seems to work fine! I still have to replace the faulty led segments and trim the clocks and counters - but the counter works and gives expected results
(It looks like 175MHz in the display - but it is actually ~105Mhz since some of the sgements are broken!)
The trim-pots and electrolytes have been replaced, the amplifier trimmed and sound ok, so next step is to fix the leds and then start to look at the timers and the remote control - or in reverse order ... !
Regarding the "FM-LOW OSC", it is not connected at all in my device, not even grounded, so that pin is free!
Didn't manage to add the video (maybe to large?) so I added a link to it ... hope that works!
https://photos.app.goo.gl/vcdPCBdnhxSqNtGm9
Cheers,
Thomas
congrats on your first successful steps!I'd love to help but I'm afraid I have no hands-on experience with the BM6000 and therefore I can't tell you the actual behaviour of a working unit. I hope that some other beoworld members will chime in - I know there are some very experienced people here on this forum.
My previous answers were based on general experience in electronics and the info I get from reading the circuit diagrams in the service manual.
ThomasF: With the other volume buttons (0-60), I had to insert a delay for ~2 seconds, since when releasing the button the motor stops immediately (before reaching the wanted volume) so I had to simulate that the button is pressed long enough until the wanted position is reached. Even if the button is pressed longer the motor stops when the position is reached (not so with up and down button ...).
Hmmm...2 seconds? Why? And what happens to the outputs after those 2 seconds???Looking at the circuit diagram and page 6-7 of the service manual I would think that those volume preset buttons should be latched, ie. once the uP detects a button press, it sets the 6IC6 inputs A/B/C/D as per truth table on page 6-7 and keeps it that way until another button that acts on 6IC6 is pressed.The only exception is "Vol up" and "Vol down": they are momentary, ie. you set the outputs as per truth table for as long as either button is pressed and then you set ABCD to 1111.
Regarding Vol up/down, I first thought that the end position will be detected via the slave volume potentiometer 5R6 somehow, but then I noticed that this pot is actually disabled as long as pin 12 of 6IC6 is high. So, as per the functional description in the service manual it seems that the motor keeps running for as long as Vol up/down are pressed.On the other hand that doesn't feel right and it's not B&O-like...
I think here we really need someone who knows how this up/down action reacts in an original BM6000!
manfy: ... it seems that the motor keeps running for as long as Vol up/down are pressed.
... it seems that the motor keeps running for as long as Vol up/down are pressed.
It does.
Martin
manfy: Hmmm...2 seconds? Why? And what happens to the outputs after those 2 seconds??? Looking at the circuit diagram and page 6-7 of the service manual I would think that those volume preset buttons should be latched, ie. once the uP detects a button press, it sets the 6IC6 inputs A/B/C/D as per truth table on page 6-7 and keeps it that way until another button that acts on 6IC6 is pressed.The only exception is "Vol up" and "Vol down": they are momentary, ie. you set the outputs as per truth table for as long as either button is pressed and then you set ABCD to 1111.
Hmmm...2 seconds? Why? And what happens to the outputs after those 2 seconds???
Looking at the circuit diagram and page 6-7 of the service manual I would think that those volume preset buttons should be latched, ie. once the uP detects a button press, it sets the 6IC6 inputs A/B/C/D as per truth table on page 6-7 and keeps it that way until another button that acts on 6IC6 is pressed.The only exception is "Vol up" and "Vol down": they are momentary, ie. you set the outputs as per truth table for as long as either button is pressed and then you set ABCD to 1111.
Thats how I first implemented it, but that didn't work for up/down, so I changed the implementation so the code output was removed when the button is released. But, then vol0-60 failed so I introduced a delay for ~2 seconds for these buttons.
But as you say, a better solution would be to just keep the output for all vol0-60 keys, but keep up/down momentarly.
Dillen: It does. Martin
Thanks Martin - then I know! A bit hard when I never had a chance to use a working BM6000 and try to implement the firmware just from the schematics and wild guessing ...
But, so far so good - radio works fine, so implementing the timers 1 and 2 is next on the list before I dig into the remote control, saving the datalink to last ...
BTW, I saw a YouTube-clip with the BM6000 and it looks as if the DP1 display shows 4 symbols ("nnnn") when the "OK" button is pressed while listening to the radio, are there other strange display patterns not mentioned in the manual ... ?
The "panic" sign (four people with their arms in the air) is the Beomasters way of telling you, that you asked it to do something it can't or doesn't understand.Like if f.e. keying in a wrong time or if you try to switch signal source on the Beomaster while the Beocord is recording.Martin
Thanks, Martin, for the info!
ThomasF: Thanks Martin - then I know! A bit hard when I never had a chance to use a working BM6000 and try to implement the firmware just from the schematics and wild guessing ...
Indeed, that can lead to a lot of trial and error versions of the firmware. But you could always ask the coder who programmed the BM6000, Arne Rohde! Well, to start off, you might just want to read his blog https://beomikro.wordpress.com/
I just tripped over this today by accident and for a coder it's incredibly informative - particularly the info on the remote control and data link.If your Danish is just as rusty as mine (in other words, if your Danish does not extend much beyond the word "smørrebrød" ) you can run it through Google Translate, which does a very good job with this!
Just a sample from the BM6000 section:
The first development project where I was given the freedom to write a program all over again was Beomaster 6000, where Lars Friis Østergaard developed digital electronics and was responsible for programming.[...]However, the program came to resemble the others with a timer interrupt routine performed every 1.04 ms to read remote control input, link input and output, keyboard input, display output and the like. And then a main program like a long loop to take care of all the things that were not so time-critical.
Thousands thanks manfy!
Wow - yes that was a wonderful site! I had not seen it before - and as a Swede I have no problem to read Danish!
I will surely read the chapter about the remote control and the datalink before I start to try to implement it!
Hello Thomas,
Nice job ! Hope you get all the functions back in working order with your firmware.
I believe your BM6000 does not implement the "new" datalink (86) , but rather the older version ( someone correct me if I am wrong ).
I have a Beosystem 5500, which implements both, the "old" version between the beomaster and the beogram / beocord, and the "new" version between the beomaster and the auxiliary devices ( speakers, remote, etc ... ).
I have spent some time reverse engineering the "old" protocol, as I could not find any documentation for an old project of mine.
This was a first attempt at making a datalink-enabled bluetooth receiver, but the chip I used turned out to only support the lowest quality bluetooth codec.
Anyway, I gathered some knowledge about the "old" datalink protocol, you can find all my notes in my project git repo : https://gitlab.com/Pilatomic/beobridge/-/tree/master/datalink
Keep up with the good work !
pilatomic: Anyway, I gathered some knowledge about the "old" datalink protocol, you can find all my notes in my project git repo : https://gitlab.com/Pilatomic/beobridge/-/tree/master/datalink Keep up with the good work !
Hi pilatomic!
Thanks for your comment! I will surely be helped by your comments and notes when trying to implement the datalink.
I also previously got a link to another github project where an Arduino is made to receive the datalink commands. Since I don't (at least yet ) have any compatible B&O devices I will setup one Arduino or ESP8266 as a receiver on the datalink to verify the implementation.
Thanks all for good comments and information - I will update with more information on how I manage to go on! At the moment the code is a bit messy (a lot of hacks for testing and prototyping) and I need to fix the led to be able to get correct values on the display - new leds are on its way .
pilatomic: Anyway, I gathered some knowledge about the "old" datalink protocol, you can find all my notes in my project git repo : https://gitlab.com/Pilatomic/beobridge/-/tree/master/datalink
Excellent job, pilatomic! I guess you have been spending quite a bit of time testing and analyzing those signals. Looking at your conclusions in the data.txt file, I'd assume you have gotten those results by analyzing a BeoCenter amplifier and not just the BeoMaster 6000. The commands available on BM6000 seems limited to 37, whereas BeoCenter systems used an extended version of the "old datalink".
I read a bit more in Arne Rohde's blog and there's really lots and lots of interesting info and background in there.If you're in a hurry, Thomas, all you need to read is the beginning of the remote control page (https://beomikro.wordpress.com/fjernbetjening/) and Tom Jelsing's preliminary datalink draft from 1979 (https://beomikro.files.wordpress.com/2020/11/datalinkprotokol.pdf) and you know pretty much all there is to know for programming the BM6000 remote control and datalink! (page 7-10 of the pdf-file says it all!).
The only thing that's still open is how they mapped a few remote control buttons to that protocol from '79. (My guess is that Vol10/Vol30/Vol50 buttons are mapped to P7/P8/P9 respectively, mute button is probably mapped to 'FILT' and P and RESET are mapped to 'balance<', 'balance>', and/or 'NOINP')This can be measured with a logic analyzer or digital scope on pin 13 (datalink) and pin 14 (remote) at the CPU (or with the Arduino project mentioned above) .
manfy: I read a bit more in Arne Rohde's blog and there's really lots and lots of interesting info and background in there.If you're in a hurry, Thomas, all you need to read is the beginning of the remote control page (https://beomikro.wordpress.com/fjernbetjening/) and Tom Jelsing's preliminary datalink draft from 1979 (https://beomikro.files.wordpress.com/2020/11/datalinkprotokol.pdf) and you know pretty much all there is to know for programming the BM6000 remote control and datalink! (page 7-10 of the pdf-file says it all!).
Wow, thank you very much for the link, that blog is a gold mine !
Deciphering it (I do not know danish), especially the PDF, and discovering that it matches my reverse engineering effort is awesome !
pilatomic: Wow, thank you very much for the link, that blog is a gold mine !
Absolutely! Readers shouldn't expect ready-to-use child-proof details but all the bits and pieces of information are a treasure trove for every hacker or reverse engineer who's been pondering over details of the remote control format, ML, MCL, datalink and so much more!
pilatomic: Deciphering it (I do not know danish), especially the PDF, and discovering that it matches my reverse engineering effort is awesome !
Google Translate is your friend! Deciphering the handwriting in those files, however, is a different story altogether...
Maybe this - in english - could be of interest:
https://beomikro.files.wordpress.com/2020/12/infrared_and_homelink.pdf
MM
There is a tv - and there is a BV
Thanks, Millemissen. But that's the datalink '86 version and considerably different from the "old" datalink version and therefore probably not directly applicable in the case of the BM6000.Additionally, readers should pay attention to the magic words on the first page: "arbejdspapir, der er under stadig udvikling", i.e. it's an internal draft version of datalink '86 and may not represent the official, final version that was implemented in products from 1986 onwards.
Nevertheless, it is extremely useful for analyzing the structure and command codes of datalink '86 and goes well beyond the formally published description of that protocol.
manfy:Indeed, that can lead to a lot of trial and error versions of the firmware. But you could always ask the coder who programmed the BM6000, Arne Rohde! Well, to start off, you might just want to read his blog https://beomikro.wordpress.com/
There is now an English-language version of a large part of that site at https://beomicro.wordpress.com
The appendices with colleague contributions and the majority of the Danish-language downloadable documents have not been translated. Most of the documents in Danish are only available from the Danish-language site.
Thanks! That makes things easier.
Hi all,
Short update on my progress with the Beomaster 6000 restoration.
I have worked a bit with the frequency counter, so now the device shows the (almost) correct frequency for the selected radio program. I have no FM-transmitter so I have not been able to correctly trim the radio.
I have also included Terminal support, so the old remote control (2035) works fine with the unit, next step will be to build an Arduino Datalink receiver so I can implement and check the Datalink output as well!
One thing I have noticed while developing my new firmware, is that the display kind of repair itself ... I had about 10 segments that didn't work but now only 2-3 are still failing. I have checked the soldering etc, and since the same segments works on other digits, it must be the actual led that are failing, but some leds have come back to life. Since some are still failing, all the leds will be replaced but that has lower priority now.
The clock is also working, and the next step is to implement the two timers as well ...
So, it looks promising, and the goal seems to be in reach for a fully working device!