Чтение онлайн

на главную

Жанры

Программируем Arduino. Основы работы со скетчами
Шрифт:

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

Рис. 2.2. ATmega328

Для

данных, которые должны сохраняться даже после выключения питания, следует использовать память третьего типа — электрически стираемую программируемую постоянную память (Electrically Erasable Programmable Read-Only Memory, EEPROM).

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

Все остальное на рис. 2.2 так или иначе связано с аналого-цифровым преобразователем, портами ввода/вывода и последовательными интерфейсами трех типов, поддерживаемыми микроконтроллером: УСАПП, ППИ и ДПИ.

ATmega32u4

Микроконтроллер ATmega32u4В используется в моделях Arduino Leonardo и LilyPad USB, а также Micro и Nano. Он похож на ATmega328, но имеет более современный чип с несколькими дополнениями, отсутствующими в ATmega328:

• со встроенным интерфейсом USB, благодаря чему отпала необходимость в дополнительных аппаратных компонентах поддержки USB;

• с большим числом контактов с возможностью ШИМ;

• с двумя последовательными портами;

• с отдельными контактами интерфейса I2C (в Arduino эти контакты также играют роль аналоговых входов/выходов);

• с объемом статического ОЗУ больше на 0,5 Кбайт.

В модели Leonardo используется микроконтроллер в корпусе для поверхностного монтажа, то есть он припаивается непосредственно к плате, тогда как ATmega328 выпускается в корпусе с двумя рядами контактов, вставляемом в панель для интегральных микросхем, как на плате Arduino Uno.

ATmega2560

Микроконтроллер ATmega2560 используется в моделях Arduino Mega 2560 и Arduino Mega ADK. Он не быстрее других микроконтроллеров ATmega, но имеет больше памяти каждого типа (256 Кбайт флеш-памяти, 8 Кбайт статического ОЗУ и 4 Кбайт ЭСППЗУ), а также намного больше контактов ввода/вывода.

AT91SAM3X8E

Этот микроконтроллер является сердцем Arduino Due. Он существенно быстрее других микроконтроллеров ATmega, упоминавшихся ранее, и работает на тактовой частоте 84 МГц против обычных для ATmega 16 МГц. Имеет 512 Кбайт флеш-памяти и 96 Кбайт статического ОЗУ. Данный микроконтроллер не имеет ЭСППЗУ. Поэтому для долговременно хранения данных требуется использовать дополнительные устройства, такие как держатели карт памяти или устройства с флеш-памятью или ЭСППЗУ. Сам микроконтроллер обладает множеством дополнительных особенностей, включая два аналоговых выхода, делающих его идеальным инструментом для генерации звуков.

Arduino и Wiring

Фреймворк Wiring включает простые в использовании функции управления контактами на плате Arduino, однако основная его часть написана на языке C.

До недавнего времени в каталоге установки Arduino IDE можно было найти файл WProgram.h (программа Wiring). Теперь его замещает похожий файл с именем Arduino.h,

что свидетельствует о постепенном отдалении Arduino от первоначального проекта Wiring.

Заглянув в каталог установки Arduino IDE, можно увидеть папку hardware, внутри нее — папку arduino, а внутри этой папки — папку cores. Обратите внимание на то, что в Mac в эту папку можно попасть, только если щелк­нуть правой кнопкой на ярлыке приложения Arduino, выбрать в контекстном меню пункт View Package Contents (Показать содержимое пакета) и затем перейти в папку Resources/Java/.

Внутри папки cores находится еще одна папка с именем arduino, в которой вы найдете множество заголовочных файлов на языке C с расширением .h и файлов реализации на языке C++ с расширением .cpp (рис. 2.3).

Рис. 2.3. Внутри папки cores

Открыв Arduino.h в текстовом редакторе, вы увидите, что он состоит из множества инструкций #include. Они подключают определения из других заголовочных файлов в папке cores/arduino в процессе компиляции (преобразования скетча в форму, пригодную для записи во флеш-память микроконтроллера).

Там же можно увидеть определения констант, например:

#define HIGH 0x1

#define LOW 0x0

#define INPUT 0x0

#define OUTPUT 0x1

#define INPUT_PULLUP 0x2

Они немного похожи на переменные в том смысле, что, обратившись к имени HIGH, например, программа получит значение 1. Значение определено как 0x1, а не как 1, потому что в этом файле все значения определяются в шестнадцатеричном формате (в системе счисления с основанием 16). Эти определения в действительности не являются переменными — их называют директивами препроцессора C, то есть когда ваш скетч будет преобразован в формат, пригодный для записи во флеш-память микроконтроллера, все слова HIGH, LOW и другие автоматически будут преобразованы в соответствующие числа. Это дает определенные преимущества перед использованием переменных, так как не требуется выделять память для их хранения.

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

setMode(5, 1);

setMode(5, OUTPUT);

Также в файле arduino.h присутствует множество сигнатур функций, например таких:

void pinMode(uint8_t, uint8_t);

void digitalWrite(uint8_t, uint8_t);

int digitalRead(uint8_t);

int analogRead(uint8_t);

void analogReference(uint8_t mode);

void analogWrite(uint8_t, int);

Они предупреждают компилятор о функциях, которые фактически реализуются где-то в другом месте. Возьмем, для примера, первую сигнатуру. Она сообщает, что функция pinMode принимает два аргумента (которые, как вы уже знаете, представляют номер контакта и режим) типа uint8_t. Команда void говорит, что после вызова функция ничего не возвращает.

Вам может показаться странным, почему для параметров выбран тип uint8_t, а не int. Обычно, определяя номер контакта, вы указываете значение типа int. На самом деле int — это универсальный тип, широко используемый в скетчах. Он избавляет пользователей от проблемы выбора из большого разнообразия доступных типов. Но в диалекте языка C для Arduino тип int представляет 16-битные целые значения со знаком в диапазоне между –32 768 и 32 767. Однако номер контакта не может быть отрицательным, и вам едва ли когда-нибудь попадется плата Arduino с 32 767 контактами.

Поделиться:
Популярные книги

Попаданка

Ахминеева Нина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка

Мимик нового Мира 6

Северный Лис
5. Мимик!
Фантастика:
юмористическая фантастика
попаданцы
рпг
5.00
рейтинг книги
Мимик нового Мира 6

Кодекс Охотника. Книга XXVII

Винокуров Юрий
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII

Разведчик. Заброшенный в 43-й

Корчевский Юрий Григорьевич
Героическая фантастика
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.93
рейтинг книги
Разведчик. Заброшенный в 43-й

"Фантастика 2024-5". Компиляция. Книги 1-25

Лоскутов Александр Александрович
Фантастика 2024. Компиляция
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Фантастика 2024-5. Компиляция. Книги 1-25

Сила рода. Том 1 и Том 2

Вяч Павел
1. Претендент
Фантастика:
фэнтези
рпг
попаданцы
5.85
рейтинг книги
Сила рода. Том 1 и Том 2

Последняя Арена 5

Греков Сергей
5. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 5

Обгоняя время

Иванов Дмитрий
13. Девяностые
Фантастика:
попаданцы
5.00
рейтинг книги
Обгоняя время

Новый Рал

Северный Лис
1. Рал!
Фантастика:
фэнтези
попаданцы
5.70
рейтинг книги
Новый Рал

Пушкарь. Пенталогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.11
рейтинг книги
Пушкарь. Пенталогия

Романов. Том 1 и Том 2

Кощеев Владимир
1. Романов
Фантастика:
фэнтези
попаданцы
альтернативная история
5.25
рейтинг книги
Романов. Том 1 и Том 2

Кодекс Крови. Книга ХII

Борзых М.
12. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Крови. Книга ХII

Неверный

Тоцка Тала
Любовные романы:
современные любовные романы
5.50
рейтинг книги
Неверный

Приручитель женщин-монстров. Том 8

Дорничев Дмитрий
8. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 8