By Ronald Gonzalez and Tatiana Orofino
Are you looking for a solution to drive liquid crystal displays
(LCDs) with up to 320 segments? This article will provide you
the path to using two Freescale 8-bit MC9S08LC60 (LC60)
microcontrollers (MCUs), as well as instruction on making
hardware connections that take full advantage of the LCD
control and synchronization between the two MCUs.
The LC60 is a member of the cost-effective, high-performance
S08 family. This device has a rich set of peripherals and an LCD
module which is able to drive displays with up to 160 segments.
A 12-bit ADC offers high-precision analog to digital conversion.
In addition, flash is configured in two independent arrays,
allowing part of it to be used as EEPROM while the application
runs. All these features are executed with very low power
consumption, characteristic of the S08 architecture, making it
attractive for battery-powered and handheld applications. This
8-bit MCU offers a high-integration level ideal for applications
such as thermostats, calculators, digital multi-meters, medical
monitoring devices, toys and appliances. The powerful
peripherals and LCD module help reduce stress on the core.
See the block diagram provided in Figure 1 to see how the
additional hardware modules work.
The TN-type LCD glass compatible with MC9S08LC60 should
follow the specifications below:
- LCD operating voltage-typical values for LCD glass
operating voltage are 3 or 5V. The operating voltage is the
nominal voltage level threshold to power on a segment.
- Current consumption-related to the total segment area
- View area-related to the size of the LCD glass
- Driving mode-duty cycle (1/2, 1/3 and 1/4) and bias (1/3)
- View angle-3 o'clock, 6 o'clock, 9 o'clock and 12 o'clock
- View mode-reflective, transmissive and transflective
- Operating temperature-varies
To have 160 segments driven by the LC60 MCU, 40 front planes
and four backplanes are combined in a matrix structure with the
front planes as rows and backplanes as columns. LC60 MCUs
provide four voltage levels for front planes and backplanes,
generating all the necessary waveforms for driving all segments.
No external voltage regulator is required to drive these levels.
One example can be viewed in Figure 2, which considers ½
Duty Cycle and ½ Bias ratios (three voltage levels). The data
is loaded to the LCD display when registers LCDRAM [0..20]
are loaded with new values. Turning a segment on or off is just
a matter of setting or clearing one bit. Please read AN3280,
"Interfacing an LCD to MC9S08LC60," for detailed information.
Figure 1: MC9S08LC60 Block Diagram
An LC60 MCU can drive LCD displays with up to 160 segments,
therefore, two of them will be used to drive 320-segments
LCDs. There are a few topics to be considered when connecting
two MC9S08LC60 to a single LCD, such as:
- Backplane control
Only one of the two LC60 MCUs should drive the four
backplanes having their signals connected directly
to the pins of the display.
- Front plane control
Each LC60 MCU can control 40 front planes. Together
they'll be able to drive 80. Therefore, they must exchange
commands and data every time the display needs updating.
The suggested interface is I2C, with one LC60 MCU as the
Master and one LC60 MCU as the Slave.
- Clock synchronization
Each MCU will control half of the LCD front planes. However,
only the Master will generate the backplane signals that will
be connected to the LCD. For each segment to be turned on,
a specific combination between backplanes and front planes
is required. In that way, as front planes and backplanes are
configured in a matrix structure, any changes to a front plane
or backplane signal would require both Slave and Master to
have updated synchronization. Therefore, microcontrollers
must update LCDRAM and enable segments simultaneously,
to have the same clock for synchronization.
Figure 2: Waveforms for LCDs with 1/2
Duty and 1/2 Bias Ratios
Figure 3 shows a block diagram of the system using two MCUs
and a 320-segment LCD display.
Figure 3: System Block Diagram
LCD Initialization Module
The flowchart in Figure 4 represents a suggested LCD
initialization routine from Master perspective. This ensures both
LC60 MCUs enable the front planes they control simultaneously.
After the I2C interface is already configured, the LCD controlled
by the Master must be initialized but not enabled. It will be
enabled only after the confirmation, via I2C, that the Slave has
successfully received all transferred data and is ready to enable
the LCD it controls. A keyboard interrupt (KBI) signal is sent to
the Slave and both do the LCD enabling synchronously. This
interrupt is referred to in the flowcharts as "initOK" command.
At the Slave perspective (see Figure 5), it should first initialize
its LCD module, receive all data to be loaded in the LCD glass
through I2C and store it in RAM and inform Master that transfer
is finished. When initOK is detected (signal sent from Master), it
enables the LCD.
Figure 4 and 5: LCD Initialization Module
LCD Data Update
When the display needs updating, a single writing to RAM
registers wouldn't be simultaneous at the Master and Slave
because Slave must wait for data transmission from Master
before display updating. We suggest a mirror, which is a
reserved space in Master and Slave RAMs, that receives and
stores new LCD data for front planes controlled by Master and
front planes controlled by Slave, respectively. These mirrors
must have the same size as LCDRAM registers. For data
updating in both LCD halves, it's necessary to have all data
transferred to mirrors in both LC60 MCUs which stores the new
content until theyre synchronized.
After I2C signaling, content should be copied into LCDRAM
registers at Master- and Slave- sides. Figures 6 and 7 show the
The Master MCU must transfer content to the "lower" LCD-the
40 front planes controlled by the Slave MCU-and wait until the
transfer gets acknowledged.
Another keyboard interrupt signal, called mesgOK in this article,
must be sent to the Slave. Only after it detects this signal will it
start transferring it to its LCDRAM registers.
Figure 6 and 7: LCD Data Update
This advanced member of the S08 family, MC9S08LC60, comes
to add value to Freescale's broad 8-bit microcontroller portfolio.
It's cost-effective and easy to implement multiple MCUs to drive
LCD displays through I2C.
All resources are available for electronic access at
Daniel Malik, "XGATE Library: TN/STN LCD Driver",
Freescale Application Note, AN3219.
Steven Torres, "Interfacing a LCD to the MC9S08LC60",
Freescale Application Note, AN3280.
Steven Torres, "Software to Accompany AN3219
Interfacing a LCD to the MC9S08LC60".
Freescale Application Note, AN3280SW1.
This product incorporates SuperFlash® technology licensed from SST.
Download Article PDF >
Ronald Gonzalez worked as a developer at Philips for 11 years and has been a Freescale Latin America FAE since 1999, supporting
automotive and home appliance customers in the region.
Tatiana Orofino is a computer engineer and has worked as a Freescale Latin America FAE since 2005, supporting customers globally
as well as ZigBee® technology and ColdFire® products in the region.