понедельник, 19 апреля 2010 г.

ЖК-индикатор. Часть 3.

Наваяв схему изображенную выше, приступил к программированию. Для "занесения символов в ЖК" используется используются сигналы RS - register select, R/W - read/write (чтение - высокий уровень, запись - низкий), E - защелкивает данные в регистр. Для передачи данных может использоваться либо 8-ми, либо 4-хразрядная шина. Мой выбор - второй вариант, ибо тратится меньше выводов МК, легче разводить/паять. При этом неиспользуемые выводы контроллера ЖК никуда цеплять не надо. Передача данных происходит в два этапа - сначала передается старшая четверка бит, затем младшая четверка байта. В зависимости от состояния линии RS, принятый байт защелкивается (линию E утягиваем в ноль на время порядка 250нс - 1мкс, затем возвращаем обратно в единицу) либо в регистр инструкций IR (RS = 0), либо в регистр данных DR (RS = 1). Если происходит запись в регистр данных, то все простро: в DDRAM контроллера ЖК по адрему равному, записанному значению хранится символ, который выводится на экран. Радует, что адреса символов совпадают с их ASCII-кодами. Ежели пишем в IR, то данные расцениваются как интсрукция (см. следующую таблицу).

Для того чтобы проинициализировать контроллер ЖКИ проделываем следующую последовательность действий: Ждем 15мсек, выставляем линии R/W и RS в ноль, выставляем на линии DB4-DB7 значение 0x03 и щелкаем сигналом E, ждем 4.1мсек, повторяем действия, ждем 100мксек и опять повторяем, ждем 40мксек и контроллер готов к дальнейшей работе. После операции инициализации контроллер находится в режиме работы по 8-разрядной шине данных, нам надо переключить в 4-разрядный режим для этого выставляем на линиях DB4-DB7 значение 0x2 (смотрим 6 строчку в таблице: DL = 0 - 4-разрядный режим) и щелкаем сигналом E, при этом не забываем предварительно выставить R/W = 0 и RS = 0. После защелкивания данных надо подождать 40мксек, чтобы они "переварились". Теперь контроллер в нужном режиме, но так как сигналы DB3-DB0 не задействованы, то параметры развертки будут выставлены некорректно. Поэтому опять, теперь уже в 4-разрядном режиме, передаем контроллеру 0x28 (N = 1 - развертка двух строк, F = 0 - символы 5x7), не зыбываем подождать. Далее подробно расписывать не буду, ибо в документации все есть, а есть также ссылка из предыдущего сообщения. Скажу лишь, что передается 0x08 - выключение/0x0C - включение и 0x06 - режим сдвига курсора. Все это есть, также в исходниках, которые выложены. Далее можно писать на экранчик, для этого используется операция записи в DR, после которой также необходимо подождать 40мксек перед последующей операцией. Можно писать начиная не с нулевого положения, а с произволного. Для перед записью в DR необходимо записать адрес положения в IR (передается инструкция со старшим битом равным единице, а остальные 7 бит - адрес, см. последнюю строчку в таблице), после записи в IR надо подождать уже 200мксек. Единственное, что надо помнить - адреса второй строки начинаются с 0x40. В принципе это все. Можно сказать, что ЖКИ побежден!

Комментариев нет:

Отправить комментарий