Arduino pro mini

Память Arduino Uno R3

Плата Uno по умолчанию поддерживает три типа памяти:

  • Flash – память объемом 32 кБ. Это основное хранилище для команд. Когда вы прошиваете контроллер своим скетчем, он записывается именно сюда. 2кБ из данного пула памяти отводится на bootloader- программу, которая занимается инициализацией системы, загрузки через USB и запуска скетча.
  • Оперативная SRAM память объемом  2 кБ. Здесь по-умолчанию хранятся переменные и объекты, создаваемые в ходе работы программы. Память эта энерго-зависимая, при выключении питания все данные, разумеется, сотрутся.
  • Энергонезависимая память (EEPROM) объемом 1кБ. Здесь можно хранить данные, которые не сотрутся при выключении контроллера. Но процедура записи и считывания EEPROM требует использования дополнительной библиотеки, которая доступна в Arduino IDE по-умолчанию. Также нежно помнить об ограничении циклов перезаписи, присущих технологии EEPROM.

Некоторые модификации стандартной платы Uno могут поддерживать память с большими значениями, чем в стандартном варианте. Но следует понимать, что для работы с ними потребуются и дополнительные библиотеки.

4Загрузка скетча в Arduinoс помощью программатора USBasp

Откроем скетч, который хотим загрузить в память микроконтроллера. Для примера пусть это будет мигание светодиодом: Файл Образцы 01. Basics Blink.

Подключаем программатор с подключённым к нему Arduino Pro Mini к компьютеру. Для того чтобы загрузить скетч в Ардуино с помощью программатора, можно поступить несколькими способами.

  1. Через меню Файл Загрузить через программатор.
  2. Используя сочетание клавиш Ctrl + Shift + U.
  3. Зажав клавишу Shift, нажать на кнопку со стрелкой вправо , которая обычно используется для загрузки скетча в память Ардуино стандартным способом.

Загрузка скетча в Arduino Pro Mini с помощью программатора USBasp

Это абсолютно эквивалентные способы, выбирайте самый удобный для себя. Это всё, программа «залита» в память микроконтроллера.

Обратите внимание

Если Arduino IDE выдаст предупреждение: warning: cannot set sck period. please check for usbasp firmware update. Не паникуйте, скетч всё равно записался в память микроконтроллера и будет работать.

Структура памяти Ардуино, где располагается скетч и данные

На микроконтроллере Ардуино имеется 3 вида памяти – флеш-память, которая используется для хранения скетчей, ОЗУ для хранения переменных и EEPROM для хранения постоянной информации. Из этих типов памяти флеш-память и EEPROM являются энергонезависимыми, то есть информация сохраняется при выключении питания. ОЗУ используется только для хранения данных, которые имеют отношение к исполняемой программе.

Микроконтроллер ATmega168, который используется на части плат Ардуино, имеет 16 Кб флеш-памяти, 1024 байта для ОЗУ и 512 байт EEPROM

Важно обратить внимание на малый объем ОЗУ. Большие программы могут полностью ее израсходовать, что приведет к сбою в программе. По этой причине нужно следить за тем, сколько строк занимает программа, и по возможности удалять лишнее

Уменьшить объем кода можно несколькими способами:

По этой причине нужно следить за тем, сколько строк занимает программа, и по возможности удалять лишнее. Уменьшить объем кода можно несколькими способами:

  • Можно отправить часть информации на компьютер.
  • Для таблиц и других крупных массивов использовать минимальный тип данных для хранения.
  • Данные, которые остаются неизменными, можно объявить константами при помощи слова const перед объявлением переменной.
  • Меньше использовать рекурсию. При ее вызове в памяти, называемой стеком, выделяется фрагмент, в котором хранятся различные данные. Если часто вызывать рекурсию, стеки будут занимать большой объем памяти и могут израсходовать ее.
  • Неизменяемые строки можно сохранять во флеш-памяти во время работы программы. Для этого используется функция PROGMEM.

На объем памяти не влияют размер имени переменных и комментарии. Компилятор устроен таким образом, что не включает эти данные в скомпилированный скетч.

Для измерения объема занимаемой памяти ОЗУ используется скетч из библиотеки MemoryFree. В ней имеется специальная функция free­Memory, которая возвращает объем доступной памяти. Также эта библиотека широко используется для диагностики проблем, которые связаны с нехваткой памяти.

Оптимизация флеш-памяти. Как только будет окончена процедура компиляции, в окне появится информация о занимаемой памяти кодом. Если скетч занимает большую часть памяти, нужно произвести оптимизацию использования флеш-памяти:

  • Использование констант. Аналогично как и для ОЗУ задавать неизменяющиеся значения константами.
  • Удалить ненужные Serial.println. Эта команда используется, когда нужно увидеть значения переменных в разных местах программы, нередко эта информация просто не нужна. При этом команды занимают место в памяти, поэтому, убедившись в корректной работе программы, некоторые строки можно удалить.
  • Отказ от загрузчика – можно программировать микроконтроллер через контакты ICSP на плате с использованием аппаратных программаторов.

Флеш память является безопасным и удобным способом хранения данных, но некоторые факторы ограничивают ее использование. Для флеш-памяти характерна запись данных блоками по 64 байта. Также флеш-память гарантирует сохранность информации для 100000циклов записи, после чего информация искажается. Во флеш-памяти имеется загрузчик, который нельзя удалять или искажать. Это может привести к разрушению самой платы.

EEPROM память используется для хранения всех данных, которые потребуются после отключения питания. Для записи информации в EEPROM нужно использовать специальную библиотеку EEPROM.h, которая входит в число стандартных библиотек в Arduino IDE. Чтение и запись информации в EEPROM происходит медленно, порядка 3 мс. Также гарантируется надежность хранения данных для 100000 циклов записи, потому лучше не выполнять запись в цикле.

Прошивка WeMos, примеры скетчей

Мигание светодиодами

Сам скетч выглядит следующим образом:


int inputPin = D4; // подключение кнопки в контактам D4 и GND. Можно выбрать любой пин на плате

int val = 1; // включение/выключение хранения значения

void setup() {

pinMode(BUILTIN_LED, OUTPUT); // подключение светодиода, перевод в режим OUTPUT

pinMode(inputPin, INPUT); // включение пина для входных данных

}

void loop() {

val = digitalRead(inputPin); // чтение входных данных

digitalWrite(BUILTIN_LED, val); // включение/выключение светодиода по нажатию кнопки

}

Если все выполнено правильно, нужно нажать кнопку, и светодиод загорится. При повторном нажатии потухнет.

Для автоматического мигания светодиода интервалом в две секунды используется следующий код:


void setup() {

pinMode(3, OUTPUT); // инициализация контакта GPIO3 с подключенным светодиодом

}

void loop() {

digitalWrite(2, HIGH);   // светодиод загорается

delay(2000);              // ожидание в течение двух секунд

digitalWrite(2, LOW);    // светодиод гаснет

delay(2000);              // ожидание в течение двух секунд

}

WeMos и подключение к WiFi для передачи данных на удаленный сервер

В примере будет рассмотрен скетч для создания веб-сервера, благодаря которому можно управлять различными устройствами – лампами, реле, светодиодами и другими.  Для работы нужно установить библиотеку ESP8266WiFi.

Фрагменты скетча:


const char* ssid = "****"; //требуется записать имя точки доступа, к которой будет произведено подключение

const char* password = "****"; //введение пароля точки доступа, который должен содержать не менее восьми символов

WiFiServer server(80);  //создание сервера на 80 порту

WiFi.begin(ssid, password); // подключение к заданной выше точке доступа, ее имя и пароль

pinMode(3, OUTPUT);   //присоединение к пину GPIO3 и земле

while (WiFi.status() != WL_CONNECTED) //показывает статус подключения, WL_CONNECTED указывает на установку соединения;

Serial.println(WiFi.localIP()); //получение IP адреса. Его нужно ввести в строку адреса в браузере для получения доступа к управлению устройством

Serial.println(WiFi.macAddress()); //получение MAC адреса

Serial.println(WiFi.SSID()); //получение имени сети, к которой подключился WeMos

WiFiClient client = server.available(); //проверяет, подключен ли клиент

Serial.println("client");

while(!client.available()) //ожидание отправки данных от клиента

String req = client.readStringUntil('\r');

Serial.println(req);

client.flush(); //Чтение первой строки запроса

Создание точки доступа на WeMos

В данном примере модуль WeMos будет сконфигурирован в качестве самостоятельной точки доступа.

Создание точки доступа выполняется по следующему алгоритму:

  • Подключение модуля;
  • Запуск среды разработки Arduino IDE;
  • Выбор порта, частоты, размера флэш-памяти;
  • Запись с коде программы имени сети и создание пароля;
  • Компиляция и загрузка скетча;
  • Установить скорость 115200;
  • Должно произойти подключение к сети, будет получен IP и выведен в терминал;
  • Для проверки можно ввести в адресной строке в браузере IP/gpio/1, если все работает корректно, должен загореться светодиод на плате.

Фрагменты программы:


const char *ssid = «****»; //в этой строке нужно задать имя создаваемой сети

const char *password = «»; //указывается пароль сети, если не указывать пароль, то сеть будет открыта

При создании пароля важно помнить, что он должен состоять не менее чем из восьми знаков

WiFiServer server(80);

WiFi.softAP(ssid, password); //создание точки доступа с именем и паролем, которые указывались выше. Если пароль не указывался, softAP(ssid, password) меняется на softAP(ssid)

IPAddress myIP = WiFi.softAPIP(); //получение адреса IP

Serial.print(«AP IP address: «); //вывод полученного адреса в терминал

server.begin(); // запуск сервера

1Программатор для Arduino

  • Разъём типа USB-A используется, понятно, для подключения программатора к компьютеру.
  • ISP-соединитель нужен для подключения к программируемой плате.
  • Джампер JP1 контролирует напряжение на выводе VCC ISP-коннектора. Оно может быть 3,3 В или 5 В. Если целевое программируемое устройство имеет собственный источник питания, нужно убрать перемычку.
  • Джампер JP2 используется для перепрошивки самого программатора; в данной статье этот вопрос не рассматривается.
  • Перемычка JP3 нужна, если тактовая частота целевого устройства ниже 1,5 МГц.
  • Светодиоды показывают: G – питание подаётся на программатор, R – программатор соединён с целевым устройством.

USBasp-программатор и назначение его частей

Чтение и запись FLASH и EEPROM памяти Ардуино

  • calibration — байты калибровки RC-генератора;
  • eeprom — энергонезависимая память микроконтроллера;
  • efuse — дополнительный конфигурационный бит;
  • flash — FLASH память микроконтроллера;
  • fuse — фьюз-байт для микроконтроллеров с одним fuse-байтом;
  • hfuse — старший fuse-байт;
  • lfuse — младший fuse-байт;
  • lock — байт блокировки (ячейка защиты);
  • signature — три байта что обозначают сигнатуру чипа (device ID);
  • fuseN — байт с фьюзами для ATxmega чипов, N — целое число для каждого фьюза что поддерживается устройством;
  • application — область приложений во Flash памяти для МК ATxmega;
  • apptable — таблица приложений в области Flash памяти для устройств ATxmega;
  • boot — загрузочная область Flash памяти для устройств ATxmega;
  • prodsig — область с производственной сигнатурой (calibration) для устройств ATxmega;
  • usersig — область с пользовательской сигнатурой для устройств ATxmega.

avrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U flash:r:flash_dump.hex:iavrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U flash:w:flash_dump.hex:iavrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U eeprom:r:eeprom_dump.hex:iavrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U eeprom:w:eeprom_dump.hex:i

Загрузка первого скетча: разумеется, мигаем

  1. Чтобы подтвердить работоспособность макета простейшей схемы программирования и проверки работы, откройте скетч » Blink » из базовых примеров, включенных в Arduino IDE. Скетч » Blink «
  2. После выбора правильного COM порта скомпилируйте и загрузите в AT328P-PU скетч » Blink «. Скетч » Blink » Первая попытка прошивки скетча Blink не удалась; можете увидеть, почему произошел сбой? Подсказка: посмотрите на правый нижний угол окна IDE выше, и сравните его с тем же участком окон IDE на скриншотах ниже (на которых прошивка удалась). Компиляция скетча Blink Прошивка скетча Blink Конечно, причина неудачи первой попытки прошивки заключается в неправильном выборе COM порта: был выбран COM3, вместо правильного COM6.

Варианты питания Ардуино Уно

Рабочее напряжение платы Ардуино Уно – 5 В. На плате установлен стабилизатор напряжения, поэтому на вход можно подавать питание с разных источников. Кроме этого, плату можно запитывать с USB – устройств. Источник питания выбирается автоматически.

  • Питание от внешнего адаптера, рекомендуемое напряжение от 7 до 12 В. Максимальное напряжение 20 В, но значение выше 12 В с высокой долей вероятности быстро выведет плату из строя. Напряжение менее 7 В может привести к нестабильной работе, т.к. на входном каскаде может запросто теряться 1-2 В. Для подключения питания может использоваться встроенный разъем DC 2.1 мм или напрямую вход VIN для подключения источника с помощью проводов.
  • Питание от USB-порта компьютера.
  • Подача 5 В напрямую на пин 5V. В этом случае обходится стороной входной стабилизатор  и даже малейшее превышение напряжения может привести к поломке устройства.

Пины питания

  • 5V – на этот пин ардуино подает 5 В, его можно использовать для питания внешних устройств.
  • 3.3V – на этот пин от внутреннего стабилизатора подается напряжение 3.3 В
  • GND – вывод земли.
  • VIN – пин для подачи внешнего напряжения.
  • IREF – пин для информирования внешних устройств о рабочем напряжении платы.

ESP32 WROOM DevKit v1

Подключение периферии

  • Цифровые входы/выходы: 21 пин 1–5, 12–19, 21–23, 25–27, 32 и 33Контакты ввода-вывода общего назначения. Пины могут быть настроены на вход или на выход. Логический уровень единицы — 3,3 В, нуля — 0 В. Максимальный ток выхода — 12 мА.

  • Цифровые входы: 4 пина 34–36 и 39Контакты ввода общего назначения. Могут быть настроены только на вход.

  • ШИМ: все пины ввода-выводаПозволяет выводить аналоговые значения в виде ШИМ-сигнала с разрядность 16 бит. Максимальное количество каналов 16.

  • АЦП: 15 пинов 2, 4, 12–15, 25–27, 32–36 и 39Позволяет представить аналоговое напряжение в цифровом виде с разрядностью 12 бит.

  • ЦАП: пины 25(DAC1) и 26(DAC2)Аналоговый выход цифро-аналогового преобразователя, который позволяет формировать 8-битные уровни напряжения.

Максимальный выходной ток пина 3V3: 1 А

Подключение к IoT

1) Выбираем плату: Tools (Инструменты) -> Board(Плата) DOIT ESP32 DEVKIT V1.

2) Вставляем подготовленный код.

3) Задаем данные для подключения Wi-Fi и идентификатор своего объекта на платформе.

4) Компилируем и загружаем скетч на плату.

5) Видим появление данных на платформе.

Где купить

В России

В Китае 

Надеюсь, что данная инструкция станет полезной для всех, кто начнет работать с представленными модулями или их аналогами, поможет в выборе, а также сократит время на поиски алгоритмов подключения.

Простые проекты Ардуино

Давайте начнем наш обзор с традиционно самых простых, но очень важных проектов, включающих в себя минимальное количество элементов: светодиоды, резисторы и, конечно же, плату ардуино. Все примеры рассчитаны на использование Arduino Uno, но с минимальными изменениями будут работать на любой плате: от Nano и Mega до Pro, Leonardo и даже LilyPad.

Проект с мигающим светодиодом – маячок

Все без исключения учебники и пособия для начинающих по ардуино стартуют с примера мигания светодиодом. Этому есть две причины: такие проекты требуют минимального программирования и их можно запустить даже без сборки электронной схемы – уж что-что, а светодиод есть на любой плате ардуино. Поэтому и мы не станем исключением – давайте начнем с маячка.

Нам понадобится:

  • Плата Ардуино Uno, Nano или Mega со встроенным светодиодом, подключенным к 13 пину.
  • И все.

Что должно получиться в итоге:

Светодиод мигает – включается и выключается через равные промежутки времени (по умолчанию – 1 сек). Скорость включения и выключения можно настраивать.

Схема проекта

Схема проекта довольно проста:  нам нужен только контроллер ардуино со встроенным светодиодом, подсоединенным к пину 13. Именно этим светодиодом мы и будем мигать. Подойдут любые популярные платы: Uno, Nano, Mega и другие.

Подсоединяем Arduino к компьютеру, убеждаемся, что плата ожила и замигала загрузочными огоньками. Во многих платах «мигающий» скетч уже записан в микроконтроллер, поэтому светодиод может начать мигать сразу после включения.

С помощью такого простого проекта маячка вы можете быстро проверить работоспособность платы: подключите ее к компьютеру, залейте скетч и по миганию светодиода сразу станет понятно – работает плата или нет.

Программирование в проекте Ардуино

Если в вашей плате нет загруженного скетча маячка – не беда. Можно легко загрузить уже готовый пример, доступный в среде программирования Ардуино.

Открываем программу Arduino IDE, убеждаемся, что выбран нужный порт.

Проверка порта Ардуино – выбираем порт с максимальным номером

Затем открываем уже готовый скетч Blink – он находится в списке встроенных примеров. Откройте меню Файл, найдите подпункт с примерами, затем Basics и выберите файл Blink.

Открываем пример Blink в Ардуино IDE

В открытом окне отобразится исходный код программы (скетча), который вам нужно будет загрузить в контроллер. Для этого просто нажимаем на кнопку со стрелочкой.

Кнопки компиляции и загрузки скетча
Информация в Arduino IDE – Загрузка завершена

Ждем немного (внизу можно отследить процесс загрузки) – и все. Плата опять подмигнет несколькими светодиодами, а затем один из светодиодов начнет свой размеренный цикл включений и выключений. Можно вас поздравить с первым загруженным проектом!

Проект маячка со светодиодом и макетной платой

В этом проекте мы создадим мигающий светодиод – подключим его с помощью проводов, резистора и макетной платы к ардуино. Сам скетч и логика работы останутся таким же – светодиод включается и выключается.

Графическое изображение схемы подключения доступно на следующем рисунке:

Другие идеи проектов со светодиодами:

  • Мигалка (мигаем двумя свтодиодами разных цветов)
  • Светофор
  • Светомузыка
  • Сонный маячок
  • Маячок – сигнализация
  • Азбука Морзе

Подробное описание схемы подключения и логики работы программы можно найти в отдельной статье, посвященной проектам со светодиодами.

Загрузка первого скетча: разумеется, мигаем

  1. Чтобы подтвердить работоспособность макета простейшей схемы программирования и проверки работы, откройте скетч «Blink» из базовых примеров, включенных в Arduino IDE.

    Скетч «Blink«

  2. После выбора правильного COM порта скомпилируйте и загрузите в AT328P-PU скетч «Blink«.
    Скетч «Blink»
    Первая попытка прошивки скетча Blink не удалась; можете увидеть, почему произошел сбой? Подсказка: посмотрите на правый нижний угол окна IDE выше, и сравните его с тем же участком окон IDE на скриншотах ниже (на которых прошивка удалась).

    Компиляция скетча BlinkПрошивка скетча Blink
    Конечно, причина неудачи первой попытки прошивки заключается в неправильном выборе COM порта: был выбран COM3, вместо правильного COM6.

Чтение и запись фьюзов Ардуино

avrdude -C ../etc/avrdude.conf -c usbasp -p m328p -U lfuse:r:-:h

  • -c <programmer> — псевдоним используемого программатора, в данном случае usbasp.
  • -p <partno> — тип микроконтроллера. Я считываю фьюзы из Ардуино Уно, в которой установлен микроконтроллер ATmega328p, поэтому в качестве <partno> указано значение m328p.
  • -U <memtype>:r|w|v:<filename> — комплексная опция для указания производимой с памятью операции (чтение. запись, проверка). -U lfuse:r:-:h означает, что требуется прочитать содержимое младшего байта конфигурации и вывести считанное значение на экран в щестнадцатеричном виде.

А вот и результат выполнения приведенной команды:

Если у вас в результате присутствует строка avrdude: warning: cannot set sck period, please check for usbasp  firmware update, то не обращайте на нее внимание. Это всего лишь предупреждение, не ошибка, работе оно не мешает

Если вы всё же хотите от него избавиться, то нужно обновить прошивку USBasp, данная процедура подробно расписана в статье Прошивка USBasp. Как видно из скриншота, значение младшего конфигурационного байта равно 0xff, команда отработала успешно.

Теперь проверим запись фьюзов с использованием USBasp. Я изменю значение дополнительного конфигурационного байта с 0xFF на 0xFD, что приведет к установке порога срабатывания схемы BOD в 2.7В. Команда для Avrdude и результат ее выполнения приведены ниже:

avrdude -C ../etc/avrdude.conf -c usbasp -p m328p -U efuse:w:0xFD:m

Чтение и запись FLASH и EEPROM памяти Ардуино

В приведенных выше примерах команд для Avrdude в качестве параметра <memtype> использовались значения lfuse и efuse для доступа к конфигурационным байтам микроконтроллера. Данный параметр может принимать и другие значения, они приведены ниже:

  • calibration — байты калибровки RC-генератора;
  • eeprom — энергонезависимая память микроконтроллера;
  • efuse — дополнительный конфигурационный бит;
  • flash — FLASH память микроконтроллера;
  • fuse — фьюз-байт для микроконтроллеров с одним fuse-байтом;
  • hfuse — старший fuse-байт;
  • lfuse — младший fuse-байт;
  • lock — байт блокировки (ячейка защиты);
  • signature — три байта что обозначают сигнатуру чипа (device ID);
  • fuseN — байт с фьюзами для ATxmega чипов, N — целое число для каждого фьюза что поддерживается устройством;
  • application — область приложений во Flash памяти для МК ATxmega;
  • apptable — таблица приложений в области Flash памяти для устройств ATxmega;
  • boot — загрузочная область Flash памяти для устройств ATxmega;
  • prodsig — область с производственной сигнатурой (calibration) для устройств ATxmega;
  • usersig — область с пользовательской сигнатурой для устройств ATxmega.

Таким образом, для чтения FLASH Ардуино Уно (микроконтроллера ATmega328p) может быть использована следующая команда:avrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U flash:r:flash_dump.hex:i
Файл с содержимым FLASH памяти микроконтроллера будет создан в каталоге Avrdude. Либо можно прописать в команде полный путь к файлу.
Для записи в FLASH память содержимого файла flash_dump.hex можно использовать команду:avrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U flash:w:flash_dump.hex:i
Чтение EEPROM:avrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U eeprom:r:eeprom_dump.hex:i
Запись EEPROM:avrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U eeprom:w:eeprom_dump.hex:i

Запись загрузчика в Ардуино

Процедуру записи загрузчика я описывал ранее в публикации Arduino as ISP — программатор из Ардуино. Как и в прошлый раз для записи загрузчика мы будем использовать IDE Arduino. Последовательность шагов следующая:

Прошивка кода загрузчика

Теперь подключите шесть проводов от схемы прошивки загрузчика к Arduino Uno точно так, как показано на схеме и фотографии, приведенной выше в разделе «Сборка схемы прошивки загрузчика». После двойной проверки всех соединений вы готовы записать следующий код загрузчика в AT328P-PU в схеме прошивки загрузчика.

  1. Выберите «Burn Bootloader» (прошить загрузчик) как действие для Arduino Uno; процесс должен начаться сразу после того, как вы кликните «Burn Bootloader«.

    Прошивка загрузчика в AT328P-PU

  2. Когда вы увидите сообщение «Done burning bootloader» (прошивка загрузчика завершена), процесс будет выполнен, и AT328P-PU сможет понимать и отвечать на инструкции от Arduino IDE.
    Загрузчик загружен в AT328P-PU

Прошивка кода загрузчика

Теперь подключите шесть проводов от схемы прошивки загрузчика к Arduino Uno точно так, как показано на схеме и фотографии, приведенной выше в разделе «Сборка схемы прошивки загрузчика». После двойной проверки всех соединений вы готовы записать следующий код загрузчика в AT328P-PU в схеме прошивки загрузчика.

  1. Выберите » Burn Bootloader » (прошить загрузчик) как действие для Arduino Uno; процесс должен начаться сразу после того, как вы кликните » Burn Bootloader «. Прошивка загрузчика в AT328P-PU
  2. Когда вы увидите сообщение » Done burning bootloader » (прошивка загрузчика завершена), процесс будет выполнен, и AT328P-PU сможет понимать и отвечать на инструкции от Arduino IDE. Загрузчик загружен в AT328P-PU

Настройка Arduino IDE

После установки необходимо настроить программу. Сделать это очень легко:

1. Сначала подключите вашу ардуинку к компьютеру с помощью USB кабеля.

2. Потом перейдите в «Пуск >> Панель управления >> Диспетчер устройств«. Там надо найти «Порты COM и LPT». В этом списке будет указана ваша arduino и порт к которому она подключена (COM2). Запомните это значение.

Arduino Uno в диспетчере устройств

3. Теперь запускаем Arduino IDE и сразу идем в меню «Инструменты >> Порт«. Там необходимо выбрать тот COM порт, который вы запомнили.

Выбор COM порта

4. Далее надо выбрать плату. Для этого в меню»Инструменты >> Платы» выбираете модель вашей платы.

Выбор платы ардуино

На этом настройка закончена. Не забывайте, что эти настройки придется менять если вы подключите плату к другому USB порту или будите использовать другую плату.

Сборка схемы прошивки загрузчика

Чтобы загрузить код загрузчика из Arduino Uno в пустой ATmega328P-PU, потребуется небольшая схема прошивки загрузчика. Комплектующие, необходимые для схемы загрузчика, перечислены ниже (вам может также понадобиться несколько перемычек).

Список комплектующих
Обозначение Описание
R1 Резистор 10 кОм, 0,25 Вт
C1, C2 Конденсатор, керамический, 22 пФ, 50 В
C3 Конденсатор, керамический, 0,1 мкФ, 50 В
X1 Кварцевый резонатор, 16 МГц, HC49, 20 пФ
U1 Микросхема, ATmega328P-PU, флэш 32 килобайта, DIP-28, 1,8–5,5 В
нет Макетная плата, беспаечная, 400 контактов
нет Arduino Uno R3

Ниже приведена очень простая принципиальная схема прошивки загрузчика AT328P-PU

Часть генератора состоит из X1, C1 и C2; обратите внимание, что кварцевый резонатор X1 должен быть на 16 МГц, а не на 20 МГц. Несмотря на то, что AT328P-PU может использовать кварц 20 МГц, для процесса прошивки загрузчика требуется работа на 16 МГц

R1 – это подтягивающий резистор для вывода Reset; а C3 – это обычный конденсатор фильтра питания.

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

Соберите схему прошивки загрузчика, но пока не подключайте её к Arduino Uno.

Схема прошивки загрузчика в AT328P-PUArduino Uno, подключенная к макетной плате прошивки загрузчика в AT328P-PU

Как прошить Digispark ATtiny 85.

Зальем в плату тестовый скетч, с помощью которого плата будет мигать встроенным светодиодом.

Для этого понадобятся:

1. Приложение Arduino IDE

2. Ссылка для менеджера плат

3. Добавить платы Digispark в приложение Arduino IDE

4. Установить драйверы для Digispark ATtiny 85.

Ознакомиться с приложение Arduino IDE http://kolotushkin.com

Запустите приложение Arduino IDE, зайдите во вкладку Файл/Настройки и в Дополнительные ссылки для
Менеджера плат: добавьте эту ссылку

И нажмите «ОК»

Затем откройте вкладку Инструменты /Выбор платы /Менеджер плат

В открывшемся списке выбираем пункт “Digistump AVR Boards” и нажмите “Установить”.

Чтобы быстрее найти, впишите в окно поиска слово “Digistump” или просто “digi”.

Осталось скачать и установить драйверы.

Откройте архив Digistump.Drivers.zip и извлеките из него папку с драйверами Digistump Drivers. Это можно сделать простым перетаскиванием папки Digistump Drivers из архива в удобную для вас папку.

Затем подключите плату Digispark к компьютеру. Откройте Пуск/Панель управления/Диспетчер устройств. Найдите в списке устройство помеченное желтым треугольником (у вас может отобразиться как «Неизвестное устройство»), кликните на него правой кнопкой мышки и в открывшемся окне кликните обновить драйверы.

Затем выберите пункт «Выполнить поиск драйверов на этом компьютере»

Укажите путь к той папке, которую вы извлекли из архива. Нажмите кнопку далее. После обновления нажмите закрыть.

Если теперь устройство определено как Digispark Bootoalder без желтой отметки, значит все готово!

Теперь откройте скетч Blink, который находится во вкладке “Файл/Примеры/Basics/Blink”.

Так как скетч расcчитан для платы Arduino на которой светодиод подключен к 13 пину, то необходимо
заменить значение “13” на “1” потому как на плате Digispark светодиод подключен к 1 пину!

Затем в менеджере плат выберите плату Digispark (Default — 16,5mhz)

Нажимаете “Загрузить”. После чего произойдет компиляция и снизу появится сообщение (will timeout in 60
seconds), и вот только тогда в течении 60 секунд нужно подключить плату к USB порту для загрузки скетча!

Скетч загрузится, и на плате будет мигать светодиод.

Видео версия обзора платы Digispark ATTiny85. «Как прошить Digispark ATTiny85. Обзор платы Digispark ATTiny85»

Ардуино в качестве программаторов AVR контроллеров

30 Дек 2015

С последней версией Arduino IDE перестал работать USBASP, с помощь которого прошивал массу контролеров.

У USBASP пора обновить прошивку, а может быть и схему, а я буду использовать в качестве программатора обычный Arduino.  Тем более я уже использовал эту схему для программирования ATTiny13.

Для Arduino на ATmega168/328 схема будет выглядеть так — между собой соединяем D11, D12, D13, а D10 контроллера программатора соединяем с RESET программируемого контроллера. Устанавливаем кварц для прошивки контроллеров, работающих от внешнего резонатора.

Для удобства работы собираю программатор на макетке. Для микросхем в корпусе DIP28 использую панель DIP с нулевым усилием.

Также на плате устанавливаю разъем под Arduino Pro Mini, на которых делаю все последние Arduino-проекты

Получаю такую платку

Устанавливаю на плату микроконтроллеры

Можно приступать к прошивке/

Для этого в Ардуину нужно записать скетч ISP-программатора

Затем выбираем тип программатора

И все. Программатор собран и настроен.

Немного о применении

  1. Загрузка скетча с 0-го адреса без загрузчика. Экономит память микроконтроллера и время загрузки. Особенно интересно в микросхемах с малой памятью — Atmega8 и различных Attiny.
  2. Установка загрузчика на «голую» Atmega328, чтобы в дальнейшем заливать в нее скетчи через RX/TX, как в обычную Ардуину.
  3. Замена загрузчика, например, на OPTIBOOT, нормально поддерживающий режимы сна и сторожевой таймер.
  4. Установка фьз-битов. Полезно при создании «батареечных проектов», когда отключается BOD — контроль входного напряжения и микроконтроллеру устанавливается режим работы с пониженной частотой, опять же для уменьшения напряжения питания до 2.8-3.3В и энергопотребления.
  5. Восстановление «мертвых» микроконтроллеров после неудачных экспериментов

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

Posted in Arduino, Самодельный контроллер, Технологии | Метки: Arduino, ATMEGA328, AVR

«ArduinoISP-Turbo» – патч скетча ISP-программатора из Arduino UNO.

В очередной раз проводя оптимизации и ревизию материалов на сайте, перечитав эту статью подумал, что совсем не использую описанное выше – программаторов и так тьма разнообразных … Но решил еще раз проверить описанное. К удивлению пришлось немного повозиться. Но все же все заработало, и причем даже лучше чем ожидалось ;-)) Об этом и пойдет речь далее – 8 лет спустя после написания первой части.

Для эксперимента взял древнюю UNO с интерфейсным контроллером mega8u2 и Arduino IDE 1.8.9, обновил (перезалил) прошивку интерфейсного контроллера (.\hardware\arduino\avr\firmwares\atmegaxxu2\UNO-dfu_and_usbserial_combined.hex) и загрузчик основного mega328p (.\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex), подготовленный кабель из запасов тоже нашелся. В комплекте среды разработки в качестве примера идет уже совсем другой (обновленный) скетч ArduinoISP, чем представлены и доступны по ссылкам выше. Можно воспользоваться им в неизменном виде, не забывая указывать помимо вида программатора (stk500v1) и номера COM-порта еще и скорость порта (по-умолчанию 19200, без указания скорости не работает!). Но на таких «оборотах» работать крайне медленно/скучно/бессмысленно – и мотивация выбора такой черепашьей скорости в скетче, типа чтоб можно было прошить контроллер tiny85 на 1MHz тактовой частоты настроенный – не сильно устраивает (с такими контроллерами не работаю), да если даже и работал бы … То зачем занижать скорость работы COM-порта? 115200 нужно выставлять обязательно (максимальная «стандартная» скорость – в разы быстрее чем 19200). Но останавливаться на этом также не стоит. Прошивка в софтовом преобразователе USB<->COM (интерфейсном контроллере ардуины) вполне себе переваривает и 921600! Но в этом случае помимо скорости порта (чтобы получить эффект) нужно увеличивать и скорость SPI-шины между ардуиной-программатором и целевым контроллером (дефолтных 1000000/6 – катастрофически мало). Раз есть требование /6 тактовую частоту – то так и сделаем: все контроллеры ардуино по-умолчанию имеют кварц на 16MHz, что даже /6 превосходит скорость порта в 921600 … Результатом остался доволен, корректировки можно внести самостоятельно или скачать сразу откорректированный скетч ArduinoISP-Turbo. Не забываем указывать актуальную скорость (указанную в исходнике скетча), в последнем случае 921600. Контроллер mega328p (другая ардуина) таким скетчем-программатором считывается полностью за 3.5сек и записывается за 10сек.

MiGeRA (июнь 2020)

Recent Articles

  1. Learn how to use the TP4056 properly. There’s a right way, and a wrong way, to use it to safely charge Lithium Ion batteries.

  2. A tutorial on using the ADS1115 precision 16 bit ADC for low power use.

  3. Arduino Nano ISP: How to program an ATmega328P using an Arduino Nano as the ISP programmmer. One common problem: Programming a sketch into the chip without a reset control — solved here.

  4. I2C tutorial: Learn all about the 2 wire I2C serial protocol. Learn how easy it is to use, how it works and when to use it…

  5. How to test and use an Arduino Joystick including a new library to make it super easy.

  6. How to use the MCP4728, a versatile four channel DAC with built in voltage reference.

    The MCP4728 chip is a four channel 12 bit DAC, with memory that outputs voltage that you can use for calibration, anywhere you want a fixed voltage.