U8glib: Graphics Lib for LCDs and OLEDs

Thx for the feedback, looking forward for it :slight_smile:

in progress in porting the GLCD lib into u8glib now. :3

it is any procedure is equivalence to GLCD.ClearScreen for u8glib?

now using drawBox procedures for clearing screen :stuck_out_tongue:

Hi NeOCzx

There are some imporant differences between GLCD v3 and U8glib. While porting is for sure possible, there are some restrictions on U8glib, which are not present for GLCD lib. GLCD and U8glib have two completly different programming concepts. It might require much more than just replacing the drawing primitives.

I suggest reading the article here, before porting:
http://code.google.com/p/u8glib/wiki/tpictureloop

Also, Bill's library is highly optimized and much faster than U8glib. On the other hand, U8glib should be more flexible regarding the graphics hardware.

One result of the different concepts is that there is no clear screen available in U8glib. The screen is cleared as soon as you enter the "picture loop".

Oliver

thx for the claraficatiion & tips olikraus :smiley:

if it doesnt work out well maybe i will as well try to use 2 LCD display with different library on a same arduino board. it is possible to be done or someone here had done it before?

just curious :slight_smile:

It should be possible to use more than one display, but i never tried.
Oliver

Hi

Release v1.03 is available for download. It includes the requested drawLine procedure.
http://code.google.com/p/u8glib/downloads/list

Oliver

Hi Oliver,

is there some pitfall in get your lib running on an Arduino Mega 2560 with an EA DOGXL-160 ? :wink:

if tried it yesterday and it did not work. i looked at the signals of the pins (with an oscilloscope) and the clock pin was a little bit confusing.
in Hardware SPI Mode the signal was realy destroyed.
in Software SPI Mode the u8g.setContrast(127); worked. but the 'hello World' not.
It looked like something is setting the clock pin manually some times..
the signal of the clock was at ~3.3V level out of the arduino and the odd spikes were at 5V level...
i used the Hardware SPI Pins on the Arduino Mega - see constructor..

i used the example hello world sketch and added the contrast command in setup.
my constructors that i tried were the following:

//U8GLIB_DOGXL160_2X_BW u8g(52, 51, 53, 49);            // Software SPI ARDUINO MEGA   SPI Com: SCK = 52, MOSI = 51, CS = SS = 53, A0 = 49 //there is something wrong...
U8GLIB_DOGXL160_2X_BW u8g(53, 49);            // Hardware SPI ARDUINO MEGA   SPI Com: SCK = 52, MOSI = 51, CS = SS = 53, A0 = 49 // here is something wrong too

have you got an idea?

know i will try it with an arduino Duemilanove. we will see :slight_smile:

sunny greetings

Stefan

Hi

I recently added the 2X driver. Can you please check the single buffer constructor (without 2X).
I also do not own a Mega Board, so i have to rely on whatever the Arduino.h file has defined for the Hardware Pins.
If these hardware pins require some special settings, than these settings are not known to me.

But in any case, the SW SPI should work.

Your observation might also be caused by the connected hardware. How do you do the level transition?
Is it a HC4050 level translator for the signals? Resistor networks might work, but you might observe
other voltage ranges.

Oliver

I checked v1.03 with my DOGXL160 display. HW SPI and SW SPI are fine. I do not see any issues here.

Oliver

Hi

I have been using the u8g Library to complete a university project. I have been playing around with it and must say that it is fantastic. The one problem I am having is that I want to display a line of ASCII print for a certain period of time, clear the entree screen and then write another set of ASCII text. I am using an ST7920 screen as it was the only one locally available as all shops have sold out of the KS0108. The screen i attached to a DFRobot mega clone...

Please if anyone can help me I have tried so many ways to get this to work but with no success

thanks in advance

Chris

Hi Chris

I am not sure what you mean by "ASCII print". A chart of ASCII glyphs can be produced in this way:

void u8g_ascii_1() {
  char s[2] = " ";
  uint8_t x, y;
  u8g.drawStr( 0, 0, "ASCII page 1");
  for( y = 0; y < 6; y++ ) {
    for( x = 0; x < 16; x++ ) {
      s[0] = y*16 + x + 32;
      u8g.drawStr(x*7, y*10+10, s);
    }
  }
}

As shown in the second tutorial (Google Code Archive - Long-term storage for Google Code Project Hosting.) there is no clear screen command. Instead, as soon as you enter the picture loop, the screen gets cleared.
See also the background article here: Google Code Archive - Long-term storage for Google Code Project Hosting.

In order to display a screen, wait some time and than display another screen, you may use the code and ideas from "GraphicsText.pde" (attached to this post, but also part of the Arduino examples).

Oliver

GraphicsTest.pde (6.38 KB)

hi is it possible to display hindi (indian language) using this library. what i need to do

Hi cnavnath

This is possible. You need a font which contains hindi glyphs. U8glib can use the glyphs from unifont (http://unifoundry.com/unifont.html). The font u8g_font_unifont_18_19 (Google Code Archive - Long-term storage for Google Code Project Hosting.) already contains some Sanskrit glyphs from unicode page 09xx.

You just provide this hindi font to u8glib with the setFont command:

u8g.setFont(u8g_font_unifont_18_19);

After this, you can use u8g.DrawStr(x,y, "abc") to draw the Sanskrit glyphs.

If you need glyphs from another uncode page, you may use bdf2u8g (Google Code Archive - Long-term storage for Google Code Project Hosting.) to construct your own selecton of glyps.
You can also tell me which glyphs you need from unifont and I can construct one or more fonts for you.

Oliver

Edit: Fontname

hii i used this library it very nice.
i am from india and it also supporting my regional language hindi.
but there is one issue that in that language i need to OVERSTRIKE two characters some time.
means if i send "K" and "a"
then result on lcd should be as shown in image
please help me for this

Ka.png

Hi
Overstrike of two chars is no problam. Simply draw the char at the same location

u8g.drawChar(10,10, "K");
u8g.drawChar(10,10, "a");

Of course you need to use a font with latin "a" and "K" glyphs.

Oliver

Oliver,
Is there drawChar() api function :wink:

That aside,

I also played around with overstrike on a modified glcd lib and the resulting characters are not
very legible for a 5x7 font.
The other tricky thing is that the font either needs to be a fixed width
or the variable width characters need to be rendered centered
within a fixed width.

--- bill

Hi Bill

Is there drawChar() api function smiley-wink

Good point. It does not exist on the Arduino C++ interface, but it is there on the C-level interface. It should be added.

The other tricky thing is that the font either needs to be a fixed width
or the variable width characters need to be rendered centered
within a fixed width.

Additionally the are two different "a" out there.

Reference to Wikipedia (A - Wikipedia):

I am not sure, why there is a need to overstrike two glyphs. I would expect, that all common glyphs are inside unifont.

Oliver

I'm wondering if this really is a request/need for digraph support vs overstrike.
The two are very different.
I had to deal with using digraph support in the early 80's when writing
C code on IBM machines and printers.
EBCDIC does not have curly braces in its font.
(Makes C programming really tough)

So the digraph (< is { and >) is }

When the device can render a curly brace it all happens
under the hood and is hidden,
however it can make writing code on devices/terminals or
reading printouts when the digraph is displayed
rather than the actual curly brace characters a bit challenging/confusing sometimes.

--- bill

Also a good question. For sure, u8glib does not support any digraphs.
Oliver

Hi,

u8glib is working great with a st7920 lcd over SPI on my Arduino Nano, but it does not compile for the atmega 32u4 (arduino leonardo) on Arduino 1.0. Using a earlier version of u8glib on arduino 1.0-RC2 works fine.

Hi
What is the u8glib version? What are the exact compiler errors?

Thanks, Oliver