There are a number of cheap and adorable OLED displays appearing on ebay and elsewhere. But their parallel interfaces, enigmatic driver ics and funny voltage requirements make them tricky to use. These breakout boards make it easy to connect an oled to an Arduino or any other device with a SPI interface.
All of these screens have lots of pins. Most breakout boards dutifully provide all those pins to the outside world which leads to lots of wiring up and few unused GPIO ports. Fortunately these screens can be configured to use a SPI interface saving lots of pins.
SPI has a bad rap of being slow when it comes to displays. With a bit of fiddling it is possible to get 500k pixels per second from a Arduino Duemilanove which is more than enough perf for these small screens: >30fps on 128×128.
The job of converting from 5v GPIO to 3v3 is handled by a octal buffer (74AHC244 or equivalent). They are cheap, small and a lot easier to assemble that a bunch of resistors. If you are using 3v3 IO then leave the octal buffer unstuffed and use the 3v3 holes.
OLEDs require a 12v-16v supply. Although 2 out of the 3 screens actually have ‘built in’ DC-DC converters they still need external components to generate the required voltages. These components are often fussy or inefficient and I usually just roll my own. Here I have used a FAN5331 boost converter. It isn’t expensive and because it switches at 1.6Mhz you can use a small 10uh inductor which is handy of you are cramming parts onto a small board.
The first screen is a monochrome (actually blue) 1 bit per pixel 128×32 display based on a SSD1303 controller. These are usually $5-$8 on ebay although I have seen them in china for < $2. Because this screen is only 1bpp we can afford an actual 512 byte frame buffer on the Arduino code. Of course you don’t need to use a frame buffer if you don’t want to.
The second screen is 96×64 and has 65k colors. It is based on the SSD1332 and comes in 0.8mm and 0.7mm pin pitch versions. They are $6-$7 on ebay, < $2 in china and show up as caller id screens in lots of phones and in some small mp3 players. If you see a small color OLED with a 31 pin connector it is usually a SSD1332. This controller has hardware accelerated fills and line drawing (<1ms to fill a screen) which could save you some perf and power if you do that sort of thing.
The third screen is my absolute favorite. It is a 128×128 pixel 262k color Samsung PM12FC001B that uses a LD50T6160 controller. These show up as spares every now and then on taobao. They are found in lots of OLED digital picture frames and several Samsung YP MP3 players. The demo shows a little Wolfenstein thing running on a Arduino.
A note about the video. OLEDs don’t look very nice on video due to their use of PWM. I assure you these look much nicer in person; crisp high contrast images on all three.
Code, schematics and pcbs posted at https://sourceforge.net/projects/smartlcd/files/ (threeOleds.zip). The OLEDs and smartLCDs will converge into something a little more coherent in the near future.
Until next time,
Yeah, I agree with you, the FAN5331 is probably the best choice for an OLED boost converter.
One question: you mentioned finding screens for
Awesome stuff as always! I’ve got 3 of the 96*64 ones, haven’t gotten round to using them though.
Can’t wait for the code and schematics.
You can use a Taobao agent, As a matter of fact I got my 3 OLED screens shipped to Europe for a grand total of about 15usd. I used yoybuy.com but there are many more alternatives.
@Rubu: OK, thanks for the tip!
Thanks for the heads up on yoybuy Rubu!
@Rossum: Ever thought of using the iPhones 3G screens for a project? You seem to have a knack for figuring out what ic’s these displays use and most of us don’t even know where to start!
The iPhone screens are 320×480 3.5in and you can get them on Taubao shipped for $20USD. They also have the capacitive touch screens for a whipping $7USD. If you want to go crazy get the iPad screen at a whopping 9,7in and 1024×768. I don’t think an Arduino let alone a Cortex-M3 could push that display but for $60USD ill buy three!
I have used yoybuy and taobaonow with no problems. taobaonow has a better ui.
I have been fiddling with the 3G screens; they are a little tricky because of they have a high speed serial rgb interface and funny connectors. One of these days I will get around to the iphone lcd + cap screen.
I really like using spares from things like the ipad/iphone/nokias etc. Can’t beat volume pricing and the occasional ghost shift.
On that note; I think the SE X1 LCD’s are also a nice one, 3,2″, 480×800.
Can even be had for a little less than the iPhone 3G screens (DealExtreme actually carries them at 24usd).
A guy I knew was having a go at figuring out the interface, not sure whatever happend to that though.
@Rubu: According to http://forum.xda-developers.com/showthread.php?t=569111&page=3, the LCD controller inside the X1 is an Epson S1D13774, datasheet is here:
You have done a great job 🙂
Can you help to buy the oled at taobao? i saw that http://item.taobao.com/item.htm?id=5855498613 that is 35yuan, that is correct? http://www.google.pt/search?sourceid=chrome&ie=UTF-8&q=35yuan+to+$
@José Yep. Thats them.
How it’s possible to buy from taobao? I’m from Portugal.
@José: Like mentioned above, you can use a taobao agent like yoybuy, or taobaoagent.
ok thanks, i searched and had find obook too. which one do you recommend?!
Anyone fancy doing a bulk order of PCBs and parts? I could take a few.
@mojo-chan: I am interested in participating in a bulk order…
me too for the oled 128×128 and pcb 🙂
I will contact Seeed and see if they can supply PCBs and the actual displays.
This looks extremely interesting, and dovetails into something I”ve been trying to work together but don’t have the technical knowhow for. Could these OLED’s be used inside a soldiers helmet with a portable comms system and a small USB style camera to allow soldiers to transfer data quicker? If you are interested in hearing more of what I”m working on you can contact me through my facebook page.
@Rubu which taobao agent do you recommend?!
Hey Peter, we chatted a few months ago about the wristwatch project I’m working on. We’re about to launch a hacker API and wanted to know if you’d like an alpha test device to try out? I tried pinging you by email, but if you get this message you could hit me back at eric AT allerta.ca Thanks!
VERY interested in the work you’re doing with OLED drivers/graphics acceleration with the Arduino. We are working on a proof of concept for a 3D viewing with an OLED screen on the Arduino – similar to what you have here – and would like more information on the screens/backpacks that you’ve outlined and how we might be able to get 2 or 3 for testing purposes. For our purposes, we need to be able to drive refresh rates of 60-120Hz for a 16×16 pixel array. (being able to run something at those rates with the screen sizes you have above would be even better, but not a requirement)
please contact me at chad (at) clariantechnologies (dot) com
Perhaps even simpler is there a way simply to set/drive the frequency and duty cycle of the PWM on these displays? — is that exposed through the SPI at all?
thanks for that really great stuff!!!!
Have you ever got an iPOD nano G6 OLED display working?
I’m pretty sure you have swapped the VIN and SHDN pins on the FAN5331.
I need some help recognizing this LCD I have.
Pics over at my blog:
Any help is most appreciated.
I wanted a 3.3 to 16v to supply OLED as you (a SSD1351 programmer) and I used a FAN5331 too. But it seems this components acts like a wire for me… I have a 3.3 to 3.3v LOL
Of course I verified the wiring thanks to your schematic and the datasheet (to know the pins positions/order). I don’t understand why 😥
It’s working (I put a 2k instead of 470k) LOL