Как сделать простой программатор для pic-ов и avr-ов

Универсальный программатор

Источник: http://radioskot.ru/publ/mk/universalnyj_programmator/9-1-0-912

Программатор своими руками. Программатор для PIC своими руками :

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

Также здесь вы найдете описание программаторов и из другого семейства – АВР, но исключительно в сравнительных целях. Приступим к статье, где рассказывается, как сделать программатор-flash своими руками.

Для чего необходим программатор

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

Качественное устройство является очень важным, ведь в таком случае можно будет быть уверенным в том, что МК не выйдет из строя, или, что важнее, из строя не выйдет компьютер. Есть небольшое уточнение: программатор для PIC своими руками делают только те, у кого есть микроконтроллеры этого семейства. Другие из-за другой архитектуры могут не работать.

Но можно попробовать своими силами усовершенствовать представленные схемы и собрать программатор AVR своими руками.

Платные против самодельных

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

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

А в случае обнаружения неисправностей в самом начале периода эксплуатации его можно вернуть и получить взамен работоспособное устройство.

А вот с самодельными программаторами всегда немного сложнее. Дело в том, что даже если они и тестировались, то, как правило, в очень узком диапазоне используемой техники, поэтому вероятность того, что что-то пойдёт не так, высока.

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

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

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

Драйвера

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

Для тех, кому понравится вариант сборки, следует уточнить, что в качестве драйверного программного обеспечения использовалась программа IC-PROG. Можете попробовать работать и с другой, но уже на свой страх и риск. Это информация для тех, кто хочет создать программатор для AVR своими руками. Далее будет указано, для каких семейств микроконтроллеров РІС он рассчитан.

Если есть желание сделать программатор AVR своими руками или какой-то другой тип МК, то вы всегда можете попытаться.

Схема программатора

Вот тут уже можно попробовать сделать программатор для PIC своими руками. В качестве гнезда необходимо использовать разъем DB9. Можно сделать и USB-программатор своими руками, но для него понадобятся дополнительные элементы схемы, которые усложнят и без того довольно сложную плату.

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

Процесс сборки и использования программатора таков:

  1. Собрать сам программатор так, как написано на схемах. Просмотреть на наличие некачественной пайки, а также потенциальных мест замыкания. Программатор рассчитан на работу с напряжением 15-18В, больше категорически не рекомендуется.
  2. Подготовьте среду управления прошивкой (выше было упоминание одной программы, с которой программатор точно работает).

Процесс прошивки микроконтроллера

Процесс прошивки микроконтроллера данными можно считать продолжением предыдущего списка:

  1. Произвести необходимые для работы программы настройки.
  2. Установить микроконтроллер в программатор так, как отмечено на схеме. Лучше лишний раз убедиться, что всё так, как должно быть, чем ехать за новым МК.
  3. Подключить питание.
  4. Запустить выбранное программное обеспечения (для этого программатора ещё раз посоветуем IC-Prog).
  5. В выпадающем меню вверху справа выбрать, какой именно микроконтроллер следует прошить.
  6. Подготовленный файл выбрать для программирования. Для этого перейдите по пути “Файл” – “Открыть файл”. Смотрите, не перепутайте с «Открыть файл данных», это совсем другое, прошить микроконтроллер с помощью второй кнопки не получится.
  7. Нажать на кнопку «Начать программировать микросхему». Примерное время, через которое она будет запрограммирована – до 2 минут. Прерывать процесс программирования нельзя, это чревато выведением из строя микроконтроллера.
  8. И в качестве небольшого контроля нажмите на кнопку «Сравнить микросхему с буфером».

Не очень сложно, но эта последовательность действий позволяет получить качественный программатор, своими руками сделанный, для различных типов микроконтроллеров РІС.

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

Как уже выше упоминалось, этот программатор может работать как минимум с 98 моделями. Как можно заметить по схематическим рисункам и платам, он рассчитан на те МК, что имеют 8, 14, 18, 28 и 40 выводов.

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

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

Источник: https://www.syl.ru/article/210461/new_programmator-svoimi-rukami-programmator-dlya-pic-svoimi-rukami

Как я создавал Программатор PIC, AVR и микросхем памяти – первый опыт

Автор: Садовой А.В.

Материал взят с журнала РАДИО 2007, №10

Ну вот и настало то время, когда и мне пришлось взяться за изучение МК. К этому подвинула статья Автоматическое ЗУ на Atmega16A Тут и без всякого раздумья стало понятно, что нужно срочно собирать программатор. Листая журнал РАДИО, нашел приемлемую схему для себя. Ниже приводится описание с журнала.

   Предлагаемый программатор работает под управлением программы PonyProg [1], распространяемой бесплатно. Если ограничиться программированием МК PIC и микросхем памяти, можно воспользоваться также программами IC-Prog и WinPic800, распространяемыми на тех же условиях.

   Программирование 18-выводных МК PIC и 20-выводных AVR производится без каких-либо коммутаций. Достаточно установить МК в предназначенную для него панель и выбрать его тип в меню используемой программы. От установки панелей для всех МК этих семейств автор сознательно отказался, так как в любительской практике они используются редко.

При необходимости нужные панели можно установить дополнительно или подключать требующиеся для программирования выводы МК к предусмотренному в программаторе разъему. Этот же разъем используется при внутрисхемном программировании.

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

   До начала процесса программирования и по его завершении напряжение питания программируемой микросхемы отключено, что дает возможность безопасно установить микросхему в панель, а затем извлечь ее.
   Прежде чем рассматривать работу программатора подробно, вспомним некоторые особенности программирования МК семейств PIC и AVR.

Номера упоминаемых далее выводов МК различных можно найти в технической документации.
   Чтобы перевести в режим программирования МК семейств PIC, требуется подать на его вывод MCLR напряжение +12…14 В. Обмен информацией с устройством, управляющим программированием, происходит через двунаправленный вывод DATA.

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

Информация принимается через вывод MOSI, а передается через вывод MISO. Вход синхронизирующих импульсов – вывод SCK.
   Схема программатора изображена на рис. 1. Ее наиболее существенное отличие от прототипа [1] заключается в использовании для связи с COM-портом компьютера микросхемы МАХ232СРЕ (DA2) – специализированного преобразователя уровней RS232 – ТТЛ. Это позволило выполнить все требования по уровням передаваемых сигналов и нагрузочной способности линий порта и значительно улучшило надежность работы устройства.

   Чтобы излишне не нагружать COM-порт, предусмотрено питание программатора и программируемой микросхемы только от внешнего источника. Его постоянное напряжение (15 В) или переменное (10…12 В) напряжение поступает в программатор через диодный мост VD1, служащий выпрямителем переменного напряжения или приводящий постоянное к правильной полярности.

   Интегральный стабилизатор DA1 питает напряжением 5 В преобразователь уровней DA2. Светодиод HL1 сигнализирует о включении питания. Стабилизатор DA3 на 12 В – управляемый. Он включен при высоком логическом уровне напряжения на управляющем входе 4 и выключен при низком уровне.

Это свойство использовано для управления напряжением, переводящим МК семейства PIC в режим программирования, и напряжением питания программируемой микросхемы, которое получают из 12 В с помощью интегрального стабилизатора DA4. О включенном питании программируемой микросхемы сигнализирует светодиод HL2.

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

Устанавливать конденсатор С7 слишком маленькой емкости или вовсе отказаться от него нельзя – это приведет к самовозбуждению стабилизатора и сделает программирование невозможным.
   Диод VD2 ограничивает до безопасного значения отрицательное напряжение, которое может поступить на управляющий вход стабилизатора DA3 с контакта 3 разъема XS1 (линии TXD COM-порта).

Узел на транзисторе VT2 формирует сигнала RESET для МК семейства AVR.
   Узел на транзисторах VT1 и VT3 разделяет имеющуюся в МК семейства PIC двунаправленную линию DATA на две однонаправленных для компьютера. Под названиями MOSI и MISO эти же однонаправленные линии используются при программировании МК семейства AVR.

   Для аналогичного преобразования в [1] был применен логический инвертор на одном транзисторе. Однако его практическое использование выявило довольно большое число сбоев, причина которых, по мнению автора, – недостаточная задержка информационного сигнала на линии DATA относительно синхронизирующего на линии CLOCK.

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

   Используя для управления программированием программу PonyProg, следует выбрать в соответствующем ее окне программатор «SI Prog I/O» и задать инверсию сигналов в соответствии с табл. 1. Программа WinPic при работе в ОС windows XP позволяет программировать только МК семейства PIC и микросхем памяти. Однако в ОС Windows 98 МК этой программой не программируются. С программой IC-Prog ситуация обратная. При настройке обеих программ должен быть выбран программатор “JDM Programmer”. Инверсию сигналов задают в соответствии с табл. 2. (для WinPic) и табл. 3. (для IC-Prog).

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

В списке программы PonyProg имеется лишь PIC16F628 на экране монитора появляется сообщение «Неизвестный тип микроконтроллера». Даже если проигнорировать это сообщение, попытки не только запрограммировать, но и просто прочитать содержимое памяти МК положительного результата не дают.

Однако в списках программ WinPic800 и IC-Prog нужный МК есть, его программирование с помощью этих программ выполняется без замечаний.

ЛИТЕРАТУРА

1. Lanconelly C. PonyProg – serial device programmer 
2. Gijzen B. IC-Prog Prototype Programmer 
3. Font S. Software for PIC programming Windows 95/98/NT/2000/ME/XP compatible 

Все ясно и понятно как “божий день”, остается за малым, а может быть не малым, воплотить все дела паяльником. Далее привожу фото-обзор как я создавал программатор:

Разметил размер будущей платы, использую так называемые “макетные платы” , как то еще не приспособился к печатным платам, поэтому пользуюсь макетками.

При сборке предыдущей статьи Светодинамическое устройство “LED-подарок девушке” как то подумал “а что если покрасить плату в черный цвет?” смотрится креативненько))) плату покрасил и в этот раз.

Вот и собрал. В отличии от оргинала, не стал впаивать панельки под МК, а впаял разъем в виде “штырьков” без понятия как они называются правильно))) Разъем для подключения адаптера с переменкой 15 В использовал от модема TP-Link и выключатель питания от него же. Диодный мост взял КЦ407.

Подписал разъем

Настало время проверить. Установил прогу PonyProg, запустил ее, появилось окно в котором требуется “…произвести калибровку”. Жмем “Yes” 

“Калибровка завершена”

“Настройка платы программатора” находится в верхнем меню “Установка”. Жмем “Проверка” если все нормально, то появится окошко “Тест Ок”

Теперь можно записывать или считывать прошивку с МК или микросхем памяти. Как раз на работу принесли усилок фирмы BBK вот понадобилось проверить микруху памяти 24С02.

Подключил микруху к соответствующим выводам на разъеме, подключил программатор к COM-порту компа, включил питание, считал/записал прошивку вот и все. Так же проверил микруху 24С04 все работает. МК PIC и AVR еще не проверял, но т.к.

нужно потихоньку собирать ЗУ на Atmega16A скоро будем “шить” )))

Источник: http://shemu.ru/cifrovueshemu/371-izgotovlenie-pr

Простой программатор для программирования микроконтроллеров AVR через COM порт

На сегодня существует множество программаторов AVR микроконтроллеров подобного типа, но что мне не нравится, слишком много “рассыпухи” (дискретных элементов ), в то время, когда существуют специализированные микросхемы у которых всё уже есть внутри.

Выбор мой пал на микросхему GD75232, часть элементов которой, при соответствующем включении я задействовал для данного программатора.Обязательно 10-я и 11 ножки микросхемы должны соединяться с землёй.(общим проводом)

{ads1}

Эта микросхема стоит на материнских платах, её роль – как раз согласование сигналов внешних устройств с COM портом. На иллюстрации из даташита видно, какие элементы как подсоединены, (не стану расписывать, что как и зачем, об этом можно прочитать в описании микросхемы). Я её специально не покупал, а снял с “убитой” материнки.

Печатную плату не привожу, так как отрезал ножницами по металлу кусок платы вместе с микросхемой, в итоге размеры платы получились 20х30 мм, проводники припаял к 3-м разъёмам

1- питание +5в

2- разъём com порта

3- разъём ISP для программирования

Использовать программатор можно с известной программой Pony Prog, в установках выбрать интерфейс (Serial, COM1) для COM-порта и любой из 3-х видов интерфейсов , которые там перечисляются, без разницы, работает со всеми (JDM API, SI Prog I/0, Si Prog API), картинки это поясняют. Остальные установки в настройке порта остаются в программе по умолчанию.

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

{ads1}

Схема проверена и испытана.

Буфферизация

Простые программаторы эффективны пока речь идёт о программировании микроконтроллеров либо в DIP корпусе (удобно, когда можно микросхему вынуть из панельки на рабочей плате и воткнуть в панельку на программаторе, а потом, запрограммировав, поставить на место), либо когда на рабочей плате выводы микроконтроллеров не сильно нагружены внешними элементами схемы.

Есть отработанные хорошие схемы простых программаторов с буфферизированными шинами типа STK200 / 300, собраные на микросхемах серии 244, 245, но они предназначены для подключения к LPT порту, который в последнее время уже редкость на современных материнских платах. Теперь чаще встречаются лишь USB и COM порты, а программаторы USB более сложны для начинающих радиолюбителей в повторении.

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

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

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

Из личного опыта скажу, что этими недостатками страдают многие широко известные простые программаторы, например на 5-ти резисторах, или известная схема на транзисторе, резисторах и стабилитронах: при повышенной нагрузке на шинах программатора начинаются проблемы. Для того, чтобы не делать новый программатор, есть простой путь улучшить нагрузочные характеристики программатора – это буфферизировать уже имеющиеся шины для сигналов, всего лишь добавив ещё одну микросхему.

В данном случае я взял, что у меня было под руками – микросхему 561ПУ4 (или можно её западный аналог CD4050).

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

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

Подсоединив к нашему программатору такое дополнение между выводами программатора и разъёмом для программирования, мы получим устройство с повышенной нагрузочной способностью. У нас три сигнала с СОМ порта работают на приём, и один сигнал (MISO) работает на передачу.

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

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

Рекомендую всем обладателям простых программаторов доработать имеющуюся у вас схему таким же образом, если при программировании вы сталкивались с подобными проблемами, добавив микросхему буффера ,не обязательно эту, можно использовать и другие подобные по функциональным свойствам микросхемы типа 74HC125, 74HC126 на базе этих микросхем,можно переводить выходы программатора вообще в высокоимпедансное состояние,что позволит не отключать разъём ICSP от платы ,особенно это удобно при работе с макетной платой, вариаций применения моего программатора в качестве базового модуля очень много,это и программирование микросхем типа 24Схх 93Схх а так же для программирования PIC контроллеров, но эту тему я возможно разовью чуть позже в данной статье.

Z – состояние шин на выходе

Лучшее- враг хорошему (с).

Всё вроде работает,но стоит добавить в схему ,что либо ещё,как она из маленькой превращается в “монстра”, а что делать? Иногда в процессе отладки приходится идти на это ради комфорта в работе , ведь порой по нескольку десятков раз надо втыкать разъём ICSP повторно перепрограммируя микроконтроллер, так это занятие надоедает порой, а если оставить программатор постоянно подключенным,к схеме ,то схема программатора будет влиять на работу устройства , но есть решение о котором я упоминал выше, это перевести состояние шин в высокоимпедансное – Z состояние , тогда схема программатора может быть подключена сколь угодно долго и не будет теперь шунтировать шины микроконтроллера ,ради такого случая нашёл эту микросхему и использовал её в качестве буффера .Осуществлять эту процедуру мы будем посредством кнопки S1 которая при замыкании будет переводить выходы программатора в рабочий режим, программирования подсоединяя его сигналы к схеме. На момент программирования, надо кнопку удерживать в нажатом состоянии,а после того, как процедура программирования пройдёт успешно ,отпустить.При разомкнутом состоянии кнопки выходы программатора переводятся в состояние Z

Из даташита 74HC125 ,по схеме и таблице истинности видно ,что если подать на выводы А “единицу” схема переводит выходы в высокоимпедансное состояние ( фактически вообще отключается от нагрузки) и вдобавок у этой микросхемы ещё большая нагрузочная способность ,чем у микросхемы,которую я выбрал в качестве буффера в предыдущей схеме..

в общем на ваш суд выкладываю очередную схему,и сопровождающие картинки к ней.

Владимир Науменко

г. Калининград.

Источник: https://simple-devices.ru/prj/9-electr/145-simple-avr-isp-programmator

Программатор PIC, AVR и микросхем памяти на базе Extra-PIC

В этой статье я хочу рассказать, какую схему программатора я выбрал себе для изготовления. Временный программатор у меня уже был, в общем-то, работал, только был очень не удобен в работе. Это была схема из журнала “Радио” подключаемая к LPT порту компьютера.

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

Ну и теперь естественно возникло желание собрать программатор посерьезнее.

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

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

И поэтому хотелось мне, чтобы программатор был универсальный, чтобы и микроконтроллеры AVR можно было прошивать.

В общем, склонился я в сторону программатора Extra-PIC, хотя правильнее было бы называть его адаптером. Схема проверенная и хорошо себя зарекомендовавшая. К тому же уже придумали, как дополнить его формирователями сигналов для прошивки AVR.

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

В итоге получилась вот такая схема.

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

На основном блоке имеются разъемы (панельки) для программирования не всех типов микроконтроллеров. Разъем XS4 предназначен для 18 – выводных микроконтроллеров серии PIC16F62x и PIC16F84.

Разъем XS3 используется как для 8 – выводных микроконтроллеров серии PIC12F6xx, так и для 14 – выводных серии PIC16F6xx. Последние надо вставлять так чтобы остались висеть в воздухе выводы 5 – 10. Как раз для этого пустое место на плате оставлено.

Разъем XS2 предназначен для микросхем памяти серии 24Cxx. Недостающие панельки размещены на сменном модуле.

Сменный модуль подключается к разъему XS5, на который заведены сигналы для прошивки PIC и AVR.

Так же к этому разъему можно подключать шлейф (ICSP) для прошивки микроконтроллеров в составе отладочной платы или уже готового изделия. Разъем XS1 предназначен для соединения адаптера с COM – портом компьютера.

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

Один сменный модуль мне уже пришлось изготовить. Имел дело с микроконтроллером PIC16F876. На сменном модуле, как и на основном блоке, применил как резисторы формирующие цепь PGM, так и конденсаторы, подключаемые к выводу OSC1, для надежной блокировки тактового генератора микроконтроллеров. Шлейф состоит из стандартной вилки DB9M на одном конце и самодельной вилки на другом конце.

Самодельная вилка это плата из текстолита с припаянными штырьками из медного провода диаметром 0.6 мм и дополнительными конденсаторами C1, C2. Расстояние между штырьками нужно выдерживать точно с шагом 2.54мм потому как ответный разъем это фрагмент панельки с цанговым зажимом. Штырьки можно применить готовые, в магазинах сейчас этого добра хватает.

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

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

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

На фото видно, как нужно припаивать, разъем XS5.

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

Еще есть замечание по работе с адаптером. Его нужно отключать от COM – порта компьютера, если он долго не используется. Может выйти из строя микросхема MAX232. У меня уже одна сгорела, и я считаю именно по этой причине.

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

Хотя конечно может я и не прав в своем предположении на счет MAX232.

Ну и в заключении еще раз про выбор программатора. Конечно COM – порт сейчас все реже устанавливают на компьютерах. На ноутбуках он вообще пропал. Использовать переходник USB –COM тоже не получается. Судя по публикациям в интернете, через переходник Extra-PIC не работает.

Я не пробовал, но верю, что это именно так. И не смотря на это, я надеюсь еще долго использовать свой адаптер. Даже если, не дай Бог, у меня выйдет из строя материнка на десктопном компьютере.

Даже если мне не удастся найти новую с COM – портом, можно купить IDE – плату формирователь полноценных COM – портов.

Конечно, USB программаторы удобны тем, что ими можно прошивать микроконтроллеры прямо из MPLAB. Так и это не проблема, меня и IC-prog вполне устраивает. И набор микроконтроллеров, с которыми она может работать, очень обширен.

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

Об этом я собирался написать во второй части статьи.

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

Печатные платы в формате Sprint Layout 4.0

Источник: http://naladchikkip.ru/programmator-pic-avr-i-mikroskhem-pamyati-na-baze-extra-pic

Программатор для PIC, AVR и микросхем памяти

Статьи » Микроконтроллеры (разное) » Программатор для PIC, AVR и микросхем памяти

Данный программатор работает под управлением программы PonyProg и распространяется бесплатно. Если ограничится программированием МК PIC и микросхем памяти то можно воспользоваться так же программами IC – Prog и  WinPic800.

Программирование 18 выводных МК PIC и 20 выводных AVR производится без какой либо коммутации. Достаточно установить МК в предназначенную для него панель и выбрать в меню программы его тип.

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

Кроме МК устройство позволяет программировать микросхемы памяти с последовательным интерфейсом.  Для подобных микросхем с интерфейсом I²C в программаторе предусмотрена панель.

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

Что бы перейти в режим программирования МК семейства PIC, требуется подать на его вывод MCLR напряжение +12…14В. Обмен информацией с устройством, управляющий программатором, происходит через двух-направленный вывод DATA. Синхронизирующие обмен импульсы поступают на вывод CLOCK.

МК семейства AVR повышенного напряжения не требуют. Они переходят в режим программирования при низком логическом уровне на выводе RESET. При этом необходимо, чтобы к соответствующим выводам МК был подключен кварцевый резонатор. Информация принимается через вывод MOSI, а передается через MISO. Вход синхронизирующих импульсов – вывод SCK.

Схема программатора показана на рис1. Ее отличие от других программаторов заключено в использовании для связи с СОМ – портом компьютера микросхемы МАХ232СРЕ (DA2) – специального преобразователя уровней RS232-ТТЛ.

Что бы излишне не нагружать СОМ порт, предусмотрено питание программатора от внешнего источника. Постоянное 15В ( переменное 10…12 поступающее через диодный мост VD1.)

Интегральный стабилизатор DA1 питает напряжением 5В преобразователь уровня DA2. Светодиод HL1 сигнализирует о включении питания. Стабилизатор DA3 на 12В – управляемый. Он включен при высоком логическом уровне напряжения на управляющем входе 4 и выключен при низком уровне.

Это свойство использовано для управления напряжением, переводящим МК PIC в режим программирования, и напряжением питания программируемой микросхемы, которое получают из 12В с помощью интегрального стабилизатора DA4. О включенном питании программируемой микросхемы сигнализирует светодиод HL2.

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

Диод VD2 ограничивает до безопасного уровня значение отрицательного напряжения, которое может поступить на управляющий вход стабилизатора DA3 с контакта 3 разъема XS1. Узел на VT2 формирует сигнал RESET для МК AVR.

Узел на VT1  VT3 разделяет имеющуюся в МК PIC двунаправленную линию DATA на две однонаправленных для компьютера. Под названиями MOSI  MISO эти же однонаправленные линии используются при программировании МК семейства AVR.

Программатор собран на макетной плате рис2. Монтаж навесной. На плате установлены всего три панели для микросхем (XS2-XS4). Светодиоды HL1 HL2 должны иметь разный цвет свечения.

Используя для управления программирования программу PonyProg, следует выбрать в соответствии окна SI Prog IO и задать инверсию сигналов в соответствии с табл 1.

Табл1

   Сейчас без микроконтроллеров не обходится ни одна серьёзная конструкция. Где-то ставят ПИК, где-то АВР. И для работы с ними нужен программатор. А чтоб не делать несколько разных – соберите один для различных типов МК. Предлагаю вашему вниманию универсальный программатор EXTRA-PIC v3.2, с возможностью программирования как PIC, так и AVR контроллеров.

   С помощью EXTRA-PIC+ можно программировать следующие чипы: 

  • 10F серии: PIC10F206 PIC10F204 PIC10F202 PIC10F200 
  • 12F серии: PIC12F683 PIC12F675 PIC12F635 PIC12F635 PIC12F629 PIC12F510 PIC12F509 PIC12F508 
  • 16F/С серии: PIC16F627 PIC16F627A PIC16F628 PIC16F628A PIC16F630 PIC16F636 PIC16F639 PIC16F648A PIC16F676 PIC16F684 PIC16F685 PIC16F687 PIC16F688 PIC16F689 PIC16F690 PIC16F73 PIC16F74 PIC16F76 PIC16F77 PIC16F716 PIC16F737 PIC16F747 PIC16F767 PIC16F777 PIC16F83 PIC16F84 PIC16F84A PIC16F87 PIC16F88 PIC16F818 PIC16F819 PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F873A PIC16F874 PIC16F874A PIC16F876 PIC16F876A PIC16F877 PIC16F877A PIC16C61 PIC16C62 PIC16C62A/B PIC16C63 PIC16C63A PIC16C64 PIC16C64A PIC16C65 PIC16C65A/B PIC16C66 PIC16C67 PIC16C620/A PIC16C621/A PIC16C622/A PIC16CE623 PIC16CE624 PIC16CE625 PIC16C71 PIC16C72 PIC16C72A PIC16C73 PIC16C73A/B PIC16C74 PIC16C74A/B PIC16C76 PIC16C77 PIC16C710 PIC16C711 PIC16C712 PIC16C716 PIC16C745 PIC16C765 PIC16C773 PIC16C774 PIC16C923 PIC16C924 PIC16C925 PIC16C926 
  • 18F серии: PIC18F1220 PIC18F2220 PIC18F2320 PIC18F2331 PIC18F2410 PIC18F242-2439 PIC18F2420 PIC18F2431 PIC18F2455 PIC18F248 PIC18F2480 PIC18F2510 PIC18F2515 PIC18F252-2539 PIC18F2520 PIC18F2525 PIC18F2550 PIC18F258 PIC18F2580 PIC18F2585 PIC18F2610 PIC18F2620 PIC18F2680 PIC18F4220 PIC18F4320 PIC18F4331 PIC18F4410 PIC18F442-4439 PIC18F4420 PIC18F4431 PIC18F4455 PIC18F448 PIC18F4480 PIC18F4510 PIC18F4515 PIC18F452-4539 PIC18F4520 PIC18F4525 PIC18F4550 PIC18F458 PIC18F4580 PIC18F4585 PIC18F4610 PIC18F4620 PIC18F4680 
  • EEPROM 24C серии: 24C512 24C256 24C128 24C64 24C32 24C16 24C08 24C04 24C02 24C01
  • EEPROM 93хх серии

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

Схема универсального программатора

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

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

J3 – положение: 1-2 – режим первого программирования, 2-3 – режим повторного программирования (если первый выдает ошибки). Контактные штырьки J4 переключение между MISO и MOSI. Десятипиновый разъем предназначен для подключения адаптеров.

   Для использования универсального программатора EXTRA-PIC+ нужен софт, например давно обсуждаемые на нашем форуме IC-PROG, WinPic800 или PonyProg. Печатная плата в формате *.lay. прилагается. Проект испытал и представил для публикации на radioskot.ru – ГУБЕРНАТОР.

   Форум по МК

Инверсия сигнала Микросхема
ResetSCLKD-IND-OUT PICНетДаДанет AVRНетДаДада EEPROMНетДаДада

Инверсию сигналов для WinPic табл2 а для IC-Prog табл3

Табл2

Инверсия сигнала Микросхема
ResetSCLKD-IND-OUT PICНетДаДанет AVRНетДаДада EEPROMНетДаДада

Табл3

Инверсия сигнала микросхема
PIC EEPROM
Data OUTData InCLOSKMCLRVcc ДаДаДаНетнет ДаДаДаДанет

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

Например PIC16F682A PonyProg есть, а PIC16F682 нет, но зато она есть в WinPic800 и IC-Prog.

Литература – Радио 10-2007

Источник: http://rcl-radio.ru/?p=4205

Как сделать свой вариант JDM-программатора для PIC-контроллеров

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

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

Для начала давайте нарисуем просто структурную схему всей нашей цепочки, которая по ходу наших изысканий будет прорисовываться всё более и более детально и в конце концов останется только воплотить её в электрическую схему программатора.
Что на нашей структурной схеме представляет собой компьютер (что нам от него надо, применительно к нашей задаче)? В нашем случае компьютер — это программа + порт с которым она работает. Большинство программ для программирования контроллеров могут работать с разными портами и программаторами, и в зависимости от выбранного типа программатора будут использоваться разные порты и ноги порта. Обычно, в программе можно посмотреть какие ноги порта для чего используются. На рисунке слева показано как это выглядит, например, в программе WinPic800.Поскольку мы хотим собрать схему, которая управляется как JDM-программатор, то в программе мы выбрали тип программатора JDM. Мы видим, что для программирования будет использоваться COM-порт, причём у этого порта будут использоваться следующие ноги: выход DTR — для посылки данных в контроллер, вход CTS — для приёма данных от контроллера, выход RTS — для тактирования, выход TXD — для управления питанием. Кроме того (этого нет в WinPIC800, но я это знаю, и поэтому скажу вам), некоторые программы для распознавания подключения программатора используют вход DSR, на который возвращают сигнал тактирования. Хотя многим программам вход DSR по барабану, но некоторые скажут, что программатор не подключен и откажутся программировать контроллер.

Отлично, с учётом этой информации, наша структурная схема будет выглядеть так:

Что ещё мы знаем про COM-порт? Мы знаем, что уровни сигналов на этом порту могут составлять до ±15В, обычно у живого порта составляют ±10В и могут быть значительно занижены вследствие различных причин.

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

То есть входной сигнал не обязательно должен быть ±10В (конечно если всё делать по правилам, то нужно ±10В, но тогда придётся где-то взять напряжение отрицательной полярности). Ток выхода должен быть не более 20 мА, чтобы не спалить порт. Вход порта — высокоомный, поэтому входной ток очень незначительный.

Переходим к контроллеру. Для программирования контроллера используется 2 линии: DATA и CLOCK.

Во-первых, контроллер работает с TTL уровнями сигналов: “1” — это +5В, а “0” — это 0В. То есть программатор должен преобразовывать уровни сигналов ±10В в 0,+5В.

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

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

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

В-третьих, для программирования контроллеру необходимы: напряжение питания Vdd = +5В и напряжение программирования Vpp = +12,5В. Где вы их возьмёте — решать вам. Сможете организовать питание от порта, не перегрузив его при этом — хорошо, не сможете — подведите внешнее питание.

В-четвёртых, программатор должен обеспечить правильный алгоритм подачи напряжений для перехода в режим программирования. (Подобные алгоритмы для пик-контроллеров можно найти здесь).

Пока этих шагов не сделано — на линиях DATA и CLOCK должен быть низкий уровень.

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

С учётом всего сказанного выше, окончательно структурная схема будет выглядеть так:

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

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

Пугаться не надо, на самом деле структурная схема на картинке выглядит страшнее, чем всё это в реальности, например, простейшая схема развязки — это всего лишь резисторы на линиях DATAOUT и CLOCK.

Аналогично можно изготовить свои варианты схем для других типов программаторов и для других контроллеров. Естественно, всё это будет работать только в том случае, если весь процесс основан на управлении непосредственно выводами порта.

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

Схемы различных программаторов для PIC-ов, AVR-ов, микросхем памяти…

Источник: http://radiohlam.ru/?p=958

Как сделать простой программатор для PIC-ов и AVR-ов

Характеристики

Программирование PIC-ов

Программирование AVR-ов

Структура конфигурационных файлов

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

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

Программатор характеризуется тем, что:

Испытан под Windows 98, Windows Me, Windows 2000 c процессорами Celeron, AMD Duron, AMD Athlon T, Pentium III до частоты 1000 МГц

Программирование ведется через порт RS232

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

Программирует микроконтроллеры семейства PIC (отладка производилась на PIC16F84 и PIC16F877) по последовательному протоколу и микроконтроллеры семейства AVR (отладка производилась на AT90S8535)

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

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

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

Позволяет индивидуально программировать различные области чипа (память программ, память данных, биты опций, биты защиты)

Рис.1. Окно програмной оболочки

Программирование PIC-ов

Рис.1. Схема программатора PIC-ов

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

Программирование AVR-ов

Рис.2. Схема программирования AVR-ов

Здесь показан способ как организовать программирование AT90S8535 прямо на плате с помощью RS232 и небольшого аппаратного дополнения.

Микросхема DD1 служит для изоляции сигналов программирования от чипа в режиме работы. Разводка микросхемы показана в колодке c расположением контактов типа PGA44.

Испытания показали, что большинство микросхем AT90S8535 и AT90S8515 можно программировать при частоте кварца 11,0592 МГц.

Структура конфигурационных файлов

Конфигурационные файлы имеют расширение chp и должны находиться в директории программы.

Программа при запуске производит поиск в своей директории всех конфигурационных файлов и их объединение во внутреннем буфере. Идея таких файлов взята из программатора ComPic и немного изменена.

Каждому чипу соответствует своя секция. Возможность наследования свойств не предусмотренна, так как это ухудшает прозрачность описания.

Пример структуры конфигурационного файла для PIC16F84

[Chip PIC16F84_ICP] Секция чипа c уникальным названием чипа
Level1=MicroChip
Level2=PIC
ItemCaption=PIC16F84
InitClass=TfrmMICROCHIP_PIC_ICP
Здесь идет определение программируемых областей, в пунктах Content разные параметры отделяются символом “|”
Area_1_Content= Code | 0..3FFh (1KW)
Area_1_data=CODE, 0, $3FF, 14
Area_2_Content=EEPROM | 0..3Fh (64B) Area_2_Data=EEPROM,0,$3F,8 Area_3_Content=Configuration word | CP, PWRTE, WDTE, FOSC Area_3_Data=CONFIG,$2007,$2007,14 Area_4_Content=ID Locations | 2000H-2003H Area_4_Data=ID,$2000,$2003,8
Здесь идет определение установок для некоторых областей программирования определенных выше
Param_1_Content=CP | CP | CONFIG Определение установки с названием CP, с уникальным идентификатором CP из области CONFIG. По умолчанию установка принимает значение с номером 1 в суффиксе идентификатора
Описание возможных значений установки
Param_1_Choice1=1 – Code protection OFF Название 1-го значения установки CP
Param_1_Choice1_icon=4 Номер во внутреннем списке отображаемой иконы для 1-го значения
Param_1_Choice1_data=1111111111xxxx маска 1-го значения
Param_1_Choice2=0 – Code protection ON Param_1_Choice2_icon=3 Param_1_Choice2_data=0000000000xxxx   Описание 2-го значения установк
Param_2_Content=PWRTE | PWRTE | CONFIG Param_2_Choice1=1 – Power up timer disabled Param_2_Choice1_icon=2 Param_2_Choice1_data=xxxxxxxxxx1xxx Param_2_Choice2=0 – Power up timer enabled Param_2_Choice2_icon=1 Param_2_Choice2_data=xxxxxxxxxx0xxx   Описание следующей установки и ее значений   Описание следующей установки и ее значений
Param_3_Content=WDTE | WDTE | CONFIG Param_3_Choice1=1 – WDT enabled Param_3_Choice1_icon=1 Param_3_Choice1_data=xxxxxxxxxxx1xx Param_3_Choice2=0 – WDT disabled Param_3_Choice2_icon=2 Param_3_Choice2_data=xxxxxxxxxxx0xx   Param_4_Content=Oscilator | FOSC | CONFIG Param_4_Choice1=RC oscillator (11) Param_4_Choice1_icon=8 Param_4_Choice1_data=xxxxxxxxxxxx11 Param_4_Choice2=HS oscillator (10) Param_4_Choice2_icon=8 Param_4_Choice2_data=xxxxxxxxxxxx10 Param_4_Choice3=XT oscillator (01) Param_4_Choice3_icon=8 Param_4_Choice3_data=xxxxxxxxxxxx01 Param_4_Choice4=LP oscillator (00) Param_4_Choice4_icon=8 Param_4_Choice4_data=xxxxxxxxxxxx00   Param_5_Content=ID | ID | ID Param_5_Choice1=0000 и т.д. для всех необходимых установок

Источник: http://lektsia.info/4x46b4.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}