интегрирован в чип микроконтроллера. Похожее устройство имеет и модель Due, но в ней используется процессор с напряжением питания 3,3 В вместо 5 В.

Рис. 2.1. Устройство платы Arduino Uno

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

Далее в книге будет показано, как можно программировать платы Arduino непосредственно через последовательный интерфейс внутрисхемного программирования ICSP (In Circuit Serial Programming).

Процессоры AVR

Во всех платах семейства Arduino используются микроконтроллеры, производимые компанией Atmel. Все они имеют схожую аппаратную архитектуру и, за исключением микроконтроллера, используемого в модели Due (SAM3X8E ARM Cortex-M3 CPU), схожую конструкцию.

ATmega328

В Arduino Uno и ее предшественнице Duemilanove используется микроконтроллер ATmega328. Фактически первые версии Arduino комплектовались микроконтроллером ATmega168, который, по сути, является полным аналогом ATmega328, но имеет в два раза меньше памяти каждого вида.

На рис. 2.2 изображена функциональная схема ATmega328 из технического описания микроконтроллера. Полное описание можно найти по адресу www.atmel.com/Images/doc8161.pdf. Вам стоит просмотреть ее, чтобы лучше понимать, как действует это устройство.

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

Рис. 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

Они немного похожи на переменные в том

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату