Winstar Graphic oled 100x16

DanielH

Member
Hi all

I have a winstar graphic oled 100x16, exactly the same as the axe133y but with all pixels addressable. Using the display in graphics mode is fine and all works well. Putting the display in character mode works but leaves no space between characters.

Does anyone have any ideas on how you would add a 1 pixel space between characters?

Thanks
Daniel
 

nick12ab

Senior Member
There is no documented way to switch an OLED module between character and graphic configurations, so a character display will work in graphic mode but with spaces every 5 pixels and a graphic display will work in character mode but without spaces between the characters.

Are the PCBs of the two OLED modules completely identical or do they differ in some way?
 

inglewoodpete

Senior Member
Would it be possible to rewrite the PICAXE backpack code to increment and reposition the pointer between each character? Just a thought: I don't have a graphics module to play around with.
 
Last edited:

Technical

Technical Support
Staff member
The actual OLED glass is produced differently, with pixels in different places. However the same driver chip is used on both modules.

So although the driver chip supports both modes, it is only designed to be used in graphics mode with a graphics OLED and character mode with a character OLED.

So the only way to display text correctly on a graphics OLED is to use it in graphics mode and 'make your own' characters. Likewise graphics mode doesn't work on character glass as there are gaps every 5 pixels.

There is no magic trick to change one to the other, as the glass is manufactured differently in each type.
 

DanielH

Member
There is no documented way to switch an OLED module between character and graphic configurations, so a character display will work in graphic mode but with spaces every 5 pixels and a graphic display will work in character mode but without spaces between the characters.

Are the PCBs of the two OLED modules completely identical or do they differ in some way?
Gday Nick

The PCB's are exactly the same, i was thinking it might be a jumper or similar but no. It looks like Technical has ended my hopes that it might be able to be done lol, i was also hoping that the shift and scroll commands would work in graphics mode.
I do not understand why they would do that though, i could if there was a price difference between the character and graphic module but they are exactly the same price. Surly it would be cheaper to make everything the same and just have a software switch or jumper to tell it what mode to be in, it would make so much sense to have a display you can switch between so you would not have to create and store a font table and be able to use the shift and scroll commands in graphic mode.

Would it be possible to rewrite the PICAXE backpack code to increment and reposition the pointer between each character? Just a thought: I don't have a graphics module to play around with.
Thanks Pete but i think this would create a 5 pixel space.


Oh well, time to create a font and learn how to use it in graphics mode.. Can anyone provide some pointers on doing this? i can create the font in the program editor but i dont really know where to start in how to start displaying it ( calling each letter to make a word).

Thanks again
Daniel
 

nick12ab

Senior Member
Oh well, time to create a font and learn how to use it in graphics mode.. Can anyone provide some pointers on doing this? i can create the font in the program editor but i dont really know where to start in how to start displaying it ( calling each letter to make a word).
OS96016PP08MB2B10 i2c SSD0303 OLED Display - Text Demo

It's for an i2c OLED but the process of sending the actual display data to the display is the same on the Winstar OLED except for the interface.
 

nick12ab

Senior Member
The actual OLED glass is produced differently, with pixels in different places. However the same driver chip is used on both modules.
The character display's glass has all pixels present and they all seem to be connected because it is possible to illuminate contiguous blocks of more than 5 pixels wide by removing the bezel and moving the glass sideways so that it is connected incorrectly to the PCB.

That doesn't necessarily mean that the glass is identical to the one in the graphic display, however.

The OP should swap the panels between the two displays and see if the graphics mode follows the glass across or if it stays with the original graphic OLED PCB. This will provide ultimate proof of whether the difference is in the glass or the PCB.

I've already tried rotating the panel to see if that toggles it between character and graphic modes - it doesn't, but it does continue to work as a character display, much like with LCD panels where reversing can be used to change the viewing direction.
 

Technical

Technical Support
Staff member
It's quite simple, the columns are effectively addressed like this in the two different modules (as an example, exact column numbers may vary a bit):

Code:
1  2  3  4  5  x  6  7  8  9  10  x 11 12  alphanumeric
1  2  3  4  5  6  7  8  9  10 11 12 13 14  graphic
hence the two modules will never work the same way, and you can see why text on the graphic display appears with no spaces.

Whether its the glass itself or the connector down the edge of the glass really doesn't matter, its the way the columns are addressed that makes the difference.
 
Last edited:

DanielH

Member
OS96016PP08MB2B10 i2c SSD0303 OLED Display - Text Demo

It's for an i2c OLED but the process of sending the actual display data to the display is the same on the Winstar OLED except for the interface.
Thanks for the pointer Nick, i looked at your font table and was able to get it working on my setup and to be honest without it id still be trying lol

Although it works it is very slow, ive done some reading and it seems if i load the font data into table memory it should be faster? is that correct? Now i know how to load the data into table memory but can i get some pointers on how i would read it out like the lookup command does in the example?
Once i get it all working i can change the font to what i need and cut it down some so it will either fit all into table or if it is possible to use both eprom and table so i can fit more in?
Oh also i changed the displays from a graphic oled to a character oled and they both stayed as character and graphic so at least the displays appear to be the same.


Thanks
Daniel
 

nick12ab

Senior Member
Thanks for the pointer Nick, i looked at your font table and was able to get it working on my setup and to be honest without it id still be trying lol

Although it works it is very slow, ive done some reading and it seems if i load the font data into table memory it should be faster? is that correct? Now i know how to load the data into table memory but can i get some pointers on how i would read it out like the lookup command does in the example?
This is more of a limitation of the PICAXE system than the code but use of table will speed it up. In order to speed up use of LOOKUP, the character data was stored in words (16-bit) rather than bytes so you'll need to split up the data into bytes. A word is four hex digits ($FEDC) and a byte is two hex digits so that word would need to be split into $FE and $DC.

Once i get it all working i can change the font to what i need and cut it down some so it will either fit all into table or if it is possible to use both eprom and table so i can fit more in?
I can see no reason why you can't use EEPROM as well as TABLE, such as by using IF statements to decide which one you are going to use according to the character value. However even then it's likely you will have to sacrifice part of the character set as each character needs 5 bytes. That's about 100 characters in 512 bytes of memory.

Oh also i changed the displays from a graphic oled to a character oled and they both stayed as character and graphic so at least the displays appear to be the same.
So the OLED glass panels are identical for both display types and the only difference is in the PCB.
 

DanielH

Member
Ive finally had the chance to get back to this and have run into an issue which i hope someone can help me out with..

Im trying to work out how to match say the ascii character (!) as an example with the correct table address. Ive put the font values into TABLE memory ( 0,6,12,18,24 ....so on) and need to be able to look at the ASCII number and then go to the correct TABLE memory location to retrieve the font but i just cant work out how to do it. So i have the ascii number 33 that corresponds to ! and need to go to the TABLE address 6 where the ! is stored and so on with each ascii value.

Hope i have been clear enough
Thanks in advance
Daniel
 

westaust55

Moderator
Im trying to work out how to match say the ascii character (!) as an example with the correct table address. Ive put the font values into TABLE memory ( 0,6,12,18,24 ....so on) and need to be able to look at the ASCII number and then go to the correct TABLE memory location to retrieve the font but i just cant work out how to do it. So i have the ascii number 33 that corresponds to ! and need to go to the TABLE address 6 where the ! is stored and so on with each ascii value.
If your font table starts with a space (“ “ = dec22), then exclamation (“!” = dec33)

Then take the decimal value of the ASCII character and subtract 32, so space = 0, ! = 1, quote = 2, hash = 3, etc.
Then if the font is 6 pixels wide so you have 6 bytes of data per character, multiply the above determined value by 6.

TableIndex = ASCII – 32 * 6

this will give you a pointer/index into the Table memory where:
space = 0, ! = 6, " = 12, # = 18, etc
 

DanielH

Member
If your font table starts with a space (“ “ = dec22), then exclamation (“!” = dec33)

Then take the decimal value of the ASCII character and subtract 32, so space = 0, ! = 1, quote = 2, hash = 3, etc.
Then if the font is 6 pixels wide so you have 6 bytes of data per character, multiply the above determined value by 6.

TableIndex = ASCII – 32 * 6

this will give you a pointer/index into the Table memory where:
space = 0, ! = 6, " = 12, # = 18, etc
Thank you very much Westaust, so simple i should have been able to work that out but it just wouldnt come to me.

Appreciate your quick response
 

geoff07

Senior Member
I'm building a little driver for the 320 x 240 colour spi tft displays seen on ebay (see pic). I already have the 5 x 8 font working, and am at the stage of loading it into an external spi eeprom (not enough space in the picaxe). If you are interested in the work in progress, send me a pm. I will publish the whole thing when a few more milestones have been passed.
 

Attachments

Top