SSD1309 2.4" Oled causing weird noise/drops

I am sorry if my explanation does not make much sense, this is a hobby I picked up recently, and this is my first post here.

I recently bought the oled display mentioned in the title. I changed/soldered the resistors needed for i2c operation and the display picture wise works fine with either U8g2 or the adafruit SSD1306 library. Whenever the display is connected my analog reads have a weird fluctuation. It's not all over the place as if I was reading a floating pin, but more like a supply voltage drop that messed with the ref. voltages. It doesn't even matter what kind of sketch I use and if it's an arduino nano, uno or a standalone 328p, the anomaly persists across all hardware and software as long as this thing is connected. With a Ssd1306 Oled everything works fine. Even a simple sketch that just outputs to serial the analog read of a 5v/3v regulated supply will have this issue.

If I use the display on a circuit with a standalone 328p powered by a 9v battery through a L7805, I get the same issue and regulator heats up significantly. If i reduce the contrast down to 20 of 255, it cools down but the voltage fluctuations remain. The circuit works perfectly with even two 1.3" oleds without any heat. It seems like the display draws way more current than it should.

Display in question;

link to the product & datasheet

Example:
Arduino nano powered through a usb wall wart, running a sketch that only displays a bmp covering half of the screen
Oled display, connected to A4 (4k7 pullup), A5 (4k7 pullup), 5v, gnd --> correctly displaying image

If I "measure" the 5v voltage of the said arduino on another unit connected to a different supply (Arduino grounds connected), i get the following results:
Note the integer values dropping to 879 in intervals

Analog Read = 963  Voltage = 4.70 V
Analog Read = 963  Voltage = 4.70 V
Analog Read = 895  Voltage = 4.37 V
Analog Read = 895  Voltage = 4.37 V
Analog Read = 962  Voltage = 4.70 V
Analog Read = 962  Voltage = 4.70 V
Analog Read = 919  Voltage = 4.49 V
Analog Read = 919  Voltage = 4.49 V
Analog Read = 956  Voltage = 4.67 V
Analog Read = 956  Voltage = 4.67 V
Analog Read = 960  Voltage = 4.69 V
Analog Read = 960  Voltage = 4.69 V
Analog Read = 879  Voltage = 4.29 V
Analog Read = 879  Voltage = 4.29 V
Analog Read = 959  Voltage = 4.68 V
Analog Read = 959  Voltage = 4.68 V
Analog Read = 963  Voltage = 4.70 V
Analog Read = 963  Voltage = 4.70 V
Analog Read = 893  Voltage = 4.36 V
Analog Read = 893  Voltage = 4.36 V
Analog Read = 956  Voltage = 4.67 V
Analog Read = 956  Voltage = 4.67 V
Analog Read = 963  Voltage = 4.70 V
Analog Read = 963  Voltage = 4.70 V
Analog Read = 952  Voltage = 4.65 V
Analog Read = 952  Voltage = 4.65 V
Analog Read = 957  Voltage = 4.67 V
Analog Read = 957  Voltage = 4.67 V
Analog Read = 963  Voltage = 4.70 V
Analog Read = 963  Voltage = 4.70 V
Analog Read = 955  Voltage = 4.66 V
Analog Read = 955  Voltage = 4.66 V
Analog Read = 959  Voltage = 4.68 V
Analog Read = 959  Voltage = 4.68 V
Analog Read = 962  Voltage = 4.70 V
Analog Read = 962  Voltage = 4.70 V
Analog Read = 957  Voltage = 4.67 V
Analog Read = 957  Voltage = 4.67 V
Analog Read = 962  Voltage = 4.70 V
Analog Read = 962  Voltage = 4.70 V
Analog Read = 963  Voltage = 4.70 V
Analog Read = 963  Voltage = 4.70 V
Analog Read = 879  Voltage = 4.29 V
Analog Read = 879  Voltage = 4.29 V
Analog Read = 958  Voltage = 4.68 V
Analog Read = 958  Voltage = 4.68 V
Analog Read = 961  Voltage = 4.69 V
Analog Read = 961  Voltage = 4.69 V
Analog Read = 957  Voltage = 4.67 V
Analog Read = 957  Voltage = 4.67 V
Analog Read = 959  Voltage = 4.68 V

Alternatively, if I use analog read on the nano with the oled and measure the other arduino's 3v3, I get the inverse result (below), but if I measure the 5v pin, I get a nice steady Analog Read of 1023 all the way.

Analog Read = 712  Voltage = 3.48 V
Analog Read = 712  Voltage = 3.48 V
Analog Read = 709  Voltage = 3.46 V
Analog Read = 709  Voltage = 3.46 V
Analog Read = 711  Voltage = 3.47 V
Analog Read = 711  Voltage = 3.47 V
Analog Read = 709  Voltage = 3.46 V
Analog Read = 709  Voltage = 3.46 V
Analog Read = 717  Voltage = 3.50 V
Analog Read = 717  Voltage = 3.50 V
Analog Read = 715  Voltage = 3.49 V
Analog Read = 715  Voltage = 3.49 V
Analog Read = 763  Voltage = 3.73 V
Analog Read = 763  Voltage = 3.73 V
Analog Read = 709  Voltage = 3.46 V
Analog Read = 709  Voltage = 3.46 V
Analog Read = 714  Voltage = 3.49 V
Analog Read = 714  Voltage = 3.49 V
Analog Read = 776  Voltage = 3.79 V
Analog Read = 776  Voltage = 3.79 V
Analog Read = 736  Voltage = 3.59 V
Analog Read = 736  Voltage = 3.59 V
Analog Read = 775  Voltage = 3.78 V
Analog Read = 775  Voltage = 3.78 V
Analog Read = 774  Voltage = 3.78 V
Analog Read = 774  Voltage = 3.78 V
Analog Read = 768  Voltage = 3.75 V
Analog Read = 768  Voltage = 3.75 V
Analog Read = 709  Voltage = 3.46 V
Analog Read = 709  Voltage = 3.46 V
Analog Read = 709  Voltage = 3.46 V
Analog Read = 709  Voltage = 3.46 V
Analog Read = 711  Voltage = 3.47 V
Analog Read = 711  Voltage = 3.47 V

I am unfortunately too ignorant to figure out whats going on and would be really thankful for some help.

From the listing this unit should be powered by 3.3V

Yes, I'm testing that now. Thing is, the seller confirmed the display works "perfectly" on 5v too because "it has 3.3v regulator on borad, friend" and I took their word for it.

As Billy Joel wrote " They may be right I may be crazy...."

I've always run my 1.3" OLED at 3.3V. But I guess its best to test and see.

Yes, I suspect that you should use 3.3V.

You should never trust Ebay sellers. Sometimes they lie. Sometimes they are just ignorant. Sometimes they know what they are talking about.

Please read the part number of Q1 on the pcb.

The 2.4 inch displays take much more power than 0.96 or 1.3 or 1.54 inch OLEDs.
But nothing should be "hot".

David.

Q1 is a 662k 3v3 regulator (the regulator the seller was referring to).

I tried to use the Oled on a 3v3 system ad got the same results unfortunately. Same on the nano, uno and standalone 328p through a LM317 set for 3.31V. I don't know what to even think might be the issue. I have 3 of those displays and all cause the same issue

So if the display is indeed designed for 5V, have you attempted to connect your power supply directly to the display?

Can you identify your supply? Can you tell us what the current capabilities are?

In general if you are going to continue and play with such circuits and devices you should get a multimeter. You don't need an expensive one. In this case it would help if you could measure DC current.

I have a multimeter, but I'm affraid it averages the readings as I don't get any spikes or drops.

If I connect the display on an arduino nano/uno (powered from USB) and run a simple analog read, calculate the voltage and print the result on the Oled, I get those spikes in readings when reading any source. It doesn't matter if operates on 3.3v or 5v. (I obviously don't exceed those voltages on the analog pin). But...if I just connect the Oled vcc to an outside source (grounds connected), all spikes/drops vanish. The outisde source in that case is an LM317 set for 3.3v powered by a 9v battery. But to spice it up, If I hook up the whole arduino+oled on that regulator, I see the spikes/drops again (the LM317 doesnt't heat up that much considering the V difference). Seems like if the oled and atmega328 are hooked on the same source, it acts up, or it just induces so much noise into the system, that it messes with readings.

I've only had experience with smaller OLED's however from your symptoms it sounds like the display is drawing slugs of current. I can't see why.

However I suggest you get a 100µF capacitor (or 47 to 500 µF). Connect it across the OLED power input. Hopefully the capacitor can supply the slugs (transients) of current without having anything else effected.

BTW 9V batteries (the rectangular ones usually used in a smoke alarm) are very anemic and don't have very much current capacity. However the USB should be able to power your display.

So, after going throug the display driver datasheet, I tried various things these days, capacitors included. I somehow can reduce the noise or whatever it is that's causing the issues with AnalogRead, but can't get it completely right.

I can reduce the noise to an almost bearable level by using a 330µF cap across the OLED input, reducing the oled contrast (SETCONTRAST command), reducing Pre-charge (SETPRECHARGE command) and slowing the refresh rate considerably (SETDISPLAYCLOCKDIV command).
If I dim the display and slow it down to a visible flicker, I get an almost stable AnalogRead, with a painful display to watch.

I hooked an old analog oscilloscope to vcc/gnd and these are the results. In this case a Nano runs on 3.3v powered from a laptop USB.

Wave without Oled connected, running sketch:

Wave with Oled connected, running sketch with no hardware/software noise reducing measures:

There's some weird stuff going on here.

What are the vertical and horizontal scales? Can't tell if minute or ???

Any luck? I have an ssd1306 128x32 display and it is causing similar noise/drops either on 5v or 3.3v when connected to Arduino Uno. But when I connect the OLED to a breadboard power supply's 3.3v, the signal is clean. But that kills the portability of my project.

also experience the same problem:
the adc readings vary too much with the oled display on.
in my opinion is the regulator on the display the first suspect to cause the problem.

I have the same problem. But looking at the schematic of the module, there is a boost converter that converts the 3.3V from the onboard regulator to a voltage of around 14V. This one is the cause of the noise on the power rail. The only countermeasure I could do is use a large capacitor (330uF) across the power input of the OLED. I also added a cap on position C7 which is currently unpopulated. The cap here is across the output of the onboard 3.3V regulator.
I am running of 5V by the way, but my main micro runs on 3.3 with its own regulator.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.