MCP – Mode Control Panel


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.

As December 2014, 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 MCP panel from

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

The backlight PCN included into the MCP panel from

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.

Korry from OpenCockpits

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):

MCP Control Board Face 1

MCP Control Board Face 2

Once all the components have been soldered:

MCP Control Board 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 (ETA: 2017)

Driver for PMDG

Work In Progress (ETA: 2017)

2 thoughts on “MCP – Mode Control Panel

  1. Kev Townsend

    Hello Guillaume

    I am Kevin from Farnborough in the UK.
    I am beginning the journey of my 737 home cockpit also, and i have discovered your super work through Github.
    I have also been working to create the MCP using an Arduino Mega rather than the STM-32 that you use but it still resembles spaghetti linked across small pieces of old pcb. I must say your layout appears extremely professional. I am trying to work out the next layer of connections linking your board to the displays and switches.
    Do you suggest that PMDG have also supplied a driver for their 737NGX which could interface?

    I would very much like to follow your lead and try to recreate a similar layout, but for Arduino.
    I know you have posted these project details online, thank you, but I felt I should make contact with your permission of course.

    Thank you so much


    1. Guillaume Post author

      Hello Kevin

      Thank you for your message! I have been extremely busy since the birth of my daughter in January 2015 so the progress of the MCP has been very slow… Of course you can use everything that is published on the website for your own project. I am very happy to learn that it was useful for someone else 🙂

      PMDG provides an SDK (Software Development Kit) that enables external applications to interact with the PMDG 737 (and also 777). I plan to use this SDK so the hardware board can communicate with the 737. However, due to licensing constraints imposed by PMDG (that’s what I have understood at the first read, I need to carefully read it again to confirm), I will probably not been able to publish the source of this piece of code. So I will try to reduce to the minimum the part of the software driver for my MCP board that I cannot published.

      Best regards and good luck for your project!



Leave a Reply

Your email address will not be published. Required fields are marked *