Скорость запуска NANO и UNO
- Войдите на сайт для отправки комментариев
Чт, 28/04/2016 - 22:28
Здравствуйте. Имею 2 ардуинки, UNO и NANO. Имеется простенький скетч, который запускается мгновенно после подачи напряжения 12 вольт на VIN - GND.
Если с UNO никаких проблем нет - включается ардуино и скетч запускается через пару милисекунд, то с NANO небольшая заквоздка - скетч запускается через 1,5-2 секунды, что не допустимо.
В чем может быть проблема? Ведь аппаратная начинка у них одна и та же?
Загрузчики у них разные, у UNO более новый (optiboot). Видимо более старая версия загрузчика (такая, как у Nano и Pro Mini) после подачи питания дольше по времени ожидает получение данных для прошивки скетча.
Если задержка недопустима, пишите прямо под микроконтроллер и пршивайте напрямую, без загрузчика.
Я пока умею заливать скетч только стандартным образом. Объясните пожалуста как напрямую прошивать и писать под микроконтроллер? На чистом C+ чтоли? . Или дайте ссылки на статьи. Спасибо.
Конкретно для быстрого старта скетча достаточно отказаться от загрузчика. Писать скетч и прошивать можно в том же Arduino IDE. Но для этого нужен либо программатор (например USBasp), либо другая ардуина со скетчем ArduinoISP (эмулятор программатора). В настройках Arduino IDE ("Сервис" - "Программатор") надо будет выбрать программатор и прошивать ардуину через "Файл" - "Загрузить с помощью программатора". Прошиваемую ардуину не нужно подключать к компу, её нужно лишь соединить проводками с программатором или другой ардуиной (ArduinoISP), которые и подключаются к компу.
Видимо у нас разные версии Arduino IDE, потому что разные инструменты у нас в разных вкладках.
1. Заливаю в UNO скетч из примеров Arduino ISP
2. Соеденяю UNO и NANO проводами
RX - RX;
TX - TX;
RST - RST;
+5 - +5;
GND - GND;
3. Изменяю тип платы с "Arduino Uno" на "Arduino NANO"
4. Изменяю программатор с "AVRISP mkll" на "Arduino as ISP"
5. Пишу скетч, который хочу залить на NANO
6. Выбираю "Скетч" -> "Загрузить через программатор"
Где ошибся? Потому что у меня так не работает =(
avrdude: stk500_recv(): programmer is not responding
Потому что надо сначала взглянуть на схему подключения ISP программаторов к процессорам
https://www.google.ru/search?q=arduino+isp+programmer&newwindow=1&biw=16...
Получилось подключить по такой схеме
+5v -> Vcc
GND -> GND
D10 -> RST
D11 -> D11
D12 -> D12
D13 -> D13
Все заработало, и действительно скетч запускается почти мгновенно.
А почему так происходит? Если по USB загружать, то возникает задержка, а через программатор задержки в запуске нет.
Все заработало, и действительно скетч запускается почти мгновенно.
А почему так происходит? Если по USB загружать, то возникает задержка, а через программатор задержки в запуске нет.
Потому что с помощью программатора мы прошиваем программу (скетч) во flash-память микроконтроллера напрямую. И при подаче питания она сразу стартует.
А через интерфейс USB нельзя прошить flash-память микроконтроллера напрямую (на самом деле микроконтроллер даже не поддерживает аппаратный USB, на плате стоит USB-UART конвертер). В этом случае схитрили и в микроконтроллере заранее уже записана программа (загрузчик) в определённом участке памяти, которая при подаче питания запускается первой и некоторое время ожидает получение новой прошивки. В случае если данные приходят - загрузчик записывает пользовательскую программу "рядом с собой", после чего передаёт ей управление. Если данные не приходят, то загрузчик просто передаёт управление уже записанной пользовательской программе. Т.е. пауза при включении - это ожидание "программы-загрузчика" новой "пользовательской программы".
В случае с программатором, "программа-загрузчик" затирается и записывается только "пользовательская программа", которая стартует сразу без ожидания. Но после этого загружать скетчи через USB вы уже не сможете, т.к. стёрли "программу-загрузчик". Чтобы опять восстановить, нужно через программатор записать этот самый загрузчик (выбрать плату, потом Сервис - Записать загрузчик).
Большое спасибо! Более чем подробно и понятно! Благодарю!