Дисплеи на контроллере SSD1309, обсуждение

idpuzzle1

✩✩✩✩✩✩✩
11 Июл 2021
2
0
Пробую первый проект. Нужно вывести несколько изображений на экран SSD1309. Текст, линии и прочие функции рисуются правильно, но изображения со смещением (см. скриншот).
Чтобы сконвертировать изображения использовал https://javl.github.io/image2cpp/ . Возможно она неправильно конвертирует
Код (не весь):
U8G2_SSD1309_128X64_NONAME0_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=[I]/ 13, /[/I] data=[I]/ 11, /[/I] cs=[I]/ 10, /[/I] dc=[I]/ 9, /[/I] reset=*/ 8);

// 'vent', 15x15px
const unsigned char bitmap_vent [] PROGMEM = {
    0x00, 0x70, 0x00, 0xf8, 0x71, 0xf8, 0xf9, 0xf8, 0xfb, 0xf0, 0xfb, 0x80, 0x7e, 0xe0, 0x3c, 0x78,
    0x0e, 0xfc, 0x03, 0xbe, 0x1f, 0xbe, 0x3f, 0x3e, 0x3f, 0x1c, 0x3e, 0x00, 0x1c, 0x00
};
// 'wind_air', 27x20px
const unsigned char bitmap_wind_air [] PROGMEM = {
    0x00, 0x1f, 0x00, 0x00, 0x07, 0xff, 0xfe, 0x00, 0x7f, 0xf1, 0xff, 0xc0, 0xfc, 0x00, 0x03, 0xe0,
    0xc0, 0x00, 0x00, 0x60, 0xc0, 0x00, 0x00, 0x60, 0xc0, 0x00, 0x00, 0x60, 0xe1, 0x04, 0x10, 0xe0,
    0x63, 0x8e, 0x38, 0xc0, 0x67, 0xdf, 0x7c, 0xc0, 0x61, 0x04, 0x10, 0xc0, 0x61, 0x04, 0x10, 0xc0,
    0x61, 0x04, 0x10, 0xc0, 0x71, 0x04, 0x11, 0xc0, 0x32, 0x08, 0x21, 0x80, 0x32, 0x08, 0x21, 0x80,
    0x3a, 0x08, 0x23, 0x80, 0x1a, 0xeb, 0xaf, 0x00, 0x02, 0x08, 0x20, 0x00, 0x02, 0x08, 0x20, 0x00
};
// 'air_direction', 41x51px
const unsigned char bitmap_air_direction [] PROGMEM = {
    0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x0f,
    0xff, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00,
    0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80,
    0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f,
    0xff, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00,
    0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00,
    0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f,
    0xfc, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00,
    0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00,
    0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xff,
    0xfc, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00,
    0x03, 0xff, 0xf8, 0x00, 0x00, 0xf8, 0x03, 0xff, 0xf8, 0x00, 0x01, 0xfe, 0x03, 0xff, 0xf0, 0x00,
    0x03, 0xff, 0xc3, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xff,
    0xe0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x1f, 0xff,
    0xff, 0xff, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x1f, 0xf7, 0xff, 0xff, 0xc0, 0x00,
    0x3f, 0xe1, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xe0, 0x7f, 0xff, 0x80, 0x00, 0x7f, 0xe0, 0x1f, 0xff,
    0x80, 0x00, 0x7f, 0xc0, 0x07, 0xff, 0x00, 0x00, 0xff, 0xc0, 0x01, 0xfe, 0x00, 0x00, 0xff, 0x80,
    0x00, 0x78, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
    0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
    0x00, 0x00
};

// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 480)
const int bitmap_allArray_LEN = 3;
const unsigned char* bitmap_allArray[3] = {
    bitmap_air_direction,
    bitmap_vent,
    bitmap_wind_air
};

void setup(void) {
  u8g2.begin();
}
   
void loop(void) {
u8g2.clearBuffer();         // clear the internal memory

    u8g2.setBitmapMode(true);
u8g2.setDrawColor(1); // White

//wind air direction

  u8g2.drawXBMP(56,2,27,20,bitmap_wind_air);

// vent power

  u8g2.drawXBMP(56,24,15,15,bitmap_vent);

// air direction

  u8g2.drawXBMP(86,2,41,51,bitmap_air_direction);

  u8g2.sendBuffer();                    // transfer internal memory to the display
  delay(1000);
}
photo_2021-07-11 23.33.48.jpeg
Результат

исходные картинки (они белые, поэтому не видно, но копировать можно)
pixil-frame-0-3.pngpixil-frame-0-4.pngpixil-frame-0-5.png
 
Изменено:

idpuzzle1

✩✩✩✩✩✩✩
11 Июл 2021
2
0
@poty, то есть проблема именно в Туле, который генерирует изображение? Не могу проверить другие, в доступе только macOS
 
Изменено:

sergmad

✩✩✩✩✩✩✩
15 Апр 2023
2
0
ssd1309.png
Добрый день. Помогите разобраться. Через i2c_scanner не определяет адресса i2c Работает только с библиотекой OLED_I2C. С другими не хочет работать. Пробовал только примеры из библиотек.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Адрес написан - 0х7А
раз с OLED_I2C работает - значит это SSD1306 а не SSD1309
 
  • Лойс +1
Реакции: sergmad

sergmad

✩✩✩✩✩✩✩
15 Апр 2023
2
0
Хорошо, мы выяснили что это SSD1306. Почему не работает с библиотекой "GyverOLED". И почему не выдает адрес i2c_scanner.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@sergmad, там может быть использован какой либо стандартный адрес, а дисплей на другом адресе. Но в любом случае сканер должен показывать, если не показывает - проверьте подключение или попробуйте другой

проверил - действительно, по умолчанию адрес установлен 0х3С
1681647712557.png
 
Изменено:

Bungalit

✩✩✩✩✩✩✩
12 Июн 2022
1
0
Москва
Все заработает, как только поставите перемычку вместо диода D2 -это, кстати, написано на самом дисплее. Китайцы молчат об этом, может тоже не знают)