One-touch turn signal module

From E31Wiki
Jump to: navigation, search
One-touch turn signal module

The one-touch turn signal (OTTS) module enhances the functionality of the turn signal lever by adding a mode where a single touch makes the indicators blink for a certain number of times. This behavior is also known as lane change turn signal or comfort blinker. This article is written with the BMW 8 Series in mind, but the module can be used in other cars too. See compatibility for more details.


This article describes the third and currently latest version of the one-touch turn signal module. The third revision brings no new features over the second revision but was designed to be compatible with more different types of cars. Unlike the older versions the new revision uses solid-state components to switch instead of relays. This increases long-term reliability, decreases power consumption and allows silent operation.


The OTTS module offers three distinct features which increase the overall turn signal experience and give a more modern touch to the car.

  • Comfort mode: When the turn signal lever is activated, the module enters the comfort mode and completes a preset number of blinks – even when the lever is released before this number. This is useful for highway lane changes where a single short tap on the lever will produce a sufficient number of blinks to properly inform surrounding drivers of your maneuver. The comfort mode can be set to three different numbers of blinks or be completely disabled using the DIP switch on the module. This can be done on the fly and requires no reprogramming of the microcontroller. If you want different numbers, change the values in the source code and reprogram the microcontroller.
  • Canceling: When the turn signal lever is activated for a period longer than the cancel time, the comfort mode is disabled and the module will stop the flasher relay when the lever is released – even when not all comfort blinks have completed. The comfort mode is normally activated by a short tap on the lever. By holding the lever just a moment longer, the comfort mode disables and makes it possible to blink fewer times than the set number of comfort blinks. The canceling can be set to three different periods or be completely disabled using the DIP switch on the module. This can be done on the fly and requires no reprogramming of the microcontroller. If you want different periods, change the values in the source code and reprogram the microcontroller. When the comfort mode is disabled, the canceling has no effect either.
  • Full flash: When the turn signal lever is released at a moment when the indicators are still lit up, the module waits to deactivate the flasher relay until the blink is completed. This makes all blinks equal in length. This feature cannot be disabled in the OTTS module.


  • The module is designed to operate at 12 V – as is the case in nearly all cars.
  • The OTTS module is only compatible with cars that use a three-way switch in the turn signal lever. The middle position is the rest position where neither side blinks and usually has no exposed contact. A typical turn signal switch has three wires: the shared contact, the left signal and the right signal. Newer cars like the E46 use a special switch which defines direction by resistance instead of switch contacts to save a wire. The OTTS module is not compatible with this but these cars are often already equipped with comfort mode which is – if not enabled – either user configurable or dealer programmable. The image below shows the modes supported by the OTTS module.
Supported modes

Please note that between each mode there are minor differences in hardware and software of the OTTS module – make sure to build the correct version for the target vehicle! This article focuses around the BMW 8 Series or similar cars where the shared contact of the turn signal lever switch is connected to the positive terminal and the flasher relay switches the turn signal lamps between positive terminal and lamp (PP version). The other modes are discussed in separate articles:

Time diagram

The time diagram below shows the differences between the original turn signal behavior in the BMW 8 Series and the OTTS module, and provides some insight in the working of the module:

Time diagram

Original mode

  • Position 1 to 2: At time position 1 the left turn signal is activated. This triggers the flasher relay and the left indicator starts blinking. At position 2 – still during the first blink – the lever is released. The flasher relay stops immediately and the left indicator stops without completing a full flash.
  • Position 3 to 4: This situation is very similar to the first one, but extended over a longer period. As soon as the right turn signal is activated at position 3, the flasher relay makes the right indicator blink. Once released again at position 4, the flasher relay and right indicator stop. The last flash is not completed.

If the lever would have been released at a moment when the indicator was not lit up, it would appear the last flash did complete, but that's merely coincidence. There is no mechanism built-in that checks for full flashes.

One-touch turn signal mode

  • Position 5 to 7: At time position 5 the left turn signal is activated. This enables both the cancel timer and comfort mode, and starts the flasher relay. The comfort mode remains enabled until three negative edges are counted on the left indicator or until it's canceled. The lever is released at position 6 – well before the cancel timer ends. This disables the canceling. The third negative edge is counted at position 7 and stops both comfort mode and flasher relay. Due to the negative edge triggering the OTTS mode will always complete the last flash.
  • Position 8 to 10: This time the right turn signal is activated for a period longer than the cancel timer but still shorter than the three-blink comfort mode. Just as in the previous case, the cancel timer, comfort mode and flasher relay are activated by the right turn signal at position 8. The comfort mode counts one negative edge on the right indicator but then the cancel timer ends at position 9 and immediately stops the comfort mode. The flasher relay remains running for as long as the lever is activated. Shortly after the cancel timer, the lever is released at position 10. At this very moment the right indicator is not lit up which means the flasher relay can be stopped without worries for the full flash.
  • Position 11 to 14: This situation is very similar to the previous case, but now the lever is activated for an even longer period than the three-blink comfort mode. Positions 11 and 12 are identical to 8 and 9 respectively. When the lever is finally released at position 13, the left indicator is still lit up. If the flasher relay would be stopped now, the last flash will not complete. Therefore the flasher relay remains activated until the next negative edge on the left turn signal. This occurs at position 14 and the flasher relay stops.
  • Position 15 to 19: In this case directions are switched during the comfort mode. Positions 15 and 16 are identical to 5 and 6 respectively where the comfort mode is triggered by a short activation of the lever. While the comfort mode is active and the flasher relay running, a new signal comes from the turn signal lever – this time from the opposite direction at position 17. This will immediately stop the comfort mode and flasher relay. Since the opposite side should start blinking there's no point in waiting for the full flash to complete. This is the only situation where the full flash is not preserved. From 17 to 19 the situation is once again identical to 5 to 7.


Circuit diagram

As is the case with many microcontroller based projects the circuit diagram is rather simple. Since all logic is inside the controller's program memory, the diagram does not reveal much of the working.

Circuit diagram (PP version)

The heart of the diagram is IC1 – the microcontroller. The OTTS module is built around an Atmel ATtiny24, an inexpensive yet versatile microcontroller. IC2 is a LM2931Z-5 low-dropout voltage regulator and supplies the Atmel microcontroller with a stabilized 5 V. This isolates the sensitive controller from the hostile power environment of the car and ensures stable operation. The rest of the circuit is less critical and operates directly at the 12 V battery voltage.

Left from the controller are the inputs. Four-way DIP switch S1 is used to select the presets for the comfort mode and the canceling. Inputs IN_LEFT and IN_RIGHT are connected to the turn signal lever switch, and IN_LEFT_INDICATOR and IN_RIGHT_INDICATOR are connected to the output of the car's flasher relay. Unlike most other comfort blinker modules the OTTS module does not solely rely on the microcontroller's internal clock or an external crystal clock for the timing, but also uses the car's flasher relay output to the indicators to provide exact blink count and full flash functionality. Where all other inputs and outputs are easily accessible in the 8 Series' steering column, the two indicator signals are tucked away in a giant cable tree behind the left hand kick panel.

On the right side of the controller are both output stages – the bottom half is the same as the upper half but drawn mirrored. Switching is performed by P-channel MOSFETs T3 and T4. MOSFETs are reliable and inexpensive solid state devices that can switch large currents. In the BMW E31 8 Series the OTTS module only needs to switch small currents, so MOSFETs may be overkill but the module is designed to be universally applicable. For use in the E31 virtually every modern MOSFET can be used. Just make sure to use P-channel MOSFETs in a TO-220 package with a maximum gate-source voltage VGS of over -15 V. Pick whatever is cheap and available. The parts list further down shows a few popular types.

If the module is used outside the E31 and has to switch heavy loads, the MOSFET internal resistance RDSon plays an important factor in the choice of MOSFET. The higher RDSon the more heat is dissipated in the MOSFET for a given current. The TO-220 package can dissipate up to 2 W without heat sink, but it is recommended to stay below 1 W when the module is mounted in a small closed box. For example for a current of 5 A the maximum RDSon at 1 W can be calculated as follows:



  • RDSon: MOSFET internal drain-source resistance [Ω]
  • PF: MOSFET power dissipation [W]
  • ID: Current [A]

Thus to switch the 5 A load, MOSFETs with RDSon of 0.04 Ω or lower must be chosen – for example the International Rectifier IRF4905PBF P-channel MOSFET with RDSon of 0.02 Ω.

The efficiency of most MOSFETs is best when the gate-source voltage VGS is 10 V or more but the Atmel microcontroller operates at only 5 V. Therefore each MOSFET is driven by a simple common emitter circuit around transistors T1 and T2. When the output stage gets a high signal from the microcontroller, current flows through the base of the transistor, driving it into saturation and making it conduct. This pulls the MOSFET gate to the ground. Since the MOSFET source is connected to the 12 V battery voltage, the voltage over gate and source (VGS) is now 12 V. The MOSFET conducts and current can flow through the load. When the microcontroller outputs a low signal, the transistor does not conduct and the MOSFET gate and source are both at 12 V. VGS is then 0 V and the MOSFET does not conduct.

LEDs D1 and D2, and their current-limiting resistors R13 and R14 are optional. The LEDs provide visual feedback of the outputs which may come in handy when diagnosing but are otherwise not needed. Zener diodes D3 and D4 protect the MOSFETs' gate (input) against overvoltages and diodes D5 and D6 protect the MOSFETs against reverse polarity kickback voltages from inductive loads like relays. In the BMW 8 Series the OTTS module doesn't drive relays but it's not recommended to omit D5 and D6. When the module is built for applications other than the BMW 8 Series turn signals and has to drive large relays with nominal coil currents over 150 mA, it is recommended to use a 1N4007 diode or equivalent instead of the default 1N4148 for D5 and D6.

PCB layout

The OTTS module is designed on a piece of prototyping board with single islands and standard 0.1" pitch. As the name already implies, prototyping board is meant for circuits in development and not final designs. It doesn't look professional and is more time-consuming to solder because all traces must be soldered by bridging islands. However, prototyping board is readily available in electronic components stores and does not require special tools to develop printed circuit boards (PCB). If you have the means to develop PCBs you should also be able to route a neat PCB layout.

PCB layout (PP version). Caution: the solder side layout (left) is mirrored!

Parts list

  • R1, R2, R7..R10: Resistor 10 kΩ
  • R3..R6: Resistor 47 kΩ
  • R11, R12: Resistor 1 kΩ
  • R13, R14: Resistor 2k7 Ω (optional – see text)
  • C1, C3: Capacitor 100 nF
  • C2: Electrolytic capacitor 100 µF 25 V
  • D1, D2: LED 3 mm round (T1) (optional – see text)
  • D3, D4: Zener diode 15 V 500 mW or equivalent
  • D5, D6: Diode 1N4148 or equivalent (see text)
  • T1, T2: Transistor BC547 or equivalent
  • T3, T4: P-channel MOSFET Fairchild Semiconductor FQP7P06, International Rectifier IRF9520NPBF, International Rectifier IRF9530NPBF, International Rectifier IRF5305PBF or equivalent (see text)
  • IC1: Atmel ATtiny24-20PU
  • IC2: Voltage regulator LM2931Z-5
  • S1: 4-way DIP switch
  • J1..J3: Jumper wire
  • K1: 8-way screw terminal block 0.2" pitch 100 mm height (e.g. 2 x 3-way and 1 x 2-way) (see text)
Built-up one-touch turn signal module (PP version)

Source code and binary

Download the source code and binary for the microcontroller:

One-touch turn signal module source code and binary (PP version)

A programmer, like the excellent low-cost Atmel AVR Dragon is required to upload the binary to the Atmel controller. The source code is written for the Atmel ATtiny24 microcontroller, but it can easily be adapted for other Atmel AVR series controllers – provided they have enough in- and outputs. The OTTS module requires two outputs, four inputs for the turn signal lever and indicators and an additional four inputs for the DIP switch. The ATtiny24 offers 12 in- and outputs. Those who route their own PCB can opt for a different Atmel AVR controller or the same controller in a smaller surface-mount technology (SMT) package. The source code is written in C. The Atmel AVR Studio coupled with WinAVR is a nice integrated development environment with C compiler for the Atmel AVR device series.


Put the OTTS module in a small plastic enclosure. Choose one that offers inner dimensions just slightly larger than the OTTS module. It's a good idea to pad the inside of the enclosure with foam to prevent the circuit board from rattling while driving. Be careful with padding when the MOSFETs switch large currents and become hot!

A good mount position is the bottom of the plastic cassette in the lower part of the dashboard containing the lamp control module, general module and body electronics module. Mounting tape should keep the module tightly attached without drilling holes and using screws.

One-touch turn signal module mounted to the bottom of the modules cassette


The OTTS module has eight wires that need to be connected to the car's electrical system. Most of these wires can be connected in or near the steering column in most cars – usually easily accessible. The two indicator inputs may be more difficult to wire up. Disconnect the batteries before installing the module to avoid accidental short circuits!

Wiring of the OTTS module (PP version)

The OTTS module as shown here is built with screw terminal blocks for the wiring. This may not seem like a good choice in environments that are exposed to continuous vibrations and shocks, but a good screw terminal is very secure. Contrary to popular belief it is important not to tin the wires when using screw terminals. Tinning stranded wires in a screw terminal is a recipe for problems. It will come loose sooner or later – no matter how hard the screws are fastened! It is recommended to use wire ferrules for the most reliable connection. Alternatively the screw terminal blocks can be omitted for PCB terminal pins to which the wires can be soldered for a secure connection.

The OTTS module's power consumption is approximately 12 mA and up to 18 mA for the version built with LEDs when switching. Since there's no need for the turn signals to work with the car's ignition off, the module's power supply is best connected to the switched 12 V of the vehicle – not the permanent 12 V. This avoids unnecessary parasitic current drains on the batteries.

The wiring overview below is strictly for the BMW E31 8 Series. When installing in a different car, consult its electrical troubleshooting manual (ETM) or electrical diagrams.

Electrical diagram of the original BMW E31 turn signal lever switch

The best locations to intercept the signals in the E31 are connector X14 for the two indicator inputs and connector X32 or the turn signal lever switch for the rest of the wires apart from the ground. X32 is located in the driver's side lower part of the dashboard and close to good mounting positions for the box containing the OTTS module. Nevertheless the switch is preferred over X32 because all pins on the switch are soldered whereas the pins of the connector are crimped. Soldering can easily be undone and redone – intercepting wires at the connector involves cutting the car's wiring harness which is a no-no. The signals from X14 do not need to be interrupted – just spliced. Soldering the new wires to the crimped pins is the preferred approach, but the connector must be taken apart for this and it's in a backbreaking location. Quick snap wire splices may be more comfortable to use.

Ground locations are available at almost every metal part connected to the metal bodywork of the car. Any place where a wire and ring connector is bolted to a metal part is very likely a suitable ground location – there is one on the bottom side of the steering column's metal frame.

Original wiring
Origin Wire Destination
Switch pin 5 Green/yellow Connector X32 pin 9
Switch pin 6 Grey Connector X32 pin 3
Switch pin 7 Blue Connector X32 pin 6
Wiring for OTTS module
Origin Wire Destination
Switch pin 5 Green/yellow Connector X32 pin 9
Switch pin 6 (New) OTTS module IN_LEFT
Switch pin 7 (New) OTTS module IN_RIGHT
Connector X32 pin 3 Grey OTTS module OUT_LEFT
Connector X32 pin 6 Blue OTTS module OUT_RIGHT
Connector X14 pin 1 Blue/green OTTS module IN_LEFT_INDICATOR
Connector X14 pin 2 Blue/brown OTTS module IN_RIGHT_INDICATOR
OTTS module +12V (New) Switch pin 5 or Connector X32 pin 9
OTTS module GND (New) Ground location
Turn signal lever switch wiring for the OTTS module
Wiring at connector X14 for the OTTS module

When running wires to the OTTS module, keep in mind the steering column can move. Make sure the wires are not too short or obstruct the movement. It's best to tie the wires to the existing cable tree in the steering column.


The behavior of the module can be adjusted with the four-way DIP switch. Switches 0 and 1 control the comfort mode, switches 3 and 4 the canceling of the comfort mode. An overview is provided in the table below. The recommended settings are 3 blinks for the comfort mode and 750 ms for the canceling. It is safe to change the DIP switch settings while the module is powered. The changes are reflected immediately.

DIP switch settings
1 2 Comfort mode function
OFF OFF Disabled (no comfort mode)
OFF ON 3 Blinks (recommended)
ON OFF 4 Blinks
ON ON 5 Blinks
3 4 Comfort canceling period
OFF OFF Disabled (no comfort mode canceling)
OFF ON 500 ms
ON OFF 750 ms (recommended)
ON ON 1000 ms

If these presets are not sufficient for your application, simply change the source code, recompile and reprogram the microcontroller. There is a user settings section at the beginning of the source code where new default values can be entered for each position of the DIP switch.