Bang & Olufsen Beomaster 2400

BeoMaster 2400 Volume

This beautiful piece of design from Bang & Olufsen is now 36+ years old. Some features include touch sensitive controls (pioneered on the Beomaster 1900 a year earlier), an ultrasonic remote control and 5 preset FM stations.

BeoMaster 2400 PCB

As with most electronic equipment, electrolytic capacitors are common points of failure. A summary of why this can happen is explained here. Replacing these and the bridge rectifiers, also known to be a problem point, will significantly extend its useful life.

Assembly of BeoMaster 2400

It’s quite a complicated assembly, mainly due to its compact design.

BeoMaster 2400 Removed Electrolytics

The replacements are all smaller than their 70’s counterparts and long-life versions have been chosen where possible. The rectifiers have been swapped for uprated versions.

BeoMaster 2400 Replaced Capacitors and LDR Volume Control

The replaced components can be found in the table below and have been highlighted in the BeoMaster 2400 Service Manual.

B&O Reference Type Value Replacement Part # Mfg V Rated Hours Link
4200098 Cap 100uF EEUFR1H101 Panasonic 50V 6000 @ 105°C Link
4201065 Cap 10uF EEUEB1J100S Panasonic 63V 5000 @ 105°C Link
4200298 Cap 1uF EEUEB1J1R0S Panasonic 63V 5000 @ 105°C Link
4200296 Cap 2.2uF EEUEB1J2R2S Panasonic 63V 5000 @ 105°C Link
4200332 Cap 2200uF MAL202117222E3 Vishay 40V 8000 @ 85°C Link
4200097 Cap 220uF EEUEB1E221S Panasonic 25V 5000 @ 105°C Link
4200100 Cap 22uF EEUEB1H220S Panasonic 50V 7000 @ 105°C Link
4201061 Cap 4.7uF EEUEB1J4R7S Panasonic 63V 5000 @ 105°C Link
4200092 Cap 47uF EEUFR1J470 Panasonic 63V 5000 @ 105°C Link
4200305 Cap 5000uF ECOS1VP682CA Panasonic 35V 3000 @ 85°C Link
4200109 Cap 470uF EEUFR1C471 Panasonic 10V 6000 @ 105°C Link
8310275 B.R GSIB2520-E3/45 Vishay / I.R Link
8300277 B.R VS-KBPC602PBF Vishay / I.R Link
5370174 Pot 220R CB10LV221M Tyco Link

3M Microtouch touchscreen emulator in Python

A colleague asked about virtualising a touch screen DOS application, designed for use with a microtouch touch screen interfacing over RS232. The familiar story of the monitor / old PC hardware dying and replacing it seemed a shorter term solution to a problem that could be solved with virtualisation or emulation. Note: This software no longer has any external hardware connected.

The proposal:

  1. Virtualise or emulate the application within the windows environment.
  2. Link the application to a serial port on the host system (virtual or real)
  3. Write a touch screen emulator to simulate presses using mouse clicks within the application window.

VirtualBox and VMWare Workstation are two virtualisation solutions that support mapping host serial ports to virtual ports. After attempting to use both of these, the timing critical nature of this specific DOS application upon startup didn’t like [my suspected]  lag of the virtualised ports. Running it again in DOSBox, a x86 emulator, resolved this issue. Virtual Serial Port Emulator is a tool to create virtual ports that can act as a connector between programs. This maps the serial streams from the touchscreen emulator to the serial port DOSBox is looking for in this case (how-to configure DOSBox serial ports).


Finally, the touch screen emulation is written in Python as a quick and simple way to test it out. PyHook is used to capture mouse clicks and mouse position, while PySerial is used for all serial communication. This program  will firstly respond to a handful of serial commands that are required upon loading the system in DOSBox. Once in, it will ask you to calibrate the emulated touch screen by clicking the top left and bottom right of the application window. It will only action on clicks in the specified window, in this case, DOSBox. Each click within this area will be mapped across the standard 10 bit vertical and horizontal touch screen space and sent to the serial port specified.

Please note that this has been tailored to the application that I’m running – but can be easily tweaked / amended as necessary using the microtouch reference guide. The shell output:


The DOS application running  – with some numbers entered through the emulator using a mouse.


Scraping data from the BBC with Python

There is an annoying tendency of the BBC News site to have numerous ancient stories in their ‘Popular’ sidebar. It was a good excuse to try out Python and collect a bit more information on when this occurs.

This Python script follows the following process:

  • Visit the BBC News homepage and scrape the ‘Most Popular’ sidebar.
  • Visit the URL of each story.
  • Collect the published date (from the meta data and front end)
  • Calculate the difference between present date / time and the published date.
  • Store the data as a CSV file.
  • Repeat the whole process every n minutes or seconds.

Beautiful Soup makes relatively light work of parsing what we want, along with PrettyTable, CSV, Regular Expressions and Requests.

Running this in IDLE shell looks like this:

and some of the ‘old’ results collected over a 3 hour period can be seen in this spreadsheet . Out of 46 news stories listed under popular stories during this period, 21 were over 67 days old!

Creating a Timelapse from a CCTV DVR

If you have a Dahua, QVIS or similar DVR that works with PSS software, processing the video into a timelapse isn’t easy – it has an odd file format, it is segmented by the hour (my DVR only encoded one key frame per hour too), the tools are awkward with 100+GB of video and generally timelapses are created from stills, not video. I’ve put together a brief guide on one way of doing this – in my case combining three weeks of footage from 3 cameras at 6fps and combining them into a <2 minute timelapse. You will need the following tools:

This assumes you’ve used PSS before and can download .dav files in hourly segments. Firstly, download all of the hourly segments using PSS for each camera.  Using the batch file converter, select the folder with the .dav files in and let it do its thing.


Now that you have a folder full of converted files, combine the files into more manageable groups. Using three cameras,  I organised by /camera name/dd_mm.avi and concatenated the eight hours from each day into a single file – the trick is to do this without with needing to re-encode anything (and losing quality). Avidemux does this with its Append feature (Ctrl+A shortcut).

Open the first file and repeat the Append function for each subsequent file. When finished use the save function to save the file as a .avi.  You may be able to skip this Append step and concatenate all files using a single step in Avisynth, see below, depending on the number / size of your files.

Tiling the three camera views and combining days

To tile and combine these daily streams, Avisynth is the right tool. Create a new text file putting

dir /s /b >filelist.txt

as its contents. Rename to .bat. Run a copy of this in each folder and you’ll have a file listing in a new text file. Create a new file in Notepad++ and use the search and replace to make the list match this formatting for each camera (A, B, C, D etc).

A=UnalignedSplice(AVISource("D:\timelapse\front\front_1_02.avi"),AVISource("D:\timelapse\front\front_2_04.avi"),AVISource("D:\timelapse\front\front_3_05.avi"),AVISource("D:\timelapse\front\front_4_06.avi"),AVISource("D:\timelapse\front\front_5_07.avi"),AVISource("D:\timelapse\front\front_6_08.avi"),AVISource("D:\timelapse\front\front_7_11.avi"),AVISource("D:\timelapse\front\front_8_12.avi"),AVISource("D:\timelapse\front\front_9_13.avi"),AVISource("D:\timelapse\front\front_10_14.avi"),AVISource("D:\timelapse\front\front_11_15.avi"),AVISource("D:\timelapse\front\front_12_18.avi"),AVISource("D:\timelapse\front\front_13_19.avi"),AVISource("D:\timelapse\front\front_14_20.avi"),AVISource("D:\timelapse\front\front_15_21.avi"),AVISource("D:\timelapse\front\front_16_22.avi"),AVISource("D:\timelapse\front\front_17_25.avi"),AVISource("D:\timelapse\front\front_18_26.avi")).AddBorders(4, 0, 0, 4))

There are only three feeds in my case, so I added a fourth blank image in the unused area. These four entities can now be stacked.

D=ImageSource("d:\timelapse\spare.bmp", end=2000, use_DevIL=true).AddBorders(4, 6, 0, 0).ConverttoYv12()


Add the above code at the bottom of the new file and save as a file with the extension .avs. This is an Avisynth file, that will play like any normal video in Media Player Classic using Avisynth as a frameserver.

This will result in a tiled, combined, unedited stream of all of the footage with regular keyframes for editing.


The 1 hour between keyframes means it takes too long to skip to frames using Avisynth as a frameserver. This delay makes it impractical to edit the video. To eliminate this open the .avs in VirtualDub and use the frame rate control option to increase the source frame rate as appropriate (I changed it from 6 to 60fps) and speed up playback.  Using Lagariths lossless codec, export to a new file. This file was ~450GB in my case.

To quickly scan through that footage, play the resulting file in Media Player Classic using Ctrl+Up to fast forward, Space to pause and Left / Right arrow keys to step frames. Each time you find a Start or Stop point, press Ctrl+G and copy the frame number to a spreadsheet. Export as a CSV and use search / replace in Notepad++ to create a new file with the start/stop frame numbers in the following format.


Open this new .avs file in VirtualDub. Using the frame rate control option again,  change both the Source rate adjustment and Frame rate conversion. Keeping ‘Convert to fps’ at 60, adjust the Source rate adjustment to a higher figure to increase the speed at which the final output will be played.

VirtualDub frame rate adjustment

Finally, change the video encoder to x264vfw in VirtualDub (Ctrl+P) and go to ‘Save as AVI’ (F7).

disclaimer: there are probably ways of doing this with fewer tools / steps.