128x64 lcd Shows random pixels when displaying Xbm

When I try to display an Xbm it shows random pixels but when I use the Xbm from the example it works fine

#include "Wire.h"
#include "I2C_LCD12864.h"

static const unsigned char Untitled [] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00,
   0x70, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x00,
   0x00, 0x00, 0x00, 0xd4, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x1f, 0x12, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xff, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x36, 0x54, 0x00, 0x00, 0x00, 0x40, 0xaa, 0xff, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xa2, 0x2a, 0x10, 0x80, 0x94,
   0x74, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x8d, 0x42,
   0x42, 0x92, 0x20, 0xc5, 0xf6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xff, 0x5b, 0x08, 0x80, 0x04, 0x95, 0xb4, 0xd5, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xbf, 0xde, 0x01, 0xc0, 0x2f, 0x90, 0x44, 0xa5, 0x01,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3f, 0x92, 0xe0, 0x9f, 0x42,
   0xa8, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00,
   0xe0, 0x07, 0x0a, 0xa1, 0xca, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xff, 0x2f, 0x01, 0xe0, 0x0b, 0x20, 0x84, 0xe8, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xff, 0x7f, 0x02, 0x60, 0x01, 0x00, 0x10, 0xe9, 0x01,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x8d, 0x00, 0x04, 0x00, 0x00,
   0x00, 0xea, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x5f, 0x05,
   0x20, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xff, 0x5f, 0x00, 0x04, 0x00, 0x00, 0x80, 0x5e, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xff, 0xbf, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x2f, 0x02, 0x08, 0x00, 0x00,
   0xa0, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x5f, 0x02,
   0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xff, 0x2f, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xff, 0x2d, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x57, 0x00, 0x00, 0x00, 0x00,
   0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x5f, 0x01,
   0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xff, 0x57, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xff, 0xbf, 0x02, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xa5, 0x00, 0x00, 0x00, 0x00,
   0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x24, 0x02,
   0x00, 0x00, 0x00, 0xf8, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x14, 0x81, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xff, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x01,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x42, 0x01, 0x00, 0x00, 0x00,
   0xf0, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x00,
   0x00, 0x02, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x42, 0x20, 0x01, 0x40, 0x00, 0x00, 0x80, 0x8a, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x29, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00,
   0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x00,
   0x90, 0x06, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x0a, 0x00, 0x00, 0x40, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x05, 0x40, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x44, 0x0a, 0x14,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x08, 0x00,
   0x40, 0x54, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xaa, 0x04, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xa8, 0x29, 0x00, 0x20, 0x52, 0x03, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd5, 0x16, 0x00, 0x02, 0xa8, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa9, 0x6d, 0x00,
   0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x52, 0xbb, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x54, 0xea, 0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xdd, 0x2b, 0x05, 0x0a, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x69, 0xbf,
   0xec, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x44, 0xaa, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xa9, 0xea, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xb4, 0xff, 0xff, 0x01, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xed, 0xff,
   0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x55, 0xf5, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x5b, 0x5d, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

I2C_LCD12864 lcd(&Wire);

void setup()
{
    Wire.begin();
    lcd.init();
    
    lcd.clearBuffer();
    
    //lcd.setFont(z_font_5x8); 

    //lcd.drawText(1,50, "LCD test of displaying BMP ");
    lcd.sendBuffer(); // push buffer data to CGRAM
    lcd.setBL_on();
    delay(2000);


}

void loop()
{
    //lcd.clear(0,0);
    lcd.clearBuffer();
    lcd.drawBitmap(0,0,84,50,(uint8_t*)Untitled,1);
    lcd.sendBuffer();
    return;
}

That's an awful lot of RAM you're using there.
What happens if you use PROGMEM instead?

I have not tried that yet

I changed it so it is not I2C and used different code

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

static const unsigned char Untitled [] = {

   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00,
   0x70, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x00,
   0x00, 0x00, 0x00, 0xd4, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x1f, 0x12, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xff, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x36, 0x54, 0x00, 0x00, 0x00, 0x40, 0xaa, 0xff, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xa2, 0x2a, 0x10, 0x80, 0x94,
   0x74, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x8d, 0x42,
   0x42, 0x92, 0x20, 0xc5, 0xf6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xff, 0x5b, 0x08, 0x80, 0x04, 0x95, 0xb4, 0xd5, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xbf, 0xde, 0x01, 0xc0, 0x2f, 0x90, 0x44, 0xa5, 0x01,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3f, 0x92, 0xe0, 0x9f, 0x42,
   0xa8, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00,
   0xe0, 0x07, 0x0a, 0xa1, 0xca, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xff, 0x2f, 0x01, 0xe0, 0x0b, 0x20, 0x84, 0xe8, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xff, 0x7f, 0x02, 0x60, 0x01, 0x00, 0x10, 0xe9, 0x01,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x8d, 0x00, 0x04, 0x00, 0x00,
   0x00, 0xea, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x5f, 0x05,
   0x20, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xff, 0x5f, 0x00, 0x04, 0x00, 0x00, 0x80, 0x5e, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xff, 0xbf, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x2f, 0x02, 0x08, 0x00, 0x00,
   0xa0, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x5f, 0x02,
   0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xff, 0x2f, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xff, 0x2d, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x57, 0x00, 0x00, 0x00, 0x00,
   0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x5f, 0x01,
   0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xff, 0x57, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xff, 0xbf, 0x02, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xa5, 0x00, 0x00, 0x00, 0x00,
   0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x24, 0x02,
   0x00, 0x00, 0x00, 0xf8, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x14, 0x81, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xff, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x01,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x42, 0x01, 0x00, 0x00, 0x00,
   0xf0, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x00,
   0x00, 0x02, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x42, 0x20, 0x01, 0x40, 0x00, 0x00, 0x80, 0x8a, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x29, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x01, 0x00,
   0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x00,
   0x90, 0x06, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x0a, 0x00, 0x00, 0x40, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x05, 0x40, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x44, 0x0a, 0x14,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x08, 0x00,
   0x40, 0x54, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0xaa, 0x04, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xa8, 0x29, 0x00, 0x20, 0x52, 0x03, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd5, 0x16, 0x00, 0x02, 0xa8, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa9, 0x6d, 0x00,
   0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x52, 0xbb, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x54, 0xea, 0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xdd, 0x2b, 0x05, 0x0a, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x69, 0xbf,
   0xec, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x44, 0xaa, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xa9, 0xea, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xb4, 0xff, 0xff, 0x01, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xed, 0xff,
   0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x55, 0xf5, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x5b, 0x5d, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};


U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);


void draw(void)
{
  u8g2.drawXBMP( 0, 0, 128, 64, Untitled);
}


void setup() 
{
  // put your setup code here, to run once:
  u8g2.begin();
  u8g2.clearBuffer();
}

void loop()
{
  // put your main code here, to run repeatedly:
  u8g2.firstPage();
  do
  {
    draw();
  }while(u8g2.nextPage());

  delay(1000);

}

but it still shows random pixels

PROGMEM still shows random pixels

Show the output with the random pixels. Look for patterns (in the randomness).

For the U8g2 library, drawXBMP() requires the image to be in PROGMEM, if the image is in ram use drawXBM().

U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);

That constructor is for a full buffer, the firstPage()/nextPage() is for a page buffer, change the _F_ to _1_ in the constructor to specify a page buffer.

What are the actual dimensions of your image, the array is too small for a 128 x 64 image.
< edit > your image is 120 x 58, not 128 x 64

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.