This page describes the MCP (Mode Control Panel) I am building for my 737 cockpit project. The aim is to replicate a 737 Collins MCP that is fully functional with at least Microsoft Flight Simulator X and the excellent PMDG 737 NGX.

Of course, several ready-to-use MCP exist (such as: this one from CPFlight, this one from Flyengravity, or this one from OpenCockpits) but I prefer to do the electronics and the software parts myself.

The rest of this page describes the building of my MCP: the hardware (panel, korrys, knobs…), the electronics (the control board) and the software (drivers). I publish all I have created (such as the schematics of the control board, the firmware, the drivers, etc.) under open-source licenses so you can easily reuse them to create you own MCP.

The MCP is still a work-in-progress so this page is not yet finished and more information will be added later.



The panel by itself comes from However, it seems that, at the time of writing, the panel is no longer available. A photo of the panel:


The panel is backlighted thanks to two thin PCB with small light bulbs embedded inside the panel. A photo of the backlight PCB:

Backlight PCB

This panel is really great however, the quality of the backlight PCB is a bit disappointing: one of the two PCB is not properly cut and some light bulbs are not properly soldered.


The korrys come from OpenCockpits. I have described them in details in this post.


Electronics (Control Board)


The control board manages the different components of the MCP:

  • 23 seven-segment displays
  • 14 korrys (one pushbutton, one LED for the label and one LED for the green bar)
  • 6 rotary encoders
  • 3 pushbuttons
  • 3 switches
  • 3 discrete LED
  • 2 backlight PCB for the panel

The control board is built around an Olimex STM32-H405 board which contains an ARM Cortex M4 with 1 MB of flash, 192 KB of SRAM and several buses, notably one USB, which is used for the communication with the PC and two SPI buses which are used to communicate with the different components of the control board.

The control board itself is based on the following core components:

  • Three cascading MAX7221 connected to one of the SPI buses of the STM32. They manage the 23 seven-segment displays
  • Three cascading MAX6957 connected to another SPI bus of the STM32. They manage all the other inputs (korrys, pushbuttons, switches and rotary encoder) and outputs (korrys and LED)
  • Two TIP120 Darlington transistors connected to a PWM output of the STM32 to control the backlight

The rest of the control board is composed of SN74AHCT125N chips for level conversions (the STM32 board uses 3.3V and the MAX chips 5V), lots of connectors (around 100!) and some discrete components.

Schematic & PCB

The schematic and the PCB have been design using KiCad, an open-source EDA software suite available for Windows, Mac OS X and Linux.

You can download the whole KiCad project from my GitHub repository: mcp-control-board (it is located inside the directory kicad). The KiCad project is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.

If you do not want to browse the project, the schematic is directly accessible here: mcp_control_board.pdf (PDF).


The two faces of the PCB revision 1 (which was manufactured by PCB-POOL):

PCB front

PCB back

Once all the components have been soldered:

PCB with components



The firmware is the code that runs on the STM32-H405 board. It manages the communication between the PC and the board. When the board is plugged into a USB port, the firmware announces itself as an HID-class device.

The full sources of the firmware, which is based on the ChibiOS/RT real-time operating system, are available on my GitHub repository: mcp-control-board (it is located inside the directory firmware). These sources are licensed under the GNU General Public License version 3.

A short description of the sources and of the communication protocol between the board and the PC are given in the README file.

Test tools

Work In Progress

Driver for PMDG

Work In Progress