Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

ЖКИ на базе контроллера HT1611

ЖКИ на базе контроллера HT1611
Рис.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-секундной задержкой.

Схема подключения ЖКИ WM-1611 к микроконтроллеру
Рис.2 Схема подключения ЖКИ WM-1611 к микроконтроллеру
а - двухпроводная передача данных
б - однопроводная передача данных

Типичная схема подключения микроконтроллера и ЖКИ показана на рис.2а. Питание индикатора 1.2…1.7В в необходимых пределах может быть установлено подстроечным сопротивлением R6. Если значение VCC будет иметь значительные колебания, может понадобиться небольшой фильтр C2. Хотя диапазон питающих напряжений довольно широк, реально существует только небольшая область 1.45…1.65 В где может быть достигнута оптимальная контрастность. В целом, из-за мизерного тока потребления, VDD может быть сформировано любым способом. Часто в качестве источника тока может выступать небольшой параметрический стабилизатор или даже обыкновенный светодиод. Для согласования логических уровней DD1 c HG1 используются делители напряжений R2R4 и R3R5 на линиях данных PB0 и стробов PB1 соответственно. Вывод HK соединен с землей, остальные линии индикатора оставлены свободными.

Коды символов контроллера HT1611
Рис.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.

Перейти к следующей части:

Теги:

Котов Игорь Юрьевич Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Тестер ESR, полупроводников, резисторов, индуктивностей Конструктор регулируемого преобразователя напряжения LM317
вверх