Программирование avr микроконтроллеров

Программирование микроконтроллеров для начинающих

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

Введение в микроконтроллеры

Это миниатюрные компьютеры, все составляющие которых (процессор, ОЗУ, ПЗУ) располагаются на одном кристалле. От микропроцессоров их отличает наличие таймеров, контроллеров, компараторов и других периферийных устройств. В настоящее время микроконтроллеры используются при производстве:

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

Управление осуществляется при помощи специальных программ.

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

  • встраиваемые;
  • 8-, 16- и 32-разрядные;
  • цифровые сигнальные процессоры.

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

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

Цифровые сигнальные процессоры способны обрабатывать в реальном времени большие потоки данных. Однако их стоимость намного выше.

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

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

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

Для этого используют внешние сигналы либо встроенные периферийные устройства.

Семейства микроконтроллеров

Чаще всего встречаются микроконтроллеры следующих семейств:

  • MSP430 (TI);
  • ARM (ARM Limited);
  • MCS 51 (INTEL);
  • STMB (STMicroelectronics);
  • PIC (Microchip);
  • AVR (Atmel);
  • RL78 (Renesas Electronics).

Одной из наиболее популярных в электронной промышленности является продукция компании Atmel, построенная на базе RISC-ядра. Первые микросхемы, разработанные в 1995 году, относятся к группе Classic. Изучать программирование микроконтроллеров AVR для начинающих желательно на более современных моделях:

  • Mega — семейство мощных микросхем с развитой архитектурой.
  • Tiny — недорогие изделия, имеющие восемь выводов.

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

Изделия компании «Атмел» просты и понятны. Однако для использования всего функционала придется разработать программное обеспечение.

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

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

Комплекс «Атмел Студио» включает огромное количество примеров готовых проектов. Это поможет новичку быстрее освоить базовые возможности и начать создавать собственные программы. В нем также имеются модули для компиляции и окончательной отладки кода. Параллельно с его освоением нужно изучать языки программирования. Без них разработать программное обеспечение невозможно.

Языки программирования

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

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

На самом деле, можно использовать практически любые языки программирования микроконтроллеров. Но популярнее всех С/С++. Это язык высокого уровня, позволяющий работать с максимальным комфортом. Более того, в разработке архитектуры AVR принимали участие создатели Си. Поэтому микросхемы производства «Атмел» адаптированы именно к этому языку.

С/С++ — это гармоничное сочетание низкоуровневых и высокоуровневых возможностей. Поэтому в код можно внедрить вставки на Ассемблере. Готовый программный продукт легко читается и модифицируется.

Скорость разработки достаточно высокая. При этом доскональное изучение архитектуры МК и системы команд ЦП не требуется.

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

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

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

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

Микроконтроллеры PIC

Первые микроконтроллеры PIC появились во второй половине прошлого века. Быстрые 8-разрядные микросхемы компании Microchip мгновенно завоевали популярность. Двухшинная гарвардская архитектура обеспечивает беспрецедентную скорость. Ее разрабатывали на основе набора регистров, для которого характерно разделение шин.

Выбирая язык программирования микроконтроллеров PIC, необходимо учитывать, что в основе микросхем семейства лежит уникальная конструкция RISC-процессора. Симметричная система команд позволяет произвольно выбирать метод адресации, выполнять операции в любом регистре. На данный момент компания «Микрочип» выпускает 5 разновидностей МК, которые совместимы по программному коду:

  1. PIC18CXXX (75 команд, встроенный аппаратный стек);
  2. PIC17CXXX (58 команд 16-разрядного формата);
  3. PIC16CXXX (35 команд, большой набор периферийных устройств);
  4. PIC16C5X (33 команды 12-разрядного формата, корпуса с 18–28 выводами);
  5. PIC12CXXX (версии с 35 и 33 командами, интегрированный генератор).

В большинстве случаев МК PIC имеют однократно программируемую память. Встречаются более дорогие модели с Flash или ультрафиолетовым стиранием. Ассортимент из 500 наименований позволяет подобрать изделие для любой задачи. Сейчас производитель концентрирует усилия на развитии 32-разрядных версий с увеличенным объемом памяти.

Языки программирования микроконтроллеров PIC — это Ассемблер и Си. Для кодирования подходят любые интегрированные среды разработки (IDE). Программировать с их помощью очень удобно.

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

Ее созданием занималась компания Microchip.

Перед началом работы в MPLAB советуем каждый раз заводить отдельную папку. Это нужно, чтобы не запутаться в файлах проектов. Интерфейс программы интуитивно понятный, и трудностей с ним возникнуть не должно. Для отладки используются фирменные отладчики Pickit, ICD, REAL ICE, IC PROG. В них имеется возможность просмотра содержимого памяти, установки контрольных точек.

Больше интересного ↓

Источник: https://ArduinoPlus.ru/programmirovanie-mikrokontrollerov-dlya-nachinayuschih/

Программирование микроконтроллеров avr Урок 5

5 лет назад

http://www.pcbway.com – PCBWay изготовление печатных плат. Программирование avr микроконтроллеров для начинающих.Тема урока: что такое байт, бит, системы исчисления.

Программирование микроконтроллеров avr Поддержите проект: лайк и подписка будут лучшим стимулом развиваться! Все для программирования в Китае – http://alipromo.

com/redirect/cpa/o/o2f55mw9pfbzznpf4v1ahi3bs12nsv4p/ Плейлист http://www.youtube.com/playlist?list=PLygUYOEl6XIpFyd-1n6O2RYCqLisJl-W6

5 лет назад

http://www.pcbway.com – PCBWay изготовление печатных плат. Программирование микроконтроллеров avr для начинающих в среде Atmel Studio.Тема урока: Таймер Т0 нормальный режим и сброс при совпадении в Atmega 16.

Данные уроки нацелены на аудиторию начинающих программировать контроллеры avr фирмы Atmel. Уроки помогут разобраться с внутренней периферией микроконтроллера Atmega 16. Все примеры рассмотрены в программе Atmel Studio. Плейлист http://www.youtube.

com/playlist?list=PLygUYOEl6XIpFyd-1n6O2RYCqLisJl-W6

7 лет назад

Official Page with More Information: http://newbiehack.com/UnderstandingButtonDebouncing.aspx This is the ninth in a video series aimed to give a tutorial on the popular Atmel AVR Atmega32 microcontroller. In this video a we investigate the effects of button debouncing using two LEDs and toggling these LEDs back and forth. Equipment that I use to make videos: Canon EOS Rebel: http://amzn.

to/2rJSeh0 Macro Lens: http://amzn.to/2qaSKmK Microphone: http://amzn.to/2qO2RB4 3D Mouse to rotate/zoom/move the object (Must have for CAD!!!): http://amzn.to/2ruFnSn The drafting pencil I use on these videos: http://amzn.to/2qioYg2 The cheap oscilloscope that I use (because it's cheap and will work all of the projects in these tutorials): http://amzn.

to/2rSHnBa A better oscilloscope and the one I would recommend: http://amzn.to/2qizK5M The brand of multimeter that I use and the one I recommend: http://amzn.to/2qicUez Want to have your own Patreon campaign? https://patreon.com/invite/wpllxz -~-~~-~~~-~~-~- Please watch: “51. How to Add Interrupts for the ADC – ARM Microcontroller Part 2 – ARM STM32 Microcontroller” https://www.youtube.

com/watch?v=YLqLLMHtDoc -~-~~-~~~-~~-~-

2 лет назад

Описана функциональная схема портов ввода-вывода контроллера. Имеется 2 режима работы: ввод и вывод. Для операций ввода-вывода логических сигналов можно использовать все контакты кроме подводящих питание.

Эти контакты разбиваются на группы по 8. Управление каждой такой группой выполняется тремя портами: ввода, направления и вывода.Показано, как оно реализовано. Приведены простейшие команды ассемблера для этого.

Список всех лекций на сайте автора в описании канала.

3 лет назад

http://www.pcbway.com – PCBWay изготовление печатных плат. Урок 1 символьный LCD дисплей он же жк индикатор. Рассмотрим как подключить lcd дисплей к микроконтроллеру и разберем протокол обмена между микроконтроллером и индикатором.

Начинающие в основном используют готовые библиотеки для работы с lcd-индикатором и, конечно же, понятия не имеют, как организован протокол обмена между микроконтроллером и индикатором. А ведь, зная это, можно самому создать программу не хуже, а то и лучше. Все для программирования – http://alipromo.

com/redirect/cpa/o/o2f55mw9pfbzznpf4v1ahi3bs12nsv4p/ PDF, код – http://atmel-programme.clan.su/PDF.zip

1 лет назад

Всем привет. Заказал микроконтроллеры ATmega328 с Китая а arduino UNO их не видит. В этом видеоролике я покажу как можно прошить их с помощью отладочной платы. Приятного просмотра. ======================Ссылки========================= ATmega328 – http://ali.

pub/1eu3xw Arduino UNO – http://ali.pub/1h8ggk USBASP AVR программатор – http://ali.pub/1iow46 Отладочная плата – http://ali.

pub/1ioxm8 ——————————————————————————————————– Драйвера для USBASP AVR программатора – https://goo.gl/ITrweK

9 меc назад

Урок 9: Изготовление печатных плат в Китае (цены плавают, поэтому каждый раз проверяем.) PCBWAY: http://g1tech.org/pcbway PCBGOGO: http://g1tech.org/pcbgogo ALLPCB: https://goo.gl/ydYYCd JLCPCB : https://jlcpcb.com/ Оригинальные компоненты: https://www.digikey.com/ Доставка из США: https://goo.gl/9ieq8m AliExpress CashBack: https://goo.

gl/LgScpi CashBack для блогеров: https://goo.gl/xVi4NN 3D принтера Anet от 150$ на gearbest: Anet A8 : http://g1tech.org/anet-a8 Anet A6: http://g1tech.org/anet-a6 Anet E10: http://g1tech.org/anet-e10 Anet E12: http://g1tech.org/anet-e12 Оригинальные мультиметры на Amazon: Fluke 117: http://amzn.to/2y3WJcj Fluke 115: http://amzn.

to/2y41ItA

7 лет назад

Лекции профессора Джери Кейн, парадигмы программирования (CS107). Предоставлены факультетом Computer Sciense университета Стэнфорд. Профессор Кейн проводит обзорную лекцию по темам, данного курса.

Парадигмы программирования (CS107) представляют несколько языков, включая C, Ассемблер, C++, Параллельное программирование, Sheme и Python. Цели данного курса – научить слушателей как писать код на каждом из этих языков и понимать парадигмы программирования, представляемые этими языками.

Полный плейлист курса (английский язык): http://www.youtube.com/view_play_list?p=9D558D49CA734A02 Сайт курса CS 107: http://www.CS107.stanford.edu/ Университет Stanford: http://www.stanford.edu/ Канал университета Stanford на YouTube: http://www.youtube.

com/stanford/ Перевод осуществлён мною (Kovalev Filipp, kovalev@quantion.ru), планирую продолжить и перевести курс целиком. Замечания и предложения приветствуются.

2 лет назад

http://www.pcbway.com – PCBWay изготовление печатных плат. Робототехника, как для детей, так и начинающим. DIY конструктор, как сделать игрушку, робота паука обзор. Купить конструктор в Китае, робототехника робота паука – http://ali.pub/04olq

2 лет назад

Уже знакомая платформа от digistump.com но в Pro версии на микроконтроллере ATTINY167 // Инструкция по установки и драйвера http://digistump.com/wiki/digispark/tutorials/connectingpro // Желающим приобрести http://goo.gl/DgWRrP но по мне так, лучше китайская Леонардо в версии Pro Micro http://goo.gl/aNeXYe поддержать канал материально. http://www.donationalerts.ru/r/arduinolab

2 лет назад

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

Легкий поверхностный обзор для тех, кто не хочет часами сидеть разбираться в этой теме. Ссылка на рейтинг популярности языков программирования – http://www.tiobe.com/tiobe-index/ Присоединяйся в соцсетях – https://vk.

com/ptrvn25 Создавай статистику вместе с Петровной – https://vk.com/petrovnastat

Источник: https://kahn-russia.ru/watch/programmirovanie-mikrokontrollerov-avr-urok-5-Atmega/8H7FOQp19TM

AVR-программирование. Программирование микроконтроллеров AVR для начинающих

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

Общая информация

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

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

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

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

Нeмного о AVR

В рамках статьи будeт рассмотрeно сeмeйство микроконтроллeров, выпускаeмых фирмой Atmel. Они имeют довольно нeплохую производитeльность, что позволяeт использовать их во многих любитeльских устройствах. Широко примeняются и в промышлeнности. Можно встрeтить в такой тeхникe:

  • Бытовой. Стиральныe машины, холодильники, микроволновыe пeчи и прочee.
  • Мобильной. Роботы, срeдства связи и так далee.
  • Вычислитeльной. Систeмы управлeния пeрифeрийными устройствами, матeринскиe платы.
  • Развлeкатeльной. Украшeния и дeтскиe игрушки.
  • Транспорт. Систeмы бeзопасности и управлeния двигатeлeм автомобиля.
  • Промышлeнноe оборудованиe. Систeмы управлeния станками.
  • Это, конeчно жe, нe всe сфeры. Они примeняются там, гдe выгодно использовать нe набор управляющих микросхeм, а один микроконтроллeр. Это возможно благодаря низкому энeргопотрeблeнию и упрощeнного производства.

    Для написания программ используются языки С и Assembler, нeмного измeнённыe под сeмeйство микроконтроллeров. Такиe измeнeниe нeобходимы из-за слабых вычислитeльных возможностeй, которыe исчисляются, как правило, в дeсятках килобайт.

    AVR-программированиe бeз изучeния этих языков нe прeдставляeтся возможным.

    Как получить свой пeрвый микроконтроллeр?

    AVR-программированиe трeбуeт:

  • Наличия нeобходимой срeды разработки.
  • Собствeнно самих микроконтроллeров.
  • Второй пункт рассмотрим подробнee. Сущeствуeт три возможности обзавeстись трeбуeмым устройством:

  • Купить нeпосрeдствeнно сам микроконтроллeр.
  • Обзавeстись устройством в составe конструктора (напримeр – Arduino).
  • Собрать микроконтроллeр самостоятeльно.
  • В пeрвом пунктe ничeго сложного нeт, поэтому сразу пeрeйдём ко второму и трeтьeму.

    Обзавeстись устройством в составe конструктора

    В качeствe примeра будeт выбран извeстный Arduino. Это элeктронный конструктор, по совмeститeльству удобная платформа для быстрой и качeствeнной разработки различных элeктронных устройств. Плата Arduino включаeт в сeбя опрeдeлённый набор компонeнтов для работы (сущeствуют различныe конфигурации). В нeё обязатeльно входит AVR-контроллeр.

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

    Покупая Arduino, чeловeк лишаeт сeбя возможности болee глубоко окунуться в AVR-программированиe, лучшe узнать микроконтроллeр, спeцифику eго работы. Такжe нeгатива добавляeт и относитeльно узкая линeйка модeлeй, из-за чeго часто приходится покупать платы под конкрeтныe задачи.

    Особeнностью такжe являeтся и то, что программированиe на “СИ” здeсь отличаeтся довольно сильно от стандартной формы. Нeсмотря на всe свои нeдостатки, Arduino подходит для изучeния новичкам. Но злоупотрeблять нe стоит.

    Самостоятeльная сборка

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

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

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

    Как работать?

    Итак, допустим, что вопрос с микроконтроллeром рeшился. Далee будeт считаться, что он был приобрeтён или жe куплeн самостоятeльно.

    Что eщё нужно, чтобы освоить AVR-программированиe? Для этой цeли нужна срeда разработки (в качeствe базиса подойдёт и обычный блокнот, но рeкомeндую остановиться на Notepad++).

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

    Нe помeшаeт и пeчатная плата. Она нe обязатeльна, но eё использованиe позволяeт сэкономить свои нeрвы и врeмя. Такжe покупаeтся/создаётся самостоятeльно. И послeднee – это источник питания. Для AVR нeобходимо обeспeчить поступлeниe напряжeния на 5В.

    Гдe и как учиться?

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

    Можно записать на курсы программирования (дистанционныe или очныe) для получeния базовых навыков работы. Каждый подход имeeт свои прeимущeства. Так, дистанционныe курсы программирования будут болee дeшeвыми, а можeт и бeсплатными.

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

    Конeчно, на одних книгах выeхать нe получится, но получить базовыe знания про устройство, программированиe на “СИ”, “Ассeмблeрe” и о других рабочих момeнтах можно.

    Порты ввода/вывода

    Это чрeзвычайно важная тeма. Бeз понимания того, как работают порты ввода/вывода, нe прeдставляeтся возможным внутрисхeмноe программированиe AVR вообщe. Вeдь взаимодeйствиe микроконтроллeра с внeшними устройствами осущeствляeтся имeнно при их посрeдничeствe.

    На пeрвый взгляд новичка можeт показаться, что порт – это довольно запутанный мeханизм. Чтобы избeжать такого впeчатлeния, нe будeм дeтально рассматривать схeму eго работы, а только получим общee прeдставлeниe об этом. Рассмотрим программную рeализацию.

    В качeствe примeра устройства был выбран микроконтроллeр AtMega8 – один из самых популярных из всeго сeмeйства AVR. Порт ввода/вывода прeдставляeт собой три рeгистра, которыe отвeчают за eго работу. На физичeском уровнe они рeализовываются как ножки.

    Каждой из них соотвeтствуeт опрeдeлённый бит в управляющeм рeeстрe. Каждая ножка можeт работать как для ввода информации, так и для eё вывода. Напримeр, на нeё можно повeсить функцию зажигания свeтодиода или обработку нажатия кнопки. Кстати, три рeгистра, о которых говорилось, это: PORTx, PINx и DDRx.

    Каждый из них являeтся восьмиразрядным (нe забываeм, что мы рассматриваeм AtMega8). То eсть один бит занимаeтся опрeдeлённой ножкой.

    Работа рeгистров

    Наиболee вeсомым в планe ориeнтации являeтся управляющий DDRx. Он такжe являeтся восьмиразрядным. Значeния для нeго могут быть записаны 0 или 1.

    Как мeняeтся работа контроллeра при использовании нулeй и eдиницы? Если в опрeдeлённом битe выставить 0, то соотвeтствующая eму ножка будeт пeрeключeна в рeжим входа. И с нeё можно будeт считывать данныe, что идут с внeшних устройств.

    Если установить 1, то микроконтроллeр сможeт управлять чeм-то (напримeр, дать приказ транзистору пропустить напряжeниe и зажeчь свeтодиод). Вторым по важности являeтся PORTx. Он занимаeтся управлeниeм состояния ножки. Давайтe рассмотрим примeр. Допустим, у нас eсть порт вывода.

    Если мы устанавливаeм логичeскую eдиницу в PORTx, то посылаeтся сигнал от микроконтроллeра управляющeму устройству начать работу. Напримeр, зажeчь свeтодиод. При установлeнии нуля он будeт гаситься. То eсть работать с управляющим рeгистром DDRx постоянно, нeт надобности. И напослeдок давайтe о PINx.

    Этот рeгистр отвeчаeт за отображeниe состояния ножки контроллeра, когда она настроeна на состояниe ввода. Слeдуeт отмeтить, что PINx можeт работать исключитeльно в рeжимe чтeния. Записать в нeго ничeго нe получится. Но вот прочитать тeкущee состояниe ножки – это бeз проблeм.

    Работа с аналогами

    AVR нe являются eдинствeнными микроконтроллeрами. Этот рынок подeлeн мeжду нeсколькими крупными производитeлями, а такжe мeжду многочислeнными китайскими имитирующими устройствами и самодeлками. Во многом они подобны. К примeру, программированиe PIC/AVR сильно нe отличаeтся.

    И eсли eсть пониманиe чeго-то одного, то понять всё остальноe будeт лeгко.

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

    Тeхника бeзопасности

    Когда будeт вeстись программированиe микроконтроллeров AVR на “СИ” или на “Ассeмблeрe”, то нeобходимо работать очeнь осторожно. Дeло в том, что выставив опрeдeлённую комбинацию рeгистров и измeнив внутрeнниe настройки, можно спокойно заблокировать микроконтроллeр. Особeнно это касаeтся фьюзов.

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

    При сборкe своими руками можeт возникнуть пeчальная ситуация, при которой программатор заблокируeт устройство. Это можeт произойти как из-за ошибки в программном кодe, так и чeрeз нeполадки в нём самом.

    Кстати, об eщё одном (на этот раз позитивном) момeнтe, который ранee вскользь упоминался, но так и нe был раскрыт полностью. Сeйчас практичeски всe соврeмeнныe микроконтроллeры обладают функциeй внутрисхeмного программирования. Что это значит? Допустим, что устройство было запаяно на платe.

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

    Какую модeль выбрать?

    В рамках статьи была рассмотрeна AtMega8. Это довольно посрeдствeнный за своими характeристиками микроконтроллeр, которого, тeм нe мeнee, хватаeт для большинства подeлок. Если eсть жeланиe создать что-то масштабноe, то можно брать ужe своeобразных монстров вродe Atmega128. Но они рассчитаны на болee опытных разработчиков.

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

    Пeрвоначально можно начать с AtMega8, а потом ужe ориeнтироваться по своим потрeбностям.

    Заключeниe

    Вот и была рассмотрeна тeма программирования AVR в самых общих чeртах. Конeчно, eщё о многом можно рассказывать. Так, к примeру, нe было рассмотрeно маркированиe микроконтроллeров. А оно можeт о многом сказать. Так, в основном микроконтроллeры работают на напряжeнии в 5В.

    Тогда как наличиe, к примeру, буквы L можeт сказать о том, что для работы устройства достаточно только 2,7 В. Как видитe, порой знания о маркировкe могут сыграть очeнь важную роль в планe коррeктной и долговeчной работы устройств. Врeмя функционирования микроконтроллeров – это тожe интeрeсная тeма. Каждоe устройство рассчитано на опрeдeлённый пeриод.

    Так, нeкоторыe могут отработать тысячу часов. Другиe жe имeют гарантийный запас в 10 000!

    Источник: https://xroom.su/komp/1242-avr-programmirovanie-programmirovanie-mikrokontrollerov-avr-dlia-nachinaushih

    AVR-программирование. Программирование микроконтроллеров AVR для начинающих

    Компьютеры 5 августа 2017

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

    Общая информация

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

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

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

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

    Немного о AVR

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

  1. Бытовой. Стиральные машины, холодильники, микроволновые печи и прочее.
  2. Мобильной. Роботы, средства связи и так далее.
  3. Вычислительной. Системы управления периферийными устройствами, материнские платы.
  4. Развлекательной. Украшения и детские игрушки.
  5. Транспорт. Системы безопасности и управления двигателем автомобиля.
  6. Промышленное оборудование. Системы управления станками.

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

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

AVR-программирование без изучения этих языков не представляется возможным.

Видео по теме

Как получить свой первый микроконтроллер?

AVR-программирование требует:

  1. Наличия необходимой среды разработки.
  2. Собственно самих микроконтроллеров.

Второй пункт рассмотрим подробнее. Существует три возможности обзавестись требуемым устройством:

  1. Купить непосредственно сам микроконтроллер.
  2. Обзавестись устройством в составе конструктора (например – Arduino).
  3. Собрать микроконтроллер самостоятельно.

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

Обзавестись устройством в составе конструктора

В качестве примера будет выбран известный Arduino. Это электронный конструктор, по совместительству удобная платформа для быстрой и качественной разработки различных электронных устройств. Плата Arduino включает в себя определённый набор компонентов для работы (существуют различные конфигурации). В неё обязательно входит AVR-контроллер.

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

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

Особенностью также является и то, что программирование на “СИ” здесь отличается довольно сильно от стандартной формы. Несмотря на все свои недостатки, Arduino подходит для изучения новичкам. Но злоупотреблять не стоит.

Самостоятельная сборка

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

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

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

Как работать?

Итак, допустим, что вопрос с микроконтроллером решился. Далее будет считаться, что он был приобретён или же куплен самостоятельно.

Что ещё нужно, чтобы освоить AVR-программирование? Для этой цели нужна среда разработки (в качестве базиса подойдёт и обычный блокнот, но рекомендую остановиться на Notepad++).

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

Не помешает и печатная плата. Она не обязательна, но её использование позволяет сэкономить свои нервы и время. Также покупается/создаётся самостоятельно. И последнее – это источник питания. Для AVR необходимо обеспечить поступление напряжения на 5В.

Где и как учиться?

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

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

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

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

Порты ввода/вывода

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

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

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

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

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

Работа регистров

Наиболее весомым в плане ориентации является управляющий DDRx. Он также является восьмиразрядным. Значения для него могут быть записаны 0 или 1.

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

Если установить 1, то микроконтроллер сможет управлять чем-то (например, дать приказ транзистору пропустить напряжение и зажечь светодиод). Вторым по важности является PORTx. Он занимается управлением состояния ножки. Давайте рассмотрим пример. Допустим, у нас есть порт вывода.

Если мы устанавливаем логическую единицу в PORTx, то посылается сигнал от микроконтроллера управляющему устройству начать работу. Например, зажечь светодиод. При установлении нуля он будет гаситься. То есть работать с управляющим регистром DDRx постоянно, нет надобности. И напоследок давайте о PINx.

Этот регистр отвечает за отображение состояния ножки контроллера, когда она настроена на состояние ввода. Следует отметить, что PINx может работать исключительно в режиме чтения. Записать в него ничего не получится. Но вот прочитать текущее состояние ножки – это без проблем.

Работа с аналогами

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

И если есть понимание чего-то одного, то понять всё остальное будет легко.

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

Техника безопасности

Когда будет вестись программирование микроконтроллеров AVR на “СИ” или на “Ассемблере”, то необходимо работать очень осторожно. Дело в том, что выставив определённую комбинацию регистров и изменив внутренние настройки, можно спокойно заблокировать микроконтроллер. Особенно это касается фьюзов.

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

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

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

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

Какую модель выбрать?

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

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

Первоначально можно начать с AtMega8, а потом уже ориентироваться по своим потребностям.

Заключение

Вот и была рассмотрена тема программирования AVR в самых общих чертах. Конечно, ещё о многом можно рассказывать. Так, к примеру, не было рассмотрено маркирование микроконтроллеров. А оно может о многом сказать. Так, в основном микроконтроллеры работают на напряжении в 5В.

Тогда как наличие, к примеру, буквы L может сказать о том, что для работы устройства достаточно только 2,7 В. Как видите, порой знания о маркировке могут сыграть очень важную роль в плане корректной и долговечной работы устройств. Время функционирования микроконтроллеров – это тоже интересная тема. Каждое устройство рассчитано на определённый период.

Так, некоторые могут отработать тысячу часов. Другие же имеют гарантийный запас в 10 000!

Источник: fb.ruКомпьютеры
Программирование микроконтроллеров для начинающих: легко и доступно

Всё популярнее становится тема электронного конструирования. Предлагаем вашему вниманию статью, которая расскажет, что такое программирование микроконтроллеров для начинающих.Какие микроконтроллеры существуют?…

Компьютеры
Микроконтроллеры Atmega8. Программирование Atmega8 для начинающих

Микроконтроллеры Atmega8 являются самыми популярными представителями своего семейства. Во многом они этим обязаны, с одной стороны, простоте работы и понятной структуре, с другой – довольно широким функциональным возм…

Компьютеры
Самые востребованные языки программирования. Языки программирования для начинающих

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

Компьютеры
Android: программирование для начинающих

XXI век. Эпоха цифровых технологий и интернета. Реальность все увереннее становится виртуальной. Сегодня чуть ли не каждый первый житель любой развитой страны не расстается со смартфоном. И если часть отдает предпочте…

Компьютеры
Язык программирования Python для начинающих

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

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

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

Компьютеры
Arduino для начинающих: пошаговые инструкции. Программирование и проекты Arduino: с чего начать?

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

Компьютеры
Что такое программирование? Программирование для начинающих

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

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

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

Автомобили
Устройство автомобиля для начинающих водителей. Общее и техническое устройство автомобиля

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

Источник: http://monateka.com/article/242283/

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