Общение с Arduino Due Core через Native USB
- Войдите на сайт для отправки комментариев
В связи с покупкой Arduino Due Core, у которого есть только native USB порт, возникла идея работать через него.
У меня этот порт стандартно появляется как COM18.
Надо сказать, с этим портом при прошивке постоянно возникают какие-то "особенности": при каждой попытке прошивки он отваливается. После чего требуется перезагрузка, после которой появляется либо он, либо COM19. После перепрошивки порт снова отваливается.
Открытие монитора порта подвешивает контроллер. Выход - перезагрузка.
Ну да ладно...
Проблема в том, что не могу налдадить обмен информацией через нативный порт (SerialUSB)
void setup() { pinMode(13, OUTPUT); digitalWrite(13, HIGH); delay(50); digitalWrite(13, LOW); delay(50); digitalWrite(13, HIGH); delay(50); digitalWrite(13, LOW); delay(50); digitalWrite(13, HIGH); delay(50); digitalWrite(13, LOW); delay(50); SerialUSB.begin(9600); // while(!SerialUSB); delay(1000); Serial.begin(9600); while(!Serial); // Serial.println("begin PROG"); } void loop() { if(SerialUSB.available()) { byte b = SerialUSB.read(); digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) delay(500); // wait for a second digitalWrite(13, LOW); // turn the LED off by making the voltage LOW delay(100); // wait for a second SerialUSB.write(b); } else { digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(13, LOW); // turn the LED off by making the voltage LOW delay(500); // wait for a second } // SerialUSB.println("Native"); // Serial.println("Prog"); }
Если раскомментировать строку 16, то скетч на ней и останавливается.
Если раскомментировать строку 36, скетч никак не реагирует на ввод.
Если обратно закоментировать строку 36, а также строку 28, скетч читает символы из порта. Количество прочитанных символов равно n+1.
Если раскомментрровать строку 28, скетч осуществляет ввод один раз, а на втором - зависает.
Поиск в И-нете к решению не привел: как правило, людей интересует высокоскоростной ввод в native USB, жалобы на неработающий вывод попадаются гораздо реже, но решения ни в одном случае не видел.
На обычной Arduino Due работает так же. (при подключении через native USB)
Какие есть идеи - как добиться двустороннего обмена через native USB?
Что-то при размещении сообщения поплыли номера строк. Следует читать:
Если раскомментировать строку 17, то скетч на ней и останавливается.
Если раскомментировать строку 38, скетч никак не реагирует на ввод.
Если обратно закоментировать строку 38, а также строку 31, скетч читает символы из порта. Количество прочитанных символов равно n+1.
Если раскомментрровать строку 31, скетч осуществляет ввод один раз, а на втором - зависает.
Да, ни в каком случае в монитор порта ничего не попадает.
andriano, у меня стандартая дуе, вывод в сериал через натив работает отлично. Причём инитится он по дефолту, попробуйте без всего лишнего вот так:
Это 100% работает через натив на обычной Due
dimax, спасибо.
Обычная Due и Core ведут себя через native USB одинаково (по крайней мере, разницы я не заметил).
Некоторая логика здесь есть - задание скорости, которая для COM как раз и задается в begin(), для USB неактуально.
Теперь, правда, другая неприятность: после прошивки порт отваливается, после перезагрузки - тоже (думаю, что это одно и то же). Соответственно, "поймать" в монитор примерно первые 10 секунд после перезагрузки не получается.
И время от времени приходится прибегать к методике знакомой многим ардуинщикам, но которая меня раньше как-то обходила стороной, - вовремя нажимать на reset при прошивке.
Ладно, будем приспосабливаться.
Еще раз спасибо.
andriano, 10 секунд что-то много. У меня тоже тренькает, но довольно быстро. Счёт в том примере я видел с 1-й же секунды, при открытом мониторе порта разумеется.
Т.е. нажать на reset, перенести руку на мышь, закрыть окно монитора порта, открыть двухуровневое меню, из которого выбрать номер COM-порта и запустить монитор порта заново у Вас получается менее чем за секунду?
andriano, Дабы не ввеcти вас в заблуждение -проверил. И так, подключаю кабелем в Native port. Выбираю в IDE плату, выбираю порт. Пишу скетч, для точности измерения без /1000. Чтоб знать прямо в миллисекундах. Сразу открываю "монитор порта" -пока там пусто, т.к. загружен дефолтный блинк.Нажимаю кнопка "загрузка", скетч компилится и загружается, и ничего не больше не трогая вижу на экране это:
там с портами действительно заморочки были- потому что загрузчик делает один порт, а usbserial -другой. Правильный порт всегда подписан как у меня на скриншоте в заголовке монитора порта, и если тыркать на ресет оно может заглючить -старый "правильный" порт подвиснет, и система сгенерит ещё один. Так что лучше лишний раз не пользоваться ресетом. А если уже глюкануло, то лучше в диспетчере устройств включить отображение скрытых устройств, и удалить все ком-порты.
Нет у меня привычки "тыркать на ресет". Вообще ни разу не "тыркал" ни с одним контроллером, включая Due - программный порт. Reset нажимаю только в двух случаях:
- контроллер завис (я все отлаживал по "блинку": нет мигания, значит, завис),
- в списке портов нет ничего кроме COM1.
Но еще поэкспериментирую - попытаюсь точнее определить, в каких случаях отваливется порт. До этого, вероятно, он отваливался из-за SerialUSB.begin(). Теперь буду перебирать варианты без него.
Когда первый раз подключаешь due в usb через native port, в диспетчере устройств она определяется как Bossa чего-то там с каким-то номером порта. При перетыкании usb шнурка она уже определяется нормально, как arduino due с другим номером порта. Надо подпаивать резистор на плату (надо поискать куда), чтобы определялась нормально с первого раза.
Возможно в этом дело.
diakin, речь идет о немного другой плате: