Скорость запуска NANO и UNO

sashadeg
Offline
Зарегистрирован: 02.03.2016

Здравствуйте. Имею 2 ардуинки, UNO и NANO. Имеется простенький скетч, который запускается мгновенно после подачи напряжения 12 вольт на VIN - GND.

Если с UNO никаких проблем нет - включается ардуино и скетч запускается через пару милисекунд, то с NANO небольшая заквоздка - скетч запускается через 1,5-2 секунды, что не допустимо.

В чем может быть проблема? Ведь аппаратная начинка у них одна и та же? 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Загрузчики у них разные, у UNO более новый (optiboot). Видимо более старая версия загрузчика (такая, как у Nano и Pro Mini) после подачи питания дольше по времени ожидает получение данных для прошивки скетча.

faraddin
Offline
Зарегистрирован: 11.08.2013

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

sashadeg
Offline
Зарегистрирован: 02.03.2016

Я пока умею заливать скетч только стандартным образом. Объясните пожалуста как напрямую прошивать и писать под микроконтроллер? На чистом C+ чтоли? . Или дайте ссылки на статьи. Спасибо. 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Конкретно для быстрого старта скетча достаточно отказаться от загрузчика. Писать скетч и прошивать можно в том же Arduino IDE. Но для этого нужен либо программатор (например USBasp), либо другая ардуина со скетчем ArduinoISP (эмулятор программатора). В настройках Arduino IDE ("Сервис" - "Программатор") надо будет выбрать программатор и прошивать ардуину через "Файл" - "Загрузить с помощью программатора". Прошиваемую ардуину не нужно подключать к компу, её нужно лишь соединить проводками с программатором или другой ардуиной (ArduinoISP), которые и подключаются к компу.

sashadeg
Offline
Зарегистрирован: 02.03.2016

Видимо у нас разные версии 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

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Потому что надо сначала взглянуть на схему подключения ISP программаторов  к процессорам

https://www.google.ru/search?q=arduino+isp+programmer&newwindow=1&biw=16...

sashadeg
Offline
Зарегистрирован: 02.03.2016

Получилось подключить по такой схеме

+5v -> Vcc

GND -> GND

D10 -> RST

D11 -> D11

D12 -> D12

D13 -> D13

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

А почему так происходит? Если по USB загружать, то возникает задержка, а через программатор задержки в запуске нет.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

sashadeg пишет:

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

А почему так происходит? Если по USB загружать, то возникает задержка, а через программатор задержки в запуске нет.

Потому что с помощью программатора мы прошиваем программу (скетч) во flash-память микроконтроллера напрямую. И при подаче питания она сразу стартует.

А через интерфейс USB нельзя прошить flash-память микроконтроллера напрямую (на самом деле микроконтроллер даже не поддерживает аппаратный USB, на плате стоит USB-UART конвертер). В этом случае схитрили и в микроконтроллере заранее уже записана программа (загрузчик) в определённом участке памяти, которая при подаче питания запускается первой и некоторое время ожидает получение новой прошивки. В случае если данные приходят - загрузчик записывает пользовательскую программу "рядом с собой", после чего передаёт ей управление. Если данные не приходят, то загрузчик просто передаёт управление уже записанной пользовательской программе. Т.е. пауза при включении - это ожидание "программы-загрузчика" новой "пользовательской программы".

В случае с программатором, "программа-загрузчик" затирается и записывается только "пользовательская программа", которая стартует сразу без ожидания. Но после этого загружать скетчи через USB вы уже не сможете, т.к. стёрли "программу-загрузчик". Чтобы опять восстановить, нужно через программатор записать этот самый загрузчик (выбрать плату, потом Сервис - Записать загрузчик).

sashadeg
Offline
Зарегистрирован: 02.03.2016

Большое спасибо! Более чем подробно и понятно! Благодарю!