- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Программируем Arduino. Основы работы со скетчами - Монк Саймон
Шрифт:
Интервал:
Закладка:
Чтобы записать загрузчик с помощью AVR Studio и программатора AVR Dragon, подключите программатор к колодке с контактами ICSP (рис. 2.6).

Рис. 2.7. Установка загрузчика в плату Uno в среде AVR Studio 4
Обратите внимание на то, что на плате Arduino Uno имеются две такие колодки (вторая используется для программирования интерфейса USB).
В меню Tools (Инструменты) выберите пункт Program AVR (Программировать AVR) и установите соединение с микроконтроллером ATmega328 в плате Arduino. Затем в разделе Flash (Флеш-память) выберите требующийся шестнадцатеричный файл и щелкните на кнопке Program (Программировать).
Установка загрузчика с помощью Arduino IDE и второй платы Arduino
Установка нового загрузчика с другой платы Arduino выполняется очень просто. Этот подход намного проще и безопаснее, чем использование AVR Studio. Среда разработки Arduino IDE включает необходимую функцию. Далее перечислено все, что вам потребуется:
• две платы Arduino Uno;
• 6-проводной шлейф с двумя разъемами «папа–папа» (или шесть изолированных проводов);
• один короткий изолированный провод;
• конденсатор на 10 мкФ и 10 В (также подойдет конденсатор на 100 мкФ).
Сначала нужно соединить платы проводами, как описывается в табл. 2.1.
Таблица 2.1. Соединение контактов двух плат Arduino для записи загрузчика
Плата-программатор
Программируемая плата
GND
GND
5 V
5 V
13
13
12
12
11
11
10
Reset
Конденсатор емкостью 10 мкФ включите между контактами Reset и GND на программируемой плате Arduino (то есть на плате, куда будет записан загрузчик). Более длинный положительный вывод конденсатора должен быть подключен к контакту Reset.
На рис. 2.8 показаны соединенные платы Arduino. Плата справа выступает в роли программатора. Обратите внимание на то, как контакт 10 платы-программатора соединен изолированным проводом с контактом Reset программируемой платы. Соединение выполнено так, что к одному контакту Reset на программируемой плате одновременно подключены провод и положительный вывод конденсатора.
Имейте в виду, что плата, выступающая в роли программатора, управляет программируемой платой, поэтому к порту USB компьютера должна быть подключена только плата-программатор.
На плату-программатор требуется установить специальный скетч. Его можно найти в меню File—>Examples (Файл—>Примеры). Он называется ArduinoISP и находится в конце раздела Examples (Встроенные примеры).

Рис. 2.8. Программирование с помощью второй платы Arduino
Как обычно, выберите тип платы и порт и выгрузите скетч ArduinoISP в плату-программатор. Затем в меню Tools (Инструменты) перейдите в подменю Programmer (Программатор) и выберите пункт ArduinoISP.
Наконец, выберите в меню Tools (Инструменты) пункт Burn Bootloader (Записать Загрузчик). Процедура записи займет одну-две минуты, в течение которых должны мигать светодиоды Rx и Tx на плате-программаторе и светодиод L на программируемой плате.
Когда процедура завершится, в программируемый микроконтроллер будет установлен новый загрузчик.
В заключение
В этой главе мы заглянули под капот платы Arduino и посмотрели, как она работает в действительности. Я показал вам, что скрывается за фасадом окружения Arduino.
В следующей главе мы посмотрим, как пользоваться прерываниями и как заставить Arduino откликаться на внешние события, вызываемые таймером, применяя для этого прерывания.
7 Аналогичные обсуждения можно найти на русскоязычном форуме http://arduino.ru/forum. — Примеч. пер.
3. Прерывания и таймеры
Прерывания позволяют микроконтроллерам откликаться на события без необходимости постоянно проверять выполнение каких-либо условий, чтобы определить момент, когда произошли важные изменения. В дополнение к возможности подключать источники прерываний к некоторым контактам можно также использовать прерывания, генерируемые таймером.
Аппаратные прерывания
Для демонстрации использования прерываний вернемся вновь к цифровым входам. Часто для определения момента некоторого входного события (например, нажатия кнопки) используется такой код:
void loop()
{
if (digitalRead(inputPin) == LOW)
{
// Выполнить какие-то действия
}
}
Этот код постоянно проверяет уровень напряжения на контакте inputPin, и, когда digitalRead возвращает LOW, выполняются какие-то действия, обозначенные комментарием // Выполнить какие-то действия. Это вполне рабочее решение, но что если внутри функции loop требуется выполнить массу других операций? На все эти операции требуется время, поэтому есть вероятность пропустить короткое нажатие на кнопку, пока процессор будет занят чем-то другим. На самом деле пропустить факт нажатия на кнопку почти невозможно, потому что по меркам микроконтроллера она остается нажатой очень долго.
Но как быть с короткими импульсами от датчика, которые могут длиться миллионные доли секунды? Для приема таких событий следует использовать прерывания, определяя функции, которые будут вызываться по этим событиям, независимо от того, чем занят микроконтроллер. Такие прерывания называют аппаратными прерываниями (hardware interrupts).
В Arduino Uno только два контакта связаны с аппаратными прерываниями, из-за чего они используются очень экономно. В Leonardo таких контактов пять, на больших платах, таких как Mega2560, их намного больше, а в Due все контакты поддерживают возможность прерывания.
Далее рассказывается, как работают аппаратные прерывания. Чтобы опробовать представленный пример, вам понадобятся дополнительная макетная плата, кнопка, сопротивление на 1 кОм и несколько соединительных проводов.
На рис. 3.1 изображена собранная схема. Через сопротивление на контакт D2 подается напряжение HIGH, пока кнопка не будет нажата, в этот момент произойдет заземление контакта D2 и уровень напряжения на нем упадет до LOW.
Загрузите в плату Arduino следующий скетч:
// sketch 03_01_interrupts
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
attachInterrupt(0, stuffHapenned, FALLING);
}
void loop()
{
}
void stuffHapenned()
{
digitalWrite(ledPin, HIGH);
}

Рис. 3.1. Электрическая схема для испытания прерываний
Помимо настройки контакта LED на работу в режиме цифрового выхода функция setup с помощью еще одной строки связывает функцию с прерыванием. Теперь в ответ на каждое прерывание автоматически будет вызываться эта функция. Рассмотрим эту строку внимательнее, потому что аргументы вызываемой здесь функции выглядят несколько необычно:
attachInterrupt(0, stuffHapenned, FALLING);
Первый аргумент — 0 — это номер прерывания. Было бы понятнее, если бы номер прерывания совпадал с номером контакта, но это не так. В Arduino Uno прерывание 0 связано с контактом D2, а прерывание 1 — с контактом D3. Ситуация становится еще более запутанной из-за того, что в других моделях Arduino эти прерывания связаны с другими контактами, а кроме того, в Arduino Due нужно указывать номер контакта. На плате Arduino Due с прерываниями связаны все контакты.
Я еще вернусь к этой проблеме, а пока перейдем ко второму аргументу. Этот аргумент — stuffHappened — представляет имя функции, которая должна вызываться для обработки прерывания. Данная функция определена далее в скетче. К таким функциям, их называют подпрограммами обработки прерываний (Interrupt Service Routine, ISR), предъявляются особые требования. Они не могут иметь параметров и ничего не должны возвращать. В этом есть определенный смысл: даже при том что они вызываются в разных местах в скетче, нет ни одной строки кода, осуществляющей прямой вызов ISR, поэтому нет никакой возможности передать им параметры или получить возвращаемое значение.