Wednesday, 24 January 2018

How to drive 3 1/2 digit static TN LCD with ATmega328 in low power mode?


I've built this clock with a 3 1/2 digit static TN LCD (GYTN-0587). I drive the 28 LCD segments with an ATmega328 and four 74HC595N shift registers chained together.


Here are the (simplified) schematics (link to larger image):


LCD clock schematics


And here's a picture of the board:


LCD clock


(The board also have an LT1111 regulator in boost configuration and a DS1307 RTC that are not shown in the schematics for simplicity.)


To save batteries and run the clock for several months on the same cells, I planned to run the ATmega in low power mode, waking it up only once per minute or so just to change the display and putting it back to sleep. However, I later learned that TN static LCDs must be refreshed at 10 to 30kHz (sorry, I couldn't find the document I read that - I couldn't find much information about driving TN LCDs out there).


Well, if I drive the shift registers at 30kHz it will leave me no time for the '328 to sleep. In the end that's what I'm doing, refreshing the LCD at 30kHz and the clock works ok. But the batteries run for only about 40h.



If I ignore the LCD refresh rate and leave the segments on for several seconds, the segments kind of vanish away (as in the picture below).


Vanishing segments when not refreshed


I couldn't find anything about the LCD power consumption and I haven't measured it, but I'm pretty sure the LCD consumes very little current (in the uA range). The '595 also won't use much current either since they are not sourcing much current and consume only 160 uA each. What's wasting all my batteries is the ATmega refreshing the LCD. I just need a different way to drive this LCD that doesn't take as much cycles from the MCU.


My questions are:




  1. Can I drive this LCD in low power with this circuit I've built? If so, how?




  2. If not, what changes should I make to my circuit so I can drive the LCD with minimum power consumption?





  3. What is the Right Way (TM) of driving these LCDs?





Answer



No, you don't need to refresh static LCDs anywhere near that fast. 60Hz should be fine- which will give you a couple years of battery life if it scales (it's normally in the range 30-100Hz).


The main thing is that you need to make sure that the average DC voltage from each segment to backplane is very low (like < 50mV). Easy when you're driving it with CMOS push-pull outputs. You must drive the COM high/low with a 50% duty cycle (very close to exact) and drive the 74HC595 outputs high/low in sync either inverted (on) or not (off). If you want to blank the display make sure no DC voltage appears across the display (the reason for this is that DC voltages cause electrochemical action which can permanently damage the display). It doesn't look like you are doing that.


Here is an application note from Atmel that shows how to do it with a microcontroller, showing the proper waveforms:


enter image description here



So probably the best way would be to wake up, flip the COM and RCK the new data in from the shift registers (perhaps alternate doing COM or RCK first), then calculate the next frame segment data, shift it out to the HC595s via SCK without transferring to the output register and go sleepy-bye. Repeat forever.


No comments:

Post a Comment

arduino - Can I use TI&#39;s cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...