Запилил я таки знакогенератор. Работает в кодировке CP-1251, символы — что на табличке выше:
К сожалению, на моём дисплее последние два столбца пикселей не отображаются (верхние две строки, видимо, тоже). Но память под них внутри есть.
Так же сделал цифровую матричную клавиатуру и подключил к этому же МК:
В связи с чем появилась возможность поиграться с внутренними настройками контроллера
S1D15G10. В результате экспериментов я получил следующие данные.
Команда
DATCTR. В первом параметре бит
P12 реально имеет инвертированное значение относительно указанного в даташите. То есть при
P12 = 1 запись в область памяти, заданную командами
PASET и
CASET, происходит по столбцам, а при
P12 = 1 — по строкам. Биты
P10 и
P11 определяют направление нумерации пикселей дисплея, соответственно, в строках и в столбцах. Нумерация всегда начинается 0 и заканчивается 131. То есть, если
P10 = 0, то начало координат находится в верху экрана (верх экрана — это там где разъём), и пиксели нумеруются сверху вниз. А если
P10 = 1, то начало координат — внизу экрана, нумерация, соответственно, происходит снизу вверх. Если
P11 = 0, то начало начало координат находится слева, а нумерация пикселей — слева направо. Если же
P11 = 1, то начало координат — справа, и пиксели нумеруются справа налево. Важно заметить, что
действие эта команда оказывает не сразу на изображение, уже имеющееся в памяти контроллера, а только
на изображение, которое будет записываться в память контроллера после этой команды. Фактически, команда просто изменяет адресацию памяти для команды записи
RAMWR.
Вот как это выглядит на практике: {чуть позже допишу}
Команда
VOLCTR. Управление напряжением действительно предоставляет возможность регулировать яркость и контрастность дисплея в довольно широком диапазоне. Первый параметр команды осуществляет точную настройку, второй — грубую, причём диапазоны, задаваемые вторым параметром, очень сильно перекрываются. Уменьшение значений (как и уменьшение питания) приводит к затемнению картинки и увеличению контрастности (в пределе чёрный экран). Увеличение параметров приводит к увеличению яркости и падению контрастности (в пределе белый экран). С помощью этой команды можно выправить картинку при недостаточном или избыточном напряжении питания драйвера
S1D15G10. Картинка оказалась очень чувствительной как к питанию, так и к силе света, падающего на чип (100-ватная лампочка, освещающая чип с расстояния в 30-40 см, может совсем "выключить" картинку). При этом, при напряжении питания от 2,5 вольт и ниже ясно видны артефакты в виде вертикальных полос в столбцах, где есть яркие пиксели. При сильно завышенном питании (3,5 вольта и выше) может не получится даже с нулевыми значениями параметров команды
VOLCTR выставить приемлемое качество изображения, картинка будет "засвечена". К сожалению, у меня линии
V_DD и
V_DDI питания драйвера дисплея запараллелены, и это может оказывать определённое значение. Однако, во вполне приемлемом диапазоне питающих напряжений качество изображения можно выставить отличное.
Отдельно хочу сказать об удобстве вывода символов на этот экран. Это просто сказка! С помощью команд
PASET и
CASET в любом месте экрана можно задать окошечко, совпадающее со знакоместом символа, а потом сплошным потоком (одной командой
RAMWR) лить цвета пикселей, при этом они автоматически заполнят окошечко и образуют изображение символа. Главное — правильно задать размеры (они должны совпадать с размером символа) и направление заполнения окошечка командой
DATCTR. При этом второй параметр команд
PASET и
CASET задаёт максимальную координату
включительно. Если в одной из команд первый и второй параметры совпадают, то таким образом можно рисовать горизонтальные и вертикальные линии. Нарисовать закрашенный прямоугольник — так вообще раз плюнуть: один раз задать координаты и залить нужное количество пикселей нужного цвета. К сожалению я не пробовал задавать первому параметру величину, большую, чем второму, поэтому не знаю как будет себя вести драйвер дисплея в этом случае.