• 0
ArcaGraphy

Pront character on OLED - ZedBoard

Question

Hi,

In my project I want to print alphanumeric data on the OLED display on the ZedBoard, but do that by usin GPIO. I have found a couple of related IP cores online, but that is not what I need. I need something simililar like logo.bin file that is the defoult Digilent logo that apears on the OLED when the Linux is booted.

So any possibilitis to modify the logo.bin, or to create .bin file with my own contents?

I appriciate your tips and help!

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Hi @ArcaGraphy,

We have a IP core for the Pmod OLED which also works with the OLED on the Zedboard. You can download the vivado library here and the OLED IP core can be found here. You should look at the Getting Started with Digilent Pmod IPs tutorial. Here is a thread that has discusses the OLED that might be helpful. 

cheers,

Jon 

Share this post


Link to post
Share on other sites
  • 0

Hi @ArcaGraphy,

As some further information, the OLED display won't immediately display the Digilent logo unless you program it to do so and we didn't create a formal demo doing so. I did create a custom image that loads the logo onto the screen back in 2014 that was badly written for a microcontroller though. Here is the set of characters that I used to create the image:

Spoiler

uint8_t UserFont[OLEDUserFont] = {                      // This font table defines the lower 32 bytes of the screen
        0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x03,	// 0x00
	0xC0, 0x30, 0x0C, 0x03, 0xC0, 0xB0, 0x8C, 0x83,	// 0x01
	0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x86, 0x98,	// 0x02
	0xE0, 0x81, 0x86, 0x98, 0xE0, 0x00, 0x03, 0x0C,	// 0x03
	0x30, 0xC0, 0x00, 0x00, 0x00, 0x07, 0x07, 0x06,	// 0x04
	0x06, 0x86, 0x83, 0x81, 0x00, 0x00, 0x00, 0x80,	// 0x05
	0x86, 0x86, 0x86, 0x07, 0x07, 0x86, 0x06, 0x06,	// 0x06
	0x00, 0x80, 0x00, 0x01, 0x03, 0x86, 0x86, 0x06,	// 0x07
	0x06, 0x06, 0x87, 0x03, 0x00, 0x00, 0x80, 0x06,	// 0x08
	0x06, 0x86, 0x87, 0x87, 0x06, 0x06, 0x06, 0x00,	// 0x09
	0x00, 0x00, 0x07, 0x87, 0x86, 0x86, 0x86, 0x86,	// 0x0A
	0x06, 0x06, 0x80, 0x00, 0x00, 0x87, 0x07, 0x06,	// 0x0B
	0x86, 0x86, 0x86, 0x86, 0x06, 0x00, 0x00, 0x80,	// 0x0C
	0x87, 0x07, 0x00, 0x00, 0x80, 0x80, 0x81, 0x03,	// 0x0D
	0x07, 0x07, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00,	// 0x0E
	0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// 0x0F
  
        0x00, 0x10, 0x2C, 0x43, 0xC0, 0xB0, 0x8C, 0x83,	// 0x10
	0x80, 0x80, 0x8C, 0x8B, 0x88, 0x88, 0x88, 0x88,	// 0x11
	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,	// 0x12
	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,	// 0x13
	0x88, 0x88, 0x4B, 0x3C, 0x00, 0x00, 0x00, 0x00,	// 0x14
	0x00, 0x3F, 0x24, 0x24, 0x1F, 0x00, 0x00, 0x3F,	// 0x15
	0x24, 0x24, 0x20, 0x00, 0x00, 0x03, 0x04, 0x38,	// 0x16
	0x04, 0x03, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x1F,	// 0x17
	0x00, 0x00, 0x3F, 0x01, 0x0E, 0x10, 0x3F, 0x00,	// 0x18
	0x00, 0x3F, 0x20, 0x20, 0x1F, 0x00, 0x00, 0x00,	// 0x19
	0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00,	// 0x1A
	0x00, 0x00, 0x3F, 0x04, 0x04, 0x3F, 0x00, 0x00,	// 0x1B
	0x3F, 0x24, 0x24, 0x20, 0x00, 0x00, 0x1F, 0x20,	// 0x1C
	0x20, 0x1F, 0x00, 0x00, 0x3F, 0x04, 0x0C, 0x33,	// 0x1D
	0x00, 0x00, 0x03, 0x04, 0x38, 0x04, 0x03, 0x00,	// 0x1E
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// 0x1F
};
        
uint8_t bitmap[] = {                                    // This bitmap defines the upper 32 bytes of the screen
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 0
        0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x02,	// char 1
        0x81, 0x03, 0x05, 0x19, 0x61, 0x81, 0x02, 0x0C,	// char 2
        0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 3
        0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18,	// char 4
        0x18, 0x18, 0x30, 0xE0, 0xC0, 0x00, 0x00, 0x00,	// char 5
        0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18,	// char 6
        0x00, 0x00, 0x00, 0xE0, 0xF0, 0x18, 0x18, 0x18,	// char 7
        0x18, 0x38, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x18,	// char 8
        0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, 0x00,	// char 9
        0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00,	// char A
        0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18,	// char B
        0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,	// char C
        0xF8, 0xF8, 0x38, 0x70, 0xE0, 0x80, 0x00, 0x00,	// char D
        0xF8, 0xF8, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18,	// char E
        0xF8, 0xF8, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,	// char F
        
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 10
        0xC0, 0x30, 0x0C, 0x03, 0xC0, 0x30, 0x0C, 0x03,	// char 11
        0xC0, 0x33, 0x0C, 0x10, 0x60, 0x81, 0x06, 0x18,	// char 12
        0x60, 0x80, 0x03, 0x0C, 0x30, 0xC0, 0x00, 0x00,	// char 13
        0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,	// char 14
        0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,	// char 15
        0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,	// char 16
        0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,	// char 17
        0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00,	// char 18
        0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,	// char 19
        0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,	// char 1A
        0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18,	// char 1B
        0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 1C
        0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00,	// char 1D
        0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 1E
        0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 1F
};

 

Thanks,
JColvin

Share this post


Link to post
Share on other sites
  • 0

 

10 hours ago, jpeyron said:

Hi @ArcaGraphy,

We have a IP core for the Pmod OLED which also works with the OLED on the Zedboard. You can download the vivado library here and the OLED IP core can be found here. You should look at the Getting Started with Digilent Pmod IPs tutorial. Here is a thread that has discusses the OLED that might be helpful. 

cheers,

Jon 

 

Hi jpeyron,

I appriciate your comment, it sounds good. The problem that I am asking is actualy to control the OLED display on ZedBoard not using a hardware designe for the PL, but do all that on the PS (software based).

 

9 hours ago, JColvin said:

Hi @ArcaGraphy,

As some further information, the OLED display won't immediately display the Digilent logo unless you program it to do so and we didn't create a formal demo doing so. I did create a custom image that loads the logo onto the screen back in 2014 that was badly written for a microcontroller though. Here is the set of characters that I used to create the image:

  Reveal hidden contents


uint8_t UserFont[OLEDUserFont] = {                      // This font table defines the lower 32 bytes of the screen
        0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x03,	// 0x00
	0xC0, 0x30, 0x0C, 0x03, 0xC0, 0xB0, 0x8C, 0x83,	// 0x01
	0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x86, 0x98,	// 0x02
	0xE0, 0x81, 0x86, 0x98, 0xE0, 0x00, 0x03, 0x0C,	// 0x03
	0x30, 0xC0, 0x00, 0x00, 0x00, 0x07, 0x07, 0x06,	// 0x04
	0x06, 0x86, 0x83, 0x81, 0x00, 0x00, 0x00, 0x80,	// 0x05
	0x86, 0x86, 0x86, 0x07, 0x07, 0x86, 0x06, 0x06,	// 0x06
	0x00, 0x80, 0x00, 0x01, 0x03, 0x86, 0x86, 0x06,	// 0x07
	0x06, 0x06, 0x87, 0x03, 0x00, 0x00, 0x80, 0x06,	// 0x08
	0x06, 0x86, 0x87, 0x87, 0x06, 0x06, 0x06, 0x00,	// 0x09
	0x00, 0x00, 0x07, 0x87, 0x86, 0x86, 0x86, 0x86,	// 0x0A
	0x06, 0x06, 0x80, 0x00, 0x00, 0x87, 0x07, 0x06,	// 0x0B
	0x86, 0x86, 0x86, 0x86, 0x06, 0x00, 0x00, 0x80,	// 0x0C
	0x87, 0x07, 0x00, 0x00, 0x80, 0x80, 0x81, 0x03,	// 0x0D
	0x07, 0x07, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00,	// 0x0E
	0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// 0x0F
  
        0x00, 0x10, 0x2C, 0x43, 0xC0, 0xB0, 0x8C, 0x83,	// 0x10
	0x80, 0x80, 0x8C, 0x8B, 0x88, 0x88, 0x88, 0x88,	// 0x11
	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,	// 0x12
	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,	// 0x13
	0x88, 0x88, 0x4B, 0x3C, 0x00, 0x00, 0x00, 0x00,	// 0x14
	0x00, 0x3F, 0x24, 0x24, 0x1F, 0x00, 0x00, 0x3F,	// 0x15
	0x24, 0x24, 0x20, 0x00, 0x00, 0x03, 0x04, 0x38,	// 0x16
	0x04, 0x03, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x1F,	// 0x17
	0x00, 0x00, 0x3F, 0x01, 0x0E, 0x10, 0x3F, 0x00,	// 0x18
	0x00, 0x3F, 0x20, 0x20, 0x1F, 0x00, 0x00, 0x00,	// 0x19
	0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00,	// 0x1A
	0x00, 0x00, 0x3F, 0x04, 0x04, 0x3F, 0x00, 0x00,	// 0x1B
	0x3F, 0x24, 0x24, 0x20, 0x00, 0x00, 0x1F, 0x20,	// 0x1C
	0x20, 0x1F, 0x00, 0x00, 0x3F, 0x04, 0x0C, 0x33,	// 0x1D
	0x00, 0x00, 0x03, 0x04, 0x38, 0x04, 0x03, 0x00,	// 0x1E
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// 0x1F
};
        
uint8_t bitmap[] = {                                    // This bitmap defines the upper 32 bytes of the screen
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 0
        0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x02,	// char 1
        0x81, 0x03, 0x05, 0x19, 0x61, 0x81, 0x02, 0x0C,	// char 2
        0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 3
        0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18,	// char 4
        0x18, 0x18, 0x30, 0xE0, 0xC0, 0x00, 0x00, 0x00,	// char 5
        0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18,	// char 6
        0x00, 0x00, 0x00, 0xE0, 0xF0, 0x18, 0x18, 0x18,	// char 7
        0x18, 0x38, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x18,	// char 8
        0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, 0x00,	// char 9
        0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00,	// char A
        0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18,	// char B
        0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,	// char C
        0xF8, 0xF8, 0x38, 0x70, 0xE0, 0x80, 0x00, 0x00,	// char D
        0xF8, 0xF8, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18,	// char E
        0xF8, 0xF8, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,	// char F
        
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 10
        0xC0, 0x30, 0x0C, 0x03, 0xC0, 0x30, 0x0C, 0x03,	// char 11
        0xC0, 0x33, 0x0C, 0x10, 0x60, 0x81, 0x06, 0x18,	// char 12
        0x60, 0x80, 0x03, 0x0C, 0x30, 0xC0, 0x00, 0x00,	// char 13
        0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,	// char 14
        0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,	// char 15
        0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,	// char 16
        0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,	// char 17
        0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00,	// char 18
        0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,	// char 19
        0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,	// char 1A
        0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18,	// char 1B
        0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 1C
        0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00,	// char 1D
        0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 1E
        0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// char 1F
};

 

Thanks,
JColvin

Hi JColvin,

Thank you for your comment. I maybe have a wrong version of linux, however when I boot it on the ZedBoard from SD card, I see the Digilent logo apearing by defoult on the OLED screen (see the image attached). Of course I can disable and enable it againt (running the scripts /usr/bin/unload_oled and /usr/bin/load_oled respectively) and I found out that the logo is stored as /root/logo.bin. I also know that in this version of linux there is a built in display driver for the OLED, pmodoled-gpio.ko, but I do not know how to use all this stuff in order to create my own collection of characters (or use any existing alphanumerics ones) to display my own data.

Thanks,
ArcaGraphy

IMG_3077.jpg

Edited by ArcaGraphy

Share this post


Link to post
Share on other sites
  • 0

Hi @ArcaGraphy,

Have you looked into petalinux? Here is a  PetaLinux Getting Started wiki that should help with starting your own build. I believe you would be able to alter the OLED IP core to your needs and then incorporate that IP core into your own custom petalinux build.

thank you,

Jon

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now