ATMEGA328P-PU как замена Arduino
Раз уж Arduino стал практически мейнстримом, напишу обзор про микроконтроллеры ATMEGA328
Данный микроконтроллер является сердцем Arduino Uno, Nano, Pro Mini и ряда других плат.
Но Arduino — это слишком просто. Купил, подключил, загрузил программу и вот уже гордо мигает светодиод на плате. Мы же легких путей не ищем и
поэтому и куплены данные микросхемы. Тем кому интересно, прошу под кат.
Итак зачем все это нужно?
Ну во первых, это экономия в деньгах (Правда с ценами на Pro Mini очень сомнительная)
Во вторых, экономия места
В третьих, микросхемы без всяких преобразователей и светодиодов очень экономичны, что немаловажно в проектах с батарейным питанием.
В четвертых, проекты на Arduino весьма неопрятны из за мотка проводов вокруг платы. Микроконтроллеры же вполне можно паять на макетках или нормальных печатных платах.
Ну и в пятых, это ведь интересно и познавательно!
Заказал я данные микросхемы на Алиэксперсс. Лот состоит из 10 микроконтроллеров, 10 панелек для них, и 10 кварцевых резонаторов на 16МГц. Сейчас лот подорожал до $35 и купить за адекватную цену Atmegу можно разве что на Таобао.
Заказ шел целых 97 дней. Трек быстро отозвался в Китае и завис, не дойдя до России. Я успел пообщаться с продавцом, открыть спор и выиграть его, когда нежданно посылка нарисовалась в Москве. Деньги я вернул продавцу на PayPal, видимо у него где-то есть еще и магазин.
Итак все довольны — продавец получил заслуженную прибыль, а я долгожданный товар.
Подробное описание ATMEGA328 можно посмотреть на сайте atmel.com.
Сам товар:
Контроллер с панелькой и кварцем
Как это все готовить?
Для программирования взят очень дешевый программатор USBasp за 3. 14 (Пи?) баксов.
Для простоты, используем ICSP разъем стандартной Arduino UNO
В панельку Arduino вставляем наш микроконтроллер.
Далее качаем и устанавливаем драйвер для программатора. Запускам стандартную ArduinoIDE, выбираем в меню «Сервис->Программатор->USBasp», плату ArduinoUNO и нажимаем «Записать загрузчик». После окончания процесса загрузки мы получаем контроллер, такой же как и в UNO, в который можно уже в дальнейшем заливать программы через стандартный USB Ардуины.
Далее мне захотелось использовать встроенный кварцевый резонатор на 8МГц, чтобы иметь минимум деталей на плате.
Открываем файл с описанием микроконтроллера c:\Program Files (x86)\Arduino\hardware\arduino\boards.txt
Копируем блок с Uno и правим в нм Фьюзы. Это специальные биты для настроки контроллера. Прочитать про них можно здесь. Сконфигурировать при помощи онлайн-калькулятора. Загрузив в калькулятор значения от UNO я устанавливаю стандартное значение с встроенным кварцем на 8МГц.
Затем заменяю значение в файле с описанием плат и получаю такое описание:
tmega328_8.name=Atmega328 (5V, 8 MHz internal) atmega328_8.upload.protocol=arduino atmega328_8.upload.maximum_size=30720 atmega328_8.upload.speed=57600 atmega328_8.bootloader.low_fuses=0xE2 atmega328_8.bootloader.high_fuses=0xDE atmega328_8.bootloader.extended_fuses=0x05 atmega328_8.bootloader.path=optiboot atmega328_8.bootloader.file=optiboot_atmega328.hex atmega328_8.bootloader.unlock_bits=0x3F atmega328_8.bootloader.lock_bits=0x0F atmega328_8.build.mcu=atmega328p atmega328_8.build.f_cpu=8000000L atmega328_8.build.core=arduino atmega328_8.build.variant=standard
Затем в среде Arduino выбираю свой микроконтроллер и снова прошиваю загрузчик.
Все, я получил микроконтроллер, в который можно заливать скетчи на Arduino UNO плате, а затем использовать его без внешнего кварца.
Можно не прошивать контроллеру загрузчик, но тогда заливать в него программы всегда придется через программатор.
Чтобы не соединять самому 10пинвый разъем на USBasp к 6-ти пиновому ICSP на Arduino заказал такой переходник
Потом подумал, и заказал такой переходник для программатора, позволяющий обходится без Arduino Uno. Так что надеюсь, следующие микросхемы буду шить с большим комфортом.
Рекомендую ли я данные микроконтроллеры — скорее нет. При цене на Arduino Pro Micro — $2.88 это не особенно целесообразно. Сейчас я бы купил Atmega8 стоимостью около 1$ или Atiny, для проектов, где не нужно возможности Atmega328.
Где я все это планирую применять?
Хочу сделать сенсорные беспроводные выключатели света, вентиляторов и др. устройств, причем разместить их прямо в корпусах выключателей.
В миниатюрном погодном датчике на аккумуляторе за окном.
В контроллере управления вентилятором на кухне и в ванной.
Да мало ли сколько еще «нужных и полезных» устройств можно сделать?
А как же мозг не вскипел все это реализовывать?
Ну конечно же был помощник
Все статьи мои статьи можно найти в моем блоге samopal.pro
OSEPP — OSEPP™ UNO R4 Plus
Плата OSEPP™ Uno R4 Plus — самая популярная плата Arduino на рынке Arduino! На этой плате используется 8-разрядный микроконтроллер ATmega328P на базе AVR и RISC от Atmel.
• Разъем микро-USB
• 4 дополнительных контакта питания 5 В и GND
• Дополнительные аналоговые контакты A6 и A7
Дополнительные функции:
• Разъем mini-USB заменен на более популярный разъем micro-USB
.
• удален разъем Molex
Особенности:
• 8-разрядный микроконтроллер AVR RISC, работающий на частоте 16 МГц
• Подключается к компьютеру с помощью стандартного USB-кабеля
• Заголовок ICSP для программирования микроконтроллера
• Совместимость с существующими программными библиотеками Arduino
• Совместимость со всеми платами Arduino для Arduino UNO.
Характеристики:
- ATmega328P поставляется с предустановленным загрузчиком Arduino. Существует заголовок ICSP (внутрисхемное последовательное программирование) для ATmega328, который при необходимости может заменить загрузчик.
- В качестве дополнительной меры предосторожности плата поставляется с сбрасываемым предохранителем на пути подключения USB. Чтобы предотвратить повреждение USB-порта, предохранитель сработает, когда ток в порту превысит 500 мА.
- Входные и/или выходные контакты выведены на разъемы, что обеспечивает удобный способ прототипирования проектов без необходимости пайки или демонтажа.
Технические характеристики
Микроконтроллер | ATmega328P |
Тактовая частота | 16 МГц |
Флэш-память | 32 КБ |
ОЗУ | 2 КБ |
1 КБ | |
Рабочее напряжение | 5В |
Входное напряжение | 6-12 В |
Количество контактов цифрового ввода/вывода | 14 (включая 6 для выхода ШИМ) |
Количество контактов аналогового входа | 8 |
Прочие соединения | микро-USB ICSP для ATmega328p Разъем питания постоянного тока 4-контактный разъем I2C с защелкой |
Размеры | 2,95 x 2,13 x 0,61 дюйма (75,0 x 54,0 x 15,5 мм) |
Источник питания | USB или внешний источник питания постоянного тока |
Примечания:
Эта плата основана на Arduino Uno, разработанной Arduino. cc, и выпущена под лицензией Creative Commons Attribution Share-Alike License. Оригинальный дизайн можно найти по адресу http://arduino.cc/en/Main/ArduinoBoardUno
Загрузки | |
OSEPP Uno R4 Схема |
Складской код | Название продукта |
УНО-04 | OSEPP™ Uno R4 Plus |
Учебный центр:
Что вам нужно
- Программное обеспечение Arduino (http://arduino.cc/en/Main/Software)
- USB-мини-USB
- ПК/Mac с портом USB
Загрузка вашего первого скетча
- Получите программное обеспечение Arduino, если вы еще этого не сделали
- Загрузите с http://arduino.cc/en/Main/Software
- Разархивируйте zip-файл куда-нибудь, например, C:\ (в Windows), так что в итоге вы получите папку, подобную C:\arduino-0022
- Подготовка к последовательной связи
- Подключите конец кабеля USB-B к плате
- Подключите другой конец кабеля к порту USB на вашем ПК/Mac
- Если ваш компьютер запрашивает драйверы, укажите его в подпапке «drivers\FTDI USB Drivers» программного обеспечения Arduino, например «C:\arduino-0022\drivers\FTDI USB-драйверы»
- Теперь вы должны увидеть, что светодиод с надписью ON рядом с кнопкой сброса загорается.
- Загрузить скетч
- Откройте программное обеспечение Arduino
- Откройте скетч мигания светодиода: меню «Файл» > «Примеры» > «Основы» > «Мигание 9».0002
- Выберите Arduino/Genuino Uno: Инструменты > Плата > Arduino/Genuino Uno
- Выберите последовательный порт: Сервис > Последовательный порт. Это последовательный порт для встроенного в плату FTDI. Если вы не знаете, какой именно, вы можете узнать это, зайдя в Диспетчер устройств > Порты (COM и LPT) и найти «Последовательный порт USB (COMx)»
. - Загрузите скетч: File > Upload to I/O Board
- Дождитесь сообщения «Готово» в нижней синей строке состояния
- Светодиод с маркировкой L рядом с контактом 13 теперь должен медленно мигать
- Поздравляем! Вы успешно загрузили свой первый скетч на доску.
Альтернативные руководства по установке
- Windows : http://arduino. cc/en/guide/windows
- Mac : http://arduino.cc/en/guide/macOSX
- Linux : http://playground.arduino.cc/Learning/Linux
Также на главной странице Arduino есть руководства по устранению основных ошибок: http://arduino.cc/en/guide/troubleshooting
ARDUINO UNO REV3 (ORGINAL) — ELKIM Arduino Uno можно запрограммировать с помощью (программного обеспечения Arduino (IDE)). Выберите «Arduino Uno» в меню «Инструменты» > «Плата» (в зависимости от микроконтроллера на вашей плате). Подробнее см. в справочнике и руководствах.
ATmega328 на Arduino Uno поставляется с предварительно запрограммированным загрузчиком, который позволяет загружать в него новый код без использования внешнего аппаратного программатора. Он обменивается данными с использованием исходного протокола STK500 (ссылка, заголовочные файлы C).
Вы также можете обойти загрузчик и запрограммировать микроконтроллер через заголовок ICSP (внутрисхемное последовательное программирование) с помощью Arduino ISP или аналогичного; подробности см. в этих инструкциях.
Исходный код прошивки ATmega16U2 (или 8U2 на платах rev1 и rev2) доступен в репозитории Arduino. В ATmega16U2/8U2 загружен загрузчик DFU, который можно активировать:
- На платах Rev1: подсоедините перемычку на обратной стороне платы (рядом с картой Италии) и затем сбросьте 8U2.
- На платах версии 2 или более поздних: имеется резистор, который замыкает линию HWB 8U2/16U2 на землю, что упрощает переход в режим DFU.
Затем вы можете использовать программное обеспечение FLIP от Atmel (Windows) или программатор DFU (Mac OS X и Linux) для загрузки новой прошивки. Или вы можете использовать заголовок ISP с внешним программатором (перезаписав загрузчик DFU). Дополнительную информацию см. в этом руководстве, созданном пользователями.
Предупреждения
Плата Arduino Uno имеет сбрасываемый предохранитель, который защищает USB-порты вашего компьютера от короткого замыкания и перегрузки по току. Хотя большинство компьютеров обеспечивают собственную внутреннюю защиту, предохранитель обеспечивает дополнительный уровень защиты. Если на USB-порт подается более 500 мА, предохранитель автоматически разорвет соединение до тех пор, пока короткое замыкание или перегрузка не будут устранены.
Отличия от других плат
Uno отличается от всех предыдущих плат тем, что в ней не используется микросхема драйвера FTDI USB-to-serial. Вместо этого он оснащен Atmega16U2 (Atmega8U2 до версии R2), запрограммированным как преобразователь USB-последовательный порт.
Питание
Плата Arduino Uno может питаться через соединение USB или от внешнего источника питания. Источник питания выбирается автоматически.
Внешнее (не USB) питание может поступать либо от адаптера переменного тока в постоянный (настенный), либо от аккумулятора. Адаптер можно подключить, вставив штекер 2,1 мм с центральным положительным контактом в разъем питания на плате. Выводы от аккумулятора можно вставить в контактные разъемы GND и Vin разъема POWER.
Плата может работать от внешнего источника питания от 6 до 20 вольт. Однако при подаче менее 7 В на контакт 5 В может подаваться менее пяти вольт, и плата может работать нестабильно. При использовании более 12 В регулятор напряжения может перегреться и повредить плату. Рекомендуемый диапазон от 7 до 12 вольт.
Контакты питания следующие:
- Вин. Входное напряжение платы Arduino при использовании внешнего источника питания (в отличие от 5 вольт от USB-соединения или другого регулируемого источника питания). Вы можете подавать напряжение через этот контакт или, если подаете напряжение через разъем питания, получить к нему доступ через этот контакт.
- 5V. Этот контакт выводит регулируемое напряжение 5V от регулятора на плате. Плата может питаться от разъема питания постоянного тока (7–12 В), разъема USB (5 В) или контакта VIN платы (7–12 В). Подача напряжения через контакты 5 В или 3,3 В обходит регулятор и может повредить вашу плату. Мы этого не советуем.
- 3В3. Питание 3,3 В, генерируемое бортовым регулятором. Максимальный потребляемый ток составляет 50 мА.
- Земля. Заземляющие штифты.
- ИОРЕФ. Этот контакт на плате Arduino обеспечивает опорное напряжение, с которым работает микроконтроллер. Правильно сконфигурированный экран может считывать напряжение на контакте IOREF и выбирать соответствующий источник питания или включать преобразователи напряжения на выходах для работы с 5 В или 3,3 В.
Память
ATmega328 имеет 32 КБ (из которых 0,5 КБ занято загрузчиком). Он также имеет 2 КБ SRAM и 1 КБ EEPROM (который можно читать и записывать с помощью библиотеки EEPROM).
Ввод и вывод
См. сопоставление контактов Arduino и портов ATmega328P. Отображение для Atmega8, 168 и 328 идентично.
ОТОБРАЖЕНИЕ КОНТАКТОВ ATmega328P
Каждый из 14 цифровых контактов на Uno можно использовать как вход или выход с помощью функций pinMode(), digitalWrite() и digitalRead(). Они работают от 5 вольт. Каждый контакт может обеспечить или получить 20 мА в рекомендуемых рабочих условиях и имеет внутренний подтягивающий резистор (отключен по умолчанию) на 20-50 кОм. Максимум 40 мА — это значение, которое нельзя превышать ни на одном выводе ввода-вывода, чтобы избежать необратимого повреждения микроконтроллера.
Кроме того, некоторые контакты имеют специальные функции:
- Серийный номер: 0 (RX) и 1 (TX). Используется для приема (RX) и передачи (TX) последовательных данных TTL. Эти контакты подключены к соответствующим контактам последовательного чипа ATmega8U2 USB-to-TTL.
- Внешние прерывания: 2 и 3. Эти контакты могут быть настроены для запуска прерывания по низкому значению, нарастающему или падающему фронту или изменению значения. Подробности смотрите в описании функции attachInterrupt().
- PWM: 3, 5, 6, 9, 10 и 11. Обеспечьте 8-битный вывод PWM с помощью функции AnalogWrite().
- SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Эти контакты поддерживают связь SPI с использованием библиотеки SPI. Светодиод
- : 13. Имеется встроенный светодиод, управляемый цифровым выводом 13. Когда на выводе ВЫСОКОЕ значение, светодиод горит, когда на выводе НИЗКИЙ, он выключен.
- TWI: контакт A4 или SDA и контакт A5 или SCL. Поддержка связи TWI с помощью библиотеки Wire.
Uno имеет 6 аналоговых входов, помеченных от A0 до A5, каждый из которых обеспечивает разрешение 10 бит (т. е. 1024 различных значения). По умолчанию они измеряют от земли до 5 вольт, хотя можно изменить верхнюю границу их диапазона с помощью вывода AREF и функции AnalogReference(). На плате есть еще пара контактов:
- АРЕФ. Опорное напряжение для аналоговых входов. Используется с AnalogReference().
- Сброс. Установите на этой линии НИЗКИЙ уровень, чтобы перезагрузить микроконтроллер. Обычно используется для добавления кнопки сброса к экранам, которые блокируют кнопку на плате.
Связь
Arduino Uno имеет ряд средств для связи с компьютером, другой платой Arduino или другими микроконтроллерами. ATmega328 обеспечивает последовательную связь UART TTL (5V), которая доступна на цифровых контактах 0 (RX) и 1 (TX). ATmega16U2 на плате направляет эту последовательную связь через USB и отображается как виртуальный COM-порт для программного обеспечения на компьютере. Прошивка 16U2 использует стандартные драйверы USB COM, и внешний драйвер не требуется. Однако в Windows требуется INF-файл. Программное обеспечение Arduino (IDE) включает в себя последовательный монитор, который позволяет отправлять простые текстовые данные на плату и с нее. Светодиоды RX и TX на плате будут мигать, когда данные передаются через микросхему USB-to-serial и USB-подключение к компьютеру (но не при последовательной связи на контактах 0 и 1).
Библиотека SoftwareSerial позволяет осуществлять последовательную связь на любом из цифровых контактов Uno.
ATmega328 также поддерживает связь I2C (TWI) и SPI. Программное обеспечение Arduino (IDE) включает библиотеку Wire для упрощения использования шины I2C; подробности см. в документации. Для связи SPI используйте библиотеку SPI.
Автоматический (программный) сброс
Вместо физического нажатия кнопки сброса перед загрузкой плата Arduino Uno сконструирована таким образом, что ее можно сбросить программным обеспечением, запущенным на подключенном компьютере. Одна из линий аппаратного управления потоком (DTR) ATmega8U2/16U2 подключена к линии сброса ATmega328 через конденсатор емкостью 100 нанофарад. Когда эта линия активна (низкий уровень), линия сброса падает на время, достаточное для сброса микросхемы. Программное обеспечение Arduino (IDE) использует эту возможность, чтобы вы могли загружать код, просто нажимая кнопку загрузки на панели инструментов интерфейса. Это означает, что загрузчик может иметь более короткий тайм-аут, так как снижение DTR может быть хорошо согласовано с началом загрузки.
Эта настройка имеет и другие последствия. Когда Uno подключен к компьютеру с Mac OS X или Linux, он сбрасывается каждый раз, когда к нему подключается программное обеспечение (через USB). Следующие полсекунды или около того загрузчик работает на Uno. Хотя он запрограммирован на игнорирование искаженных данных (то есть всего, кроме загрузки нового кода), он будет перехватывать первые несколько байтов данных, отправленных на плату после открытия соединения. Если скетч, работающий на плате, получает одноразовую конфигурацию или другие данные при первом запуске, убедитесь, что программное обеспечение, с которым он взаимодействует, ждет секунду после открытия соединения и перед отправкой этих данных.
Плата Uno содержит трассировку, которую можно обрезать, чтобы отключить автоматический сброс. Площадки с обеих сторон дорожки можно спаять вместе, чтобы снова включить ее. Он помечен как «RESET-EN». Вы также можете отключить автосброс, подключив резистор 110 Ом от 5В к линии сброса; подробности см. в этой ветке форума.
Ревизии
Ревизия 3 платы имеет следующие новые функции:
- 1.0 распиновка: добавлены контакты SDA и SCL, расположенные рядом с контактом AREF, и два других новых контакта, расположенные рядом с контактом RESET, IOREF, которые позволяют экраны для адаптации к напряжению, подаваемому с платы. В будущем шилды будут совместимы как с платой, использующей AVR, работающей от 5 В, так и с платой Arduino Due, работающей от 3,3 В.