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

mainameiz
Offline
Зарегистрирован: 15.09.2018

Собрал вот такой вот макет "arduino cвоими руками".
 
 Прошил bootloader с помощью Arduino IDE + usbasp. Теперь пытаюсь загрузить в него тестовые скетчи из Arduino IDE с помощью USB-UART (такого вот). Но есть один непонятный нюанс - скетчи грузятся только один раз после подключения к usb. Чтобы загрузить другой скетч - нужно перевоткнуть usb кабель, да не просто перевоткнуть, а именно ту его часть, которая поключается к usb-uart. Если перевоткнуть ту часть, которая подключается к компьютеру, то загрузка не будет работать.

Может кто-нибудь объяснить почему так? И можно ли как-нибудь избавиться от этого?
В интернете пробовал искать похожие проблемы, но не нашел.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Убедитесь, что выход RES развязан конденсатором 1.0 мкФ последовательно, а не соединён прямо с DTR.

Но это не 100% гарантия, существует вероятность что прошива программатора кривая, и он не убирает единицу с DTR, тогда этот конденсатор будет всегда заряженным до исчезновения питания, то есть не проводит ток пока не отключишь. Такое лечить только кнопкой на Reset.

Вообще, можно писать прямо USBASPом, просто нажимать Ctrl+Shift+U вместо Ctrl+U. В такую ардуину можно втыкать и USBASP, и USB2Serial мост, через два USB порта. По ISP писать, по UART дебажить.

mainameiz пишет:
да не просто перевоткнуть, а именно ту его часть, которая поключается к usb-uart. Если перевоткнуть ту часть, которая подключается к компьютеру, то загрузка не будет работать

То есть влияет, какой конец кабеля отключать - A (прямоугольный, чтобы был комп отдельно, и из программатора торчал кабель), или B (маленький прямоугольный либо квадратный, чтобы был программатор отдельно, и из компа торчал кабель)? Не, pure f█cking magic, так не бывает.

bwn
Offline
Зарегистрирован: 25.08.2014

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

mainameiz
Offline
Зарегистрирован: 15.09.2018

Почитал еще про загрузку скетчей и разобрался с проблемой.

Оказывается на настоящем arduino есть кнопка reset, которую нужно нажимать в определенный момент при загрузке скетчей - это действие переводит bootloader в режим когда он ждет загрузки скетчей. И видимо я когда перевтыкал usb, то делал как раз то же самое. Просто там очень маленький промежуток времени нужно поймать и видимо мне посчастливилось поймать его именно в те моменты когда я вынимал usb со стороны usb-uart :-)

Также пробовал, вместо перевтыкания usb, в нужный момент замыкать reset на контроллере с DTR на usb-uart - это видимо тоже перевдит bootloader в режим ожидания загрузки скетчей.

Но вот как заставить всё это работать без того чтобы выжидать этот маленький момент, я так и не понял. По идее Arduino IDE должна посылать этот сигнал контроллеру сама... В интернетах пишут что возможно нужно что-то перепаять на плате usb-uart чтобы dtr/reset заработали, но я не стал разбираться...

В итоге я просто взял usbasp и загружаю скетчи через него.

Еще хочу поделиться болью :-) Вдруг кто-то столкнется с таким же.
Долго не мог понять почему не удается прошить через usbap, хотя он нормально определяется в системе и до этого, пару дней назад, я им успешно прошил bootloader.
Выяснилось что у МК немного отошли контакты (см картинку). При этом, это не мешало загрузке скетчей через usb-uart.
Я привык что железки либо работают, либо нет, а тут такое "почти работающее устройство". Не думал что такое бывает.

Гриша
Offline
Зарегистрирован: 27.04.2014

mainameiz пишет:

Я привык что железки либо работают, либо нет, а тут такое "почти работающее устройство". Не думал что такое бывает.

макетка это зло, что-то типа кнопок и светодиодов можно накидать, а вот как на фото кварц стоит - это зло. Сколько постов про экраны на форуме разрешились простым паяльником...