How much current do OLED displays use?

Those little OLED displays are everywhere, and there's a good reason. They're inexpensive, easy to program and they look good. I wanted to explore how much current they draw so that I can plan better for battery powered projects.

Questions I want answered:

  • How much idle current is drawn when the controller is off versus on (blank display)?
  • What's the minimum current to see text indoors?
  • What's the maximum current when all pixels are on at their brightest?
  • How does display size affect current draw?
  • How does active data writing affect current draw?
  • It's obvious they use more, but how much current do grayscale and color OLEDs use?
  • How practical are OLED displays compared to common LCDs for battery powered projects?

Materials:

  • Cheap multimeter (manual scale, assumed accuracy +/-10% at worst)
  • Various OLED displays (72x40, 96x16, 128x32, 64x32, 128x64-0.96", 128x64-1.3")
  • Arduino compatible microcontroller (Adafruit nRF52840 Feather Express)
  • Software (my ss_oled library)

These are the displays I used for my tests. I like to use the I2C breakout board versions for simplicity. There may be inefficiencies in the linear regulator and other discrete components which come on the breakout boards, but since the active displays use milliamps, losing a few microamps shouldn't be a big deal.

What about color and grayscale OLED displays?
I was asked on twitter to include a quick test of these OLED displays. I could tell that the power usage was high because the controller chip gets hot to the touch when barely anything is displayed. I no longer have my SSD1351 color OLED to test, but I do have an SSD1327 128x128 4-bit grayscale display. With the display set to 'off', I measured 600uA. Here are some values I measured when the contrast (brightness) was set to the maximum value:

Display filled with color 0  - 2.5mA (every pixel is off/black)
Display filled with color 1  - 85mA
Display filled with color 2  - 111mA
Display filled with color 3  - 147mA
Display filled with color 15 (display reset due to my 3.3v power supply sagging)

In general, the display uses a lot more current to get the same pixel brightness compared to the monochrome SSD1306 displays.

Procedure:
I ran 8 different tests on each display. The "dim" setting has the contrast set at a value of 31. This is comfortable to read in indoor light or at night. 127 is the default contrast and is reasonably bright. 255 is the max brightness. The current was measured by inserting the multimeter probes between the Vcc of the display and a 3.3V power source (in this case, the regulated output of the Arduino). There was very little visible difference between contrast 1 and 31.

Results:

Type
Display Off
On, but Black
Contrast 31, 50% pixels lit
Contrast 127, 50% pixels lit
Contrast 255, 50% pixels lit
Contrast 31, 100% pixels lit
Contrast 127, 100% pixels lit
Contrast 255, 100% pixels lit
128x128 1.12”
5mA
7.1mA
49.5mA
104.0mA
108.0mA
89.9mA
104.0mA
104.0mA
128x64 1.3”
490uA
490uA
15.4mA
26.1mA
31.4mA
20.6mA
33.7mA
39.1mA
128x64 0.96”
26uA
469uA
5.6mA
8.1mA
11.0mA
10.3mA
15.1mA
20.7mA
128x32 0.91”
6uA
6uA
12.1mA
16.2mA
21.1mA
21.3mA
29.0mA
38.7mA
128x32 0.91”
4uA
4uA
16.2mA
19.7mA
21.7mA
27.5mA
33.8mA
36.0mA
96x16 0.69”
7uA
7uA
4.45mA
5.62mA
6.96mA
7.23mA
9.44mA
12.11mA
64x32 0.49”
6uA
6uA
1.56mA
2.71mA
3.11mA
2.49mA
4.63mA
5.17mA
72x40 0.42”
4uA
230uA*
630uA*
N/A
N/A
93
N/A
N/A
* The 72x40 display didn't appear to respond to the contrast setting and had a permanent and somewhat dim contrast.
* The 128x128 display is sold by Pimoroni; I don't have other examples to test

I thought that the 128x32 was an anomaly from a specific vendor, but a second display from a different vendor behaved the same way. Strangely, a second 64x32 display from the same vendor, bought in the same batch, used twice as much power as the one tested above.

I chose the most efficient display to do a final test which displays text (less than 50% pixel coverage). My ammeter read 630uA for a static text display on the 64x32 OLED.


What about active data writing?
Besides extra activity on the display controller, there will be current leaking through the pullup resistors when the SCL or SDA lines go low. Typical pullup resistors for these displays are 4.7KOhm, so while the data and clock lines are active, about 700uA (3.3V / 4700 ohms) will leak through them. I tried a test where I continuously wrote the same data to the display (same display and same text as above). The results were a reading of 1.47mA. Different pullup resistors and different data being written will produce different results.

Conclusions:

  • There is a nearly linear relationship between the number of lit pixels and current use
  • The display size is directly related to the current use
  • There are some oddball displays that use more current than expected. Need to test each one individually
  • Actively writing to the display uses more current than a static display - hard to know if it's the I2C activity or the controller chip or both
  • There's something odd about the 72x40 displays I have; I will need to get some from another vendor and retest
  • The ubiquitous 128x64 0.96" OLEDs can potentially display a screen full of useful information on less than 5mA
  • The power usage of grayscale and color OLEDs is much less efficient when compared to the same size and brightness of monochrome displays.
  • A small OLED with indoor readable text can run on less than 1mA
The last item above surprised me the most. The power indicator LED on most Arduino boards uses more current than the 64x32 OLED with useful information displayed on it.

To answer my last question about the practicality of OLEDs versus commonly available LCDs for battery powered projects, I think it depends on the project and power source. A decent sized LCD with the backlight off can consume less than 275uA (my measurements from a 2" 128x64 UC1701). If your power budget is small and your MCU is programmed to sleep most of the time (avg current < 1mA), this can make a huge difference compared to a 5-20mA OLED displaying the same info. On the other hand, if you're powering a Raspberry Pi Zero or ESP32 w/WIFI on (80-120mA), another 5-20mA won't make as big a difference to your power budget.

Comments

  1. The reason why the 72x40 is so din is because you have to issue commands "AD 30" which is apparently a non-standard SSD1306 command they call "Internal IREF setting". Found it in the source code examples of the datasheet of the 72x40 module (page 22)

    http://www.icbanq.com/data/ICBShop/board/ZJY001_0.42_16P%20OLED.pdf

    ReplyDelete
    Replies
    1. Great find - I'll give it a try and let you know if it works.

      Delete
    2. I also found that they're not SSD1306. They accept commands for the SSD1316 (although it's not that one either). 0xAD is "External or Internal VCOMH Selection / External or internal IREF Selection". Did you know they can fade and zoom? After experimenting I found out most of the Chinese "SSD1306" displays accept those commands and in fact I recommend using the internal IREF for all displays because different resistors on the backs of e.g. the 128x64 and 128x32 give them different brightness with the same initialization sequence. With the internal IREF delected, all of them (even the small one with smaller pixels) look equally bright.

      Delete
    3. It works! I'll add the fix to the library after I test it on the various display I own. Thanks again for finding that info.

      Delete
    4. Interesting effect of contrast on the 72x40 OLED is that contrast values 0-32 give the full range of values while 33-255 are the same (full brightness)

      Delete
    5. Must be an artifact from your displays. Here the full range has effect. Although 0x80 almost looks as bright as 0xff but that's because brightness works linearly and the eye works almost logarithmically. At 0x20 it definitely looks much dimmer.

      Delete
    6. I know how brightness works for the eye. The brightness value behaves differently from other displays and hits its peak around 32 instead of 255.

      Delete
    7. The one at the upper right of your SD1306 'group photo' looks identical to mine. Even has the same silkscreen typo "70*40".

      Delete

Post a Comment

Popular posts from this blog

Controlling lots of OLED displays with a few GPIO pins

My adventures in writing an OTA bootloader for the ATmega128RFA1

Fast SSD1306 OLED drawing with I2C bit banging