Ик пульт на msp430 lanchpad

Фрикер Клуб

Принцип передачи ИК сигналов состоит из следующего — электрический сигнал основной (несущей) частоты модулируется передаваемыми данными и с помощью инфракрасного светодиода излучается в пространство.

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

Обычно, микросхема имеет 3 вывода Vo — ножка выхода ИК-приёмника. GND — общий вывод (минус источника питания). Vs — вывод плюса напряжения питания, обычно от 4,5 до 5,5 вольт. Этот фотоприемник имеет маркировку TSOP.

Упрощённая блок-схема TSOP-приёмника приведена на рисунке. В качестве выходного элемента внутри TSOP используется обычный N-P-N транзистор.

В неактивном состоянии транзистор закрыт, и на ножке Vo присутствует слабый уровень высокого напряжения (лог. «1»).

При появлении в чувствительной зоне TSOP инфракрасного излучения с «основной» частотой этот транзистор открывается, и выходная ножка Vo принимает низкий уровень сигнала (лог. «0»). 

«Основная» частота — это частота импульсов инфра-красного излучения (света), которую отфильтровывает внутренний демодулятор TSOP. Эта частота обычно равна 36, 38, 40 кГц, но может быть и другой, об этом необходимо справиться в даташите на конкретный тип TSOP-приёмника.

Для повышения помехоустойчивости ИК-канала связи, применяется модулированная передача ИК-света. Временные характеристики модуляции для помехозащитной передачи приведены в даташите на конкретный TSOP-приёмник.

Но в большинстве случаев достаточно придерживаться простых правил:

1) минимальное количество импульсов в пачке — 15

2) максимальное количество импульсов в пачке — 50

3) минимальное время между пачками — 15хT *

4) частота импульсов в пачке должна соответствовать основной частоте TSOP-приёмника

5) светодиод должен быть с длиной волны = 950 nm.

*T — период «основной» частоты TSOP-приёмника.

Регулируя в некоторых пределах длину пачки импульсов, можно передавать двоичные сигналы. Длинный импульс на выходе TSOP-приёмника может означать «единицу», а короткий — «нуль».

Таким образом, при соблюдении правил модуляции дальность передачи цифровых сигналов на прямой видимости между светодиодом и TSOP-приёмником может достигать 10-20 метров.

Скорость передачи не большая, около 1200 бит в секунду, в зависимости от применённого TSOP-приёмника.

Принцип передачи сигнала:

Модулируя сигнал на входе передатчика последовательным кодом, мы получаем на выходе передатчика модулированный сигнал который состоит из несущей (основной) частоты и последовательного кода, в виде пачек импульсов. Длинный импульс это единица, короткий ноль. В итоге мы можем передавать двоичный код и принимать его.

Теперь перейдем к небольшому примеру приема сигналов ИК с помощью отладочной платы LaunchPad MSP-EXP430G2 от компании Texas Instruments. Нам необходимо подключить наш приемник ИК (я использовал TSOP4836) к нашей отладочной плате. 

Как мы уже говорили микросхема приемника TSOPимеет 3 вывода OUT — ножка выхода ИК-приёмника. GND — общий вывод (минус источника питания). VCC — вывод плюса напряжения питания. Как видно из схемы подключения выход приемника подключен к пину №11.

Приступаем к программированию нашего LaunchPad. Для начала запускаем среду программирования LaunchPad — Energia.

Выбираем тип используемого контроллера, совместимого с LaunchPad msp430g2553. И приступаем к написанию простого скэтча.

Нажимаем кнопку Upload, прошиваем наш контроллер. Открываем SerialMonitor. Берем пульт управления от телевизора или другой пульт ИК.

Подносим к нашему приемнику TSOP 4836 подключенному к LaunchPad и начинаем нажимать на кнопки пульта, в терминал будут выводиться значения кнопок пульта в десятичной системе исчисления.

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

Обсуждаем тут http://phreakerclub.com/forum/showthread.php?t=1048  

(C) mbqart

www.phreakerclub.com

Источник: http://PhreakerClub.com/1452

Программируемый пульт на базе Arduino и APC220 – Популярная робототехника

Близится время первых полевых испытаний квадрокоптера, и для того чтобы их успешно провести, потребовалось решить еще одну вспомогательную задачу – собрать компактный пульт дистанционного управления. Согласно проекту, связь квадрокоптера с землей обеспечивает приемопередающий радио-модуль APC220. На первом этапе, на базе APC220 и Arduino Nano был собран макет пульта, который я уже демонстрировал ранее (см. рисунок). Этот пульт имел три потенциометра, которые использовались для настройки PID контроллера подсистемы стабилизации и для управления газом. Для отображения показаний потенциометров и телеметрии, к контроллеру пульта был подключен двух-строчный ЖК дисплей (1602). Включение и выключение цикла маневрирования осуществлялось с помощью 3-х выводного переключателя. Позже в макет пульта был добавлен ещё и двух-осевой джойстик.С помощью такого стенда удалось провести предварительную отладку системы управления в домашних условиях. Однако, пульт, собранный с помощью макетной платы и пучка проводов получился слишком “нежным” для использования вне помещения. Кроме того, для питания устройства использовался стационарный блок питания, так как мощности USB выхода ноутбука уже не хватало. Именно поэтому было принято решение собрать все эти провода и модули в одно компактное устройство, с возможностью питания от аккумулятора или батареек.Схема пульта была полностью скопирована с макета, за исключением дополнительного регулятора напряжения LM7805 и выключателя питания LCD дисплея.Для разработки печатной платы я воспользовался замечательным приложением FreePCB. Нанесение рисунка на текстолит происходило по известной методике, с применением принтера и глянцевой бумаги.      После изготовления платы обнаружилась пара досадных косяков 🙁 В связи с этим спешу выдать несколько полезных советов.

  1. Если предполагается, что некоторые ноги элемента должны припаиваться к “массе”, которая на данной плате занимает все свободное пространство, обязательно рисуйте для этих целей отдельную дорогу. Дело в том, что припаивать что-либо к большой массе меди непростая задача, особенно если в наличии только маломощный паяльник. На схеме таки проблемы возникли при пайке перемычек и конденсаторов регулятора напряжения.
  2. После генерации рисунка в приложении FreePCB проверьте чтобы границы дорожек не съели нужные участки массы. При необходимости, можно изменить величину этих границ, сделать их поменьше. Например в схеме пульта подобная проблема привела к необходимости сделать лишнюю перемычку.
  3. Ну и конечно 7 раз проверьте все соединения. Я проверил всего 2 раза и пропустил несколько ошибок, которые потом пришлось ювелирно исправлять на готовой вытравленной плате.

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

Источник: http://www.poprobot.ru/home/programmiruemyjpultnabazearduinoiapc220

Создайте свое первое приложение для TI LaunchPad

В данной статье мы познакомимся с TI LaunchPad, который делает разработку приложений для микроконтроллеров MSP430 простой и быстрой.

Семейство микроконтроллеров MSP430 Texas Instruments занимает важное место в мере электроники: с одной стороны, отличаются ультранизким энергопотреблением, а с другой стороны, они предоставляют очень мощные возможности в плане переферийных устройств, размера памяти, скорости и простоты использования.

В данной статье мы познакомимся с TI LaunchPad, который делает разработку приложений для микроконтроллеров MSP430 простой и быстрой.

LaunchPad – это недорогой инструмент прототипирования устройств на MSP430, который обеспечивает эмуляцию на плате для программирования и отладки.

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

Аппаратная часть LaunchPad

LaunchPad представляет собой набор (приобрести можно здесь), который включает в себя следующее:

  • 1 x отладочная плата LaunchPad
  • 1 x микроконтроллер MSP430G2553IN20
  • 1 x микроконтроллер MSP430G2452IN20
  • 1 x кварц 32.768 кГц
  • 2 x 2.54 мм 1×10 разъем (мама)
  • 1 x кабель USB-A на Mini-USB
  • 2 x наклейка LaunchPad

На плате LaunchPad присутствуют секция эмуляции для программирования и отладки через USB, одна кнопка общего назначения, два светодиода общего назначения, одна кнопка сброса, два порта расширения и 20-пиновая панель для микроконтроллера.

Плата питается через mini-USB напряжением 5 В и преобразует его в 3,6 В с помощью LDO-регулятора. Чтобы работать, секция эмуляции и микроконтроллер нуждаются в напряжении с таким уровнем. Сеть 3,6 В помеченная как VCC, и проводники GND присутствуют на разъемах J1, J2 и J.

Секция эмуляции создает интерфейс между микроконтроллером и средой программирования.

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

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

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

LaunchPad поставляется с двумя 16-битными микроконтроллерами: MSP430G2452 и MSP430G2553. Они оба с 20 выводами. Основные свойства этих микроконтроллеров перечислены ниже, и выделены различия между ними.

Сравниваемый параметрMSP430G2452IN20MSP430G2553IN20
CPU MSP430 MSP430
Частота (МГц) 16 16
Энергонезависимая память (KB) 8 16
RAM (KB) 0.25 0.5
GPIO (входы/выходы общего назначения) 16 16
I2C 1 1
SPI 1 1
UART 1
АЦП ADC10 – 8 каналов ADC10 – 8 каналов
Компараторы (входы) 8 8
Таймеры – 16 бит 1 2
Минимальное напряжение питания 1.8 1.8
Максимальное напряжение питания 3.6 3.6
Потребление в активном режиме (мкА/МГц) 320 330
Потребление в режиме ожидания (режим LPM3) (мкА) 0.7 0.7
Время включения (мкс) 1.5 1.5
Дополнительные особенности Сторожевой таймер Датчик температурыПерезапуск по броску питания Сторожевой таймер Датчик температуры Перезапуск по броску питанияИнфракрасный порт
Специальные входы/выходы Емкостные сенсорные входы/выходы Емкостные сенсорные входы/выходы

Оба микроконтроллера имеют встроенные программируемые тактовые генераторы 16 МГц.

Кроме того, LaunchPad позволяет пользователю подключать внешний тактовый генератор, такой как часовой кварц 32,768 кГц или любой другой стандартный кварц до 16 МГц.

SMD площадки и площадки с отверстиями дают пользователю возможность использовать кварцы в разных корпусах. Если для кварца необходимы дополнительные конденсаторы, на плате для этих целей зарезервированы площадки C21 и C22.

Еще одной интересной особенностью микроконтроллеров является встроенный датчик температуры. Это линейный датчик, который выдает 3.55 мВ/C°. Выход датчика подключен внутри к одному из входов АЦП, и пользователь может выбрать, будет ли этот вход считывать температурные данные с датчика.

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

Инструменты программирования

Существует несколько вариантов выбора интегрированной среды разработки (IDE), доступных для LaunchPad для написания кода, прошивки устройства и для отладки.

Energia

Energia – это инструмент редактирования кода с открытым исходным кодом, разрабатываемый сообществом для LaunchPad. Она поддерживается на Mac OS, Windows и Linux. Energia использует Wiring и Arduino фреймворк, и поэтому ее пользовательский интерфейс почти такой же, как у Arduino IDE. Energia является полностью бесплатной и поддерживает все платы LaunchPad.

Code Composer Studio (CCS)

Code Composer Studio (CCS) – это профессиональный инструмент разработки, созданный TI, который так же поддерживает все платы LaunchPad.

Она может быть загружена и установлена на компьютер, или может использоваться облачная версия в веб-браузере. CCS поставляется с ограничением размера кода в 16 KB при свободном использовании.

Поскольку MSP430 на оригинальном LaunchPad максимум с 16 KB, это не является проблемой.

CCS Cloud позволяет разрабатывать, компилировать, прошивать и отлаживать код, всё в веб-браузере. В облачной среде есть и другие полезные функции, такие как просмотр и импортирование примеров из ресурсного центра MSP430, интеграция с GitHub, связь с LaunchPad через последовательный монитор и т.д.

Загружаемая и полнофункциональная версия CCS также доступна. Она основана на базе Eclipse и поддерживает все процессорные устройства TI, в том числе и LaunchPad. Перед загрузкой требуется регистрация на сайте TI.

Сторонние IDE

Существует много других сторонних инструментов разработки для LaunchPad. Keil и IAR Embedded Workbench являются полными наборами из компилятора и отладчика. GCC – компилятор с открытым исходным кодом, поддерживающий TI LaunchPad. Temboo – онлайн платформа для разработки, которая также поддерживает LaunchPad.

Простое приложение для LaunchPad

После краткого введения в аппаратную часть LaunchPad и инструменты разработки, мы можем создать наше первое приложение с помощью периферийных устройств на плате и Energia IDE. Мы будем использовать светодиоды и кнопки, чтобы продемонстрировать, как настроить направления портов, как прочитать состояние входа и как установить состояние выхода.

Запустите Energia и создайте новый скетч, используя меню Файл (File) → Новый (New). Появится новый файл скетча, содержащий пустые функции setup() и loop(). В функции setup() мы должны установить направления портов с помощью функции pinMode().

Выводы GREEN_LED и RED_LED должны быть выходами, а вывод PUSH2 для кнопки должен быть входом.

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

void setup() { // инициализация выводов, подключенных к светодиодам на плате, как выходы: pinMode(GREEN_LED, OUTPUT); pinMode(RED_LED, OUTPUT); // инициализация вывода, подключенного к кнопке на плате, как вход: pinMode(PUSH2, INPUT_PULLUP); }

В основном цикле состояние входа кнопки будем читать с помощью функции digitalRead(). Мы проверяем состояние кнопки, используя оператор if. Когда кнопка не нажата, функция digitalRead() возвращает 1, так как вывод PUSH2 подтянут внутренним резистором к высокому уровню. В этом состоянии зеленый светодиод мигает.

Мигание осуществляется периодическим включением и выключением светодиода с помощью функции digitalWrite() с интервалом в 100 мс. Функция delay() помогает нам задать нужный интервал времени ожидания. Когда кнопка нажата, она притягивает вывод PUSH2 к корпусу, и функция digitalRead() возвращает 0.

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

void loop() { // проверяем, нажата ли кнопка. if (digitalRead(PUSH2)) { // мигаем зеленым светодиодом на выводе GREEN_LED: digitalWrite(RED_LED, LOW); digitalWrite(GREEN_LED, HIGH); delay(100); digitalWrite(GREEN_LED, LOW); delay(100); } else { // мигаем красным светодиодом на выводе RED_LED: digitalWrite(GREEN_LED, LOW); digitalWrite(RED_LED, HIGH); delay(100); digitalWrite(RED_LED, LOW); delay(100); } }

Полный скетч приведен ниже.

Когда скетч готов, просто нажмите кнопку Проверить (Verify) для запуска компиляции. Если ошибок нет, Energia выдаст сообщение “Done compiling”. В противном случае ошибки будут перечислены на вкладке сообщений. После успешного завершения компиляции вы можете прошить свое устройство, нажав кнопку Загрузить (Upload).

Убедитесь, что вы уже выбрали правильный последовательный порт, к которому подключен ваш LaunchPad, с помощью меню Инструменты (Tools) → Последовательный порт (Serial Port) и правильную модель LaunchPad, которую вы используете (например, LaunchPad w/ MSP430G2353 (16MHZ)), с помощью меню Инструменты (Tools) → Плата (Board).

Код в действии вы можете увидеть на видео ниже.

Ссылки:

Оригинал статьи:

Источник: https://radioprog.ru/post/102

Отладочная плата MSP430 LaunchPad

Как вы помните из предыдущей статьи, решил я сотворить учебный курс по контроллерам STM32F3 на нашем сайте. Но что-то этого мне показалось мало и решил я продолжить (едва начавшийся

Источник: https://microtechnics.ru/otladochnaya-plata-msp340-launchpad/

Используем MSP430-Launchpad в качестве программатора

9 декабря 2014 в 18:53 (МСК) | сохранено 4 марта 2015 в 00:15 (МСК)

Здравствуйте! Я хочу поделиться с хабрасообществом одним необычным применением отладочной платы MSP430-Launchpad. Руководство предназначено тем, кто уже имеет MSP430-Launchpad, освоил микроконтроллеры MSP430-ValueLine и задумывается о том, чтобы перейти на более продвинутые МК MSP430, но пока не решился на то, чтобы приобрести профессиональный программатор MSP430-JTAG или MSP430-UIF.

Но это не страшно. В качестве программатора можно пока будет использовать Launchpad. Под катом я расскажу как это сделать. Оказывается, что программатор, входящий в состав платы Launchpad может прошить любой микроконтроллер (МК) MSP430, имеющий интерфейс SpyByWire (SBW). Каких-либо ограничений на модель МК по-видимому нет.

Баг ли это Launchpad'а или так и задумала Texas Instrunmets неизвестно. По интерфейсу SBW программируется в том числе МК MSP430G2553 и MSP430G2452, которые идут в комплекте с платой. Убедиться, что в микроконтроллере есть интерфейс SBW можно посмотрев его даташит. Мы в качестве подопытной платы будем использовать самодельную отладочную плату с микроконтроллером MSP430F5438A.

Интерфейс SBW в этом МК есть. Плата выглядит вот так:Теперь нужно снять перемычки, которые соединяют верхнюю часть платы Launchpad с нижней и вывести провода с контактов RST,TEST,VCC,VSS.

Эти провода нужно связать самодельным кабелем с ножками МК в следующем порядке (в скобках дана нумерация выводов для МК MSP430F5438A):
Launchpad MSP430F5438A VCCVDD(87) RSTSBWTDIO(96) TESTSBWTCK(91) GNDVSS(88)
На следующей картинке ножки MSP430F5438, к которым нужно подключится отмечены крестиком:Теперь делаем самодельный кабель, подключаем его к MSP430F5438 и к Launchpad.

Должно получиться примерно так:МК из розетки DIP-20 нужно извлечь. При этом МК на подопытной отладочной плате будет запитан от Launchpad, который в свою очередь питается от USB. Теперь можно подключить USB кабель в Launchad и подключить его к компьютеру. Если всё сделано правильно, то на Launchpad должен гореть зелёный светодиод PWR. Если перепутаны VSS и VDD, то светодиод не горит.

Теперь можно проверить опознаётся ли микроконтроллер. Далее я буду использовать ОС Linux и утилиту mspdebug. Если у вас другой toolchain для MSP430 то смотрите документацию к нему.Теперь проверим опознаётся ли наш МК. В консоли наберём:mspdebug rf2500 Плата должна дать такой ответ:vvk@linux-bmx0:~> mspdebug rf2500
MSPDebug version 0.

21 – debugging tool for MSP430 MCUs
Copyright (C) 2009-2012 Daniel Beer
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Trying to open interface 1 on 004
Initializing FET…

FET protocol version is 30394216
Set Vcc: 3000 mV
Configured for Spy-Bi-Wire
Device ID: 0x0580 Code start address: 0x5c00 Code size : 262144 byte = 256 kb RAM start address: 0x1c00 RAM end address: 0x5bff RAM size : 16384 byte = 16 kb
Device: MSP430F5438A
Number of breakpoints: 8
fet: FET returned NAK
warning: device does not support power profiling
Chip ID data: 05 80 17 Available commands: = erase isearch opt run setwatch_w alias exit load power save_raw simio break fill load_raw prog set step cgraph gdb locka read setbreak sym delbreak help md regs setwatch verify dis hexout mw reset setwatch_r verify_raw Available options: color gdb_loop enable_bsl_access gdbc_xfer_size enable_locked_flash_access iradix fet_block_size quiet Type “help ” for more information.
Press Ctrl+D to quit. (mspdebug) exit В результате мы должны попасть в консоль mspdebug. Чтобы выйти оттуда, введите exit. Если МК не ответил, то проверяйте кабель. Если получили такой ответ, то МК распознался и можно его программировать командой:mspdebug rf2500 “prog имя_файла_с_прошивкой.elf”
Через Launchpad программирование идёт очень медленно. 8кБ прошивается несколько минут. В остальном каких-либо ограничений нет. Ещё следует отметить, что после того, как мы отключили нижнюю часть платы Launchpad, кнопка RESET более не функциональна. Если на плате такой кнопки нет, то отправить МК в ресет можно с командной строки:mspdebug rf2500 reset

В общем, приведённый способ профессиональный программатор не заменит, но со «взрослыми» МК серии MSP430 тем не менее можно не только ознакомиться но и полноценно работать, если не обращать внимание на низкую скорость прошивки.

Источник статей: Хабр.

Время указано в том часовом поясе, который установлен на Вашем устройстве.

Версия сайта: 0.8.
Об ошибках, предложениях, пожалуйста, сообщайте через Telegram пользователю @leenr, по e-mail i@leenr.ru или с помощью других способов связаться.

Источник: https://sohabr.net/habr/post/245425/

бЛог инженера

Этот урок — продолжение серии переводов на русский язык учебных уроков по работе с микроконтроллерами от Texas Instruments серии msp430. Начало можно найти в сообществе we.easyelectronics.ru.

Так как я ранее сделал довольно объёмный курс из многих частей, я думал, что напишу быстро и в этот раз. На этом уроке будем иметь дело с чрезвычайно универсальным режимом работы модуля таймера — режимом широтно-импульсной модуляции.

Широтно-импульсную модуляция, или ШИМ, очень просто организовать, но при этом с помощью ШИМ можно сделать много разных вещей, таких как управление яркостью лампы, или регулировка скорости двигателя. Можно генерировать аналоговый сигнал или даже синтезировать звуки, и это всё с помощью простого таймера с двумя прерываниями.

Основы сигнала ШИМ

Три примера сигналов ШИМ с различнымирабочими циклами. На каждом графике обозначентак же  средний (интегрированный) уровень сигнала

ШИМ-сигнал является естественным продолжением сигнала прямоугольной формы, — так же, как сигналы, которые мы уже использовали в тактировании. Для образования меандра, сигнал включается и выключается через определённые промежутки времени. Когда вы смотрите на график меандра, вы видите, что сигнал имеет высокий уровень и через определённый промежуток времени — низкий.

Соотношение времени, когда установлен высокий уровень — длительность импульса — к периоду, или интервалу между импульсами, называется рабочим циклом. Для сигнала прямоугольной формы длительность импульса равна половине длины одного цикла, поэтому он имеет 50% рабочий цикл. В ШИМ-сигнале просто регулируется рабочий цикл при сохранении той же частоты импульсов.

Мы организуем ШИМ-сигнал с использованием двух прерываний по таймеру.

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

Идея проста: в режиме сравнения таймера, при непрерывном режиме счёта, модуль Timer_A имеет три прерывания. Всякий раз, когда таймер переполняется, а это — после 65 536 (или 2 16) тактов, — происходит прерывание, которое мы будем использовать, чтобы установить выход нашей ШИМ.

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

Если регистр CCR0 сбрасывается, когда регистр счетчика TAR достигает 32 768 (половина из 65 536), получится как раз 50-процентное заполнение рабочего цикла; выход ШИМ устанавливается в первую половину периода, и сбрасывается в следующую половину. Если записать в регистр CCR0 6554, у нас будет около 10% рабочего цикла. По минимуму,  модуль Timer_A  имеет два регистра захвата-сравнения, используя этот метод, мы можем получить по крайней мере два ШИМ-сигнала от любого устройства под управлением MSP430. К сожалению, часто на практике мы теряем однин из них.

В качестве первого примера рассмотрим следующий:

LEDPWM_G2231.c

#include

#define LED1 BIT5 // LED1 на P1.5
#define LED2 BIT6 // LED2 на P1.6

/* определение функций*/
void TA_init(void);

void main(void) { int dir0=1, dir1=1; // Направление счёта для изменения цикла ШИМ.

// +1 – возрастание,-1 убывание

WDTCTL = WDTPW + WDTHOLD;

P1OUT = 0; P1DIR = LED1 + LED2; P1SEL = LED1 + LED2; // установка режима выходов таймера TA0.x

TA_init(); // Установка Timer_A в качестве ШИМ

// BCSCTL1 = 0x8d; // RSELx = 13 is 7.8 MHz.
// DCOCTL = 0x60; //из документации стандартное значение DCOx = 3,

__enable_interrupt();

while(1) {
__delay_cycles(327680); // Даём поработать ШИМ 5 циклов перед началом изменения

/* Значения 771 и 1285 выбраны не случайно: они являются общими * множителями 2^16 – 1. эти значения позволяют регистру TACCRx * достигать как 0, так и 65535, ШИМ при этом работает во всём диапазоне счёта таймера – 2^16 бит * Если вы хотите изменить эти значения, то используйте только 3, 5, 17, * и 257. Так же нужно поменять начальные значения в функции TA_init().

*/

TACCR0 += dir0*771; // изменение цикла с 0 по 1.18% TACCR1 += dir1*1285; // изменение цикла с 1 по 1.96% if (TACCR0 == 65535) dir0=-1; // уменьшение else if (TACCR0 == 771) dir0=1; // увеличение if (TACCR1 == 65535) dir1=-1; // уменьшение else if (TACCR1 == 1285) dir1=1; // увеличение }

} // main

void TA_init(void) { TACCR0 = 771; // LED1 начинается с 771/2^16 = 1.18% TACCR1 = 1285; // LED2 начинается с1285/2^16 = 1.96% TACTL = TASSEL_2 + ID_0 + MC_2 + TAIE; // SMCLK, делитель 1, непрерывный режим счёта // Eразрешаем прерывания TACCTL0 = OUTMOD_5; // сброс при TACCR0 TACCTL1 = OUTMOD_5; // сброс при TACCR1

}

#pragma vector = TIMERA1_VECTOR __interrupt void TA0_Rollover_ISR(void) { switch(TAIV) { case(0xA): TACCTL0 = OUTMOD_0 + OUT; // установка высокого уровня на выходе TA0.0 TACCTL1 = OUTMOD_0 + OUT; // установка высокого уровня на выходе TA0.1 TACCTL0 = OUTMOD_5; // возврат к сбросу при TACCR0 TACCTL1 = OUTMOD_5; // возврат к сбросу при TACCR1 break; default: break; } }

Если запустить эту программу на LaunchPad, вы увидите как светодиоды загораются, начиная с тусклого свечения, постепенно яркость нарастает, потом наоборот, начинает снижаться от максимальной яркости, затем цикл повторяется. ШИМ-сигнал отображается с помощью светодиодов, как увеличивается рабочий цикл от 0 до 100%, а затем уменьшается обратно до 0, и повторяется.

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

Как только вы запустите код как есть, попробуйте раскомментировать строки,  устанавливающие внутренний тактовый генератор DCO на более высокую частоту и отметьте, какое  влияние она оказывает на ваше восприятие свечения диодов.

Читателю на заметку: Почему нельзя в коде сделать так, чтобы уровень ШИМ-сигнала уменьшался до 0? Попробуйте поменять для сравнения направление счёта вверх, на  else if (TACCR0 == 0) и посмотреть, что происходит. Можете ли вы объяснить это?

Улучшаем работу ШИМ

Теперь, когда вы видели ШИМ в действии, рассмотрим выходную частоту этой схемы. Если мы позволим работу счётчика таймера до 2 16, выход ШИМ-сигнала будет установлен на частоте F / 2 16, где F — частота счёта Timer_A.

По умолчанию частота тактового генератора DCO около 1,1 МГц, частота между импульсами составляет всего около 17 Гц — это легко увидеть человеческим глазом! Если использовать максимальную частоту 16 МГц, то максимальная частота ШИМ-сигнала при использовании этого метода будет 244 Гц.

Для некоторых приложений, это может быть достаточно быстро, но для многих других, вы можете обнаружить импульсы частотой около 1 кГц или выше! Так как у нас нет никакого способа, чтобы увеличить частоту Timer_A , нам нужно иметь счетчик таймера в нижних значениях; мы можем сделать это с помощью режима счёта ВВЕРХ, а не в непрерывном режиме, за счёт регистра CCR0, работающего в этом качестве. Хотя это означает, что мы потеряем один выход, мы получим более гибкое и быстрое ШИМ.

Счёт к меньшему значению также означает, что мы теряем в разрешении. Если установить регистр CCR0 в 10, например, есть только 11 возможных рабочих циклов: регистр CCR1 может быть установлен только в целое значение, меньшее (или равное) 10. Это дает 11 рабочих циклов от 0% до 100%, разбитых на 10% интервалы.

Установив регистр CCR0 на 100, можно выбирать 1-процентные промежутки времени; значение 1000 позволит уже 0,1-процентные интервалы, и так далее. Хотя возможно, было бы хорошо иметь такое высокое разрешение, используя все 16 битов регистра Timer_A, в большинство приложений это не используется.

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

Попробуйте код из второго примера: LEDPWM2_G2231.c,и обратите внимание на различия в настройках таймера.

#include

#define LED2 BIT6 // LED2 is on P1.6
#define PWMTop 1000 // Установка частоты ШИМ: DCO/PWMTop

/* Function Definitions */
void TA_init(void);

void main(void) { int dir1=1; // Направление счёта для изменения цикла ШИМ.

// +1 – возрастание,-1 убывание

WDTCTL = WDTPW + WDTHOLD;

P1OUT = 0; P1DIR = LED2; P1SEL = LED2; // установка режима выходов таймера TA0.x

TA_init(); // Установка Timer_A в качестве ШИМ

while(1) { __delay_cycles(PWMTop*5); // Даём поработать ШИМ 5 циклов TACCR1 += dir1; // Меняем цикл ШИМ  с 1 на 1% if (TACCR1 == PWMTop) dir1=-1; // уменьшение else if (TACCR1 == 0) dir1=1; // увеличение }

} // main

void TA_init(void) {
TACCR0 = PWMTop; // регистр TACCR0 управляет частотой ШИМ

TACCR1 = 1; // LED2 начинает с 1% заполнения для PWMTop = 1000 TACTL = TASSEL_2 + ID_0 + MC_1; // SMCLK, делитель 1, режим счёта вверх // нет нужды в прерываниях! TACCTL1 = OUTMOD_7; // сброс/установка: установка при TACCR0, сброс при TACCR1 }

Раньше мы должны были вручную установить ШИМ-выходы на прерывание при переполнении. MSP430 управляет выходами таймера, которые соответствуют регистрам TACCRx и TACCR0, поэтому установка выходов ШИМ теперь происходит автоматически.

Прерывания не нужны! Эта особенность намного уменьшает код программы, а также экономит много памяти. Конечно, если необходимы другие функции в сочетании с ШИМ-сигналом, то прерывание все ещё может  быть вызвано для обработки.

В общем, в этом нет необходимости.

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

Этот режим осуществляется с помощью таймера, работающего в режиме счёта вверх-вниз, и установки выхода таймера для срабатывания в соответствии с прерыванием CCRx.

Если выход ШИМ начинается с низкого уровня (который может быть обеспечен при сбросе регистра TAR в 0, при необходимости), то высокий уровень устанавливается, когда счётчик достигает значения CCRx, потом снова низкого, когда это же значение достигается при счёте вниз.

Этот метод центрирует импульс в высшей точке, позволяя синхронизировать несколько сигналов ШИМ, работающих одновременно. Поскольку этот режим требует установки значения регистра TACCR0, до которого будет считать таймер, использование выхода TA0.0 в качестве ШИМ становится невозможно.

На заметку: Обратили ли вы внимание, что на этот раз ШИМ проходит весь путь до 0%? Если вы не смогли найти ответ на первом упражнении, подумайте, в чём отличие этого кода. Какой порядок действий происходит в методе с прерываниями? В каком порядке они происходят в методе работы сброс/установка?

Почему ШИМ?

Во втором примере код имеет такую ​​же простую функцию как и прежде: увеличивается рабочий цикл ШИМ-сигнала от 0% до 100%, затем уменьшается до 0%, и повторяется. Когда длительность импульса мала, в среднем светодиод излучает меньшее количество света.

10% рабочего цикла означает, что светодиод горит только 10% времени, чем обычно, и поэтому яркость воспринимается как примерно 10% от полной яркости свечения. Увеличивая затем уменьшая рабочий цикл, вы создаете классный, эффект-мерцание от светодиода, который сегодня используется во многих популярных электронных устройствах.

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

Поскольку поведение светодиодов почти цифровое (они либо включены, либо выключены, без вариантов), то почему же мы воспринимаем свет как регулируемый, а не наблюдаем мигание, как они на самом деле работают? Глаз человека имеет относительно высокую инерционность, и медленно реагирует на изменения света — пока диод мигает быстрее, чем человеческий глаз может воспринимать мигание, мы не обнаружим быстрые переходы, и только воспринимаем суммарную интенсивность света в наших глазах. Это тот же самый трюк, который делает возможным фильмы — видео с частотой кадров 25 кадров в секунду или более, кажется гладким и переключение незаметно для человеческого глаза. Но это не значит, что в идеале вы должны сделать мерцание светодиодов как можно быстрее, а так как светодиоды не являются полностью цифровыми, вероятно, можно ожидать, что, имея частоту ШИМ установленную слишком высоко, вы можете искусственно уменьшить яркость даже больше, так как Светодиод сам по себе (или по крайней мере с сопротивлением и емкостью схемы подключения сигнала к светодиоду) не может реагировать достаточно быстро. На практике, 1-10 кГц обычно достаточно для ШИМ, хотя в некоторых приложения выгоднее использовать более высокие частоты. Эти ситуации требуют тщательного проектирования, чтобы компенсировать сопротивление и емкость цепи, не замедляя переходы слишком сильно.

Готовим ШИМ к работе

На самом деле, это дополнительное сопротивление и ёмкость иногда дают преимущество. Например, намеренно установив достаточную RC-цепь на выходе ШИМ, можно предотвратить значительное снижение уровня сигнала.

Каждый импульс ШИМ заряжает конденсатор лишь частично, и в каждый мертвый промежуток времени конденсатор разряжается медленно. Эффект сохраняет относительно постоянное напряжение между импульсами.

Точно подобрав параметры RC-цепочки, можно успешно поддерживать напряжение, пропорциональное рабочему циклу: Вы успешно создали цифро-аналоговый преобразователь!

Это всё для урока. Надеемся, что это дало ответы на некоторые ваши вопросы о ШИМ, и некоторые идеи о том, как его использовать.

Упражнение для самостоятельной работы: Попробуйте сделать 10-разрядный ЦАП.

Если хотите, задайте такую комбинацию R и C, которая давала бы постоянную времени больше периода между импульсами; так, если вы используете ШИМ частотой 1 кГц (например, по умолчанию внутренний тактовый генератор, или калиброванный на 1 МГц, раз уж пошла такая пьянка, и установив TACCR0 до 1000) сделайте значение RC > 0,001.

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

Измерьте напряжение на выходе при помощи мультиметра; вывод должен быть близким к рабочему циклу умноженному на напряжение питания вашего Launchpad. (Если вы работаете от USB, то это 3,3 V.) Если у вас есть осциллограф, посмотрите на чистоту напряжения постоянного тока. Какие пульсации у вас получились? Попробуйте увеличить или уменьшить значение RC-постоянной. Какое влияние это оказывает на выход?

файлы для статьи:
LEDPWM_G2231.c
LEDPWM2_G2231.c

источник

Источник: http://www.shelezyakin.ru/lessons-msp430-launchpad-lesson-21-stealth-timer-shim/

Texas Instruments выпускает комплект разработчика LaunchPad на базе микроконтроллеров MSP430 Value Line

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

23-06-2010

Texas Instruments

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

Для преодоления недостатков 8-разрядных микроконтроллеров компания Texas Instruments стремится к объединению в своих микросхемах производительности 16-разрядного микроконтроллера, сверхмалого энергопотребления и сверхнизкой стоимости. Именно для этого компания TI выпускает комплект разработчика LaunchPad на базе микроконтроллеров MSP430™ Value Line. При стоимости 4.

30 доллара США, комплект с открытым исходным кодом включает в себя все необходимое аппаратное и программное обеспечение для того, чтобы легко запускать проекты на базе микроконтроллеров MSP430 Value Line компании TI.

Данные микроконтроллеры обеспечивают 10-кратный рост производительности и 10-кратное увеличение времени автономной работы по сравнению с 8-разрядными микроконтроллерами, при стоимости от 25 центов.

Комплект LaunchPad поддерживает технологию быстрого прототипирования и разработки, так что разработчики могут оперативно менять разные микроконтроллеры MSP430 Value Line для оценки, программирования или отладки устройств.

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

Комплект LaunchPad совместим со всеми микроконтроллерами MSP430 линии Value Line, что позволяет разработчикам адаптироваться к изменяющимся требованиям проектирования различных приложений, включая охранные, измерительные, промышленные системы и многие другие применения. Кроме того, поскольку все микроконтроллеры MSP430 совместимы по программным кодам, то разработанные с применением комплекта LaunchPad решения могут быть органично перенесены на любые другие микроконтроллеры MSP430, обеспечивая добавочную масштабируемость. Дополнительная информация доступна на сайте www.ti.com/launchpadwiki-prru.

Основные особенности и преимущества комплекта разработчика MSP430 LaunchPad

  • Разъем DIP для отладки и программирования поддерживает устройства, имеющие до 20 выводов, и позволяет осуществлять быстрое прототипирование с использованием микроконтроллеров MSP430 Value Line; разработчики могут оперативно менять микроконтроллеры один за другим для оценки, программирования или отладки устройств.
  • Запрограммированные микроконтроллеры можно легко извлечь и установить на заказные печатные платы или макетные платы.
  • Разработчики могут пользоваться кнопками, светодиодными индикаторами и выводами для подключения внешних компонентов, позволяющими комплекту LaunchPad функционировать в качестве автономной системы.
  • Встроенный эмулятор с питанием через USB позволяет программировать флэш-память, отлаживать микропрограммное обеспечение и поддерживать последовательный коммуникационный интерфейс, делая ненужным внешний эмулятор.
  • Комплект LaunchPad совместим с любым микроконтроллером MSP430 Value Line, существующими отладочными платами eZ430 и устройствами MSP430, способными поддерживать интерфейс Spy-Bi-Wire.
  • Бесплатно предоставляются компиляторы и отладчики без ограничения функциональности, в том числе Code Composer Studio и IAR Embedded Workbench, поддерживающие комплексную среду разработки программного обеспечения.
  • Кварцевый резонатор 32 кГц повышает точность встроенного в микроконтроллеры MSP430 генератора частоты с цифровым управлением, обеспечивая необходимую для различных периферийных устройств и таймеров точность режима реального времени.
  • В комплект включены два устройства MSP430 Value Line; одно из них предварительно запрограммировано с использованием демонстрационного микропрограммного обеспечения, чтобы продемонстрировать использование встроенных периферийных устройств, в том числе 10-разрядного АЦП, компараторов и внутреннего датчика температуры.
  • Дизайн с открытым исходным кодом позволяет разработчикам создавать собственные аппаратные средства на базе комплекта LaunchPad.
  • Wiki-справочник по комплекту LaunchPad на базе микроконтроллеров MSP430 предусматривает целый ряд пригодных для массового производства проектов с открытым исходным кодом, чтобы облегчить оценку, проектирование и сотрудничество в рамках сообщества.
  • В течение ограниченного времени осуществляется бесплатная доставка, так что стоимость комплекта разработчика LaunchPad действительно составляет 4,30 доллара США.

Цена и наличие

Комплект разработчика LaunchPad на базе микроконтроллеров MSP430 Value Line поставляется по цене 4.30 доллара США, заказы уже сейчас можно разместить на сайте www.ti.com/launchpad-prru-es.

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

Getting a PCB Made

I was recently asked where I get my PCBs made and realized that many people do not know of the great online PCB services which are available to hobbyists. A few months ago I needed to get a PCB made for the first time in years and started the search for cheap places to get my board manufactured quickly with reasonable tolerances.

I needed small quantities of a duel layer, surface mount, board with solder-mask and silkscreen on both sides. This usually adds more money to a PCB order than I was willing to spend on my small quick prototype board. I found three services which met my cost requirements and did not have an unreasonable lead time.

Here are my thoughts and a review on the PCB service I used.

MakePCB.com

http://makepcb.com/

This was the first board house I found which has reasonable pricing and a simple online quote system that you do not need to sign up for. I hate those websites where you have to give your personal information in order to receive a quote.

This option seemed to be the best for me while I was living abroad since shipping to Europe was the same as the US. I ended up not using this service because there was no information on the website about how long it takes get your board.

The major benefit to using this service is that if you want medium sized quantities the pricing scales very well. Check out their online quote calculator.

If anyone has used this service, send me a note or comment here. I'm very interested to see if anyone has had a good experience with this board house.

BatchPCB

http://batchpcb.com This is a service run by SparkFun electronics and seems to be a great option when you do not need a board quickly. As with MakePCB, I ended up not using this service. On their FAQ page they say that it takes anywhere from 3 weeks to 4 weeks to receive your board. For the price this is very reasonable – considering most hobby projects are usually not time critical. One great feature of this website is that they save your board design and you can get new boards made at less cost;  you can even sell your designs! The pricing is “$10 setup fee (shown as a handling charge) – $2.50 per square inch for 2 layer designs”. This makes the pricing better for larger boards than the last service I mention here.

This site has great reviews from a multitude of people. Check out this forum for more reviews and information on the service.

Dorkbot PCB Group Order

http://dorkbotpdx.org/wiki/pcb_order

Источник: http://www.msp430launchpad.com/2011/01/getting-pcb-made.html

MSP-EXP430G2, Texas Instruments MSP430 LaunchPad Development kit | 712-2649

MSP430 LaunchPad Development Kit

The MSP-EXP430G2 LaunchPad is an easy-to-use flash programmer and debugging tool that provides everything you need to start developing on MSP430 Value Line devices. It includes a DIP socketed target board with integrated emulation to quickly program and debug MSP430 Value Line devices in-system through the Spy Bi-Wire (2-wire JTAG) protocol.

The Flash memory can be erased and programmed in seconds with no external power supply required due to the MSP430's ultra-low power Flash technology. The LaunchPad interfaces MSP430 devices to an integrated software environment such as Code Composer Studio Version 4 or IAR Embedded Workbench. These IDEs are free and unrestricted on MSP430 Value Line devices.

The LaunchPad supports all MSP430G2xx Flash parts in a 14 or 20-pin DIP package.

20-pin DIP processor socketBuilt-in Flash emulation for debugging and programming2xUser LEDsPower LEDUser buttonReset button10-pin header for external circuit connection

Supplied with

MSP430G2553IN20 and MSP430G2452IN20 Flash devices (preloaded with sample programs), mini-USB cable, QuickStart Guide

MSP430 Microcontrollers, Texas Instruments

The MSP430 Platform is a range of mixed-signal, ultra-low power microcontrollers from Texas Instruments. The 16-bit RISC architecture is perfectly suited for wireless, low-power industrial and portable applications. This established range has a strong and popular position due to its ease of use and broad suite of development tools and support.

The MSP430 portfolio consists of over 400 devices ranging from the MSP430 Value Line to the revolutionary, highly integrated microcontrollers with embedded FRAM memory.This broad family of products offer integration suited to many designs and applications. High-performance peripherals include USB, RF, LCD controllers and Sigma-Delta ADCs.

This allows designers to find the appropriate MSP430 device for many low power applications.

Техническая спецификация
MSP430 LaunchPad Development kitИмя семейства процессоров:

MSP430

Классификация:

Комплект для разработки

Самовывоз со склада г. Екатеринбурга Бесплатно
ТК Деловые Линии от 500 руб
Курьером EMS до адреса от 700 руб

Отправка Почтой России не производится.

Источник: http://rs-catalog.ru/7122649.html

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