Сброс ST7528

Существует два способа сброса контроллера ЖКИ ST7528:

  • Аппаратный. Установкой низкого логического уровня на выводе RESETB.
  • Программный. Командой RESET.

Аппаратный сброс затрагивает больше функций контроллера, чем программный.

Команда для программного сброса: 0xE2.

Алгоритм аппаратного сброса (жирным выделен программный сброс):

  1. Адрес страницы: 0
  2. Адрес колонки: 0
  3. Чтение/модификация/запись: откл.
  4. Индикация: откл.
  5. Начальная линия: 0 (первая)
  6. Начальный COM: COM0
  7. Количество отображаемых линий: 128
  8. Инверсия изображения: откл.
  9. N-line inversion register: 0 (откл.)
  10. Заполнение черными точками: откл.
  11. ICON: откл.
  12. Цепи питания: откл.
  13. Коэффициент усиления повышающего преобразователя напряжения: 3 (DC1=0, DC0=0)
  14. Уровень КПД преобразователя: 2 (BE = 1)
  15. Коэффициент встроенного делителя напряжения, 1+(Rb/Ra): 2,3 (R2=0, R1=0, R0=0)
  16. Уровень контраста: 32
  17. Смещение напряжения питания ЖК: 1/12
  18. Направление обхода COM-выводов: нормальное (SHL=0, COM0 -> COM127)
  19. Отношение между адресом колонок и SEG-выводами: нормальное (ADC = 0, адрес колонки 0 соответствует SEG0)
  20. Встроенный тактовый генератор: откл.
  21. Энергосбережение: откл.
  22. Объем данных изображения (для трехпроводного SPI): 0
  23. Палитра: откл.
    Для четных (0, 2, …, 14) уровней серого: (GA5…0 = 000000). Для нечетных (1, 3, …, 15) уровней серого: (GA5…0 = 1111111).
  24. Кадры: 4 (4FRC); ШИМ: 45 (45PWM)
Реклама

Компилируемый растровый шрифт (CBF)

Для вывода текста на индикаторы c контроллерами ST7528, ST7565P, KS0108 мне пришлось изобрести шрифт, который я назвал CBF (Compiled Bitmap Font).

Особенности CBF:

  • Компилируемый
  • Пропорциональный
  • Растровый

Компилируемый, означает, что файл шрифта можно скомпилировать Си-компилятором.

О видеопамяти контроллеров

Особенность вышеназванных контроллеров в том, что их видеопамять делится на страницы и колонки. Адрес колонки задает вертикальный ряд пикселей. Страница задает группу из восьми горизонтальных рядов пикселей. Таким образом, задав страницу и адрес колонки мы можем обратиться к восьми вертикальным пикселям. После записи изображения в эти пиксели, контроллер автоматически изменяет адрес колонки на единицу. Автоматического изменения страницы нет, её должно задавать управляющее индикатором устройство.

Если индикатор монохромный, то, выбрав страницу и адрес колонки, можно передать контроллеру всего байт изображения, чтобы контроллер отобразил его на  восьми вертикальных пикселях. Для цветных индикаторов требуется передать больше байт, но при выводе одноцветного изображения, эти байты формируются из одного исходного байта.

CBF

CBF устроен таким образом, чтобы свести к минимуму затраты ресурсов для вывода текста на индикаторы с вышеописанной организацией видеопамяти.

Файл CBF содержит константу (_height), задающую высоту шрифта в пикселях, и два одномерных массива:

  • Массив позиций глифов (_position[])
  • Массив глифов (_bitmap[])

Высота шрифта кратна восьми пикселям.

Массив позиций нужен для сопоставления кода символа с расположением его глифа в массиве глифов. Если s — это код символа, то _position[s] — это начало глифа.

Массив глифов, кроме изображений символов, содержит ширину этих изображений. Ширина измеряется в пикселях.

Если base — это начало глифа, то:

  • _bitmap[base] — это ширина изображения
  • _bitmap[base + 1] — первый байт изображения
  • _bitmap[base + i] — i-тый байт изображения

Видеопамять контроллера устроена таким образом, что последовательное изъятие байтов из массива _bitmap[] и передача их индикатору, без всякого преобразования, постепенно формирует на индикаторе символ.

Код, выводящий символ «Щ» на индикатор:

int base = _position['Щ']; //Начало глифа символа Щ

int W = _bitmap[base]; //Ширина глифа в битах
int H = _height/8;     //Высота глифа в байтах

int i;
for (i = 1; i <= W*H; i++)
{
  uint8_t image = _bitmap[base + i]; //i-тый байт изображения симв.
  if (i == W+1) indicator_next_page(); // Установить след. страницу
  indicator_send(image);
}

bdftocbf

Для создания шрифтов я написал программу bdftocbf. Это программа преобразует шрифт в формате BDF в CBF.

Программа консольная и написана для работы под Линуксом.

Страница программы: http://github.com/bravikov/bdftocbf

Для создания шрифта BDF рекомендуется использовать программу FontForge.

Последовательный интерфейс ЖК-индикатора BO128128C

ЖК-индикатор BO128128C фирмы Bolymin базируется на контроллере ST7528.

Вообще, для связи с внешним миром контроллер поддерживает 5 интерфейсов (2 параллельных и 3 последовательных). Для выбора интерфейса используются выводы контроллера PS0, PS1 и PS2. Но эти выводы не выведены наружу индикатора. Следовательно их логическое состояние жестко задано внутри индикатора.

Для общения внешнего устройства с контроллером, индикатор предоставляет 4 линии, образующих 4-проводный последовательный интерфейс:

  • A0 — Вход для управления типом передаваемых данных. Высокий уровень — изображение. Низкий уровень — команды.
  • CSB — Вход для активации последовательного интерфейса. Низкий уровень активирует интерфейс.
  • SID — Вход последовательных данных.
  • SCLK — Вход тактового сигнала.

По этому интерфейсу данные идут только в одном направлении  — к контроллеру. Биты данных передаются по нарастающему фронту тактового сигнала. Передача байта данных начинается со старшего бита (DB7).

Временная диаграмма передачи байта:

Выводы SDI и SCLK могут быть подключены к интерфейсу SPI устройства, управляющего индикатором. Вывод SDI подключается к выводу MOSI, а вывод SCLK индикатора к выводу SCLK управляющего устройства. Интерфейс должен быть настроен как ведущий с режимом тактирования: CPOL=1 и CPHA=1 (то есть активный фронт — второй; и во время простоя высокий уровень на выводе SCLK).

Для сброса контроллера можно воспользоваться выводом RESET индикатора, установив низкий логический уровень на этом выводе. После подачи высокого логического уровня состояние контроллера эквивалентно состоянию после подачи питания.