Psoc. глава 2.

PSoC. Глава 0. Введение. Первый пример

Введение

Компания Cypress Semiconductor занимается довольно обширным кругом деятельности, начиная от сенсорных панелей, заканчивая беспилотными системами управления автомобилей.  Главный офис фирмы расположен в Америке, в штате Калифорния. По данным википедии, за 2012 год размер компании составляет около 3600 человек.

На сегодняшний день фирма поставляет на рынок серию микроконтроллеров PSoC (Programmable System-on-Chip), сопутствующую им обвязку и программное обеспечение. К сожалению, в странах СНГ эти названия слышатся редко, а девайсы Cypress попадают к нам в руки ещё реже. В данном цикле статей мы будем исправлять данное положение.

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

Аппаратное обеспечение

Наш подопытный будет CY8C29466 – 24PXI. Цена на официальном сайте за штуку составляет 4.58$ (дата написания статьи январь 2014г).

Технические характеристики:

Ядро M8C
Ширина шины данных 8 bit
Максимальная тактовая частота 24 MHz
Размер программной памяти 32 KB
Размер ОЗУ данных 2 KB
Рабочее напряжение питания 3 V to 5.25 V
Диапазон рабочих температур – 40 C to + 85 C
Разрядность АЦП 14 bit
Доступные аналоговые/цифровые каналы 12
Размер ПЗУ данных 32 KB
Количество программируемых входов/выходов 24
Серия процессора CY8C29x66

Плата, на которой он будет сидеть это CY3210-PSoCEval1.

Иногда в статьях будут приводиться вырезки из оригинальной документации, которую можно найти на сайте http://www.cypress.com или непосредственно связавшись со мной http://vk.com/id26632194, буду рад всем помочь. Если видите текст на английском языке на скриншотах или в виде вставки в текст, то скорее всего это из оригинальной документации.

На плате располагаются следующие устройства:

  1. Сокет для микроконтроллеров серий – CY8C21xxx, CY8C22xxx, CY8C24xxx, CY8C27xxx, CY8C29xxx
  2. Область проектирования (Prototyping Area). Ряд из пяти контактов – это один узел.
  3. Интерфейс для программатора (ISSO Programming Header).
  4. Разъем для батарейки.(9-V Battery Terminals).
  5. Разъем для блока питания (DC Supply Jack).
  6. Регулятор напряжения (Voltage Regulator).
  7. RS-232 трансивер (RS-232 Transceiver).
  8. Интерфейс ком порта (RS-232 Interface).
  9. Три перемычки. Одна для режимов питания, две другие для передачи данных. (JP1,JP2,JP3).
  10. Кнопка перезапуска (Reset switch).
  11. Входы/выходы UART’а (UART RX/TX pin).
  12. Индикатор напряжения на плате (Power LED).
  13. Интерфейс для LCD экрана (Character LCD Interface).
  14. Потенциометр (Potentiometer) – свободный.
  15. 4-ре светодиода – свободные.
  16. Кнопка (Push Button Switch) – свободная.

За 40$ (у российских поставщиков немного дороже) на официальном сайте можно заказать Development Kit, в который входит:

  1. Выше описанная плата CY3210-PSoCEval1.
  2. Два микроконтроллера CY8C29466-24PXI и CY8C27443-24PXI.
  3. LCD экран.
     
  4. USB программатор.
  5. Провод к программатору.

Если все это (или похожие по конфигурации оборудование у вас есть), то можно качать программное обеспечение по ссылке http://www.cypress.com/?rID=2541&source=shop или устанавливать его из комплекта поставки.

Неприятным моментом будет то, что потребуется регистрация. И хотя на сайте раздаётся две софтины, PSoC Designer и PSoC Programmer. Нам потребуется только первая.

Так как функционал для прошивки чипа включён в комплект дизайнера.

Программное обеспечение PSoC Designer 5.3

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

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

Это могут быть различные ЦАП, АЦП, контроллеры дисплея, трансиверы данных, программируемые усилители, таймеры, счетчики, датчики температуры (имеется ввиду, встроенные в микросхему), пользовательские блоки и так далее. Цифровые модули располагаются в верней части рабочего пространства, аналоговые – в нижней.

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

  1. Верхняя часть рабочего пространства. Предназначена для формирования цифровой начинки микроконтроллера. Выбираем нужный нам модуль из окна 5. Перетаскиваем его на один из свободных прямоугольников (количество занимаемых областей может изменяться в зависимости от сложности конструкции модуля). Далее выход блока выводим на шину, а шину на выход.
  2. Нижняя часть рабочего пространства. Предназначена для формирования аналоговой начинки микроконтроллера. Аналогично с пунктом 1, выбираем нужный блок из окна 5 и перетаскиваем его на свободный блок.
  3. Основные рабочие параметры чипа, как: рабочая частота, режим питания, некоторые глобальные переменные делители частоты, нужные для работы некоторых цифровых и аналоговых блоков.
  4. Окно проекта, в нём можно увидеть всё, что есть в проекте (цифровые блоки, аналоговые блоки, исходники, либы и.т.д ).
  5. Модули микросхемы.
  6. Основные параметры пользовательского блока.
  7. Соединения входов и выходов микроконтроллера.
  8. Описание полей окна 3.
  9. Описание полей окна 6.

Для более детального ознакомления со средой разработки, можно посмотреть видео, представленное в примере 1.

Пример 1. Lighting LED

Задача: Зажечь один из светодиодов на отладочной плате.

Программную часть по настройке проекта и программирования можно посмотреть на видео.

Для наглядности приведу код прошивки:

#include // part specific constants and macros
#include “PSoCAPI.h” // PSoC API definitions for all User Modules void main(void)
{ M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts // Insert your main routine code here. PWM8_1_Start(); PWM8_1_EnableInt(); while(1);
}

После того как всё описанное на видео было проделано, осталось подключить микроконтроллер и полюбоваться результатом.

Подключаем следующим образом:

Ну и наконец результат работы прошивки!

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

PSoC. Глава 1. ADC

PSoC. Глава 2. UART

Прикрепленные файлы:

  • Lighting_LED.zip (204 Кб)

Источник: http://cxem.net/mc/mc258.php

PSoC 1. Первое знакомство

Есть така замечательная фирма Cypress, она выпускает много чего. Мне понравились их микроконтроллеры (хотя так называть не совсем правильно).

PSoC — система на кристале — тоесть, у вас есть набор ячеек, и набор разной переферии, ядро микроконтроллера (PSoC 1 и PSoC 3 — 8 битное, в PSoC 5 — Cortex M3), и можно собрать что нужно. Сначала работал с серией PSoC 1, тепер больше с PSoC 1 и PSoC 5.

Когда был только сайт bsvi.

ru и не было сообщества, написал статюю по работе с микроконтроллером PSoC1 (система на кристале): PSoC 1. Быстрый старт. Так что статья не плагиат, а просто решил поделиться и тут, так сказать внести свой вклад в сообщество 🙂

Дня начала работы нам нужно: Микроконтроллер, у меня cy8c27443 Программатор Cypress ICE-Cube, Cypress MiniProg или самодельный (видел в интернете, но точных ссылок дать не могу).

Среда разработки PSoC Designer, скачиваем на официальном сайте:Cypress.

Хорошо если есть борд, но можно и без него, просто распаять на макетке или при большом желании сделать свой. У меня CY3210-MiniEval1, и все примеры сделаны на ней.

По старинной традиции, первая программа будет мигать светодиодом :)Чтобы не было совсем скучно, используем для мигания светодиода модуль — даже об этом позаботились:) (конечно можно мигать светодиодом классическим способом — настроили порт, и кидаем туда 0 и 1 через задержки) и поработаем с DAC. Запускаем среду PSoC Disigner 5.

3 заходим в File -> New Project:Задаем имя проекта, папку в которой будем сохранять, выбираем микроконтроллер из списка и язык С.

Кратко опишу среду разработки:

  1. Настройка глобальных параметров, таких как тактовая частота,3 разних частоты полученных с тактовой,PLL(умножение тактовой частоты на 2), опорное напряжение для АЦП, и другие. Подробно о каждом параметре можно почитать тут
  2. Цифровые блоки и порты I/O. В каждой цифровой блок можно вставлять модуль переферии, и подключать к выводам портов.
  3. Настройка параметров модуля.
  4. Настройка выводов I/O.
  5. Аналоговые блоки и порты I/O.
  6. Структура проекта и сгенерированные библиотечные файлы.
  7. Модули переферии, которые вставляються в цифровые или аналоговые блоки.

*Не все модули занимают цифровой или аналоговой блок. Есть ограничение — не каждый модуль можно подключить к выводу порта который нужный. Очень интересной и удобной особенностью IDE, есть то что при установке также загружуються даташиты. И посмотреть как работать с каждым модулем можно очень просто. Покажу на примере. Мы будем использовать модуль LED, но допустим, как с ним работать еще не знаем:Открываем даташит, смотрим в самом верху страницы:Видим что модуль не использует ни цифровых ни аналоговых блоков. Внизу схема для работы с разным включением светодиода. Дальше описание всех API функций, и пример программы на ассемблере и С:С модулем познакомились, теперь добавим его к проекту, кликаем по нему два раза и он добавляеться:Переходим в окно просмотра и редактирования параметра модуля:тут все просто: для удобства редактируем имя модуля, выбираем порт, вывод к которому подключен светодиод, и схему включение с ОА или ОК. Аналогическим образом добавляем модуль DAC. Модуль установился в ячейки ASC10, ASC20, но при желании можно переместить в другие ячейки. Чтобы посмотреть до которого вывода можно подключить выход DAC — нажимаем «Shift» и кнопкой мыши нажымаем на вывод модуля «AnalogBus», линия показывает нам что в этих ячейках, мы можем подключиться только до вывода Port_0_3 (порт 0, вывод 3):
чтобы соединить выход модуля с выводом порта, удерживаем «Shift» и кликаем на выходе модуля, и на выводе:настраиваем параметры модуля:Когда все модули будут настроены и соединены с выводами портов(если нужно). Заходим в Build — > Generate/Build project или нажимаем иконку:Начнеться генерирование проекта и API функций. Как настроены выводы, или их настроить можно здесь:Когда проект сгенерируется заходим в структуру проекта, и выбираем сгенерированный файл для работы со светодиодом:открываем файл, видим список функций, и копируем нужные в main.c:напишем небольшую программу для мигания светодиодом, и выводом значений на DAC: //—————————————————————————- // C main line //—————————————————————————- #include // part specific constants and macros #include “PSoCAPI.h” // PSoC API definitions for all User Modules unsigned char DAC_Counter = 0; void Delay(unsigned int value) { unsigned int i = 0; for (i = 0; i < value; i++); } void main(void) { LED_TEST_Start(); DAC8_1_Start(DAC8_1_HIGHPOWER); //M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts // Insert your main routine code here. while(1) { LED_TEST_Invert(); DAC8_1_WriteStall(DAC_Counter); DAC_Counter += 10; if (DAC_Counter == 250) DAC_Counter = 0; Delay(50000); } } Прошиваем проект — заходим в Program -> Program Part. Идет процесс прошивки:Осцилограмма сигнала на выходе DAC:А теперь можно посмотреть сколько ресурсов занимает конфигурация и код. Заходим в View -> Resource Meter:

Всем спасибо за внимание!

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Источник: http://tqfp.org/Nemo/psoc-1-pervoe-znakomstvo.html

Chapter 1: Introduction to PSoC

From the free online book “Architecture and Programming of PSoC Microcontrollers”
• • • • • • • • • • • • • • • • • • •

Introduction 1.1 System Overview 1.2 CPU 1.3 Frequency generator 1.4 Microcontroller power consumption 1.5 Reset 1.6 Digital inputs and outputs 1.7 Analog inputs and outputs 1.8 Accessing programmable digital blocks 1.

9 Global input lines 1.10 Digital programmable blocks 1.11 Analog programmable blocks 1.12 Referent voltage generators 1.13 Switch mode pump 1.14 MAC 1.15 Decimator 1.16 I2C controller 1.17 Interrupt controller 1.

18 Address space

Introduction
When developing more complex projects, there is often a need for additional peripheral units, such as operational and instrument amplifiers, filters, timers, digital logic circuits, AD and DA convertors, etc.

As a general rule, implementation of the extra peripherals brings in additional difficulties: new components take space, require additional attention during production of a printed circuit board, increase power consumption… All of these factors can significantly affect the price and development cycle of the project.

The introduction of PSoC microcontrollers has made many engineers’ dream come true of having all their project needs covered in one chip.

PSoC: Programmable System on Chip
PSoC (Programmable System on Chip) represents a whole new concept in microcontroller development. In addition to all the standard elements of 8-bit microcontrollers, PSoC chips feature digital and analog programmable blocks, which themselves allow implementation of large number of peripherals.

Digital blocks consist of smaller programmable blocks that can be configured to allow different development options. Analog blocks are used for development of analog elements, such as analog filters, comparators, intrumentational (non–)inverting amplifiers, as well as AD and DA convertors.

There’s a number of different PSoC families you can base your project upon, depending on the project requirements. Basic difference between PSoC families is the number of available programmable blocks and the number of input/output pins. Number of components that can be devised is primarily a function of the available programmable blocks.

Depending on the microcontroller family, PSoC chips have 4–16 digital blocks, and 3–12 analog programmable blocks.

Characteristics of PSoC microcontrollers Some of the most prominent features of PSoC microcontrollers are:

• • • •

MAC unit, hardware 8×8 multiplication, with result stored in 32-bit accumulator, Changeable working voltage, 3.3V or 5V, Possibility of small voltage supply, to 1V, Programmable frequency choice.

Programmable blocks allow you to devise:
• • • • • • • • • • • • • • • • • •

16K bytes of programmable memory, 256 bytes of RAM, AD convertors with maximum resolution af 14 bits, DA convertors with maximum resolution of 9 bits, Programmable voltage amplifier, Programmable filters and comparators, Timers and counters of 8, 16, and 32 bits, Pseudorandom sequences and CRC code generators, Two Full-Duplex UART’s, Multiple SPI devices, Option for connection on all output pins, Option for block combining, Option for programming only the specified memory regions and write protection, For every pin there is an option of Pull up, Pull down, High Z, Strong, or Open pin state, Possibility of interrupt generation during change of state on any input/output pin, I²C Slave or Master and Multi-Master up to speed of 400KHz, Integrated Supervisory Circuit, Built-in precise voltage reference.

Is PSoC good enough for my project?

Perhaps the best way to recognize the true value of PSoC microcontrollers is through comparison with other options. Major advantages of PSoC microcontroller include the following:
• • •

• • • •

There is no other microcontroller that has programmable voltage, instrumentational, inverting, and non-inverting amplifiers; Hardware generators of pseudorandom and CRC code, as well as analog modulators, are unique to PSoC families; MAC (Multiply-accumulate) is an essential part of digital signal processors, which allows implementation of digital signal processing algorithms. It’s worth noting that hardware accumulator multiplication is not a common feature of 8-bit microcontrollers; Having the advantage of changeable working voltage doesn’t really need a comment. This feature is particularly important for development of new devices as it eliminates the need for redesigning the PCB and implementing the level translator; Option for low voltage supply (~1V) is a tremendous advantage in battery operated systems; Timers, counters, and PWM units are more flexible than the usual implementation; Automatic code writing for accessing all the peripherals in use; In case you need a larger array of components, there is an option for dynamic reconfiguration, allowing you to change peripherals during run-time. In this way, it’s possible to minimize the processor workload at an time, leaving the largest part of the job to the specialized hardware.

On the other hand, there are certain limitations of PSoC that could influence the choice of microcontroller for your design.

In systems which require highly precise or fast measurement, problems may occur with analog device characteristics. In this case, you should analyze if speed of AD convertors and offset/noise of analog amplifiers are able to satisfy the project demands.

Analog components do not have the ability to work with usual negative supply voltage. For example, zero voltage for inverting amplifiers is taken to be the analog ground AGND (usually 2.5V). All voltages above AGND are taken as positive, while voltages below AGND are taken as negative.

Most PSoC microcontrollers have 256 bytes of RAM, which could prove to be insuficient for some projects.

Источник: https://www.scribd.com/doc/28429985/Chapter-1-Introduction-to-PSoC

Cypress расширяет семейство программируемых СнК PSoC 4

» Новости » Микроконтроллеры

03-02-2016

Cypress » PSoC 4 L

Компания Cypress сообщила о выпуске серии программируемых систем-на-кристалле (СнК) PSoC 4 L, которая дополняет уже существующее семейство СнК PSoC 4, сочетающую лучшие в своем классе PSoC аналоговые и цифровые структуры, технологию емкостного сенсорного интерфейса CapSense и энергоэффективное процессорное ядро ARM Cortex-M0. Имея до 256 Кбайт Flash-памяти, 96 линий ввода/вывода, 33 программируемых аналоговых и цифровых блока, контроллер USB и CAN, представленная серия является самым высокоинтегрированным в отрасли однокристальным решением на ядре ARM Cortex-M0. Отличающиеся высочайшей гибкостью архитектуры PSoC, СнК PSoC 4 L предназначены для широкого круга промышленных и бытовых приложений, а поддержка технологии сенсорного интерфейса CapSense позволит реализовать надежные и изящные пользовательские интерфейсы.

Программируемые СнК семейства PSoC 4 L.

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

В режиме Stop, при сохранении функции пробуждения по прерыванию, энергопотребление снижается до 20 нА. Диапазон напряжения питания очень широк, в отличие от любых других приборов на ядре Cortex-M0, и составляет 1.71 В – 5.5 В.

При этом сохраняется полная работоспособность аналоговой и цифровой периферии.

Приборы из сери PSoC 4 L могут содержать до 13 программируемых аналоговых блоков, включая 4 высококачественных операционных усилителя, 4 ЦАП с токовым выходом, 2 маломощных компаратора, 12-разрядный АЦП последовательного приближения и 2 бока интерфейса CapSense, способного реализовать до 96 каналов емкостного сенсорного интерфейса. Разработчик, используя программируемые аналоговые блоки, может создавать разнообразные аналоговые интерфейсы и системы обработки аналоговых сигналов с целью добавления новых системных функций, при этом энергопотребление, габаритные размеры и стоимость конечного устройства остаются неизменными.

В состав цифровой периферии в приборах PSoC 4 L входит до 20 цифровых программируемых блоков, включая 8 блоков таймеров/счетчиков/ШИМ, 4 блока последовательных интерфейсов обмена данными и 8 универсальных цифровых блоков, каждый из которых содержит программируемую логику, область данных, регистры статуса и управления.

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

Отладочный набор Cypress CY8CKIT-046 PSoC 4 L-Series Pioneer Kit.

С целью поддержки разработчиков одновременно с выпуском семейства PSoC 4 L компания подготовила аппаратно-программную платформу CY8CKIT-046 PSoC 4 L-Series Pioneer Kit для оценки возможностей, разработки и отладки приложений.

Высокоинтегрированная отладочная плата, входящая в состав набора, выполнена на СнК серии PSoC 4200L, помимо поддержки одновременного подключения двух плат расширения форм-фактора Arduino Uno содержит собственную периферию: порт USB Device, внешнюю память, аудио кодек и RGB светодиод.  

Для разработки приложений используется интегрированная среда PSoC Creator.

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

Серийное производство PSoC 4 L в 48-выводном корпусе TQFP, 64-выводном TQFP, 68-выводном QFN и 124-выводном VFBGA намечено на второй квартал 2016 г.

Источник: https://www.rlocman.ru/news/new.html?di=162901

FreeSoC2 Introduction

Contributors: SFUptownMaker Favorited Favorite 3

If you want to move beyond the basics, you’ll need to install Cypress’s PSoC Creator IDE. It’s free, with no code size limitations, although Cypress does ask that you register before downloading.

It is, sadly, Windows only.

We’ll go through a very simple project here, just a step more involved than a normal “blink” example.

Connecting the Board

For programming and debugging within PSoC Creator, you’ll need to connect the board via the “Debugger” USB port. Driver should have been installed as a part of the Creator install process; if not, you can find them in the Creator installation directory. If you find driver installation problematic under Windows 8, we have a tutorial to help with that.

There’s no need to connect the “Target” port, unless you are actually creating a project that uses USB, and that’s beyond the scope of this tutorial.

Creating a Project

This is what you’ll see when you launch Creator. To start a new project, you can either click the “Create New Project…” link on the Start Page, the “New” button in the menu bar, or open the “File” menu and choose “Project…” in the “New” submenu.

That will open this window. I’ve clicked the ‘+’ next to “Advanced” to show more choices.

The first thing to do is to select “PSoC 5LP Design” from the “Default Templates” list. This will set up some things for you, including setting compiler options and paths.

The “Name” field is the name of the project. PSoC Creator organizes applications into workspaces which contain one or more projects. For instance, you may wish to have an application and its bootloader as part of one workspace, to keep them related.

Down below that “Advanced” fold you’ll see a couple of more options related to project and workspace management. If you currently have a workspace open, you have the option (via the “Workspace” drop-down) of electing to add this project to that workspace. Otherwise, it will be greyed out and you’ll need to provide a workspace name.

The IDE will create a new directory with the workspace name in the directory specified in the “Location:” field; it will create a subdirectory in that directory with the name of the project (as declared in the “Project:” field).

In the “Device” menu you’ll find an option to launch the device selector.

This pulls up a list of all the various PSoC5LP parts. Find the CY8C5888AXI-LP096, highlight the line, and click okay. You’ll probably never need to change this again; Creator remembers the parts you’ve used in the past.

“Sheet template” is the size and format of the schematic capture sheet you’ll use to define the hardware components of your design. I’ve selected 11″x17″ ledger size, and that’s a good place to start until you’ve gotten accustomed to breaking projects up into smaller chunks and making components in libraries.

Finally, you have the option to select whether your application is a bootloader, is bootloadable, or is a multi-app bootloader (to provide fail-safe operation). We’ll leave that at “Normal” for now.

Click “OK” to move to the next step.

Adding Hardware

Before you can go any further, you’ll need to add some sort of hardware to the schematic. As you add hardware elements to the schematic, the IDE will generate API files to support the hardware.

Источник: https://learn.sparkfun.com/tutorials/freesoc2-introduction/getting-started-with-psoc-creator

Ссылка на основную публикацию
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}