Не довелось попользоваться, но где-то читал (на хабре вроде), что надо несколько раз отрефрешить картинку для четкости. Вроде таким макаром, посылая картинку частями, народ даже полутонов добивается.
Нет ничего там такого. Выводил картинку на свой чёрно-красный EPD - всё нормально вывелось. Процедура вывода простая:
Код:
//Sends the image buffer in RAM to e-Paper and displays
void EPD_Display(u8 const *blackimage, u8 const *redimage)
{
uint j, i;
EPD_SetWindows(0, 0, EPD_WIDTH, EPD_HEIGHT);
for (j = 0; j < EPD_HEIGHT; j++) {
EPD_SetCursor(0, j);
for (i = 0; i < sizeof(widthBuf); i++) widthBuf[i] = blackimage[i + j * sizeof(widthBuf)];
EPD_Write(EPD_WRITE_RAM, widthBuf, sizeof(widthBuf));
}
for (j = 0; j < EPD_HEIGHT; j++) {
EPD_SetCursor(0, j);
for (i = 0; i < sizeof(widthBuf); i++) widthBuf[i] = redimage[i + j * sizeof(widthBuf)];
EPD_Write(EPD_WRITE_RAM_RED, widthBuf, sizeof(widthBuf));
}
EPD_TurnOnDisplay();
}
EPD_SetWindows() - устанавливает окно вывода. EPD_Write() - просто даёт команду записи блока пикселей через SPI и передаёт сами пиксели. Однократно, никаких повторов. Это команда контроллеру EPD, что уж он там делает с самими чернилами - это его дело.
Как видно из кода: картинка делится на чёрную и красную часть, и они посылаются в контроллер по-отдельности.
Этим кодом была записана картинка в конце 2020г. Картинка до сих пор отображается ярко (с тех пор ни разу не переписывалась), и на глаз никакой из цветов в яркости не потерял - оба примерно одинаково выглядят: