1.1. Знакомство с платформой Arduino


Если у вас уже есть некоторое представление о платформе Arduino и его возможностях, можно начинать более подробное изучение Arduino. В этой главе вы познакомитесь с аппаратными средствами, узнаете о среде и языке программирования, а также напишете первую программу. А при наличии деталей из списка, приведенного в начале главы, вы сможете увидеть результат работы программы - мигание светодиода!

ПРИМЕЧАНИЕ

Вводный видеоурок по платформе Arduino можно найти на странице www.jeremyblum.com/2011/01/02/arduino-tutorial-series-it-begins/[4] и на сайте издательства Wiley.


- 28 -

При изучении платформы Arduino для повторения проектов из книги вам потребуются три главных компонента:

• основная плата Arduino;

• платы расширения;

• интегрированная среда разработки Arduino - Arduino IDE.

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

1.2. Аппаратная часть


Все платы Arduino содержат основные компоненты, необходимые для программирования и совместной работы с другими схемами (рис. 1.1 ):

• микроконтроллер Atmel;

• USB-интерфейс для программирования и передачи данных;

• стабилизатор напряжения и выводы питания;

• контакты входов ввода-вывода; индикаторные светодиоды (Debug, Power, Rx, Тх);

• кнопку сброса;

• встроенный последовательный интерфейс программирования (ICSP).

1.3. Микроконтроллеры Atmel


Основной элемент платы Arduino - микроконтроллер Atmel. На большинстве плат Arduino, включая Arduino Uno, установлен микроконтроллер ATmega. На плате Arduino Uno, изображенной на рис. 1.1, вы видите микроконтроллер ATmega 328.

Исключением является плата Due, укомплектованная микроконтроллером ARM Cortex.

Микроконтроллер исполняет весь скомпилированный код программы. Язык Arduino предоставляет доступ к периферийным устройствам микроконтроллера: аналого-цифровым преобразователям (ADCs), цифровым портам ввода-вывода, коммуникационным шинам (включая I2C и SPI) и последовательным интерфейсам.

На плате все эти порты выведены на штырьковые контакты.

К тактовым контактам микроконтроллера ATmega подключен кварцевый резонатор на 16 МГц.

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

Рис. 1.1. Компоненты платы Arduino Uno

1. Кнопка сброса

2. USB — разъем

3. Конвертер - последовательного и USB интерфейсов

4. Разъем для подключения внешнего источника питания 7-12 В

5. Цифровые контакты ввода-вывода

6. Светодиод, предназначенный для отладки

7. Контакты интерфейса ICSP для программирования микроконтроллера

8. Микроконтроллер ATmega 328

9. Входы аналого-цифрового преобразователя

10. Контакты питания и вспомогательные контакты

- 30 -

Большинство плат Arduino оснащено светодиодом отладки (Debug), подсоединенным к контакту 13, который позволит реализовать нашу первую программу (мигающий светодиод) без дополнительных компонентов.

1.4. Интерфейсы программирования


Обычно программы микроконтроллера ATmega, написанные на С или Ассемблере загружаются в микроконтроллер через интерфейс ICSP с помощью программатора (рис. 1.2). Возможно, самая важная особенность Arduino - непосредственное программирование через USB-порт, без дополнительного программатора. Эту функцию обеспечивает загрузчик Arduino, записанный в микроконтроллер ATmega на заводе-изготовителе, и позволяющий загружать пользовательскую программу на плату Arduino по последовательному порту USART.

В случае Arduino Uno и Mega 2560 интерфейсом между кабелем USB и контактами USART на основном микроконтроллере служит дополнительный контроллер (ATmega 16U2 или 8U2 в зависимости от версии платы). На плате Arduino Leonardo установлен основной микроконтроллер ATmega 32U4, имеющий встроенный контроллер USB. В более старых платах Arduino функцию сопряжения между последовательным портом ATmega и интерфейсом USB выполняла специальная микросхема.

Загрузчик - это фрагмент программного кода, который записан в зарезервированное пространство памяти программы Arduino. Микроконтроллеры AVR обычно программируются с помощью ICSP, который взаимодействует с микроконтроллером через последовательный периферийный интерфейс (SPI). Этот способ предполагает наличие программатора, например, STK500 или ISP MKII ( см. рис. 1.2).

Рис. 1.2. AVR программатор ISP MKII

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

- 31 -

При подаче команды загрузки от IDE Arduino вспомогательный контроллер (ATmega 16U2 или 8U2 в случае Arduino Uno) сбрасывает основной микроконтроллер, подготавливая его к загрузке. Затем внешний компьютер начинает отправлять код программы, который микроконтроллер получает через соединение UART.

Загрузчики занимают в памяти довольно много места, потому что они реализуют простое программирование через USB без внешних аппаратных средств. Однако у них есть два основных недостатка: + они занимают место в памяти (приблизительно 2 Кбайт), которое могло бы пригодиться при написании программ; + при наличии загрузчика выполнение вашей программы всегда будет задерживаться на несколько секунд при начальной загрузке, поскольку загрузчик обрабатывает запрос на программирование.