Ниже приведён пример программы для управления самодельной ЖК-панелью на драйвере PCF2112P.
Собственно говоря, всё управление нашей ЖК-панелью заключается в загрузке в микросхему драйвера нужных данных, чем и занимается микроконтроллер (PIC16F628A). Алгоритм передачи данных такой: после того, как на линии DLEN установится высокий уровень, микросхема по каждому заднему фронту тактового импульса начинает считывать состояние линии DATA (низкий уровень соответствует «нулю», высокий — «единице»). Пакет состоит из 34 бит. Нулевой бит — тестовый и он всегда должен быть равен нулю, за ним следуют 32 бита данных, соответствующие программируемым состояниям линий сегментов («0» — сегмент выключен, «1» — включен), 33-й бит является служебным и должен быть установлен в «1». После передачи пакета необходимо сбросить линию DLEN в ноль. После того, как линия DLEN сброшена в ноль — первый же тактовый импульс приведёт к загрузке принятых данных. Далее можно передавать новые данные. Тайминги можно посмотреть в доке на PCF2112P.
Сам пакет данных в нашем примере формируется на компьютере специальной тестовой программой (ниже она тоже представлена) в зависимости от того, что мы хотим увидеть на экране. Далее с компьютера на микроконтроллер передаются 4 байта пакета (как раз 32 бита) по интерфейсу RS-232. Передать их можно любой терминалкой с hex-режимом (хотя бы нашей RH_Com). Физически для передачи данных с ПК в драйвер можно использовать плату от генератора прямоугольных импульсов, просто контроллер в этом случае надо будет прошить описанной ниже программой.
Итак, пусть к выводу RB4 микроконтроллера подключена линия DLEN, к выводу RB5 — линия CLB и к выводу RB6 — линия DATA. Для связи с ПК используется модуль UART (выводы RB1, RB2). Биты в передаваемом с ПК пакете данных удобно сразу расположить в том порядке, в котором они будут загружаться в драйвер (этим собственно и занимается наша тестовая программа на ПК), т.е. нулевой бит первого байта (1:0) пакета будет соответствовать состоянию линии S1 драйвера, первый бит первого байта (1:1) — состоянию линии S2, второй бит первого байта (1:2) — состоянию
линии S3 и так далее (смотрите рисунок).
Алгоритм программы микроконтроллера и тайминги протокола:
![]() ![]() tSUDA — Data setup time — минимальное время от момента установки новых данных до спада на линии CLB — 3 мкс. tHDDA — Data hold time — минимальное время, в течении которого не должна изменяться линия DATA после спада на линии CLB (для нормального считывания данных) — 3 мкс. tSUEN — Enable setup time — максимальное время, необходимое драйверу для подготовки к приёму (т.е. минимум такую паузу нужно выдержать между включением DLEN и передним фронтом первого тактового импульса) — 1 мкс. tSUDI — disable setup time — максимальное время, необходимое чтобы завершить приём данных (т.е. минимум такую паузу нужно выдержать между спадом последнего тактового импульса и выключением линии DLEN) — 2 мкс. tSULD — loaad pulse setup time — минимальное время между выключением линии DLEN и загрузочным тактовым импульсом — 2,5 мкс. tBUSY — busy time — минимальное время между загрузочным тактовым импульсом и началом передачи нового пакета — 3 мкс. tWH — 1 мкс, tWL — 5 мкс, tCLB — 10мкс — минимальные параметры тактового импульса. |
Скачать текст программы (*.asm) и прошивку (*.hex) для контроллера.
Скачать тестовую программу для ПК и её исходники на C++ Builder 6.