One of the major questions arising in practically every battery powered design is which display to use. Graphic LCDs and character display modules are, of course, most universal in terms of displayed symbols. However, the draw too much current, which makes their usage in many cases inappropriate. On the other hand, plain 7-segment numeric display can only show digits and just a few characters. This is where the usage of 14-segment LCDs could be beneficial. Besides of all digits they also can display all upper-case Latin characters and many other symbols.
The goal of this project was to try the newly designed LCD driver CP2401 manufactured by Silicon Laboratories. The typical driver current consumption is just 2.3 μA, which is a way less than, say, for the PCF85xx series. The drivers come in 48- or 32-pin TFQP or QFN packages and are equipped with either SPI or I2C interface depending on the model. Besides driving the LCD they can also be used as I/O port extender with on-change interrupts, have 256 bytes of build-in RAM, RTC, two timers, and flexible interrupt control. If you have ever used C8051 microcontrollers, many their blocks are similar to the ones of CP240x.
The LCD driver can be clocked by external clock, or external watch crystal, or internal RC oscillator. The SPI or I2C interface, whenever active, is clocked from a separate 20-MHz internal clock. The driver can work in 3 power-saving modes, in which the interface oscillator is disabled. I used the chip with Varitronix VIM878 LCD that is designed for 1:4 multiplex mode. It has 32 segment pins and 4 commons. I like very much the CP2401 pin placement that perfectly matches the one of the LCD. I mean that LCD driver pins 1-16 can be connected to the top LCD row and the remaining one to the bottom row. Moreover, the pin order is such that just one table is needed in the μC code for loading the symbols to the LCD. Every symbol encoding takes 2 bytes, which is a minimum for the used LCD.
Schematic | Layout | |
The driver interface with the μC consists of 4 wires, two of which are standard I2C ones. The remaining two are INT, which is used to inform the μC on the driver events, and PWR to control the driver power modes. The rising edge on the PWR pin puts the driver on sleep (after a proper configuration of internal registers), while the falling one wakes it up.
The typical power consumption of 2.3 μA mentioned in the data-sheet is for an LCD sleep mode with working DC-DC booster. It turned out, however, that the drawing current depends greatly on the displayed symbols. My intuition told me that the highest and lowest power consumption should be in the cases when all segments are on and off, respectively. But I was wrong - in both these cases the drawing current is much less than for, example, by displaying a 0 in all digits. The minimum drawing of my driver was about 4 μA without LCD and DC-DC converter output voltage 3.2V, while the maximum was about 12 μA depending on the display contents. Connecting the driver to the LCD increases the drawing current just slightly - about 1-2 μA. The best contrast for VIM878 is achieved for the 1/2 bias mode.
To make the displayed text more meaningful I threw a temperature and humidity sensor HIH6131 into the circuit. The sensor shares the same I2C line with CP2401.
Measuring temperature | Measuring humidity | |
The parts C7, C8, R4, IC3, HG1 are mounted on the LCD PCB shown above and R1, R2, C2, C3 are on the sensor board. The remaining parts are on the μC board. I use these small boards for testing circuits on a solderless proto-board. The temperature and humidity readings alternate with about 2 sec period. The total power consumption of the entire circuit is about 20 μA.
Last modified:Mon, Jan 23, 2023.