HDMI DDC keypad for simple control of Dell monitor



Have you ever been annoyed about how many steps it requires to simply adjust brightness on a modern computer monitor? And even worse; you'll have to navigate it's menu system with a super tiny joystick hidden on the back side of the monitor. Here's a solution with a standalone keypad to control all the commonly used features in a monitor with a single keypress.

The problem

About a year ago I bought a Dell U3421WE monitor. One of the main reasons I bought it is because it has a built in KVM switch, and even picture-by-picture support to allow two different sources/computers to be displayed at the same time. I'm generally happy with the monitor, but I've almost never used some of the features I bought it for - simply because there's so much fiddling required with a tiny joystick. In search for a different way to control the monitor, I tried ddcutil, but it didn't really work for me in this case (I use ddcutil for other purposes, and don't get me wrong; it's a great tool). First I tried to keep it installed on all the computers I use (because they share the same keyboard), which was not achivable because not all sources run Linux and they might be under setup etc. I also tried to keep it installed on one computer with a dedicated keypad that was directly connected to the computer (not behind the USB switch in the monitor), but then I had to make sure that computer was always connected and running. Again, I wanted something that would always work, independent of what computers I were currently using.

The solution

Being a fan of rackmounting everything, I wanted to make a standalone microcontroller based rack mount device with proper mechanical keyboard buttons to enable single keypress control of these features:
  • Adjusting brightness up and down in reasonable steps (not 1 % steps like the monitor does)
  • Toggle picture-by-picture mode
  • While in PBP mode, being able to toggle USB (keyboard and mouse) from left to right monitor
  • Change source (USB-C, DP, HDMI1 and HDMI2)
The solution involves using the display data channel (DDC), which is simply an I2C bus available on the HDMI connector for controlling the monitor. I sent all the commands I needed, and used a logic analyzer to get the payload I needed to send over I2C.

As my monitor only has four inputs, I didn't want to "waste" one of the four ports just for control, so I needed a HDMI "thru" port on the device. This actually turned out really handy, as now I can very easily connect a computer temporarily to my monitor without fiddling with the ports on the back side of the monitor.

Parts (the most significant ones): Here's the complete build, with a custom PCB and a CNC routed front panel:

img img img img img img

And, finally mounted in rack:



You need to be logged into Facebook in the browser for comments to appear

Design: Jon Petter Skagmo