Жки на базе контроллера ht1611

Частотомер – цифровая шкала с ЖК индикатором на основе контроллера HT1611 / HT1613 (K0-4B)

Вашему вниманию предлагается “модернизированный” вариант частотомера с функцией цифровой шкалы, устройством индикации которого является ЖКИ со встроенным м/контроллером HT1611(1613). 

Возможности этого ЧМ/ЦШ, а также и раскладки клавиатуры, такие же, как и у “материнского” ЧМ/ЦШ с 7-сегментными индикаторами, описание которого приведено на странице hastotomer_d_ind.

html (повторяться не буду), но экономичность значительно выше в связи с тем, что жидкокристаллические модули этого типа потребляют ток порядка 10 мка.

За счет того, что HT1611(1613) имеет оперативную память, в которой хранятся коды выводимых на индикацию символов, эффект “мерцаний” практически не ощущается.Я использовал ЖКИ модуль AL-200LCD, но подойдет и KO-4B или любой другой 10-разрядный ЖКИ модуль на основе м/контроллера HT1611(1613).

Нужно только учесть возможную разницу в порядке расположения их выводов.Перемычка между 1-м и 4-м выводами ЖКИ модуля необходима для отключения часов и секундомера, входящего в его состав.

Схема частотомера – цифровой шкалы на микроконтроллере PIC16F84A приведена на рисунке:

Возможности ЧМ/ЦШ с ЖКИ такие же, как и возможности ЧМ/ЦШ с 7-сегментными индикаторами (3 диапазона измерения, энергонезависимая память настроек). Раскладки клавиатур также одинаковы.Те, кто изготовил ЧМ/ЦШ с 7-сегментными индикаторами, без труда в этом разберутся, а тем, кто этим не занимался, советую прочитать посвященный этому раздел.

Применение ЖКИ модуля “порождает” некоторые особенности индикации данных.Так как ЖКИ модули этого типа разрабатывались для телефонных аппаратов, то запятые в них не предусмотрены.В связи с этим, на всех 3-х пределах измерения индицируются “герцы” (запятой нет), причем, на пределе измерения 0,1 сек.

, в младшем разряде результата измерения, будет постоянно “высвечиваться” ноль, и каких бы то ни было изменений в этом разряде происходить не будет, что вполне естественно (разрешение на этом пределе измерения составляет 10 Гц.).Если этот ноль убрать, то показания нужно умножать на 10, так что его наличие вполне оправдано.На пределах измерения 1 и 10 сек.

, этот фиксированный ноль на индикацию не выводится.Все признаки режимов работы устройства “высвечиваются” в крайнем правом разряде ЖКИ модуля.Режиму частотомера соответствует символ “F”.Подрежиму цифровой шкалы “Плюс ПЧ” соответствует символ “P”.Подрежиму цифровой шкалы “Минус ПЧ” соответствует символ “-“.

В ЖКИ модулях этого типа, “небогатый” набор символов, так что пришлось довольствоваться тем, что есть.В целях удобства визуального восприятия результатов измерения (во всех режимах), я сместил их на один разряд влево.

В освободившийся, после этого, разряд ЖКИ модуля (2-й справа), программа постоянно записывает символ “пусто”, что обеспечивает “просвет” между младшим разрядом результатов измерения и признаком режимов работы.Запись в энергонезависимую память значения ПЧ, выбранной пользователем.

На вход ЧМ/ЦШ подается сигнал с частотой, значение которой необходимо записать в энергонезависимую память (например, от ГСС или от другого источника сигнала).После перехода в режим ЦШ, нажимаются обе кнопки.В нажатом состоянии их можно держать сколь угодно долго.При этом в ЖКИ модуле “высвечивается” и фиксируется то значение ПЧ, которое далее будет записано в энергонезависимую память.

Удерживая обе кнопки в нажатом состоянии, можно не спеша “рассмотреть” это значение.

Файлы к статье Частотомер – цифровая шкала с ЖК индикатором на основе контроллера HT1611 / HT1613 (K0-4B)Далее нужно отжать обе кнопки.

После этого, в крайнем правом разряде ЖКИ модуля “появится” символ “F”, который “мигнет” 5 раз, после чего, в зависимости от того, какая из кнопок была отжата последней, ЧМ/ЦШ автоматически перейдет в соответствующий подрежим режима ЦШ (символы “-” или “P”).

После этого ЧМ/ЦШ будет индицировать значение измеряемой частоты с учетом записанного пользователем значения ПЧ.

Если по каким-то причинам значение этой ПЧ Вас не устраивает (нестабильность частоты источника сигнала и т.д.), то запись можно повторить любое количество раз, до получения устраивающего Вас результата.

Источник: http://cxema.my1.ru/publ/instrumenty/izmeritelnaja_tekhnika/chastotomer_cifrovaja_shkala_s_zhk_indikatorom_na_osnove_kontrollera_ht1611_ht1613_k0_4b/47-1-0-4095

Arduino и ЖКИ-модуль H1313/120D

На прошлой неделе по случаю купил индикатор ЖКИ.

Купил просто так, из спортивного интереса – на вопрос о документации продавцы только печально развели руками: нету, дескать. Я решил, что с помощью Arduino смогу его “оседлать”, пусть даже путем экспериментирования. Мысленно окрестив себя безумным тинкером, я безропотно выложил деньги за непонятный девайс.

Модуль выглядит так:

С обратной стороны висит кварц в цилиндрическом корпусе и керамический конденсатор. Единственное, что позволяло его идентифицировать – надпись H1313/120D на печатной плате:

Конечно же, Гугл про него ничего вразумительного не сказал. Зато удалось найти упоминание о таком дисплее на “Молотке”, но увы – текст аукциона был перемещен в архив, прояснилось только, что это – модуль индикации телефонного аппарата.

К счастью, названия сигналов были подписаны на колодке сверху:

Слева направо: HK, DI, Vss, SK, T и еще один безымянный. Коллеги на работе указали на то, что Vss и безымянный – это питание, DI и SK – линия данных и синхронизация, по поводу остального предположений не было. Я остался один на один с непонятным дисплеем и могучим Интернетом.

Ответ отыскался спустя часа полтора, в виде статьи “ЖКИ модули со встроенным контроллером HT1611/2” Леонида Ивановича Ридико.

Это – действительно дисплей телефонного аппарата. Основная особенность – наличие встроенного таймера, который отображается после того, как вы благополучно набрали номер телефона.

Таймер живет своей обособленной жизнью и никак не доступен для считывания или установки по шине (разве что, можно его сбросить).

Зато, по последовательной шине можно передавать набор из 16 разных символов – новый символ появляется справа, остальные сдвигаются влево, самый левый пропадает. Вот знакогенератор:

В статье рассматриваются контроллеры HT1611/HT1613, производимые фирмой Holtek Semiconductors Inc, вот страница с документацией у производителя. Мой же, похоже, оказался сильно урезанной версией, без часов, кнопок и прочих излишеств.

HK – это кнопка “поднятие трубки” (Hook). Если там 0 – это значит, что трубку сняли, дисплей начинает индикацию. Если там 1 – трубку повесили, и отображать ничего не надо (я немного упростил, но суть – правильная). Данные засылаются последовательным кодом (от старшего бита к младшему):

Данные записываются по спаду SK, при этом время установки ta> 1мкс, а время удержания данных tb> 2 мкс. Главная хитрость – после передачи оставить SK в состоянии логического 0, в противном случае, через 5 секунд бездействия наша информация пропадет и покажется злосчастный таймер, который начнет отсчитывать секунды разговора.

Дисплей – суперэкономичный, питается от напряжения около 1,6 В, поэтому для согласования с пятивольтовым МК Arduino пришлось сделать простой делитель на резисторах – на питание и на сигналы SK/DI. Получилась несложная схема:

Для работы требуется минимум две линии Arduino – я выбрал digital 5 и 6, к которым подключены SK и DI. Чтобы не плодить провода, я решил запитать его от digital 4 и digital 7, создав на них разность потенциалов.

Для начала, я собрал схему на макетной плате:Запустилось сразу же:Маленький кусочек макетки, резисторы, колодки и вилки PBS/PLS – и получается компактный переходник:

Скетч, выводящий знакогенератор на дисплей: #define DI 5#define SK 6#define VCC 7#define GND 4#define HK 3

() {

(DI,);
(SK,);
(GND,);
(VCC,);
(GND,);
(VCC,);
(SK,);
(HK,);
(HK,);}

writeDigit( d) {

( i=0;iИтак, в результате экспериментов, мы получили 10-разрядный цифровой дисплей с последовательной записью для Arduino. Без статьи это сделать можно было бы, но ушло бы гораздо больше времени. Вывод напрашивается сам собой – для подобных экспериментов было бы неплохо иметь логический анализатор. Я его уже заказал, по традиции – выписал из-за границы. Как получу – обязательно напишу обзор 😉

Скачать архив со скетчем для Arduino и схемой.

Источник: http://mk90.blogspot.com/2009/05/blog-post_24.html

Семисегментные ЖК-модули в схемах на микроконтроллере

Если объединить несколько одноразрядных семисегментных ЖКИ в одном корпусе, то получится многоразрядный ЖКИ. А если добавить к нему микросхему управляющего контроллера, то получится семисегментный ЖК-модуль. От типа контроллера в модуле зависит число линий связи с внешним миром, система команд и алгоритм программы MK.

Применение «интеллектуального» ЖКИ избавляет пользователя от массы трудностей. Во-первых, не надо периодически регенерировать информацию на экране, во-вторых, не надо заботиться о точной скважности сигнала меандра на подложке, в-третьих, значительно экономятся линии портов MK, в-четвёртых, упрощается программное обеспечение.

Сколько фирм-разработчиков семисегментных ЖК-модулей, столько и стандартов. Познакомиться с одним из них предлагается на примере продукции фирмы Holtek Semiconductor. Для ЖКИ она выпускает следующие контроллеры:

•                 HT162x…HT167x (RAM Mapping LCD Controller);

•                 HT161x (Telephony LCD Driver).

Контроллеры семейства HT162x…HT167x имеют встроенную матрицу памяти на 128…768 сегментов и применяются в специализированных ЖКИ, устанавливаемых в бытовую технику с уникальным дизайном — в автомагнитолы, радиоприёмники и т.д. Внутри модуля находится БИС контроллера, например, HT1621 (Рис. 2.35) и экранная панель, снаружи подпаивается кварцевый резонатор и резистор. Связь MK с ЖК-модулем производится через интерфейс CS, WR, DATA.

Рис. 2.35. Схема подключения семисегментного ЖК-модуля с контроллером HT1621 [2-47].

Электрические параметры контроллеров HT1620…H1626: напряжение питания 2.4…3.3 B/2.7…5.2 В, ток потребления 150…600 МК А, частота звука 2…4 кГц (сигнал «BZ» для пьезодинамика), нагрузка по выходам не более 2.6 мА, максимальная частота синхроимпульсов последовательного интерфейса 75…300 кГц.

Достоинства ЖК-модулей с контроллерами HT162x: стандартные КМОП входы/выходы, высокое быстродействие, произвольный доступ к любым сегментам.

Недостатки: относительно высокая стоимость и необходимость всякий раз приспосабливаться к уникальному дизайну устройства. Подобные ЖК-модули хорошо смотрятся при массовом производстве, но для любительских поделок надо бы присмотреть что-то попроще и подоступнее.

Контроллеры семейства HT161x широко применяются в ЖК-экранах кнопочных телефонных аппаратов. Обычно они достаются радиолюбителям бесплатно, как «утешительный приз» при неудачном ремонте телефона у соседей или в качестве презента от знакомых и родственников.

Внутри ЖК-модуля находится БИС контроллера, «часовой» кварцевый резонатор и экран индикатора (Рис. 2.36). Количество знакомест 8…16 зависит от модели БИС.

Управление индикацией осуществляется через последовательный интерфейс (подробности в [2-48]), при этом отображаются цифры «0»…«9», буквы «Р», «F» и три спецсимвола с чёрточками. Если на вход НК подать ВЫСОКИЙ уровень, то индикатор переходит в режим часов/таймера.

И только после этого начинают функционировать кнопки, замыкающие входы «Sl», «S2», «12/24», «TMR» на цепь питания KDD.

Рис. 2.36. Структурная схема семисегментного ЖК-модуля с контроллером HT161x.

Электрические параметры контроллеров HT1610…HT1616: питание 1.2…1.7 В, средний ток потребления 0.1…3 МК А, входные сигналы не должны превышать напряжение питания больше, чем на 0.3 В.

Существует большое количество семисегментных ЖК-модулей производства «третьих фирм» (Third Party), у которых система команд совместима с HT161x, например, KO-4B2, WM-1611 и т.д. Однако нумерация выводов у них разная. Более того, разработчики вводят в модули дополнительные контактные площадки, в частности, для недокументированных выходных импульсов INT, COl, TIC.

Если в маркировке сигналов на печатной плате встречаются надписи «НК», «DI», «SK» вместо «НК», «DI», «SK», на это не стоит обращать внимание, обычная небрежность. Полярность сигналов в разных ЖК-модулях унифицирована.

На Рис. 2.37, а…и показаны схемы подключения «телефонных» ЖК-модулей семейства HT161x, как наиболее доступных для радиолюбителей. Их популярность заключается в малой стоимости, экономичности по току потребления. Недостатки: слишком низкое (по сравнению с MK) напряжение питания, невысокое быстродействие, малый угол обзора, отсутствие индикации десятичных точек.

Рис. 2.37. Схемы подключения семисегментных ЖК- модулей с контроллерами семейства HT161x к MK (начало):

а)         нумерация выводов ЖК-модуля HG1 может отличаться от приведенной. Батарея GB1 без выключателя, поскольку ток потребления HG1 соизмерим с током саморазряда батареи. Согласование уровней производится резистивными делителями R1…R6. Встречаются следующие варианты: Д,…Д3 = 100 кОм, R4…R6 = 43 кОм или Я,…Я3 = 36 кОм, R4…R6 = 18 кОм; О

О Рис. 2.37. Схемы подключения семисегментных ЖК-модулей с контроллерами семейства

HT161 x к M К (продолжение):

б)для питания MK используется отдельный удвоитель напряжения A1, собранный, например, на микросхеме КР1146ПН1 или MAX756. Предполагается, что конденсаторы фильтра по входу и выходу находятся внутри блока A1.

Согласование уровней MK и ЖКИ HG1 производится резисторами R1, Д2иквазиоткрытой линией порта. Выводы «Sl», «S2», «TMR», «12/24» индикатора HG1 подключаются к общему проводу с целью уменьшения внешних наводок.

На практике их можно оставлять свободными, поскольку внутри #G7, как правило, имеются высокоомные подтягивающие «pull-up» резисторы;

в) поскольку ток потребления индикатора HG1 составляет единицы микроампер, то питание на него можно подавать с линии MK. Резистором Я2регулируется констрастность изображения ЖКИ путём подбора оптимального напряжения питания 1.5… 1.65 В. При более низком напряжении — цифры блёклые, а при более высоком — начинают светиться погашенные сегменты;

г)транзистор VT1 выступает в качестве регулируемого стабилитрона. Резистором R1 устанавливается напряжение питания индикатора HG1 около 1.6 В. Согласование уровней с MK осуществляется резисторами R3, R4.

Делители напряжения отсутствуют, что годится не для всех типов индикаторов (проверяется податашиту).

Резисторы R3, Л4ограничиваюттоки, протекающие через внутренние защитные диоды ЖК-модуля при ВЫСОКОМ входном напряжении;

д) стабилизация питания индикатора HG1 светодиодом HL1. Резистором R1 подбирается оптимальная контрастность, при этом индикатор HL1 светится тускло (если вообще светится). Конденсатор С/ не обязателен, но весьма полезен в эксплуатации. При кратковременных просадках питания он ещё некоторое время может поддерживать видимость символов на экране; О

О Рис. 2.37. Схемы подключения семисегментных ЖК-модулей с контроллерами семейства

HT161x к MK (окончание):

е) диодная стабилизация контрастности изображения предполагает подбор не только количества последовательно включённых диодов VD1..VD3, но и замена их диодами Шоттки;

ж) резистором Я2 регулируется контрастность. Конденсатор C1 уменьшает импеданс в цепи питания индиктора HG1 и снижает электромагнитные помехи;

з) простейший вариант питания, при котором вторым плечом делителя напряжения является внутреннее сопротивление ЖК-модуля HG1 между цепями VDD и Kss. Конденсатор С/ стабилизирует контрастность изображения при колебаниях тока потребления ЖКИ;

и) микросхема DA1 обеспечивает стабильное питание ЖК-модуля, но ценой повышенного расхода тока и усложнения схемы. Напряжение + 1.5…+1.65 В можно также использовать как внешний ИОН для АЦП, как среднюю точку для ОУ и т.д.

Источник: Рюмик, С. М., 1000 и одна микроконтроллерная схема. Вып. 2 / С. М. Рюмик. — М.:ЛР Додэка-ХХ1, 2011. — 400 с.: ил. + CD. — (Серия «Программируемые системы»).

Источник: http://nauchebe.net/2014/02/semisegmentnye-zhk-moduli-v-sxemax-na-mikrokontrollere/

Жки на базе контроллера ht1611

Жки на базе контроллера ht1611

Рис.1 Жки на базе контроллера ht1611

Жки на базе контроллера ht1611 нацелены приемущественно на применение в телефонных аппаратах, но с фуррором могут быть применены и в разных микроконтроллерных приложениях. Существует много разновидностей индикаторов данного типа (внешний облик 1-го из их 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.

Меж 2-мя примыкающими импульсами должна выдерживаться пауза соизмеримая с неизменной времени цепи разрядки конденсатора 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

AVR Микроконтроллер

Источник: http://bloggoda.ru/2018/02/24/zhki-na-baze-kontrollera-ht1611/

Практические аспекты сопряжения жки с микроконтроллерами

Проведен анализ проблем, возникающих при практическом использовании 7-сегментных ЖКИ для отображения информации в микроконтроллерных устройствах. Рассмотрены различные варианты схемотехнического решения способов сопряжения микроконтроллеров с ЖКИ и разработаны рекомендации по их применению.

Введение. Микроконтроллерные устройства, как правило, используют те или иные средства индикации. Широкое распространение на практике получили жидкокристаллические индикаторы (ЖКИ), которые принято называть модулями ЖКИ.

Наиболее универсальными из таких модулей являются матричные алфавитно-цифровые, которые позволяют отображать цифры, буквы латинского и русского алфавита и даже псевдографику, используя возможности загружаемых символов. Однако такие ЖКИ – модули довольно дороги, не отличаются малым энергопотреблением, да и в ряде устройств просто избыточны.

Там, где не требуются широкие возможности средств индикации, более подходящими оказываются 7-сегментные ЖКИ – модули.

Многие фирмы выпускают ЖКИ – модули со встроенными контроллерами, облегчающими реализацию интерфейса ЖКИ и микропроцессора.В этом случае в обязанности разработчика входит только организация передачи информации от основного микроконтроллера в контроллер индикатора.

Среди 7-сегментных ЖКИ – модулей наибольшее распространение получили модули на основе контроллера HT1611 (или HT1613) фирмы Holtek [1] и модули МТ10Т7 производства компании «МЭЛТ». Они имеют 10 знакомест и небольшие габариты.

Каждый из этих видов модулей имеет свои преимущества и недостатки, связанные с возможностями отображения информации и способами сопряжения с микроконтроллерами.

В данной статье рассматриваются вопросы аппаратного сопряжения микроконтроллеров АТ89С51 фирмы Atmel и символьных ЖКИ, построенных на базе контроллера НТ1611. Низкое напряжение питания (1.

5 В) и малый ток потребления (не более 10 мкА) позволяют использовать их в системах с автономным питанием.

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

Постановка задачи. Напряжение питания микроконтроллеров составляет 5 В, а номинальное питающее напряжение индикатора, как указано выше, составляет 1.5 В.

Кроме того, как показывает опыт практического применения индикаторов данного вида, напряжение питания индикатора сильно влияет на контрастность.

При низком напряжении контрастность недостаточна, а при большом засвечиваются погашенные сегменты. Оптимум находится в промежутке 1.50 … 1.65 В.

Сигнальные входы индикатора с таким уровнем напряжения питания не рассчитаны на прямое соединение с пятивольтовыми выходами управляющих микросхем. Уровень единичного сигнала на входе индикатора не должен превышать 1.7 В. Таким образом, при практической реализации схемы сопряжения индикатора с микроконтроллером приходится решать две проблемы:

1) обеспечение необходимого уровня напряжения питания для индикатора с возможностью его регулирования;

2) согласование логических уровней сигналов, передаваемых с микроконтроллера на индикатор.

Решение задачи.Распространенная схема сопряжения индикатора НТ1610 с микроконтроллером приведена на рис. 1. При работе в режиме ведомого вход НК индикатора соединяют с общим проводом. Передача информации осуществляется по двум сигнальным линиям – DI (данные передаются последовательно 4-битными посылками) и SK (тактовые импульсы).

В приведенной на рис.1 схеме номинальное питающее напряжение индикатора формируется двумя прямо включенными диодами VD1 и VD2. При использовании резистора R1 с сопротивлением 1.5 кОм и питании схемы 5 В обеспечивается протекание через диоды тока IД = 2…3 мА. При этом суммарное падение напряжения на диодах составляет величину 1.4 -1.5 В.

Рис. 1. Стандартная схема подключения индикатора

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

Для согласования логических уровней сигналов в данной схеме используются последовательно включенные между выходами контроллера и входами индикатора резисторы R2 и R3.

Выходы многих микроконтроллеров, в частности серии АТ89 фирмы Atmel [2], имеют невысокую нагрузочную способность, когда они находятся в единичном состоянии, поэтому резисторы должны быть достаточно высокоомными.

Как правило, их номиналы составляют значения от 47 до 68 кОм.

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

В схеме, приведенной на рис. 2 реализован один из возможных вариантов схемотехнического решения указанных выше проблем. В данной схеме для согласования используются делители, выполненные на резисторах R2, R4 и R3, R5.

При таком решении, если на вход индикатора подается единичный сигнал, “подтягивание” его к плюсу питания осуществляется не внутренними резисторами микроконтроллера, а внешними, что обеспечивает достаточный для управления ток во входной транзистор НТ1610.

Нулевой сигнал с выхода микроконтроллера снижает напряжение в месте соединения резисторов до уровня 0.1 – 0.2 В, обеспечивая четкое переключение входного транзистора.

Требуемое напряжение питания индикатора и возможность его регулировки обеспечивает простая схема на одном транзисторе. Регулировка напряжения осуществляется с помощью резистора R6, тип используемого транзистора КТ3130А.

Рис. 2. Схема подключения с регулировкой напряжения питания индикатора с помощью транзистора

При выборе номиналов резисторов R6, R7 и R8 необходимо обеспечить активный режим работы транзистора для получения требуемого диапазона изменения напряжения питания.

Задавшись значением тока транзистора IK, сопротивления резисторов можно рассчитать, используя следующие соотношения:

(1)

где – напряжение питания микроконтроллера; Vdd – напряжение питания индикатора; h21Э – коэффициент передачи по току транзистора

Для минимального потребления желательно значение тока коллектора принимать в диапазоне от 1.5 до 2 мА.

При необходимости точного подбора напряжения и обеспечения его стабильности в процессе работы устройства можно использовать в схеме питания индикатора несложный регулятор напряжения, как показано на рис. 3.

В схеме используется стабилизатор напряжения с регулируемым выходным напряжением в цепи положительного полюса. Основным элементом стабилизатора является микросхема LM317T, имеющая три вывода: 1 – управляющий, 2 – выход и 3 – вход. Подстроечный потенциометр R6 используется для установки желаемого выходного напряжения.

Для правильной работы интегральной схемы сумма сопротивлений R6 и R7 должна иметь такое значение, которое бы обеспечивало ток примерно 8 мА при необходимом стабилизированном напряжении индикатора Vdd.

Рис. 3. Схема подключения с регулировкой напряжения питания индикатора с помощью интегрального стабилизатора

Таким образом, суммарное сопротивление для схемы стабилизатора напряжения можно определить следующим образом: R6 + R7 = Vdd/0.008 = 1.6/0.008 = 200 Ом.

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

Одним из вариантов может быть питание устройства от элемента напряжения 1.5 В, от которого индикатор питается непосредственно.

Микроконтроллерная часть устройства питается от того же элемента через повышающий DC/DC преобразователь.

Выводы. Проведенный анализ проблем, возникающих при подключении индикаторов к микроконтроллерам, позволил получить следующие результаты:

1. Приведены практические рекомендации по сопряжению микроконтроллеров АТ89С51 фирмы Atmel и символьных ЖКИ, построенных на базе контроллера НТ1611.

2. Рассмотрены варианты реальных схем подключения индикаторов.

3. Приведены рекомендации по расчету элементов схем.

Список литературы:

1. Самарин А. Микросхемы контроллеров ЖКИ фирмы Holtek и их применение / А. Самарин // Схемотехника. – 2002. – № 4. – C. 33 -35.

2. Бродин В.Б. Системы на микроконтроллерах и БИС программируемой логики / В.Б. Бродин, А.В.Калинин. – М.: Издательство ЭКОМ, 2002. – 400 с.: ил.

УДК 681.3.07

Недзельский Д.А.

Источник: https://studlib.info/ekonomika/1360003-prakticheskie-aspekty-sopryazheniya-zhki-s-mikrokontrollerami/

Частотомер – цифровая шкала с LCD (PIC16F84/PIC16F628, asm)

Описание опубликовано в журнале «Радио» № 7 за 2004 г., стр. 64, 65 Частотомер – цифровая шкала с ЖК индикатором и «Радиолюбитель» № 10 за 2005 г., стр. 36…39 Частотомер – цифровая шкала с жидкокристаллическим индикатором.

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

Он разработан на основе и исходя из опыта эксплуатации моей предыдущей конструкции Частотомер – цифровая шкала на PIC контроллере (LED).

Применение жидкокристаллического (LCD) индикатора на контроллере HT1613, HT1611 позволило снизить потребляемый ток, уменьшить уровень излучаемых помех, уменьшить габариты, а также упростить схему и конструкцию прибора.

Диапазон измеряемых частот 10Гц…40мГц, чувствительность 100…200 мВ, время измерения – 0,1; 1 или 10 сек. Быстродействие PIC контроллера не позволяет непосредственно измерять частоты более 40 мгц, но их можно измерять, используя внешний СВЧ делитель.

В энергонезависимую память можно записать до 15 значений промежуточных частот в диапазоне от 0 до 800 мГц. Процедура калибровки предельно упрощена, частота опорного кварца может быть в пределах 1 мГц…20 мГц.

Все параметры могут изменяться пользователем с помощью 3-х кнопок на передней панели прибора.

Разработано два варианта программы электронного частотомера, первый позволяет использовать один внешний с любым коэффициентом деления в диапазоне 2…255. Второй вариант допускает применение трех внешних делителей с различными коэффициентами деления, а диапазон допустимых значений Кд расширен до 256. Номер подключенного в данный момент делителя определяется автоматически.

При использовании частотомера на микроконтроллере с первым вариантом программы в качестве цифровой шкалы, в его энергонезависимую память можно записать до 15 промежуточных частот в диапазоне от 0 до 800 МГц.

Во втором варианте программы количество ПЧ не может превышать 7.

Их значения вводятся с точностью до 100 Гц и в любой момент могут быть изменены пользователем с помощью 3-х кнопок, расположенных на передней панели прибора.

Принципиальная схема частотомера показана на рисунке. В нем использован один из самых дешевых и распространенных LCD (ЖКИ) индикаторов от телефонов с АОН – HT1613 (HT1611). К сожалению, он не имеет собственного названия и разные производители называют его по своему, например, встречается обозначение KO–4B. Неизменным остается только его встроенный контроллер HT1611 или HT1613.

При применении указанных на схеме деталей входной формирователь частотомера имеет полосу пропускания 10 Гц…

100 МГц, входное сопротивление 500 ком и чувствительность около 100 мв, но быстродействие встроенного в PIC контроллер делителя ограничивает верхнюю границу измеряемых частот значением 40…50 МГц. Нижняя граница для синусоидального сигнала определяется емкостью C1 и C5.

Диоды VD1, VD2 защищают полевой транзистор от выхода из строя при попадании на вход высокого напряжения.

Высокие параметры входного формирователя при сравнительно простой схеме и питании только от одного источника 5 в удалось получить благодаря применению КМОП триггера Шмитта DD2 типа 74AC14. Использовать здесь TTL аналог недопустимо, т.к. это снизит верхнюю границу измеряемых частот до 10…15 МГц. Управляющий контроллер может быть типа PIC16F84, PIC16F628, PIC16CE625.

SA4 и SA5 используются для выбора номера внешнего СВЧ делителя. Их разомкнутое состояние соответствует работе прибора без СВЧ делителя. Замыкая SA4, SA5 можно выбрать один из 3-х делителей. Это может оказаться полезным при проведении измерений в широком диапазоне частот.

Например, первый делитель работает в диапазоне 500 МГц…2 ГГц, а второй – 30 МГц…500 МГц и они имеют разный коэффициент деления. При смене делителя прибор автоматически будет учитывать смену его коэффициента деления при расчете показаний.

При необходимости на плату можно установить DIP переключатели для выбора ПЧ и делителя.

В схеме частотомера на микроконтроллере можно использовать практически любой кварцевый резонатор, однако оптимальной является тактовая частота контроллера около 4 МГц. На меньшей частоте снижается быстродействие PIC, а повышение частоты увеличивает потребляемый ток, не давая особых преимуществ.

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

Если возникнут сложности с приобретением ЖКИ индикатора HT1613 (HT1611, KO-4B), его можно заменить на светодиодные индикаторы. Одним из первых такое устройство на AT90S1200 предложил Эдуард (UA4NX). Описание можно найти на его сайте . Известен вариант и на ATmega8. На всякий случай я выкладываю архив с копией странички UA4NX, копией описания конструкции на ATMega8 и Datasheet на индикатор.

Подробное описание (225 Кб). Загрузок: 417
Рисунки платы в формате GIF, схема и плата в Orcad 9.1 (78 Кб). Загрузок: 396
Прошивки и исходные тексты программ для PIC16F84, PIC16F628, PIC16CE625 (81 Кб). Загрузок: 479
Дополнения пользователей (222 Кб). Загрузок: 391
Замена индикатора HT1613 (HT1611, KO-4B) (270 Кб). Загрузок: 526

Источник: http://eldigi.ru/articles/chastotomer_cifrovaya_shkala_na_lcd

Подключение HD44780 Работа с алфавитно-цифровым ЖКИ инициализация

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

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

В этой заметке рассмотрим поподробнее отображение информации на символьном ЖКИ со знакосинтезирующим контроллером HD44780.

Такие индикаторы часто используются при проектировании цифровых устройств, поэтому с ним необходимо уметь работать.
Рассмотрим типовое внутреннее строение знакосинтезирующего ЖКИ:

Внутренняя структура HD44780

В основе ЖКИ лежит матрица из жидких кристаллов, подавая напряжение на элемент которой мы можем «зажечь» точку на экране. В нашем случае матрица состоит из знакомест (чаще всего 8х5 пикселей), сгруппированых в несколько рядков. Этим всем управляет встроенный контроллер HD44780.

У контроллера есть однобайтные ячейки памяти (DDRAM), содержимое которых собственно отображается на экране согласно таблице записанной в CGRAM. Ячеек памяти обычно больше чем знакомест в ЖКИ, поэтому адресацию знакомест нужно смотреть в даташите.

То есть нам необходимо только в нужную позицию записать код нужного знака, а все остальное HD44780 сделает сам.

Для выбора позиции существует виртуальный курсор (номер текущей ячейки памяти, АС), которым можно управлять посредством команд, курсор можно сделать видимым. По умолчанию при записи символа в ячейку, курсор сдвигаеться вперед на одну позицию.

Коды символов для ЖКИ поддерживающего кириллицу можно увидеть в таблице:

Старшая тетрада кода будет равна ряду выбранного символа, а младшая – строке. Можно создать свою таблицу символов, записав ее в CGRAM. На каждый символ требуется 5 байт, где единицы отвечают за «зажженные» пиксели.

Например, цифра «8» кодируется последовательностью 0x6c,0x92,0x92,0x92,0x6c.
Коды команд приведены в таблице.

Таблица символов HD44780

Значения флагов:

Остается открытым вопрос: «как записать в нужную позицию код требуемого символа»? Для этого рассмотрим за что отвечают выводы ЖКИ. Выводы DB0-DB7 отвечают за входящие/исходящие данные. Высокий уровень на выводе RS дает индикатору понять, что сигнал на выводах DB0-DB7 является данными, а низкий – командой. Вывод W/R отвечает за направление данных, пишутся ли данные в память или читаются из нее (обычно чтение из ЖКИ не используется, можем смело на него подать низкий уровень). Импульс на выводе Е (длительностью не менее 500 нс) используется как сигнал для записи/чтения данных с выводов DB0-DB7, RS и W/R.

Вывод V0 используется для задания контраста изображения, вывода А,К – для питания подсветки (если она есть в вашей модели ЖКИ). Оставшиеся 2 вывода – собственно питание ЖКИ. То есть, для управления ЖКИ потребуется 8+1+1=10 выводов.

Но можно работать в режиме 4-х битного интерфейса. При этом, сперва будет передавать старшая тетрада команды/данных на выводах DB4-DB7, а после – младшая. Выводы при DB0-DB3 при этом не используются. Итого для управления требуется 6 выводов микроконтроллера.

Теперь рассмотрим живой пример. Напишем программу для вывода текста «avrlab.com» на имеющийся у меня в наличии WH1602А (2 строки по 16 символов).

Для других ЖКИ следует сверить соответствие ячеек DDRAM знакоместам.

Схема подключения ЖКИ к контроллеру выглядит так.

Схема подключения к микроконтроллеру AVR

Резистор R3 – 17 Ом ограничивает ток через подсветку, а переменный VR1 задает контраст (если все правильно подключено и запрограммировано, но индикатор молчит, покрутите VR1, чтобы изображения стало видимым).

Также не в коем случае не следует путать полярность ЖКИ, питать его выше 5,5В, со своего опыта могу сказать, что горят они моментально. Назначение всех остальных деталей такое же как в макетной платы для ATtiny2313.
Теперь перейдем к написанию программы.

Для контроля индикатора напишем программу с несколькими ключевыми функциями работы с ЖКИ: lcd_dat(unsigned char x) – для записи данных х, lcd_com(unsigned char x) – для записи команды х, lcd_init(void) – для начальной инициализации индикатора:

  1. #include //библиотека ввода/вывода

  2. #define RS 2 //RS=PD2 – сигнал управления ЖКИ

  3. #define E 3 //E=PD3 – сигнал управления ЖКИ

  4. #define TIME 10 //Константа временной задержки для ЖКИ

  5. //Частота тактирование МК – 4Мгц

  6. //Программа формирвоания задержки

  7. void pause (unsigned int a)<\p>

  8. { unsigned int i;

  9. for (i=a;i>0;i–);

  10. }

  11. //Программа передачи команд в ЖКИ

  12. void lcd_com (unsigned char lcd)

  13. { unsigned char temp;

  14. temp=(lcd&~(1

Источник: https://avrlab.com/node/80

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}