ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
Санкт-Петербургский государственный университет аэрокосмического приборостроения
____________________________________________________________________________
ЭМУЛЯТОР AVR GCC
ДЛЯ НАЧАЛЬНОГО ДИСТАНТНОГО ОБУЧЕНИЯ
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
К ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ
![]() |
Санкт-Петербург
2012
Составитель: , ,
Рецензенты: кафедра информационно-сетевых технологий ГУАП,
д-р техн. наук, профессор
Содержатся указания к выполнению лабораторных работ по изучению принципов программирования AVR-микропроцессоров средствами дистантного обучения с использованием Интернет и беспроводной персональной сети ZigBee.
Методические указания предназначены для проведения лабораторных работ со студентами дневного и вечернего обучения по специальности "Вычислительные машины, комплексы, системы и сети".
Подготовлены к изданию кафедрой вычислительных систем и сетей по рекомендации редакционно-издательского совета Санкт-Петербургского государственного университета аэрокосмического приборостроения
СПб: ГУАП, 2012
ВВЕДЕНИЕ
Дистантные системы обучения – системы нашего времени, времени внедрения технологий Интернет. Отчасти это блоги и сетевые журналы, форумы, социальные сети. Однако у инженеров есть собственные потребности в коммуникации, в частности, нужны математические инструменты, исполняемые в сети примеры, удаленное тестирование учеников и т. п. Для этого предназначены, например, такие математические и обучающие системы, такие как SAGE и MOODLE.
Математическая система SAGE позволяет завести блокнот с математическими примерами, исполняемыми на сервере с помощью Питон. Система MOODLE содержит подсистемы выкладывания в сети учебных материалов и тестирования учеников (курирует освоение этих материалов).
Структуры учебных блоков и пакетов учебного материала обучающих систем регламентируются стандартом SCORM. Пакет может содержать курс, урок, тест, модуль и т. п. В пакет входят xml-файл (манифест), где описана структура пакета, и файлы, составляющие учебный блок. Этот файл должен иметь название imsmanifest. xml и находиться в корневой папке пакета.
Манифест пакета включает: метаданные (свойства компонентов учебного материала); организацию учебного материала (в каком порядке расположены компоненты); ресурсы (ссылки на файлы, содержащиеся в пакете); sub-Manifest (отдельные части пакета xml-файла - это может иметь смысл если пакет очень большой и имеет сложную структуру, чтобы не перегружать один файл большим объёмом данных). Блоки учебного материала, входящие в пакет, могут быть двух типов: Asset и Sharable Content Object (SCO).
Asset – элемент, не взаимодействующий с сервером системы управления обучением (LMS-сервером). Это может быть html-страница, просто картинка, звуковой файл, flash-объект и т. п. Asset может состоять из нескольких файлов (например, html-файл + css-файл c описанием его стилей + js-файл с описанием используемых в нём функций). С точки зрения системы и учащегося Asset будет рассматриваться как один неделимый объект.
SCO – элемент, который взаимодействует с системой управления обучением: сообщает о ходе и результатах обучения, получает и передаёт дополнительные данные и т. п. Как минимум SCO сообщает о своем запуске и завершении (путём вызова методов Initialize("") и Terminate("") объекта API_1484_11, используемого системой для взаимодействия).
Система SAGE
Sage (англ. “Мудрец”) – система компьютерной алгебры, затрагивающая много областей математики, включая алгебру, комбинаторику, вычислительную математику и математический анализ. Первая версия Sage была выпущена 24 февраля 2005 года в виде свободного программного обеспечения с лицензией GNU GPL. Первоначальной целью проекта было “создание открытого программного обеспечения, альтернативного системам Magma, Maple, Mathematica, и MATLAB”. Разработчиком Sage является Уильям Стейн – математик Университета Вашингтона (официальный сайт: sagemath. org).
Система MOODLE
Система реализует философию “педагогики социального конструкционизма” и ориентирована прежде всего на организацию взаимодействия между преподавателем и учениками, хотя подходит и для организации традиционных дистанционных курсов, а также поддержки очного обучения.
MOODLE переведена на десятки языков, в том числе и на русский, и используется почти в 50 тысячах организаций из более чем 200 стран мира. В РФ зарегистрировано более 600 инсталляций. Количество пользователей MOODLE в некоторых инсталляциях достигает 500 тысяч человек.
Отмеченные системы задают некоторый тренд разработки и стандартов громадного количества систем отмеченных видов. В математических инструментах большее внимание отводится корректному решению математических задач, их применение универсально и не зависит от содержимого курсов. Таков, например, математический справочник, отдаленно напоминающий Google, но для математиков, созданный под руководством Стефана Вольфрама: . В обучающих системах большее внимание отводится, очевидно, организации учебного процесса и наполнению конкретных курсов.
Аналогичные системы и модули создаются в лаборатории распределенных информационно-управляющих систем ГУАП [http://*****/guap/lab_rius/krat_main. shtml]
В пособии [1] и методических указаниях [2] рассмотрены современные беспроводные сетевые технологии: стандарты передачи данных в беспроводных сетях Wi-Fi, Wi-MAX, Bluetooth, Wireless USB, Home RF, ZigBee, топологии беспроводных персональных сетей. Периферия из сенсоров и эффекторов строится с использованием современных микроконтроллеров, для получения навыков работы с которыми предназначены данные методические указания, а также программы и стенды лаборатории.
Руководители лаборатории выражают благодарность студентам , ……, принимавшим активное участи в разработке и создании стендов для дистантного обучения.
СЕТЕВОЙ ЭМУЛЯТОР AVR-МИКРОПРОЦЕССОРОВ
Дистантные системы обучения программированию мало чем отличаются от обычных блогов или форумов. Как в тех, так и в других имеются система регистрации участников и средства, обеспечивающие функции администрирования со стороны преподавателя. Возможны как открытые, так и закрытые (для платных групп) формы обучения.
Однако в современной дистантной системе обучения уже должен быть исполняемый код, обеспечивающий обучающемуся возможность не только размещения дистантно своего примера, но просмотра его исполнения и получения замечаний от преподавателя. Обычный форум не располагает такими возможностями.
Все указанные свойства реализованы в сетевом эмуляторе AVR-микропроцессоров, новой системе дистантного обучения лаборатории распределенных информационно-управляющих систем ГУАП.
Для отделения текста исполняемого кода от комментариев используется стандартный тэг math, как это показано ниже:
Комментарии (студент, группа, номер лабораторной работы)
<math>
Коды исполняемой программы
</math>
Комментарии (диалог с преподавателем)
В существующей редакции системы обучения программа пишется на Javascript, поскольку это самый широко-распространенный сегодня интерпретируемый язык в сети. В ряде практически полезных случаев дополнительными тэгами или скобками помечаются вхождения программ на другом языке.
Так, например, для реализации формул векторно-матричного исчисления приняты двойные фигурные скобки {{ программа Java-MatLab }}. Усеченная версия AVR GCC для программирования микропроцессоров вводится сходно как {{C# программа AVR GCC}}. В примерах на WEB-программировании широко используются PHP-вставки, окаймляемые, как обычно, следующим образом <? программа PHP?>.
Эти правила на сервере каком? не вечны, они могут меняться по мере развития дистантной системы, но такое употребление тэгов типично. Оно оговаривается отдельно в системе справки (HELP), сопровождающей любую обучающую или математическую систему.
Помимо исполняемых алгоритмов в системах обучения применяются и прочие средства, в частности, графические конструкторы управляемых кодами систем, а также сетевые эмуляторы микропроцессоров. Корпуса, светодиоды, кнопки, управляемые объекты воспроизводятся средствами графики. Существуют и смешанные системы, когда аппаратная часть существует физически и управление ею передается на расстояние. Это про твою систему или вообще требования? Давай только о твоей.
ОПИСАНИЕ МИКРОПРОЦЕССОРОВ AVR
Каноническая вполне работоспособная электрическая схема микропроцессора вполне проста и обходится, как видно на рис. 1, немногими деталями, к которым относятся внешний кварцевый генератор тактовых импульсов и конденсаторы в цепи питания. Контрольным светодиодом можно проверить состояние ножек портов, сконфигурированных на выход.

Рисунок 1 – Минимальная схема включения микропроцессора AVR
В 30-х годах правительство США поручило Гарвардскому и Принстонскому университетам разработать архитектуру компьютера для военно-морской артиллерии. Победила разработка Принстонского университета (более известная как архитектура фон Неймана, названная так по имени разработчика, первым предоставившего отчет об архитектуре), так как она была проще в реализации. Гарвардская архитектура не использовалась вплоть до конца 70-х годов, когда развитие микропроцессорной техники позволило использовать ее преимущества.
Типичные операции (сложение и умножение) требуют от любого вычислительного устройства нескольких действий: выборку двух операндов, выбор инструкции и её выполнение, и, наконец, сохранение результата. Идея, реализованная Эйкеном, заключалась в физическом разделении шин передачи команд (инструкций) и данных. В первом компьютере Эйкена «Марк I» для хранения инструкций использовалась перфорированная лента, а для работы с данными — электромеханические регистры. Это позволяло одновременно пересылать и обрабатывать команды и данные, благодаря чему значительно повышалось общее быстродействие.
Гарвардская архитектура используется в микроконтроллерах, таких, как Intel 4004, Intel 8051, Atmel AVR и многих других. Разработки фирмы Intel 80-х годов выдвинули некую общую модель MKS 51, которая по существу и определила класс последующих более совершенных микропроцессоров.
Среди них долгое время лидировали микроконтроллеры семейства PIC (Peripheral Interface Controller) компании Microchip на основе RISC-процессора. Reduced Instruction Set Computer (RISC) – вычисления с сокращённым набором команд, характеризуемые наличием команд фиксированной длины, большого количества регистров, операций типа регистр-регистр, а также отсутствием косвенной адресации. Концепция RISC разработана Джоном Коком (John Cocke) из IBM Research, название придумано Дэвидом Паттерсоном (David Patterson).
В настоящее время в связи с доступностью программных средств и инструментальных плат разработки большое число публикаций связано с семейством восьмибитных микроконтроллеров AVR фирмы Atmel (рис. 2). Грань между RISC и CISC (Сomplex Reduced Instruction Set Computer) микропроцессорами стирается. Например, AVR имеют 133 команды, что соответствует CISC, но большинство из них выполняется за один такт, что является признаком RISC. Поэтому основным признаком RISC принято считать выполнение команд за один такт.

Рисунок 2 – Микропроцессор ATMEGA 8 фирмы Atmel
Регистры общего назначения (РОН) или General Purpose Registers (GPR) – их всего 32, имеют байтовый формат. РОН находятся в начале адресного пространства оперативной памяти, хотя физически не являются ее частью. Поэтому к ним можно обращаться двумя способами: как к регистрам и как к ячейкам памяти. Такое решение является особенностью AVR и повышает эффективность работы и производительность микроконтроллера.
В оперативную память можно лишь записывать данные из регистров, тогда как для работы с регистрам есть арифметические, логические и битовые операции. Система команд в разных модификациях насчитывает от 90 до 133 различных инструкций и построена на гарвардской архитектуре, программа (Flash-память – аналог жесткого диска, хранит коды, загружаемые в оперативную память SRAM) и данные (EEPROM-память) находятся в разных адресных пространствах, однако имеется возможность читать данные из памяти программы, используя специальные команды.
Все типы памяти интегрированы на одном чипе, что снимает необходимость во внешней памяти для большинства приложений. Коды в энергонезависимые хранилища Flash (hex), EEPROM заносятся через последовательный периферийный интерфейс SPI. Соответственно, его можно использовать для подключения программатора, цифровых потенциометров, ЦАП/АЦП, FLASH-ПЗУ и др. микроконтроллеров. Управление периферийными устройствами осуществляется через адресное пространство данных. Микропроцессоры AVR поддерживают тактовую частоту 0-20 МГц, но некоторые устройства работают на частоте 32 МГц.
Разъем ISP-программатора, загружающего hex-коды программы в микропроцессор, подсоединяется к соответствующим ножка микропроцессора (рис. 3).

Рисунок 3 – Схема подключения ISP-программатора
Четырехпроводной интерфейс JTAG, разработанный группой Joint Test Action Group, был зарегистрирован в качестве промышленного стандарта IEEE Std 1149.1-1990 для тестирования печатных плат, внутрисхемной отладки и программирования микроконтроллеров. Им оснащены все микроконтроллеры Mega с флэш-памятью емкостью 16 кбайт и более.
Для взаимодействия с компьютером через COM-порт по популярному протоколу RS-232 имеется универсальный асинхронный или универсальный синхронно/асинхронный приемопередатчик (Universal Synchronous/Asynchronous Receiver and Transmitter – UART или USART), который включается через буферную микросхему MAX232, согласовывающую разницу напряжений на линиях связи (рис. 4) .

Рисунок 4 – Согласовывающая микросхема MAX232
Канал способен работать в дуплексном режиме (одновременная передача и прием данных). Помимо того, имеется двухпроводной последовательный интерфейс TWI (Two-wire Serial Interface), который позволяет объединить вместе до 128 различных устройств с помощью двунаправленной мультиплексной шины, состоящей из линии тактового сигнала (SCL) и линии данных (SDA). Это аналог интерфейса I2C (двухпроводная двунаправленная шина), предложенного фирмой Philips.
Организовать работу системы во времени по прерываниям помогают несколько таймеров с разрядностью 8 и 16 бит, работающие и как счетчики внешних событий. В режиме ШИМ (PWM) таймер может представлять собой широтно-импульсный модулятор и используется для генерирования сигнала с программируемыми частотой и скважностью. Сторожевой таймер WDT (WatchDog Timer) имеет свой собственный RC-генератор, работающий на частоте 1 МГц. Он предназначен для сбрасывания микропроцессора программой, что позволяет избежать зависаний перезапуском микропpоцессоpа с инициализацией pегистpов и приведения системы в рабочее состояние.
Микроконтроллер AVR использует питание от 1,8 до 6,0 Вт. Ток потребления составляет:
<1 мА для рабочей частоты 500 кГц;
5–6 мА для рабочей частоты 5 МГц;
8–9 мА для рабочей частоты 12 МГц.
Программно AVR переводится в один из трех режимов пониженного энергопотребления.
В режиме холостого хода (IDLE) процессора функционирует внутренний генератор синхросигналов, таймеры, система прерываний и сторожевой таймер. Ток потребления не превышает 2,5 мА на частоте 12 МГц.
В стоповом режиме (POWER DOWN) все функции выключены до поступления сигнала внешнего прерывания или аппаратного сброса. При включенном сторожевом таймере ток потребления в этом режиме составляет около 80 мкА, а при выключенном – менее 1 мкА для напряжения питания 5 В.
Существует еще экономичный режим (POWER SAVE), в котором работает только генератор таймера, что обеспечивает сохранность временной базы.
Схема BOD (Brown-Out Detection) при снижении питания ниже некоторого значения переводит микроконтроллер в состояние сброса. Когда напряжение питания вновь увеличится до порогового значения, запускается таймер задержки сброса. После формирования задержки внутренний сигнал сброса снимается и происходит запуск микроконтроллера.
Помимо аналого-цифровых преобразователей, переключаемых регистром опрашиваемого входа, имеются аналоговые компораторы, используемые в системе прерываний.
Для ознакомления с микропроцессором на тестовых платах размещают кнопку сброса RESET, управляющие кнопки, информационные светодиоды, триммерные контрольные сопротивления, температурный, световой и другие датчики.
Этот раздел можно разделить на подразделы, акцентировав в них внимание на RISK-архитектуру, ПАМЯТЬ, РЕГИСТРЫ, ТАЙМЕРЫ и операции с ними. Отдельно – вопросы питания.
СРЕДСТВА ОБУЧЕНИЯ ПО МЕХАТРОНИКЕ
На потребностях обучающихся и начинающих разработчиков цифровых систем в тестовых платах вырастают сервисные фирмы, такие, как болгарская компания Olimex. Продукция компании широко распространяется посреднической фирмой Terraelectronica в Москве, Санкт-Петербурге и других городах России. В Санкт-Петербурге, в частности, платы продаются на Васильевском Острове в специализированном магазине для разработчиков Мегаэлектроника. Это скрытая реклама…надо бы убрать
Программатор AVR-ISP500
Программаторы необходимы для занесения программ в память микропроцессоров и отличаются между собой универсальностью применения. Нужно расширить текст о функционале программаторов…
AVR-ISP500 это быстрый и надежный программатор для AVR-микроконтроллеров, работающий напрямую с AVR Studio (рис. 5). Что такое AVR Studio? Еще не говорилось о этой среде. Так ли пишется название?

Рисунок 5 – Программатор AVR-ISP500 для AVR-микроконтроллеров
AVR-ISP500 реализует протокол STK500v2, определенный Atmel, что делает его совместимым с широким кругом инструментов, в том числе со средой AvrStudio и avrdude.
Соединяется программатор с устройством через разъем ICSP10 либо ICSP6 (рис. 6), с компьютером – через шину USB 2.0. Он не нуждается в отдельном источнике питания, т. к. берет его с шины USB.

Рисунок 6 – Разъемы подключения программатора, единичка на стороне ключа
Плата AVR-P28
Демонстрационная плата AVR-P28 наиболее удобна для начального экспериментирования и освоения микроконтроллеров AVR (см. рис. 7). Следует обратить внимание, что микропроцессор Atmega8 на ней съемный, что позволяет его легко демонтировать и монтировать на плату при выходе из строя, при замене одного процессора – другим.

Рисунок 7 – Тестовая плата для микроконтроллера AVR-P28
На плате AVR-P28 расположено все из того, о чем речь шла выше. Имеется гнездо для микроконтроллера AVR. Стабилизатор напряжения 5В позволяет использовать блоки питания на 9-12 В постоянного тока или 6-9 В переменного тока.
Кристалл кварцевого резонатора стабилизирует тактовые импульсы для микроконтроллера с частотой 8Мгц.
Кнопка перезапуска reset позволяет перезапустить программу микроконтроллера.
Программно-управляемый тестовый светодиод обеспечивает индикацию состояния ножек портов вывода, универсальная кнопка – манипуляции пользователя при изучении микроконтроллера.
Разъем интерфейса RS-232 обеспечивает подключение платы к компьютеру через СОМ-порт.
Линии согласовывающей микросхемы MAX232 заранее не подключены к ножкам микроконтроллера, что позволяет использовать ее в двойном назначении для отладки дополнительных устройств. Микросхема MAX232 при этом просто может быть поменяна на адекватную ей микросхему MAX2323.
Имеющийся на плате джампер обеспечивает переключение на пониженное питание, характерное для мобильных устройств.
Разъем ICSP для подключения программатора (10-pin).
Сама основа тестовой платы выполнена в виде наборного поля для монтажа дополнительных элементов, необходимых для более полного и всестороннего изучения микроконтроллера и его функциональных возможностей.
Плата AVR-IO-M16
Рассматриваемая плата AVR-IO-M16 является небольшой, но мощной, идеально подходящей для небольших проектов автоматизации на основе микроконтроллера Atmega16 (рис. 8).

Рисунок 8 – Плата системы автоматического управления на Atmega16
На этой плате микроконтроллер уже подпаян снизу, что увеличивает плотность монтажа. Тактовая частота кристалла кварцевого резонатора значительно выше и составляет 16 МГц. Для загрузки программы (кроме разъема 6-pin ICSP) имеется также разъем 10-pin ICSP. Это связано с их универсальным применением для программирования и для обмена данными. Имеется порт RS-232.
Основное преимущество этой платы перед AVR-P28 состоит в наличии четырех мощных релейных модулей, позволяющих переключать нагрузку с номиналами токов и напряжений до 10А/250В. Четыре пороговых входа на напряжение 5 В защищены оптоэлектронными развязками, что облегчает подключение различных датчиков. Недостатком этой платы при отладке программ является отсутствие у нее кнопки перезапуска, однако эта кнопка фактически не используется в системах управления реального времени, поскольку вызовет нештатную реакцию.
Функции такой кнопки переданы одному из входов, что позволяет программировать ответ на неординарную (аварийную) ситуацию. Данная плата значительно более подходит для создания небольших реальных проектов, чем для тестирования. На ней предусмотрены отверстия для крепления в арматуре выпускных устройств. Именно эта плата как отладочное средство выбрана для управления стендами лабораторных работ, предлагаемых к выполнению в данном курсе.
ЯЗЫК ПРОГРАММИРОВАНИЯ AVR-МИКРОПРОЦЕССОРОВ
Программирование микропроцессора AVR на разновидности языка C тесно связано с его архитектурой. Микропроцессор имеет порты ввода/вывода, обозначаемые заглавными латинскими буквами A, B,C и т. п., количество которых зависит от модели контроллера. Порт имеет восемь разрядов, которым соответствуют ножки микроконтроллера.
Порт A обычно используется для оцифровки аналоговых сигналов, порт B связан с программатором (но при его отключении он свободен), порты С, D употребляются чаще дискретно, причем первые ножки D задействованы для цифровой связи микропроцессоров.
Каждая из ножек может работать на ввод или на вывод. В зависимости от того, как используются ножки, программно их обозначают PORTx (регистры вывода) или PINx (регистр ввода). Назначением функций ножек заведует регистр DDRx, x это порт A, B, C и т. д. Для того, чтобы настроить ножку на вывод, надо установить в единицу соответствующий бит регистра DDRx. В таком случае единица, установленная в бите регистра PORTx, формирует на ножке сигнал высокого уровня, ноль – низкого.
Установка в ноль бита регистра DDRx настраивает ножку на ввод. Существует та тонкость, что в этом случае установка в единицу бита регистра PORTx подключает к ножке pull-up регистр, обеспечивающий высокий уровень на выводе при отсутствии внешнего сигнала. Для чтения данных служат регистры PINx. Если на ножке высокий уровень, то соответствующей бит установлен в единицу.
Существо задачи и структура регистров повышает интерес к операциям с битами (а не байтами). Первым следствием такого подхода является то, что биты получают формальные обозначения, причем избыточные. Константы PA0 и PB0 и т. д. обозначают 0 бит. В системе программирования они рассматриваются как различные между собой имена (хотя их можно заменить одинаковыми номерами), причем биты входных и выходных регистров по разному называются.
Практика именования битов распространена очень широко, но в ряде случаев имя бита связано не с номером, это не столь важно, сколько с его функциональностью. Именные биты имею регистры, управляющие важными функциями микропроцессора. Фактически это флаги разрешения тех или иных операций. Например, биты RXEN и TXEN регистра UCSRB управляют каналом связи микропроцессоров по UART-интерфейсу.
Имя PA0 (константа, численно равная 0) отвечает начальному биту регистра A, PA1 (константа, численно равная 1) – следующему биту и т. п. Фактически за именем скрывается порядковый номер бита. Разница PA0 и PB0 чисто семантическая. Число, в котором старший бит (например) установлен в 1, записывается так 1<<PA7.
Той же цели служит функция _BV(PA7). Если присвоить регистру значение этого числа, остальные биты его сбросятся в 0, что неудобно, если биты информативны. Помимо системы наименований битов и функций перевода наименований в числа с единичками напротив соответствующего бита, есть еще система изменения содержимого только этого бита в 0 или в 1. Указанной цели служат логические операции, употребляемые с функцией _BV() формально. Можно знакомиться с тем, что они делают, побитно, но проще воспринимать их как цельные семантические конструкции.
Операция перевода заданного бита в единицу имеет вид PORTA|=_BV(PA7). Операция перевода заданного бита в ноль имеет вид PORTA&=~_BV(PA7).
Операция инверсии бита в противоположное состояние (употребляется для подсветок или проверок циклов миганием светодиода) PORTA^=_BV(PA7).
В первых версиях программ употреблялись вышедшие из употребления макросы установления и очистки бита
#define sbiBF(PORT, BIT) (PORT|=(1<<BIT))
#define cbiBF(PORT, BIT) (PORT&=~(1<<BIT))
Интерес к логике, к чему приводят те или иные операции, во всем их внушительном разнообразии, удовлетворяется справочником по C или даже javascript, опираясь на сходство синтаксиса. Перечисление отдалит нас от задачи краткого обзора особенностей программирования микропроцессоров. Тем не менее констатируем следующее. Работать с битами можно при помощи операторов |=, &=, ^=.
A|=B осуществляет побитное сложение чисел A, B с размещением итога в A. Она используется для установок битов, помечаемых в B, в 1. Инверсная операция установок битов в 0 собирается на основе логического умножения и инверсии A&=~B.
Помимо экзотики в виде смещения <<, существует прямое обозначение битов b. В шестнадцатиричной системе обозначений числа выглядят короче 0x01, наиболее популярно 0xFF означающее восемь единичек. Шестнадцать чисел от 0 до F занимают 4 бита: 0000, 0001, ..., 1111.
Приведем краткую сводку имен битов наиболее популярных регистров канала передачи данных.
Микроконтроллер AVR имеет последовательный интерфейс UART, позволяющий ему обмениваться данными с другими устройствами по протоколу RS232. Для ввода-вывода сигналов Rx, Tx часто используются ножки D0, D1.
Для управления модулем UART предназначены регистры UDR, UCSRA, UCSRB, UCSRC. Чтобы включить приемник и передатчик UART нужно установить в единицу биты RXEN и TXEN регистра UCSRB. Флаги (биты) UDRE, RXC и UDRIE, RXCIE синхронизируют прямую передачу данных и передачу данных по прерыванию соответственно.
Чтобы отправить байт нужно записать его в регистр UDR. После пересылки данных будет установлен флаг UDRE регистра UCSRA, после чего можно пересылать следующий байт данных. Установка бита UDRIE регистра UCSRB разрешает прерывание от UART после передачи байта. С помощью обработчика этого прерывания контроллер может передавать данные по UART в фоновом режиме.
Для приема байта надо считать значение из регистра UDR. Узнать о том, что принят байт можно прочитав флаг RXC регистра UCSRA.
Установка бита RXCIE регистра UCSRB разрешает прерывание от UART при приеме байта, что позволяет принимать данные в фоновом режиме.
Для настройки скорости передачи данных используется регистр UBRR, физически размещенный в двух регистрах, в UBRRH – старшая часть, и в UBRRL – младшая. Значение, которое надо записать в UBRR рассчитывается по формуле: UBRR=F/(16*BAUD)–1, где F – тактовая частота контроллера, BAUD – требуемая скорость передачи данных.
Число бит в байте, число стоп-битов, проверка четности настраиваются битами регистра UCSRC. По умолчанию установлено восемь бит в байте, один стоп-бит и отсутствие проверки четности. При записи в этот регистр старший бит записываемого значения должен быть установлен в единицу.
Может тоже разбить по назначению или употреблению команд?
ДЕБАГГЕР ЭМУЛЯТОРА AVR GCC
Эмулятор AVR GCC работает в электронных книгах, блогах и форумах. Среда кроссбраузерная, но для вывода графики используются мультимедийные возможности Интернет Эксплорера (IE). Помимо сетевого эмулятора, в который можно просто зайти по адресу
http://*****/robots/avrgcc/index. php предлагаю дать ссылкой в список литератуты
можно инсталлировать компилятор WinAVR: желательно в папку с лаконичным именем WINAVR (только не в Program Files, пробел нежелателен).
Поверх ставится организующая работу компилятора бесплатно скачиваемая у производителя микропроцессоров Atmel AVR-Studio.
Учебные программы транслируются студией в hex-коды и через SPI-порт закачиваются в память микросхемы с помощью USB-программатора, дешевые программаторы используют программу PonyProg.
Рекомендуется заглянуть в справочник [3]. Первое время проще не паять, а использовать учебные комплекты по мехатронике, перечисленные во введении.
Расположение индикаторов отладчика отвечает архитектуре микропроцессора ATmega8. Две линии, PD0 и PC5, подсвечиваются "светодиодом". Зеленым маркером отмечается единичное (высокое) состояние пина. Для физических стендов характерно инверсное подключение, когда светодиоды горят при нулевых выходах. При анимации роботов команда clear() отключает заставку со светодиодами.
Дебаггер эмулятора представлен функцией вывода содержимого портов alerts(), которая нужна только в том случае, если содержимое порта не меняется явно. Вывод содержимого портов и переменных с остановом выполняется сходной конструкцией вида alert(PORTx), без остановки по puts(переменная).
Глобальные переменные обязательно декларируются по //variables и после описания их следует переключатель //program. В AVR GCC переменная помечается при описании ее типа как volatile, иначе оптимизатор распространенного компилятора утрирует логические условия с ней, если она изменяется вне зоны его компетенции (при прерываниях).
Для простоты учебного дебаггера подпрограммы предваряются комментарием
//function.
Отсутствующие аргументы подпрограмм декларируются по void (пусто). Далее пишется тело исполняемой программы со стандартным наименованием main. Циклы и логические конструкции, помимо while и if, не должны включать в себя пауз с delay.
В пределах основной программы while и if с открывающей скобкой нельзя вкладывать, они требуют в своем завершении комментария (как в примере). Ограничения не касаются использования в подпрограммах, кроме того, while и if без скобки при них (или помеченные значком "антидебаггера" /**/) работают как обычно. Эти меры позволяют отладчику замедлять темп вывода графической и текстовой информацию с тем, чтобы мы успели ее воспринять.
Иными словами, есть два вида if (и while), в первом (с завершением //if) дебаггер разрешает выводить графику и делать паузу – эти if нельзя вкладывать друг в друга, проверка условий идет только подряд:
if (условие) { нечто с паузой }//if
во втором дебаггер не делает пауз:
if (условие) { нечто без паузы }
причем в такой организации нет комментария в конце.
ЛАБОРАТОРНАЯ РАБОТА 1. УПРАВЛЕНИЕ ДИСКРЕТНЫМ
КОНЕЧНЫМ УСТРОЙСТВОМ
Классическое начало работы с микропроцессором – освоение портов дискретного вывода. Проверить состояние порта вывода можно, например, помигиванием светодиодом, подключенным к соответствующей ножке порта ввода/вывода (см. рис. 9).

Рисунок 9 – Пример мигания светодиодом, подключенным к ножке порта D (PD0) микропроцессора Atmega8
Пример программы для эмулятора приведен ниже:
Начало формы
Начало формы Конец формы |
//эмулятор ATmega8
#define F_CPU 8000000UL // кварц 8 MHz
#include <avr/io. h>
#include <util/delay. h>
int main(void){
DDRD = 0xff; // конфигурация D как выход
while(1){
PORTD |= _BV(PD0); // в 1
_delay_ms(250);
PORTD &= ~_BV(PD0); // в 0
_delay_ms(150);
}//while
}
Комментарии к программе. Шапка (головная часть) содержит: частоту работы кристалла, установленная в фузах: энергонезависимой памяти. С помощью операторов #include <avr/io. h> и #include <util/delay. h> подключаются базовая библиотека математической модели микроконтроллера AVR и вспомогательная библиотека, позволяющая использовать задержку delay.
Двунаправленные порты ввода/вывода микропроцессора PORTx управляются регистром конфигурации DDRx (значение «1» – ножка порта сконфогурирована как выход, значение «0» – как выход), битовое содержимое которого позволяет установить направленность восьми линий порта Pxn (PINxn). При чтении данных используется содержимое буфера входов PINx.
Некоторые конструкции выходят из употребления, это касается макросов sbi и cbi.
Начало формы
// устаревшие макросы (не используемые в эмуляторе)
#define sbiBF(port, bit) (port|=(1<<bit)) //установить бит
#define cbiBF(port, bit) (port&=~(1<<bit)) //очистить бит
Макрос sbi(PORTx, bit) эквивалентен PORTx|=_BV(bit), второй макрос cbi(PORTx, bit) эквивалентен PORTx&=~_BV(bit). Знать их полезно, они встречаются в ранних программах, но ныне чаще используются отмеченные конструкции.
Можно не вдумываться в содержание каждой отдельной операции писать отмеченные макросные команды установки линий порта в 1 и в 0, за этим стоит математический аппарат соответствующих операций сложения и умножения формальной логики. Функция _BV(Pxn) переводит восьмеричный номер линии Pxn в число с единицей в соответствующем бите.
ПОРЯДОК проведения лабораторной работы: перед началом работы преподаватель проверяет знание особенностей исследуемого AVR-микропроцессора по материалам введения. В процессе выполнения лабораторной работы учащиеся пишут программу, запускают эмулятор и записывают ответы (или делают скриншоты экрана) на подписываемый у преподавателя лист проведения испытаний. Как это для дистанционного обучения?
Варианты заданий (тестовых вопросов):
сколько светодиодов “установлено” на “отладочной плате” эмулятора,
сколько цифровых выходов содержит, судя по схеме, микроконтроллер Atmega8,
какие константы необходимо установить перед написанием основных кодов программы,
какие библиотеки всегда используются при программировании микроконтроллера,
объяснить назначение библиотек,
как в приведенном варианте программы поменять ножку микроконтроллера, состояние которой индицируется светодиодом,
как реализовать в данной версии программы коды азбуки Морзе?
ЛАБОРАТОРНАЯ РАБОТА 2. ПРОГРАММИРОВАНИЕ UART
Искусство программирования UART (связи микроконтроллера по интерфейсу RS-232) заключается в расчете значений регистров канала, зависящих от частоты процессора и частоты обмена, эмулятор имитирует передачу и прием данных со стороны внешнего источника (рис. 10).

Рисунок 10 – Пример программирования UART
Предположим, что на ножки RXD, TXD (PD0, PD1) микроконтроллера ATMEGA 8 поступает символьная последовательность DEMODEMODEMODEMO….
Необходимо организовать прием и эхо-передачу символов обратно в канал связи. Ниже размещен показательный пример, как это делается.
Развивая затем два известных нам на данный момент примера (лабораторные работы 1 и 2, соответственно) можно попробовать свои силы в отображении факта прихода тех или иных символов зажиганием свободного светодиода.
При этом не стоит забывать, что ранее свободная ножка микропроцессора PD0 занята каналом связи, т. е. можно зажигать только светодиод на PC5.
Пример программы для эмулятора приведен ниже: Начало формы
Конец формы
#define F_CPU 8000000UL // кварц 8 MHz #include <avr/io. h> #include <util/delay. h> int main(void){ uint32_t baud=9600; // расчет и установка скорости в регистры int baudrate=(F_CPU/(16*baud))-1; UBRRH = (unsigned char)(baudrate>>8); UBRRL = (unsigned char) baudrate; // разрешить приемопередачу UCSRB = (1<<RXEN)|(1<<TXEN); // формат data 8, stop bit 1 UCSRC = (1<<URSEL)|(3<<UCSZ0); while(1){ unsigned char A=0; // ПРОВЕРЯЕМ БУФЕР UDR if (UCSRA & (1<<RXC)){ A = UDR; }//if if (A){ // ждет возможности посыла while (!(UCSRA & (1<<UDRE))) ; UDR = A; }//if }//while }
Доступ к регистру обмена UDR регулируется флажками (битами) UCSRC, нумерация битов начинается с нуля. Биты с номерами RXEN=4 и TXEN=3 устанавливаются в 1 сдвиговыми операциями, которые приводят к и . Побитовое ИЛИ (вертикальная черта) установит UCSRB в . Аналогично флажки-биты выставляются в UCSRC. Линии PD0, PD1 заняты под UART (RXD, TXD), поэтому из двух доступных тут диодов следует пользоваться индикатором на PC5.
При экспериментах с реальным микроконтроллером на сайте ***** (вынести в список литературы как ссылку) можно скачать терминальные программы обмена. Скриптовый обмен данными (по сценарию) обеспечивается студией Visual Matlab.
Для связи вход-выходные линии COM-порта компьютера через микросхему MAX232 подключается внахлест к первым двум линиям порта D: RXD, TXD (рис. 11).

Рисунок 11 – Обозначение ножек микроконтроллера Atmega 8
Из неприятностей, которые могут поджидать на этом пути, отметим возможное ошибочное представление о реальной частоте работы микропроцессора. При прошивке в фузах есть настройка частоты (на предприятии прошивается частота 1 Мгц, позволяющая микросхеме работать без кварца). На отладочных платах универсальный порт может быть не подпаян.
В микроконтроллере ATmega8535 есть 5 регистров – UBRRH, UBRRL, UCSRA, UCSRB, UCSRC. Биты регистра UСSRB именуют RXCIE, TXCIE, UDRIE, RXEN, TXEN, UCSZ2, RXB8, TXB8. Для разрешения работы приемника и передатчика нужно установить в единицу биты RXEN и TXEN. Прерывания по завершению передачи и прерывания при очистке регистра данных разрешают биты TXCIE и UDRIE. Размер слова данных передаваемых/принимаемых модулем USART может варьироваться от 5 до 9 разрядов и определяется битами UCSZ2..UCSZ0. В регистре UCSRB находится только бит UCSZ2. Остальные биты находятся в регистре UCSRC:
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
Если использовать 8-ми разрядные слова, то три бита должны быть установлены 011. Селектор URSEL взводится в 1 для передачи данных в UCSRC (есть еще теневой регистр). Биты RXB8 и TXB8 – это 8-ой разряд принимаемых/передаваемых данных соответственно. Они устанавливаются, если размер слова данных – 9 бит.
Порядок выполнения лабораторной работы: перед началом работы преподаватель проверяет знание особенностей UART-порта ввода-вывода исследуемого AVR-микропроцессора по предложенным материалам.
В процессе лабораторной работы учащиеся пишут программу, видоизменяют ее: пример вариации программы констатацией прихода выделенного символа включением светодиода предложен в тексте лабораторной работы, но можно предлагать и свои варианты, запускают эмулятор и записывают ответы (или делают скриншоты экрана) на подписываемый у преподавателя лист проведения испытаний.
Варианты заданий (тестовых вопросов):
какие пины AVR-микроконтроллера Atmega8 отвечают каналу UART,
какая микросхема используется для согласования уровней сигналов при подключении к COM-порту компьютера витой парой,
какой из двух светодиодов разрешается использовать на “отладочной плате” эмулятора для констатации прихода символов,
сколько каналов связи содержит, судя по схеме, микроконтроллер,
какие биты каких регистров необходимо установить перед написанием основных кодов программы связи по UART,
какие библиотеки используются, объяснить назначение библиотек,
как в данном варианте программы микроконтроллера назначить мигающий светодиод в соответствии с приходом выбранного символа,
как реализовать в данной версии программы перевод символов в коды азбуки Морзе?
ЛАБОРАТОРНАЯ РАБОТА 3. КНОПКИ И СВЕТОДИОДЫ
Генератор Button(PINDn) случайного “нажатия кнопки” эмулятора порта D отличается от _BV(PDn) рандомизированным характером результата. В режиме циклического опроса кнопки факт ее нажатия можно подсвечивать включением светодиода PC5 (рис. 12).
![]() |
Рисунок 12 – Зажигание светодиода по факту нажатия кнопки
В приведенном ниже примере цикла кнопка опрашивается дважды. Содержимое регистров указывается в шестнадцатиричной системе 0x.
Стоит отметить, что существуют два классических метода регистрации нажатия кнопки: программный метод и по прерыванию. Здесь мы рассматриваем первый из них. При таком подходе микроконтроллер сам интересуется портом, к которому подключена кнопка. При этом он не может долго выполнять какую-либо иную задачу, иначе пропустит событие. В этом и состоит недостаток режима. Достоинством является простота организации такой процедуры, поэтому ее применяют для тестов работоспособности микросхемы.
Пример программы для эмулятора приведен ниже:
Начало формы
//эмулятор ATmega8 #define F_CPU 8000000UL // кварц 8 MHz #include <avr/io. h> #include <util/delay. h>
void main(void){ int Q=0; // счетчик DDRC = 0xFF; // выход PORTC = 0x00; // зажечь светодиод DDRD = 0x00; // вход PORTD |= _BV(PD2); // кнопочный вход while (Q<2){ // Имитатор случайного нажатия кнопки PIND2 PIND = Button(PIND2); alert('PIND='+PIND); // проверка нажатия клавиши для второй ножки if (!(PIND&1<<PIND2)){ //инвертируем значения на выходах порта PORTC ^= 0xFF; _delay_ms(500); Q++; }//if }//while }
В примере нажатие эмулируемой кнопки на входе PIND2 используется для переключения состояния светодиода PC5. Условие обнаружения нажатия (нулевого состояния ножки) формулируется в характерной для кнопок логике, учитывающей номер n анализируемой линии PINDn. На практике к ножке микросхемы подпаивается реальная кнопка. Заметим, что до использования в программе на старте на этот вход программно подается 1 (подтяжка): PORTD |= _BV(PD2).
Пример проверен "в железе" на тестовых платах Olimex: начальные линии порта D используется в них для связи с компьютером, поэтому светодиод подключен к пятой ножке порта С (см. рис. 13).
На плате видны также COM-порт разъем, для подключения микропроцессора к компьютеру и микросхема согласования уровней MAX232.

Рисунок 13 – Отладочная плата для микроконтроллера со светодиодом и кнопкой
Для исключения влияния дребезга опрос кнопки устроен сложнее, сеть содержит соответствующие рецепты.
Порядок выполнения лабораторной работы: перед началом работы преподаватель проверяет знание особенностей подключения кнопок и светодиодов исследуемого AVR-микропроцессора по предложенным материалам.
В процессе лабораторной работы учащиеся пишут программу, видоизменяют ее: в данном случае помимо включения светодиода можно предложить варианты включения его только на каждое второе нажатие, на паре светодиодов несложно построить двоичный счетчик нажатий и т. п. Можно предлагать и свои варианты. Студенты запускают эмулятор и записывают ответы (или делают скриншоты экрана) на подписываемый у преподавателя лист проведения испытаний.
Варианты заданий (тестовых вопросов):
какие пины AVR-микропроцессора ATMEGA 8 можно использовать для подключения кнопок и светодиодов, каким образом осуществляется программная подтяжка входа к напряжению питания, между чем и чем подключается кнопка, заземляющая ножку микропроцессора на момент ее нажатия (укажите на схеме микропроцессора, ваше предположение), какие из двух светодиодов разрешается использовать на “отладочной плате” эмулятора для констатации нажатий кнопки, как организовать передачу по UART количество нажатий кнопки на компьютер, как в данном варианте программы микроконтроллера реализовать перевод количества нажатий в коды азбуки Морзе?
ЛАБОРАТОРНАЯ РАБОТА 4. ТАЙМЕР И ПРЕРЫВАНИЯ
Команды запрещения и разрешения прерывания cli() и sei() дифференцируются по типам прерывания флажками (битами) регистров, в данном случае, битом TOIE0 регистра TIMSK. В режиме прерывания факт срабатывания таймера можно подсвечивать включением светодиодов PD0, PC5 (рис. 14).
![]() |
Рисунок 14. Зажигание светодиодов по факту срабатывания таймера
Напомним, что работа по прерываниям является основным режимом использования микропроцессоров, в особенности от таймера или таймеров.
Для того, чтобы использовать таймер, надо, помимо основной программы, написать программу обработки прерывания. Для того, чтобы отметить, что прерывание осуществлено, в головной программе можно выводить справочную информацию дебаггером (например, содержимое счетчика числа прерываний T) или зажигать светодиод по накоплении счетчиком заданного значения и т. п.
Пример программы для эмулятора приведен ниже:
Начало формы
//эмулятор ATmega8 #define F_CPU 8000000UL // кварц 8 MHz #include <avr/io. h> #include <util/delay. h> #include <avr/interrupt. h>
//variables int volatile T=0; //program // прерывание по переполнению ISR(TIMER0_OVF_vect){ PORTD ^= _BV(PD0); // мигаем светодиодом PD0 T++; } void main(void){ DDRC = 0xFF; // выход DDRD = 0xFF; // выход PORTC = 0x00; PORTD = 0x00; // режим таймера TCCR0=(1 << CS01)|(1 << CS00); // делитель TCNT0 = 0; // счетчик таймера, тик 10 миллисекунд TIMSK = (1 << TOIE0); // разрешить прерывание таймера sei(); // Разрешить прерывания while (1){ alerts(); puts(T); // вывод дебаггера if (T>2) { PORTC ^= _BV(PC5); // мигаем светодиодом PC5 T=0; }//if _delay_ms(250); }//while }
Отличие от ранее рассмотренных программ небольшое. Во введении декларируется имя программы обработки прерывания ISR по событию сброса счетчика таймера и пишется ее содержимое: инверсия выходов порта.
В главной программе присутствует формализованная строчка выбора режима TCCR0 работы (нулевого) таймера со счетчиком TCNT0. Выполнение программы обработки прерывания управляется флажком разрешения TIMSK.
В эмуляторе тик таймера составляет 10 миллисекунд. На практике таймер тикает чаще. У более продвинутых моделей микроконтроллеров для варьирования времени срабатывания есть штатный регистр под порог накопления OCR0.
Директива «volatile» указывает глобальные переменные, изменяемые при прерываниях. Это важно, поскольку оптимизатор компилятора Си удаляет формально никогда не выполняющиеся (в рамках программы) условия с ними и возникает ошибка.
Порядок проведения лабораторной работы: перед началом работы преподаватель проверяет знание особенностей работы исследуемого AVR-микропроцессора в режиме прерывания по предложенным материалам.
В процессе лабораторной работы учащиеся пишут программу, видоизменяют ее: в данном случае помимо переключения светодиода можно предложить варианты включения его только на каждый второй тик таймера, на паре светодиодов несложно построить двоичный счетчик прерываний, светодиод можно зажигать в головной программе и т. п. Можно предлагать и свои варианты. Студенты запускают эмулятор и записывают ответы (или делают скриншоты экрана) на подписываемый у преподавателя лист проведения испытаний.
Варианты заданий (тестовых вопросов): как обозначаются глобальные переменные компилятора AVR-микропроцессора (подлежащие изменению в подпрограммах) для того, чтобы оптимизатор кодов не сократил выражения с ними, как можно построить двоичный счетчик прерываний, какие из двух светодиодов разрешается использовать на “отладочной плате” эмулятора для регистрации прерываний от таймера, как организовать передачу по UART количество прерываний (условное время T) на компьютер, как в данном варианте программы микроконтроллера реализовать перевод количества прерываний в коды азбуки Морзе?
ЛАБОРАТОРНОЕ ЗАНЯТИЕ 5. ВНЕШНИЕ ПРЕРЫВАНИЯ
Периодическое нажатие кнопки PD2 в эмуляторе имитируется системой. Макросы sei() и cli() разрешают и запрещают прерывания глобально, помимо нужно разрешить частное прерывание с помощью GIMSK, поскольку по умолчанию они все запрещены. В режиме прерывания факт нажатия кнопки можно подсвечивать включением любого из светодиодов на PD0, PC5 (рис. 15).
![]() |
Рисунок 15. Зажигание светодиода по факту нажатия кнопки
В данном случае мы снова возвращаемся к кнопке, но на более высоком уровне организации факта регистрации ее нажатия при помощи прерывания.
Основная программа свободна от опроса состояния соответствующего пина. Физически кнопка подключается к микроконтроллеру ровно также, как и ранее, меняется только программа.
Программа обработки прерывания ISR в качестве настраиваемого аргумента использует вектор прерывания (адрес). Этот адрес (константа) берется из справочника.
Пример программы для эмулятора приведен ниже:
#define F_CPU 8000000L
#include <avr/io. h>
#include <util/delay. h>
#include <avr/interrupt. h>
//variables
int volatile T=0;
//program
//обработка прерываний
ISR(SIG_INTERRUPT0){
PORTD ^= _BV(PD0);
T++;
}
int main(void){
DDRC |= 1<<5; // выход
PORTC |= _BV(PC5);
DDRD |= 1<<0; // выход
PORTD |= _BV(PD0);
DDRD &= ~(0<<2); // вход
PORTD |= _BV(PD2); // подтяжка резистора кнопки
// НАСТРОЙКА ПРЕРЫВАНИЯ
GIMSK = 1<<INT0; // INT0 обозначена кнопка PD2
MCUCR = 1<<ISC01; // прерывание по низкому уровню
sei(); // старт
while(1){
alerts(); puts(T); // вывод дебаггера
if (T>1) {
PORTC ^= _BV(PC5);
T=0;
}//if
delay_ms(500);
}//while
}
У микропроцессора ATmega16 устаревшее обозначение GIMSK заменено на GICR, в остальном все то же самое.
В системе прерываний с кнопкой PD2 связан сигнал INT0, что видно из рисунка микропроцессора. Биты ISCx0 и OSCx1 регистра MCUCR устанавливаются в соответствии с нужным режимом прерывания (по низкому уровню, по изменению уровня, по перепаду с 1 в 0 или по перепаду с 0 в 1).
Директива «volatile» указывает глобальные переменные, изменяемые при прерываниях (см. замечание выше). Пишется тело подпрограммы обработки прерывания ISR, переключающей светодиод, подсоединенный к ножке PD0, и изменяющей глобальную переменную T.
Основная программа управляет светодиодом PC5 в зависимости от T, значение которой сбрасывается в 0.
Порядок проведения лабораторной работы: перед началом работы преподаватель проверяет знание особенностей подключения кнопок и светодиодов исследуемого AVR-микропроцессора по предложенным материалам.
В процессе лабораторной работы учащиеся пишут программу, видоизменяют ее: в данном случае помимо включения светодиода можно предложить варианты включения его только на каждое второе нажатие, на паре светодиодов несложно построить двоичный счетчик нажатий и т. п. Можно предлагать и свои варианты. Студенты запускают эмулятор и записывают ответы (или делают скриншоты экрана) на подписываемый у преподавателя лист проведения испытаний.
Варианты заданий (тестовых вопросов): чем отличается режим обработки прерывания от программного опроса состояния пина кнопки, какие пины AVR-микропроцессора ATMEGA 8 можно использовать для подключения кнопок и светодиодов, какие из двух светодиодов разрешается использовать на “отладочной плате” эмулятора для констатации нажатий кнопки, как организовать передачу по UART количество нажатий кнопки на компьютер, как в данном варианте программы микроконтроллера реализовать перевод количества нажатий в коды азбуки Морзе?
Литература
1. , Сергеев персональные сети на основе ZigBee
/ учебное пособие. – СПб: ГУАП, 2012. – 58 с.
2. , , Сергеев сети WPAN на основе ZigBee / методические указания к выполнению лабораторных работ.– СПб: ГУАП, 2012. – 38 с.
3. Шпак на языке C для AVR и PIC микроконтроллеров (дополнить из БИБЛИОТЕКИ *****)
Содержание
ВВЕДЕНИЕ................................................................................................................................... 3
Общая информация об ETRX-модулях............................ Ошибка! Закладка не определена.
АТ-стиль команд................................................................ Ошибка! Закладка не определена.
Оптимизация работы сети................................................ Ошибка! Закладка не определена.
Лабораторное занятие 1. Координатор беспроводной сети ZigBee Ошибка! Закладка не определена.
Лабораторное занятие 2. Минимальная сеть на основе ZigBee модуля Ошибка! Закладка не определена.
Лабораторное занятие 3. Назначение модуля конечным устройством Ошибка! Закладка не определена.
Лабораторное занятие 4. Установка режима экономии энергии Ошибка! Закладка не определена.
Лабораторное занятие 5. Управление периферией микроконтроллера Ошибка! Закладка не определена.
Лабораторное занятие 6. Считывание значений датчиков Ошибка! Закладка не определена.
Лабораторное занятие 7. Сбор данных с помощью таймера Ошибка! Закладка не определена.
Лабораторное занятие 8. Передача данных по радиоканалу Ошибка! Закладка не определена.
Справочная информация по модулям Telegesis.............. Ошибка! Закладка не определена.





