av,
я имел в виду свой алгоритм работы, чтобы не вычислять подстроку для отрисовки пустого символа для затирания черных блоков
можно просто двигать всю строку черных блоков вправо и тогда слева будет автоматом пустое место
это более эффективный алгоритм, правда он работает только на уровне целых блоков, а если использовать полосочки в одном блоке, то не прокатит
это я говорю, если вдруг гому хватает индикатора как выше приведено - в виде целых блоков
Отправлено спустя 6 часов 23 минуты 59 секунд:
бен, ай нид хелп
кажется моя оптимизация проваливается
если массив находится в озу, то все работает
если читается из пзу, то почему-то в озу индикатора он пишется 2 раза, но только первая его половина
Код: Выделить всё
const uint8_t cgram[64] PROGMEM = {
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // left1
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, // left2
0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, // left3
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, // left4
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // right1
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // right2
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, // right3
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f // right4
};
все это правильно выводится в консоль, правда в протеусе, но в индикатор не заходит правильно
Код: Выделить всё
_lcd1.command(LCD_SETCGRAMADDR);
for (byte i=0; i<64; i++){
_lcd1.write(pgm_read_byte(cgram +i));
}
ставим указатель на адрес озу индикатора и записываем туда байты все за раз, счетчик адреса озу сам увеличивается
все байты как раз занимают весь объем озу в 8 символов
глюк возник именно с PROGMEM , когда данные читаются из флеша
из озу контроллера все норм работает, вторые 4 символа должны быть зеркальным отображением первых 4х
если кому не лень - проверьте в железе, завтра попробую сам, а то индикаторы эти надо еще поискать и уже 11 вечера
Отправлено спустя 5 минут :
так, я тут помедитировал на картинку с индикатором с минуту и таки узрел, что все таки отображается все правильно
это у меня в голове уже шарики за ролики заходят и пора спать, а то я с 7 утра сижу
специально внизу вывел 8 полных блоков, чтобы на их фоне видеть разницу в верхних блоках и все равно глаз замылился
потрачен час на отлов несуществующего глюка