Рис.1 ЖКИ на базе контроллера HT1611
ЖКИ на базе контроллера HT1611 ориентированы главным образом на применение в телефонных аппаратах, но с успехом могут быть использованы и в различных микроконтроллерных приложениях. Существует много разновидностей индикаторов данного типа (внешний вид одного из них WM-1611 показан на рис.1). Различая могут проявляться в габаритных размерах, угле обзора, цоколевке выводов и ряде других технологических параметров. Логика работы и электрические характеристики, при этом, остаются практически неизменными: напряжение питания 1.2…1.7 В, ток потребления порядка 10 мкА. На дисплее ЖКИ расположено 10 знакомест, состоящих из 7 сегментов(децимальные точки отсутствуют). Для реализации всех своих функций встроенный контроллер HT1611 требует как минимум 8 линий (см. табл.1). Возможно также наличие выводов COM (TIC), с которого можно снимать тактирующие импульсы с индикатора для “раскачки” других устройств и 12/24 для изменения формата времени.
Табл.1. Функциональное назначение выводов контроллера HT1611:
Название выводов |
Функциональное назначение |
VDD |
Напряжение питания |
VSS |
Общий вывод |
S1 |
Установка времени |
S2 |
Режим установки времени |
T1 или TMR |
Сброс таймера |
HK |
Выбор режима работы |
DI |
Последовательный ввод данных |
SK или CLK |
Тактовые импульсы |
ЖКИ поддерживает два режима работы (выбор режима производится через вывод HK). Это часы при HK=1 и ведомый индикатор для отображения пользовательской информации при HK=0. В режиме часов в центре экрана выводится текущее время в формате ЧЧ-ММ-СС, а подачей высокого уровня напряжения на выводы S2, S1 можно осуществит выбор и установку начальных показаний. В режиме индикатора производится ввод информации через последовательную двухпроводную шину, состоящую, как обычно, из линий данных DI и синхроимпульсов SK. Если шина не активна в течении 10 с(импульсы на SK отсутствуют), то индикатор начинает работать как таймер. Справа отображается показания ММ-СС (происходит циклический счет от 00-00 до 59-59). Обнулить счетчик времени можно подав на вывод T1 уровень лог.1. Избежать самопроизвольного запуска таймера, кроме как периодически(не реже чем 1 раз в 10 с) посылать данные в ЖКИ, можно если в конце каждой транзакции оставлять на линии SK уровень лог.0. Возврат из режима ведомого к режиму часов(при переводе HK из состояния лог.0 в лог.1) сопровождается 5-секундной задержкой.
Рис.2 Схема подключения ЖКИ WM-1611 к микроконтроллеру
а - двухпроводная передача данных
б - однопроводная передача данных
Типичная схема подключения микроконтроллера и ЖКИ показана на рис.2а. Питание индикатора 1.2…1.7В в необходимых пределах может быть установлено подстроечным сопротивлением R6. Если значение VCC будет иметь значительные колебания, может понадобиться небольшой фильтр C2. Хотя диапазон питающих напряжений довольно широк, реально существует только небольшая область 1.45…1.65 В где может быть достигнута оптимальная контрастность. В целом, из-за мизерного тока потребления, VDD может быть сформировано любым способом. Часто в качестве источника тока может выступать небольшой параметрический стабилизатор или даже обыкновенный светодиод. Для согласования логических уровней DD1 c HG1 используются делители напряжений R2R4 и R3R5 на линиях данных PB0 и стробов PB1 соответственно. Вывод HK соединен с землей, остальные линии индикатора оставлены свободными.
Рис.3 Коды символов контроллера HT1611
HT1611 может отображать 16 предопределенных символов, каждому из которых соответствует 4-разрядный код. Соответствие кодов для каждого из символов приведено на рис.3., а временная диаграмма передачи данных приведена на рис.4. Ведущий микроконтроллер последовательно передает 4-битные посылки начиная с MSB. Каждый символ при этом загружаются в крайнюю правую позицию индикатора и при загрузке очередного символа все остальные сдвигаются влево. Таким образом для обновления информации на экране необходимо каждый раз перезаписывать все 10 символов. Не смотря на то, что смену изображения можно произвести очень быстро(в лучшем случае примерно за 200 мкс), большинство эффектов простейшей анимации создать не удастся. Жидкие кристаллы обладают большой инерцией. Кроме того у HT1611 отсутствуют буферные регистры индикации, из-за чего при большой частоте наблюдается неприятное мерцание.
Рис.4 Последовательность передачи данных
То обстоятельство, что запись каждого бита в ЖКИ происходит по спаду импульсов на линии SK дает возможность управлять индикатором всего по одному проводу, как показано на рис.2б. Ко входу DI подключен конденсатор C1, образующий совместно с цепочкой R2R4 звено задержки времени. Для передачи низкого логического уровня на выводе PB0 формируется кратковременный импульс напряжения длительность которого меньше постоянной времени R2R4C1. В этом случае конденсатор C1 зарядится не успевает и в конце импульса будет записан лог.0. Когда необходимо передать в индикатор лог.1, то продолжительность импульса должна быть больше постоянной времени R2R4C1. Между двумя соседними импульсами должна выдерживаться пауза соизмеримая с постоянной времени цепи разрядки конденсатора C1(R2+R4)/R2R4.
.def data = R16 ;регистр для передачи ад данных .def cnt1 = R17 ;счетчик циклов .def cnt2 = R18 ;счетчик циклов .def temp = R19 ;регистр для промежуточных операций .equ DELAY = 2 ;задержка времени на частоте 1 МГЦ .equ DI = PD0 .equ SK = PD1 ; При использовании 1-проводного интерфейса дополнительно ; необходимо определить константу PULSE (1…51), задающую ; длительность импульсов напряжения на выводе SD. Ее ; приблизительное значение PULSE = R2*C1*F/8 (F в МГЦ, R2 в кОм, ; С1 в нФ). Для указанных на рис.2б номиналов при F = 1 МГЦ: ; PULSE = 33*3.3*1/8 ≈ 14. ; .equ SD = PD0 ; .equ PULSE = 14 .dseg .org SRAM_START ;ячейки в SRAM для отображения screen: .byte 10 ;на индикаторе .cseg .org 0 rjmp initial ;старт программы .org 0x0020 initial: ldi temp,high(RAMEND) ;инициализация стека out SPH,temp ldi temp,low(RAMEND) out SPL,temp . cbi PORTD,DI ;обнуляем бит DI sbi DDRD,DI ;настраиваем линию DI на вывод cbi PORTD,SK ;обнуляем бит SK sbi DDRD,SK ;настраиваем линию SK на вывод ;cbi PORTD,SD ;обнуляем бит SD ;sbi DDRD,SD ;настраиваем линию SD на вывод . ldi cnt1,10 ;заполняем буфер индикации числами 0…9 clr data ldi YH,high(SRAM_START) ldi YL,low(SRAM_START) mcl: st Y+,data inc data dec cnt1 brne mcl rcall write_ind ;выводим информацию на дисплей . ; Набор подпрограмм для работы с HT1611 ; R16 – регистр для передачи адреса и данных ; R17,R18 – счетчики циклов ; YH:YL – указатель на буфер индикации ; ZH:ZL – указатель на таблицу перекодировки символов ; screen – адрес начала массива сортируемых чисел ; DELAY – постоянная для задержка времени (1…62) ; PULSE – постоянная для задержка времени при 1-проводном ; интерфейсе (1…51) ; Вспомогательная подпрограмма записи бита по ; 2-проводному интерфейсу ; Через флаг C в подпрограмму передается бит для записи. write_bit: sbi PORTD,SK ;устанавливаем на линии SK лог.1 cbi PORTD,DI ;если в C=0, то устанавливаем на линии brcc wb1 ;DI лог.0, если C=1, то устанавливаем sbi PORTD,DI ;на линии DI лог.1 wb1: ldi R17,DELAY ;формируем задержку времени ≥1 мкс rcall pause cbi PORTD,SK ;устанавливаем на линии SK лог.0 ldi R17,2*DELAY ;формируем задержку времени ≥2 мкс rcall pause ret ; Вспомогательная подпрограмма записи бита по ; 1-проводному интерфейсу ; Через флаг C в подпрограмму передается бит для записи. ;write_bit: ; ldi R17,PULSE ;если в C=0, то необходим короткий ; brcc wb1 ;импульс на линии SD, если C=1, то ; ldi R17,5*PULSE ;необходим длинный импульс на линии SD ;wb1: sbi PORTD,SD ;устанавливаем на линии SD лог.1 ; rcall pause ;формируем задержку времени ; cbi PORTD,SD ;устанавливаем на линии SD лог.0 ; ldi R17,5*PULSE ;формируем задержку ; rcall pause ; ret ; Вспомогательная подпрограмма задержки времени pause: dec R17 brne pause ret ; Подпрограмма записи символа ; В R16 передается номер символа (0…15) в таблице перекодировки ; mt10t8_tabl перед вызовом подпрограммы. write_simbol: clr R17 ldi ZH,high(2*ht10t8_tabl) ;заносим в указатель Z адрес ldi ZL,low(2*ht10t8_tabl) ;начала таблицы перекодировки add ZL,R16 ;добавляем к указателю Z смещение, adc ZH,R17 ;соответствующее положению символа в таблице lpm R16,Z ;извлекаем в R16 из таблицы символ ldi R18,4 ;инициализируем счетчик битов ws1: lsl R16 ;заносим в флаг C MSB полубайта rcall write_bit ;записываем этот бит в индикатор ldi R17,4*DELAY ;формируем задержку времени ≥ 5 мкс rcall pause dec r18 ;декрементируем счетчик битов brne ws1 ;повторяем запись 4 раза ret ; Подпрограмма записи 10 символов на дисплей write_ind: ldi YH,high(screen) ;заносим в указатель Y адрес ldi YL,low(screen) ;буфера индикации screen ldi R19,10 ;инициализируем счетчик байтов wi1: ld R16,Y+ ;извлекаем в R16 очередной символ rcall write_simbol ;записываем этот символ в индикатор dec R19 ;декрементируем счетчик байтов brne wi1 ;повторяем запись 10 раз ret ht10t8_tabl: ;таблица символов HT1611 ; символы номер в таблице .db 0xA0,0x10,0x20,0x30 ; 0,1,2,3 0, 1, 2, 3 .db 0x40,0x50,0x60,0x70 ; 4,5,6,7 4, 5, 6, 7 .db 0x80,0x90,0x00,0xB0 ; 8,9,space,F 8, 9, 10, 11 .db 0xC0,0xD0,0xE0,0xF0 ; _|,|_,P,- 12, 13, 14, 15
Набор подпрограмм для работы с HT1611 приведен выше. Подпрограмма write_simbol производит запись символа в текущую позицию, а write_ind заполняет все 10 позиций на экране содержимым буфера индикации screen. Вспомогательная процедура записи бита write_bit будет различна в зависимости от схемы подключения на рис.2.
Перейти к следующей части: ЖКИ MT-10T8
Комментарии (0) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация