Eelke Visser.nl

Welcome

Opel
Electronics:

Feedback on 8
character display:


Feedback on 10
character displays:

Any tacho
Electronics:
Feedback:

Compass
Electronics:

Miscellaneous

Author:



Opel Display


Intro

I drive an Opel Astra 1.4i. It has a display on the dashboard that should show the RDS information that comes from the radio. However my radio does not support RDS. But an empty display is annoying. So I thought "Let's make it an tachometer".

On this page is described how this Opel display works. I suggest that you also take a look at the site of Dario Carluccio. It is in German, but has some beautiful diagrams about the protocol! On the Tachometer page is described how I made a tachometer of it, like this:

There exist a whole range of Opel displays. What I have, is called a Dual Info Display. And that is the only display I have worked on. In the Feedback pages you will find work of Gábor Grátzl on the Triple Info Display, which also includes temperature. He made a fuel consumption meter. In the feedback page you will also find work of Luc Bulot on a 10 character dot matrix display I think this one is called Multi Info Display. Luc want to make a tripcomputer. Fabio Bergamasco shared a lot of info on this same 10 character display.

There are two protocols for communicating with a Opel display. The first protocol was analyzed by me and is described at this page. This protocol works with displays that have 8 characters. The protocol itself uses 11 bytes. The second protocol is used by displays that have 10 characters and uses 14 bytes. This second protocol is described here: 10 character display.

Searching the Internet I got to know that there are only three lines used SDA, SCL (Yes from the Philips I2C protocol) and MRQ (Which made things more difficult). Doing some measurements I found that all three lines are pulled up to 5V by a resistor located in the display. This corresponds to the I2C specification. All devices connected to a I2C bus are only allowed to pull the communications lines low by a transistor (open collector output port). If no device pulls the communication line low it will be pulled high by the resistors.

A friend of mine has got his hands on a Opel compatible car radio. (Thanks Erik-Jan for getting it. Thanks Arjen for providing it) I used the LPT1 port of my computer to measure the protocol. We did this at the Wietske residence (Thanks Wietske for the biscuits and coffee):

10.jpg (98348 bytes)

Close up of the Radio:

11.jpg (78218 bytes)

The first text on the display and some electronics. Unfortunately I used a flashlight to make this picture and the text on the display is very hard to read....

12.jpg (99880 bytes)

I had written a small program in Visual Basic that performs the measurement. The result:

Measurment.jpg (160811 bytes)
Click picture to enlarge.

Looks like a mess. But it can easily be explained. First click the picture to enlarge. In this picture each pixel in the X-direction is a sample of the three communication lines used. The black line is SCL, the blue is MRQ and the red is SDA. There are 65535 samples taken in 2.00 seconds. The sample rate is 32.8 kHz. The time each sample presents is about: 30 microseconds.

The radio was turned off. The measurement was set to start on a change. Than the radio was turned on. The result:

  1. The power up sequence of the car radio shows that all three go low followed by a low pulse (line test?) of each line. Pulling MRQ is acknowledged by the display by pulling SDA low. Next there is a long period that MRQ is low This is a sort of reset pulse coming from the radio. The display responds by pulling all three lines low.
  2. After an idle period (all high), you see a communication block. It is started by MRQ going low for a short period. Than an I2C start is send (SDA goes low while SCL is high). Next the address byte is send according the i2c protocol. Next MRQ goes low. And than the 10 data bytes follow. Next MRQ goes high and a I2C stop is send (SDA goes high while SCL is high).
  3. And a second communication block is send, but the data makes no sense, as it suddenly appears to be terminated.

Analyzing the protocol shows:

  1. Idle state all lines are high.
  2. Pull MRQ low for a short period and let it go high again.
  3. Send a "I2C Start"
  4. Send the address byte (0x94).
  5. Pull MRQ low.
  6. Send 10 data bytes
  7. Let MRQ go high
  8. Send "I2C Stop"
  9. We are back in the idle state.

The bytes contain in total 9 bits. First there are 7 bits of data followed by a parity bit (odd-parity) followed by an acknowledge bit (Part of I2C specification). The first byte is the address byte of the display. The next two bytes control the "lights" like "CD", "RDS" and the decimal points. The following 8 data bytes contain the characters to be shown on the display using 7 bits ASCII. Decoding the first block results in:

  1. 0x94 = 10010100A (This is the I2C address of the display)
  2. 0x10 = 00010000A (Turn one light on, I did not bother to check which bit belongs to which light.)
  3. 0x01 = 00000001A (Turn the other lights off)
  4. 0x8C = 10001100A = "F"
  5. 0xA4 = 10100100A = "R"
  6. 0x8A = 10001010A = "E"
  7. 0x8A = 10001010A = "E"
  8. 0xB5 = 10110101A = "Z"
  9. 0x40 = 01000000A = " "
  10. 0x8C = 10001100A = "F"
  11. 0x9B = 10011011A = "M"

The Display has a 12 pin connector which is described as follows:

Pin # Name Description
1 Permanent 12V Always on 12V, keeps the clock running.
2 Not connected (Temperature) Temperature for TID
3 Ground 0V Ground connected to the chassis
4 Not connected (Temperature) Temperature for TID
5 Accessories 12V when the key is on accessories. The display goes on.
6 Headlights 12V when headlights are on.
7 Dashboard illumination  Signal for the strength of the dashboard lights
8 Car-radio on The Radio is on. The date will disappear and make space for the RDS signal
9 SCL Serial Clock
10 MRQ Master Request or something...
11 SDA Serial data from the radio
12 Not connected (Speed) Speed signal for displays with temperature readout. (TID)

Now all the details of the communication protocol were known, it was time to unhook the car radio and connect the display to my LPT port to write my own text on the display:

2.jpg (43181 bytes)

3.jpg (43350 bytes)

5.jpg (45090 bytes)

6.jpg (44482 bytes)

7.jpg (45015 bytes)

9.jpg (44778 bytes)

1.jpg (39243 bytes)

8.jpg (44764 bytes)




footer.gif (959 bytes) Eelke Visser, 04 oktober, 2009
www.eelkevisser.nl