De-Dead Zone

Improve the performance of the Dreamcast's race controller with a simple microcontroller circuit.

The official race controller for the Sega Dreamcast has a very large dead zone. This is an area around the neutral position where the wheel does not register any input – you need to move the wheel outside this dead zone before the car in the game you're driving starts to turn left or right.

The dead zone should be large enough that any limitations of the wheel's centring mechanism or position detection can be compensated for (you don't want the car to drift when you let go of the wheel) but small enough that you can't notice a delay between when you start turning the wheel and the car starting to respond.

The Dreamcast's race controller does not succeed in this, unfortunately. I found that when I was playing games I would end up turning the wheel further or faster than I wanted to skip past the large dead zone, going too far in one direction so would have to correct by steering the other way, and as the dead zone affects both directions the problem would recur in the opposite direction and I'd end up oscillating down the track.

The De-Dead Zone attached to the stock controller PCB

The De-Dead Zone is a simple microcontroller circuit (pictured above) that can be added inside the wheel to convert its large dead zone into a small one and improve its performance significantly.

Leaving the Dead Zone

Unfortunately, the dead zone is implemented in the race controller itself rather than in the game software. This means you cannot fix the problem by decreasing the size of the dead zone in the game software, as in most cases it's normally set to 0 already.

The wheel does still allow for fine adjustments once you've managed to leave the dead zone. To break out of the dead zone we can read the wheel position directly, and if it's to the right at all add a large constant to its position to push it to the right of the dead zone and if it's to the left at all subtract the same large constant from its position to push it to the left of the dead zone.

This way small movements near the dead zone will be translated to large movements as an intermediate stage, and these large movements are then converted back to small movements by the existing controller hardware with its large dead zone.

Hardware Considerations

The race wheel is mounted to a 100KΩ potentiometer which is used to detect its position. This is connected via a 3-pin connector to the controller PCB where two of the wires carry VCC and GND and the other is connected to the potentiometer's wiper to produce an analogue voltage corresponding to its position. We can unplug this connector, plug the 100KΩ potentiometer into our own board to read its position, apply a correction in software to force it outside the dead zone, and then output the corrected position via another 3-pin connector to the original controller PCB.

The De-Dead Zone board on its own

I opted for the ATmega8 for this project as it has a 10-bit ADC for analogue input, 10-bit fast PWM for analogue output, and was the cheapest ATmega I could find when searching online and sorting by price. I did initially start prototyping with an ATmega168 and both versions of the source code are currently available (depending on how you define MCU in the Makefile) though it should be easy to port to other chips in the ATmega family.

The De-Dead Zone board mounted inside the controller

To mount the De-Dead Zone to the inside of the race wheel I unscrewed the controller PCB from its plastic bracket and marked my board where the three holes on the existing PCB lined up, making sure there wasn't any overlap with solder points on the back of the controller PCB. I then drilled those holes and used plastic clips in the outer two to clip the two PCBs together loosely. One of the screws that attached the controller PCB to its plastic bracket then passes through the middle hole to hold everything securely together.

Software Features

When enabled the software greatly reduces the size of the dead zone, making the wheel considerably more responsive.

It also slightly decreases the strength of your input; this is because in the default configuration the wheel hits its reported minimum or maximum turning position quite a way before it hits the physical minimum or maximum limit stops. By decreasing the strength of your input you can enjoy a greater range of motion with the wheel.

Both of the above adjustments can usually be calibrated in game software, so if you want to return to the wheel's original behaviour (or find a happy medium somewhere between the two) you can reduce the impact of the adjustments in the game software's calibration options.

At least one game (Tokyo Highway Challenge) seems to have been designed specifically with the wheel's original characteristics in mind and as a result feels very twitchy when the software corrections are enabled (especially in the game menus). Unfortunately, this game also lacks a calibration menu option.

The De-Dead Zone software therefore provides a way to disable its corrections at start-up:

The first time you use the controller after programming the microcontroller it is uncertain whether the corrections will be enabled or not so you should turn the wheel one way or the other to select your preference. The software's status will be remembered once the console has been switched off so you don't need to worry about enabling or disabling the software every time you switch the console back on again after that, though.

Downloads

To view the latest version of the project's files see DeDeadZone on GitHub.

Alternatively, you can also download original source code, makefile and circuit diagram bundle (DeDeadZone.zip) from this site.

PCB design and tutorial

n00b on circuit-board.de has developed a PCB and written a full tutorial for this mod, please see https://circuit-board.de/forum/index.php/Thread/32259-TUT-Sega-Dreamcast-Racing-Wheel-Controller-Dead-Zone-Fix/ for more details, and the tutorial contains links where you can order a PCB.