I2C

M17x inverter brightness fix

After I killed my original motherboard modifying stuff in my 6970m quest, the brightness of my LCD was stuck at low with both the new R1 and R2 motherboards. The function keys couldn’t adjust brightness and neither could windows. Here’s how I fixed it. This is probably only valid for a CCFL backlit display.

The inverter that drives the fluorescent lamps in my display is based on a MAX8759. This chip has an SMBus interface as well as an ambient light sensor interface and a PWM input. The motherboard uses the SMBus interface to control the inverter. You can directly write values to a brightness register, from 0x00 to 0xFF for minimum to maximum brightness. The function keys send incrementally smaller or larger values to the controller. I pulled out my logic analyzer, mbed, and realterm to watch the bus communication and communicate with the inverter controller.

The communication from the EC to the inverter controller is correct, and you can read the brightness register and see the values change based on the function keys. However the brightness continues to stay low. You can also read the fault register, but no faults were present in my case.

What I figured out was the controller by default uses a mode called “SMBus with DPST”, which takes the SMBus brightness value and multiplies it by the PWM duty cycle. This apparently allows another interface to use the PWM input and dim the display without needing to access the bus. The problem was the PWM duty cycle from the EC was 0%, so the controller kept the brightness at 0 regardless of the SMBus setting. › Continue reading

Tags: , ,

Thursday, October 4th, 2012 Electronics 1 Comment

Flash a monitor’s EDID with an mbed and RealTerm

If you’ve ever setup ATI’s Eyefinity with bezel correction or connected your computer to a TV you know what this is about. Bad EDIDs can be missing supported resolutions, or report an incorrect screen size. In my case bad EDIDs prevented me from enabling┬ábezel correction on┬ámy Eyefinity three monitor setup. This is because ATI coded their Catalyst drivers to read the EDID data directly from the monitors instead of the windows registry, where bad data can be fixed more readily with an EDID_OVERRIDE key.

DVI and mbed

EDID is Extended Display Identification Data. It’s what makes your monitor “Plug and Play”. When you plug a monitor into your computer, the monitor communicates data about itself to the computer over the DDC bus, which is an I2C bus. For a DVI connection, the I2C data and clock lines are on pins 6 & 7. Usually you would flash your monitor’s EDID while it’s hooked up to your PC with a program like Powerstrip, but you have to buy the registered version of powerstrip to have that functionality. Additionally, revision 3 of the EDID specification requires the EDID to be write-protected. That means to flash the EDID with Powerstrip you need to figure out the manufacturer’s sequence for temporarily unlocking the EEPROM. Something like turning the brightness and contrast to zero, then power cycling while holding the menu button, etc. I didn’t feel like messing around with that so I just took the monitor apart. › Continue reading

Tags: , ,

Tuesday, April 19th, 2011 Electronics 1 Comment