Does someone got this OLED working? --> 128x64 Display Module SSD1306

Hi,

I'm new to this and have some problems to get this OLED working with my Arduino Nano:

http://www.ebay.de/itm/New-3-3V-0-96-128x64-OLED-Display-Module-SSD1306-Arudino-AVR-Blue-6800-iic-/261068643292?pt=LH_DefaultDomain_0&hash=item3cc8e75bdc

I bought this from Ebay, because there are no possibilties to get a similiar one here in Germany :frowning:
but that is not the pont. I found a lot of similar products but the datasheets are not equal and my knowledge to intrepret them is not as good.

What I have done is:

1.) Tried i2c: Desoldered the resistor for BS0-2 as described and download the libraries / examples from adafruit --> Complied correctly but no success to light up the OLED!
2.) Then desoldered resistors for 4 wiring: Download some example code, but it seems that all use the same code from adafruit. --> No success.

So it is difficult for me to find out if it is the wiring OLED module or do I need a special library + code? I used this wiring scheme:
OLED Ardunio Nano
Pin 1 Vcc +5V
Pin 2 GND GND
Pin 3 CS# Pin 12
Pin 4 RST Pin 13
Pin 5 D/C# Pin 11
Pin 8 D0 Pin 10 (CLK)
Pin 9 D1 (SAD) Pin 9 (Mosi)

I tried to use Pin 10 on the OLED (SDAin?) also. But all with no luck. Do I have to pull some pins of the Oled Module high or low in addition?
Note: The power led of the Oled module powers up when the board is connected.

Does someone know if there is a "simple" way to test the display, so I can check if it's broken?

Any help is appreciated!
Thanks

What is this library you tried to use? A link would be good.

That module uses the SD1306 controller. You must look for a data sheet for that device. I haven't been able to find on with a quick look.

Then desoldered resistors for 4 wiring: Download some example code, but it seems that all use the same code from adafruit

So how was it interfacing? Again without links you don't give anyone a chance of finding out what to do.

This is very similar, almost the same as a module I have.
This link had the data sheet and how to wire it up along with some sample code:-
http://www.ebay.co.uk/itm/0-96-128x64-OLED-Display-Module-SSD1306-Arudino-AVR-/130536921656?pt=LH_DefaultDomain_0&hash=item1e649b5a38

Grumpy_Mike:
What is this library you tried to use? A link would be good.

That module uses the SD1306 controller. You must look for a data sheet for that device. I haven't been able to find on with a quick look.

Then desoldered resistors for 4 wiring: Download some example code, but it seems that all use the same code from adafruit

So how was it interfacing? Again without links you don't give anyone a chance of finding out what to do.

Helllo Grumpy_Mike,
thank you for your answer. I used this libraries and follwed this descriptions:

http://www.electrodragon.com/?p=3860
http://www.electrodragon.com/?product=mini-oled-1 Her you will find the datasheet I used.

The "configuration" for the BS resistors I made following this table:

Yes, yours looks like mine except the pcb and the product pages "tells" me that it should work like I did it.
Did yours worked out of the box?

At the moment I'm at work and will try the links from "your" ebay auction this evening.

Thank you!

Grumpy_Mike:
This is very similar, almost the same as a module I have.
This link had the data sheet and how to wire it up along with some sample code:-
http://www.ebay.co.uk/itm/0-96-128x64-OLED-Display-Module-SSD1306-Arudino-AVR-/130536921656?pt=LH_DefaultDomain_0&hash=item1e649b5a38

One question came up: Did you use a level shifter? The Adafruit tutorial uses one.
The picture on ebay shows a 3.3V connection. I used the 5V connection. Could this be a problem? The datasheet notet, that it would work up to 5.5V.

Thanks

The datasheet notet, that it would work up to 5.5V.

Where was that?
Page 47 says the maximum input voltage is 0.3 + Vdd and page 48 says the maximum Vdd can be is 3V3. However, I used the I2C interface and used a library that did not enable the pull up resistors and I added 3K3 pull ups to the 3V3 supply.

You could used a 100R resistor and a 3V1 zener between each of the arduino's outputs and the module if you wanted to do the SPI interface.

Grumpy_Mike:

The datasheet notet, that it would work up to 5.5V.

Where was that?
Page 47 says the maximum input voltage is 0.3 + Vdd and page 48 says the maximum Vdd can be is 3V3. However, I used the I2C interface and used a library that did not enable the pull up resistors and I added 3K3 pull ups to the 3V3 supply.

You could used a 100R resistor and a 3V1 zener between each of the arduino's outputs and the module if you wanted to do the SPI interface.

Hm, confused - again :frowning:
Vcc MAX: 5.5V
High Level Input V / H MAX: 3.6V
So when I connect Vcc with 5V from the Arduino board, this will propably kill the controller. This means, in worst case I have killed the module? :frowning:
What will do your 100R resistor and the zener in detail?

This means, in worst case I have killed the module?

Worst case yes but I think it not likely.

What will do your 100R resistor and the zener in detail?

The zener across the input to the module will stop the voltage from rising above the power rail. The resistor will limit the current through the zener and stop the arduino from putting out too much current for the output pin.
Like in this example that uses a zener.
http://www.thebox.myzen.co.uk/Tutorial/Protection.html

I have a friend that I think wired it up directly, let me see if I can contact him and ask. (back soon)

Grumpy_Mike:

This means, in worst case I have killed the module?

Worst case yes but I think it not likely.

What will do your 100R resistor and the zener in detail?

The zener across the input to the module will stop the voltage from rising above the power rail. The resistor will limit the current through the zener and stop the arduino from putting out too much current for the output pin.
Like in this example that uses a zener.
Protection

I have a friend that I think wired it up directly, let me see if I can contact him and ask. (back soon)

That sounds really good. In the meantime I googled the part of the zener diode. I think the adafruit guys used this level shifter thing.
I will come back later, to see what going on here.

Maybe I will get my module working this evening.

With kind regards

For SPI (and probably also I2C) mode you also need to tie RD and RW to GND.
Also, a level shifter is required.

Software: U8glib supports SSD1306...

Oliver

olikraus:
For SPI (and probably also I2C) mode you also need to tie RD and RW to GND.
Also, a level shifter is required.

Software: U8glib supports SSD1306...

Oliver

Hi, got it! Stupid mistake. I worked with the wrong datasheet. Grumpi_mike gave me the right hint. Thank you man!
So for all: 4wire SPI worked nearly out of the box - i2c NOT! I stopped struggeling with i2c. Someone else may try Oliver's suggestion.

I used use the Oled 128x64 code examples from Adafruit:

You have to change the baud speed to: Serial.begin (9600)

Have a look at the 2 pictures of my display and the 4 wire pinout for the arduino...

Thanks to all!

oled1.jpg

oled2.jpg

I'm have the same OLED display and am having trouble running the Adafruit example code as well. I am using an Arduino Mega 2560.

The SPI pins for the Mega are: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)

The SPI pins for the Nano are: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)

So OLED
pin 9 (D1) goes to pin 51
pin 10 (D0) goes to pin 52
pin 15 (CS) goes to pin 53
pin 14 (RES) goes to reset pin by 3.3V pin
pin 13 (DC) goes where?

I am new to all of this and can't seem to figure out how to get this to work. Any help would be much appreciated!

Thanks

You can't just connect the output pins from the arduino directly to the display, you have to perform a level shifting on them.
The power should be connected to 3V3 supply and the lines through either potential dividers to make the maximum voltage 3V3 or a logic level converter, of as I used an open collector non inverting buffer with a 1K8 pull up resistor to 3V3. I used a 74LS07, there are six buffers in the one package.

You need to connect SCLK, MOSI and CS for SPI (via level shifters), no need for MISO, you don't need to read anything back from
the display. Simplest level shifter is a resistive R-2R divider (say 2k2 from GND to display pin, 1k resistor from display pin to Arduino pin).

SCLK is pin 10 (= D0) on the connector, MOSI is pin 9 (= D1) on the connector and CS is pin 15.

You will need to use 4-wire SPI and also use a level shifter to drive the D/C pin (pin 13 on connector) (the reason is that Arduino
hardware only handles 8-bit SPI transactions and the 3-wire mode uses 9-bit transactions).

Table 8.1 in the datasheet explains what you need to do with the other pins, and of course the BS lines must be set correctly
with the 0R resistors (all set to 0 for SPI 4-wire).

Simplest way to check broken displays by Holding them on Torch.
Even my display was not broken, It wasn't showing anything. It can be issue of library used, type of display, connection etc. In my case problem was library changes.
Refer below article for more depth, It was helpful for me.