IIC 0.96" oled display totally not responding

Hi all,

I have this 0.96" oled display, the datasheet that came with it states it uses IIC and runs with the SSD1306 driver. I bought it from Banggood and I honestly can't trust the reviews at all (some of them says it works with the SDI, some with the IIC, some with adafruit library, some with u8g...).

First of all, I ran the i2c_scanner v6, and the first problems appeared:
connected to Arduino 5V, ground,SDA and SCL, the i2c device wasn't found at all. So I unsoldered the 4 pins, cleaned the connections and soldered 4 perfectly new pins. After that if I unplug and plug in the screen (somehow fiddling with it), it founds it's address (0x3C, as stated on the back of the screen), but, still, most of the time there are no result at all.

I started with the last Adafruit SSD1306 library, running the example, and changing the address. Zero result.

I then switched to U8glib and U8g2. I tried both Hello world examples, uncommenting one "SSD1306 I2C" at a time, and also tried uncommenting every SH1106 I2C screen at a time.

Still nothing.

I wonder: what I'm doing wrong?

Is the I2C scanner supposed to not being able to found the device most of the times? Shouldn't it be bulletproof? (I was thinking, if the scanner can't found the device maybe it means that the device is frying most of the time, or malfunctioning, which explains why the examples won't run at all).

Any idea?

Thanks guys :wink:

Have you got pull ups on SDA and SCL?

Absolutely I don’t.
The product page, the data sheet and all the reviews state that the connection should be directly from the display to the Arduino.

By the way, checking with a multimeter I noticed that SDA and SCL had the same voltage (exactly the same) as if there was a short circuit.

A few minutes after, the flat cable melted.

It was a faulty display in my opinion…

There had been OLEDs, which do not send ACK response on I2C Bus. These OLEDs are invisible to any scanner. I think there had been several threads about this topic. In principle the SW_I2C driver of u8g2 supports all OLEDs (with and without ACK response). Did you test the u8g2 SSD1306 SW I2C driver?

A few minutes after, the flat cable melted.

Well, yes, this should not happen.

Oliver

I tried also the "Not ACK" from the u8g2 example. Actually, I tried every display from the examples, even those unnecessary: I was doing that when I noticed the nasty smell...

Btw, should i really need pull ups on SDA and SCL? I ordered a new one (this time from Amazon, hoping for some quality) and I don't want to get it wrong this time.

Nicola_Fu:
Btw, should i really need pull ups on SDA and SCL? I ordered a new one (this time from Amazon, hoping for some quality) and I don't want to get it wrong this time.

In general yes (2x5K or 2x10K Ohm), however u8g2 SW_I2C mode activates the internal pullups, which also works for most displays.

Oliver

olikraus:
In general yes (2x5K or 2x10K Ohm), however u8g2 SW_I2C mode activates the internal pullups, which

....are way out of spec.

I’ll use additional pull ups next time.

There is any chance that it was my fault, not using resistors, for the death of the display?

You had SCL & SDA connected directly to 3.3V? or 5V? That can't be good.

CrossRoads:
You had SCL & SDA connected directly to 3.3V? or 5V? That can't be good.

could explain the melted flexi though

Obviously, SDA and SCL from the display were connected to SDA and SCL analog in pins of the Arduino. The voltages from/to these pins are not necessarily full VCC. By the way, that’s how the producer, the vendor and every guide on the net teach us. No pull ups from SDA and SCL to VCC were used.I read dozens of guides and watched dozens of video about the topic, and no one used pull ups.

The connections were done just right, as in manuals. Otherwise, how comes the i2c_scanner was able to find the display’s address?

I’ll make sure to use resistors next time… but how many Ohms? 5000 and 10k are worlds apart!

I2C pullups can be anything from 1k0 to 10k. 4k7 is a typical value.

Yes, the I2C bus MUST have real external pullups to work properly. And you should have a single pair of pullups on the bus even if there are multiple devices.

Remember that Arduino is designed for non-technical users.
You should always treat "Arduino speak" with caution.

You should consult textbooks, Wikipedia, ... for informed opinion. (yes Wikipedia is excellent for clear explanations of technical topics)

You will find that many I2C modules from Ebay have got pullups. Some do not. Even though you should only have one set of pullups, you will probably get away with multiple. Just as long as you remain in the sensible range. e.g. 4 devices each with 4k7 will be an effective 1k2.

The Wire library enables the AVR internal pullups. These are 30k-50k and far too weak. But they will possibly give some sort of unreliable behaviour. (good enough for the Blinky user to retain items in her pram)

David.