GLK24064-25 LCD locking up I2C Bus
Posted: Thu Jun 02, 2005 11:49 am
Hi,
I'm running into problems interfacing a GLK24064-25 LCD to a Cygnal 8051 microcontroller. I've used the micro's built in hardware I2C (SMBus) controller, and I'm able to send text and graphics to the display.
However, I'm experiencing frequent lockups of the display where it will hold the SDA (data) line low forever. A power cycle seems to be the only cure. During one such lockup, I disconnected the SDA line fromt the display to verify that the line was held low by the display, and not the micro.
One other symptom is that the odd character is missing from the text sent to the display.
I suspect the problems I am seeing may be due to lack of a flow control mechanism for the I2C bus. I am shuttling the bytes out, 8 or fewer per "packet", with a 1/4 second pause between packets. This data rate (32 bytes per sec max) seems exceedingly slow, and yet I'm still seeing the odd missed character, and the lockups. What could be going wrong?
Here's a point form summary of what I've seen and done:
- I2C at 5.0V with 2k pullups
- I2C running at 43 kHz (the slowest the micro's I2C interface can go)
- I2C waveforms look very crisp on the oscilloscope.
- I2C code transfers up to 8 bytes to the display at a time.
- 250 ms delay after each transfer of 8 or fewer bytes.
- Text displays fine, but ocasional characters are missing.
- Lockups do happen when sending only text, but seem more frequent when command sequences are sent.
- When lockup occurs, SDA line held low permanently.
Do I need to insert extra long delays whenever a command is sequence is sent?
How should I be metering out data to the display. Are 8 byte packets too big?
Does a lockup mean that I've overflowed the LCD's 96 byte buffer.
I'm hoping that someone has seen this before and can help me work through this problem.
Thanks in advance,
Brian
I'm running into problems interfacing a GLK24064-25 LCD to a Cygnal 8051 microcontroller. I've used the micro's built in hardware I2C (SMBus) controller, and I'm able to send text and graphics to the display.
However, I'm experiencing frequent lockups of the display where it will hold the SDA (data) line low forever. A power cycle seems to be the only cure. During one such lockup, I disconnected the SDA line fromt the display to verify that the line was held low by the display, and not the micro.
One other symptom is that the odd character is missing from the text sent to the display.
I suspect the problems I am seeing may be due to lack of a flow control mechanism for the I2C bus. I am shuttling the bytes out, 8 or fewer per "packet", with a 1/4 second pause between packets. This data rate (32 bytes per sec max) seems exceedingly slow, and yet I'm still seeing the odd missed character, and the lockups. What could be going wrong?
Here's a point form summary of what I've seen and done:
- I2C at 5.0V with 2k pullups
- I2C running at 43 kHz (the slowest the micro's I2C interface can go)
- I2C waveforms look very crisp on the oscilloscope.
- I2C code transfers up to 8 bytes to the display at a time.
- 250 ms delay after each transfer of 8 or fewer bytes.
- Text displays fine, but ocasional characters are missing.
- Lockups do happen when sending only text, but seem more frequent when command sequences are sent.
- When lockup occurs, SDA line held low permanently.
Do I need to insert extra long delays whenever a command is sequence is sent?
How should I be metering out data to the display. Are 8 byte packets too big?
Does a lockup mean that I've overflowed the LCD's 96 byte buffer.
I'm hoping that someone has seen this before and can help me work through this problem.
Thanks in advance,
Brian