Чип ATmega16u2 на плате Arduino служит мостом между USB-портом компьютера и последовательным портом главного процессора. Предыдущие версии Uno и Mega оснащались чипом ATmega8u2. Эти чипы работают при помощи ПО, которое называется «прошивкой» или «зашитой программой» – это ПО, которое программируется в чип «намертво» и поменять его нельзя. Поменять нельзя, но зато можно обновить! Это можно сделать при помощи специального USB-протокола под названием DFU (расшифровывается как «device firmware update», т.е. «обновление прошивки на устройстве»).
Ниже – шаги, описывающие обновление прошивки на Atmega16u2.
Проверяем, нужна ли прошивка
Платы Arduino Uno и Mega 2560 поставляются с обновленной версией прошивки ATmega16u2. Чтобы проверить версию прошивки на плате, подключите ее к компьютеру и следуйте следующим инструкциям (они разнятся в зависимости от ОС):
На Windows (до «семерки»): Открываем «Диспетчер устройств» и ищем пункт «Порты» – плата должна быть именно там. Кликаем на нее правой кнопкой и выбираем пункт «Свойства». Открываем вкладку «Драйвер», а затем кликаем по кнопке «Сведения». В одном из свойств вы увидите VID, PID и номер версии.
На Mac OS X: Запустите программу «Информация о системе» (например, выбрав пункт «Об этом Mac» в меню Apple, а затем кликнув на кнопку «Подробнее»), перейдите к пункту «USB» и кликните на пункте для платы Arduino. Версия прошивки будет указана в пункте «версия» (например, «0.01» или «0001»).
Следуя этим инструкциям, установливаем MacPorts. Установив, открываем окно терминала и вписываем туда
sudo port install dfu-programmer.
Примечание:Если вы никогда раньше не пользовались sudo, у вас запросят пароль. Используйте пароль, через который залогинились в Mac. Команда sudo позволяет запускать команды от лица администратора.
Выберите версию, соответствующую вашей плате – либо «arduino-usbserial/Arduino-usbserial-uno.hex», либо «arduino-usbserial/Arduino-usbserial-mega.hex».
Прошивку также можно найти в IDE Arduino, в папке «/hardware/arduino/firmwares/arduino-usbserial». На OSX, чтобы найти эту папку, нужно правой кнопкой мыши кликнуть (либо зажать клавишу Command и кликнуть левой кнопкой мыши) по иконке IDE Arduino, а затем выбрать «Показать содержимое пакета».
Если ваша плата – это Arduino Uno R1
В этом случае нужно припаять резистор на 10 кОм (коричневый-черный-оранжевый) к задней части платы в том месте, которое показано на картинке.
Подключите Arduino к компьютеру при помощи USB-кабеля
Так же, как и при программировании.
Сбросьте 8u2 или 16u2
Чтобы сделать это, просто соедините контакт для сброса (Reset) с «землей» (Gnd). Эти контакты находятся рядом с USB-коннектором, как показано на картинке ниже. Просто соедините их ненадолго при помощи куска провода.
Чтобы проверить, сбросился ли чип, зайдите в IDE Arduino и посмотрите список последовательных портов. Если сброс прошел успешно, последовательного порта для вашей платы там быть не должно.
Программируем чип
Windows
Используем FLIP, чтоб загрузить файл с расширением «*.hex» на плату.
Mac и Linux
Будучи в окне терминала, переходим в директорию, где находится новая прошивка. Если вы сохранили ее в папке с загрузками, то нужно написать следующее:
cd Downloads/
Попав в нужную папку, пишем:
sudo dfu-programmer atmega16u2 erase
Когда эта команда выполнится, и перед вами снова будет командная строка, пишем:
Примечание:Если ваша плата оснащена ATmega8u2, то в строке выше вместо atmega16u2 нужно вписать atmega8u2.
Отключите плату и снова подключите
По сути, все. Теперь на вашей плате новая прошивка. Зайдите в IDE Arduino и проверьте список последовательных портов. Ваш порт должен снова появиться.
Использование других прошивок
Чипы 8u2 и 16u2 достаточно гибки, поэтому позволяют использовать и другие прошивки, благодаря которым ваша плата может появиться на ПО компьютера как другой девайс (контроллер MIDI, HID и т.д.). Руководства смотрите в ссылках ниже:
Calibration - Определение максимума и минимума для данных от аналогового датчика.
Fading - Использование выходного аналогового контакта (ШИМ) для затухания/загорания светодиода.
Smoothing - Сглаживание серии данных, считанных с входного аналогового контакта.
Связь
ReadASCIIString - Анализ строки, состоящей из разделенных запятыми int-значений, и их последующее использование для управления RGB-светодиодом.
ASCII Table - Демонстрирует продвинутые способы вывода данных на Serial Monitor.
Dimmer - Изменение яркости светодиода при помощи движения мышкой.
Graph - Отправка данных на компьютер и их графическое отображение в скетче Processing.
Physical Pixel - Включение/выключение светодиода путем отправки данных со скетча Processing (или Max/MSP) на Arduino.
Virtual Color Mixer - Отправка с Arduino на компьютер сразу нескольких значений, а затем их считывание при помощи скетча для Processing или Max/MSP.
Serial Call Response - Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»).
Serial Call Response ASCII - Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»). До передачи данные зашифровываются в ASCII.
SerialEvent - Демонстрирует использование SerialEvent().
MIDI - Передача через последовательный порт сообщений с MIDI-нотами.
MultiSerialMega - Использование двух последовательных портов на Arduino Mega.
Управляющие структуры
If Statement - Как использовать оператор «if» для создания условий, опирающихся на входные аналоговые данные, при которых светодиод будет либо включаться, либо оставаться выключенным.
For Loop - Управление несколькими светодиодами, чтобы они мигали, как LED-полоска у автомобиля Китт из сериала «Рыцарь дорог».
Array - Вариация примера «For Loop», но с использованием массива.
While Loop - Использование цикла while() для калибровки датчика. Калибровка включается при нажатии на кнопку.
Switch Case - Как совершать какие-либо действия в зависимости от значений, полученных от датчика. Эквивалент примера «If Statement», но если бы условий было не два, а четыре. Этот пример демонстрирует, как дробить диапазон данных от датчика на четыре «суб-диапазона», а затем в зависимости от полученных результатов совершать одно из четырех действий.
Switch Case 2 - Второй пример, демонстрирующий использование оператора switch. Показывает, как совершать различные действия в зависимости от определенных символов, полученных через последовательный порт.
Датчики
ADXL3xx - Считывание данных с акселерометра ADXL3xx.
Knock - Определение стука при помощи пьезоэлемента.
Memsic2125 - Считывание данных с 2-осевого акселерометра Memsic2125.
Ping - Определение объектов при помощи ультразвукового дальномера.