Sabernetics uOLED 96x16 pixel I2C display ANYONE???
xanatos
Posts: 1,120
Has no one on this forum played with this little guy yet?
http://sabernetics.com/store/0-84-oled-display-96x16/
http://sabernetics.com/store/0-84-oled-display-96x16/
Comments
Thanks for the response. It's for a working sonic screwdriver, actually :-) After that, who knows, but it's a fun project to start off with for this display.
All I'm really looking for is the byte sequence this thing needs to initialize and display. I've got the SSD1306 controller info, but for some reason I'm just not seeing the byte string in there that I should be sending to this item to get it to do anything. The display remains blank no matter what strings I send via I2C.
I'm thinking that the initialization, contrast, brightness and pixel codes are probably the same between your 96x64 and my 96x16 if they both use the SSD1306 chip as I understand. Would you be willing to share the string you send to your device? Something along the lines of $A0, $85, ... ??? It looks like it needs a few initialization bytes before data can actually be displayed, but so far, no luck. I've even tried to pick through some Arduino code for this thing, but all I can see is it setting up varaible values that it then hands off to a file called wire.h which appears to be a default part of the Arduino development environment, which I don't have and I can't seem to find a code listing for wire.h, so... I'm still looking.
If you've got a working string of data for me to try... I'd sure appreciate it. Maybe once I see what it needs I can finally decode where the info is in this "manual"...
Thanks very much,
Dave
I'm actually using this display. I have my own driver for my controller but there a number of drivers in obex (e.g. by ravenkeller) for this.
I took a brief look at the datasheet & it seems both the SDA & SCL are pulled up to 5v? Are you connecting this with a voltage level translator ?
Thanks for the OBEX link - I downloaded the ravenkeller files and found that there was a great SPIN file in there that really spells out the register names, hex addresses and startup values. These things take a LOT of code to get them even ready to display! I've been using mostly serial LCD displays, so this is something of a leap for me :-) I was expecting perhaps four or five initialization parameters, not 30! :-) Plus it's even picky about shutdown, apparently you can't just switch off power to the thing without risk unless you perform teh shutdown routine first.
Much to sort through on this one, but I think you've given me a good direction in which to start, thanks very much!
Dave
Not yet - got too busy with major projects/installs. I still have the unit and I'm hoping to get it running sometime this fall...
Then you can send the following command bytes to configure this display for the 96x16 resolution. The SSD1306 controller was developed for a variety of display resolutions and configurations which is why it takes 28 commands to set this up.
Hope this helps.
Post pictures once your done!
That driver/demo works perfectly - initial hookup is displaying MacTuxLin repeatedly, just like it should. This should give me the base I need to get this project going, thanks very much!
One question: Did you manually figure out the pixel positions to display MacTuxLin, or did you use any sort of utility? I've created a second DAT block and just loaded it with a binary count to see how that displayed... but I ask because it seems like it would be tedious to create DAT blocks for every message I wished to display on this device. Info appreciated & thanks again,
Dave
...know what showing my name was lame but just an example...
To show this, I use GIMP to create an image space of 96 x 16 pixel. Then, zoom to 400% then place a text "MacTuxLin" & save it as bmp file. Then, I'll use a software, LCD Assistant to convert those bmp to byte array. Copy & format that to your DAT section.
However, it would be more efficient if you create your own table & display it via function call if you intent to show alphanumerics in real-time,
As for display, you can also change the intensity with the following setting:
So if your project has an environment sensor, you can change it according to your program settings.
Show me an LCD with the same form factor as this OLED... it needs to fit into an aluminum tube housing with an I.D. of just over 0.6"... the 1602 just wouldn't fit.
UPDATE: I used the LCD Assistant - it works really well. All I had to do was replace 0x with $ and in it went. There's probably some sort of default setting I can use so it just does the $ automatically, but I haven't really crawled around in it yet. Very happy with that little item.
Also - brightness range isn't all that spectacular, is it... $00 gives me a dim but visible display, $ff gives me a reasonably visible display, probably not really enough range to justify the HW for ambient light sensing. But thanks for the code anyway... now to go back and look through the datasheets again & see all those available registers. :-)
Dave
I just tried loading the whole thing into the OLED and it gives me all sorts of cool little characters - hearts, odd punctuation marks... but I didn't see any letters.
Any experience with using one of these "preset" font libraries on a Propeller instead of an AVR?
Thanks.
Hi Xanatos,
Any luck incorporating the alphabet character set into your code? I found another driver for this chip on the objex, that includes text capabilities, but it is for the SPI version of the display. I could try to convert it to the I2c code from MacTuxLin if not...
The driver is just a translation I made of some Arduino code.
The driver doesn't set all the setting it should in the OLED's control chip since I don't know what those setting should be. The small I2C only display I have works some of the time with this code but it's very inconsistent. I haven't spent more time on it since the displays with a SPI interface appear to be less expensive than these I2C only versions.
It shouldn't be hard to add whatever setting your display requires by using the I2C write methods in the object.
It also shouldn't be too hard to incorporate the features of SPI driver's code into this I2C version.
Thanks for the code and the lead on an alternative display. Your code runs on the 128x32 from adafruit, and will require just a bit of tweaking to get it 100%. Im going to pick up the display you mentioned as it appears much more suited to this project. Thanks again for sharing!