Skip to content
Open-source Bekant controller board
HTML C++ PowerShell Other
Branch: master
Clone or download
This branch is even with gcormier:master.

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.
Connector Footprint
Reverse Engineering
MCP2003B Reference.png
PCB and Housing.png


Custom Arduino-based Bekant controller. Design goals were to have it fit in the original housing and use as many stock parts as possible, be completely independant of the existing controller, as well as store any number of memory positions.

As of November 2019, version 4 is now a one-sided board for ease of assembly! The BOM remains unchanged.

Kits or Fully-assembled versions

I've setup a store on Tindie for those who wish to order parts or an assembled version.


Unfortunately the beeps aren't captured well in the video unless you turn up the volume.


  • Plugging in any connectors backwards can probably damage your desk. Be very careful when working on your circuit.

  • The power supply is 24V, and raises higher when motors are in operation! (Between 35-37V) This can generate a decent amount of heat for the linear regulators. Make sure to use genuine name brand regulators, and check the heat output before putting it back inside the casing and attaching it to your tabletop. Ensure to spec the main filtering capacitor appropriately (50v).

  • Do not use ATTinyCore 1.2.2, it contains bugs that will prevent proper operation.


  • Use up/down buttons as per factory module (long press/hold)
  • To store in a memory slot, push the up button a certain number of times, but long-hold the last press until you hear some beeps corresponding to the memory position that has been saved.
  • To recall a saved position N, push the up button N times.


So far, a second variant to the protocol has been found. It is the larger sized BEKANT, so it is possible it has different motors.

These motors report their "idle" status value as 0 instead of 96, which can cause the buttons to not respond. Pressing the memory button 16 times will play a tone and toggle the value (saved in EEPROM for persistence) that it will use.


Make sure to pick components with suitable values (ie 50V for capacitors)

The piezo buzzer is pricey, but worth it for the audible feedback.

Part Number References Value Footprint Quantity
1 C3, C4, C5 0.1uf C_1206_3216Metric 3
2 C1 0.33uF C_1206_3216Metric 1
3 C2 10uf-DNP C_1206_3216Metric 1
4 C6 220pF C_1206_3216Metric 1
5 R1, R6 1k R_1206_3216Metric 2
6 R4, R5 2.2k R_1206_3216Metric 2
7 R3 4.7k R_1206_3216Metric 1
8 D1, D2 1N4148 D_SOD-323_HandSoldering 2
9 U3 ATTINY841-SSU ATTINY841-SSU SOIC-14_3.9x8.7mm_Pitch1.27mm 1
10 U2 L78M05CDT L7805 TO-252-3_TabPin2 1
11 U1 L78M12CDT L7812 TO-252-3_TabPin2 1
12 U4 MCP2003B-E/SN MCP2003B SOIC-8_3.9x4.9mm_Pitch1.27mm 1
13 TP1 5VLOGIC Pin_Header_Straight_1x01_Pitch2.54mm 1
14 TP2 12VLIN Pin_Header_Straight_1x01_Pitch2.54mm 1
15 CON1 ISP Pin_Header_Straight_2x03_Pitch2.54mm 1
16 BZ1 CPT-9019S-SM Buzzer Buzzer_CUI_CPT-9019S-SMT 1
17 J1 Interface Pin_Header_Angled_1x03_Pitch2.54mm 1
18 J2 1-84981-0 FFC FFC_10 1


If you want to create your own cable, the connector is AMP VAL-U-LOK by TE Connectivity - PN 1586106-3. Don't forget the crimp pins - Part Number 1586317-1 for 26-22AWG. Otherwise, the existing cable can be unsoldered from the board and fitted with a standard 2.54mm pitch header. Red is positive (24VDC), white is negative, blue is LIN.


  • Holding UP while powering on will enter a button test mode, where the up/down buttons can be held to test that they are working - a power cycle is required to exit this mode.
  • Holding DOWN while powering on will wipe the EEPROM memory - a power cycle is required to exit this mode.
  • When powering on, a series of 4 beeps will happen. The 4th beep indicates megadesk has established a connection with the desk over the LIN bus. Note that this 4th beep will be heard when programming the device.
  • There is a single empty hole on the OEM board which you can solder a single pin to for a logic analyzer to view the protocol.
  • Megadesk has a 5V logic test point which you can use to view the LIN bus traffic with 5V logic levels. It also has a 12V test point which will reflect the actual bus line.

Atmega Fuses

Don't forget to set fuses on your board for the appropriate oscillator.

ATTiny 841 - 8Mhz internal avrdude -c usbtiny -p t841 -U lfuse:w:0xe2:m

Current Measurements

16mA on the Atmega 328P, 3mA on the MCP2003B.

You can’t perform that action at this time.