2016-12-07 9 views
0

У меня есть Arduino Micro, подключенный через USB к моему компьютеру, отображающийся как /dev/arduino.Надежно удалите Arduino Micro в загрузчик

Теперь, когда я хочу запрограммировать его (в настоящее время он имеет загрузчик по умолчанию от Arduino), я должен загрузить его в загрузчик. AFAIK это можно сделать, либо сбросив чип, либо поговорив с ним, используя скорость передачи данных 1200.

Для этого у меня есть сценарий, как

#!/usr/bin/env python 

import serial 

s = serial.Serial(
     port="/dev/arduino", 
     baudrate=1200, 
     bytesize=serial.EIGHTBITS, 
     stopbits=serial.STOPBITS_ONE, 
     parity=serial.PARITY_NONE) 
s.isOpen() 
s.close() 

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

Как я могу надежно положить мой Arduino Micro в загрузчик? Предпочтительно через USB.

ответ

0

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

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

+0

Моего «доказательный» (по крайней мере я так думаю) являются actuall два факта. При нажатии кнопки иногда зеленый светодиод переходит от мигания к «дыханию». Это документированное поведение для микроорганизмов arduino. Но это только случается. Кроме того, когда светодиод продолжает мигать, а не начинает дышать, «avrdude» не может разговаривать с устройством. Программа работает в настоящее время простая мигающая программа. – Uroc327

+0

Очевидно, что при использовании Arduino IDE он все время запускает устройство в загрузчик. – Uroc327

0

волшебство не находится в пределах arduino IDE, а вместо этого в последовательности avrdude.

вы можете установить другой AVRDUDE на вашей системе, или использовать тот же, который поставляется с Arduino, но вы можете сделать сброс имитирующий небольшую подпись прочтенную AVRDUDE (avrdude -c arduino -p m328p -P com1) ...

но быть полностью честный, настоящий трюк находится на схеме сброса ардуино. контакт сброса подключается к серийному DTR через конденсатор (и иногда rts), поэтому каждый раз, когда avrdude переключает последовательную конфигурацию на программу через rs232, он производит небольшой импульс на DTR (около 50ms it seems), что вызывает сброс на микроконтроллере. я думаю, что вы можете использовать s.setDTR(True); time.sleep(0.05); s.setDTR(False) для создания небольшого импульса для сброса Arduino в питоне ...

удачи

 Смежные вопросы

  • Нет связанных вопросов^_^