Прошивка Arduino pro mini через usb в ttl

Обновлено: 20.11.2024

Я следую процедуре с этого веб-сайта, чтобы установить последовательный порт и подключить его к Arduino pro mini m328p.

Прежде чем подключить его к своему RPI, я сначала протестировал его с помощью Arduino, чтобы убедиться, что он работает. Я загрузил фиктивный скетч на свой m328p и установил Arduino Uno R3 в качестве интернет-провайдера. Это работает, и я делаю набросок отправки данных обратно в Arduino, я вижу это через последовательную консоль.

Далее RPI к m328p через порты UART:
RPI m328p
GPIO 14: TXD -> RX
GPIO 15: RXD -> TX
GPIO 22: Сброс - > RST
3.3v -> VCC
GND -> GND

Затем я подключил его в соответствии с URL-адресом, и я знаю, что у меня потенциально все настроено правильно, скетч на m328p отправляет мне данные, и я могу видеть их из последовательной консоли в программе Arduino IDE от RPI. Я также тестирую в python фиктивный скрипт, чтобы увидеть, работает ли автосброс. И это так. Готовое приглашение из моего эскиза продолжает появляться на последовательной консоли. Почему я могу получить данные от m328p через порт UART, но не могу загрузить новый скетч?
Я продолжаю получать эти сообщения, у меня установлена ​​скорость 9600 бод, попробуйте любую другую скорость с тем же результатом.
avrdude-original: stk500_getsync() попытка 10 из 10: не синхронизировано: resp=0x35

Для такой настройки вам не нужны переходники USB-TTL. RPI может выступать в роли программиста? Нужна помощь.

Используйте последовательный или USB/последовательный загрузчик, а не этот метод программирования SPI.
Купите Arduino с предустановленным загрузчиком для последовательного порта.

Значит, для загрузки всегда нужен USB/последовательный загрузчик? Метод, предложенный на том сайте, не сработает?

Чтобы загружать скетчи с помощью uart, на atmega328 должен быть предварительно загружен загрузчик (arduino). Вот почему все платы Arduino поставляются с предустановленной программой. Использование ISP не требует загрузчика, и вы можете использовать всю флэш-память для своей программы.
Вы также можете записать загрузчик arduino с помощью ISP (SPI), а затем запрограммировать чип как arduino uno через uart.

Я сделал это успешно. затем я могу загрузить оду с помощью программатора в IDE. Все это работает с использованием Arduino, но при попытке
RPI ничего не получается. т.е. я загружаю скетч на Arduino, чтобы отправить букву a на последовательный порт. Я перемещаю Arduino в RPI и получаю данные с последовательной консоли в IDE. Но я не могу отправить эскиз. Я стираю загрузчик каждый раз, когда загружаю скетч? я не понимаю

Вы программируете AVR через контакты RPi SPI (ISP) или UART?
При использовании ISP вы прошиваете весь чип -> перезаписываете загрузчик
При использовании UART вам нужно выбрать эту опцию в IDE

Хорошо, я вернул загрузчик на Arduino PRO mini. Зеленый индикатор мигает.

Далее RPI к m328p через порты UART подключается следующим образом:
GPIO 14: TXD -> RX
GPIO 15: RXD -> TX
GPIO 22: Reset -> RST
3,3 В -> VCC
Земля -> Земля

По-прежнему получается -> avrdude-original: попытка stk500_getsync() 10 из 10: не синхронизировано: resp=0x00

"С UART вам нужно выбрать этот параметр в IDE" -> Как? и где?

здесь результат

Общесистемный файл конфигурации — "/etc/avrdude.conf"
Файл конфигурации пользователя — "/root/.avrduderc"
Файл конфигурации пользователя не существует или не является обычным файлом, пропускаем< /p>

Использование порта: /dev/ttyAMA0
Использование программатора: arduino
Переопределение скорости передачи: 9600
сделано с автосбросом
strace: |autoreset: Broken pipe
strace : |autoreset: Неисправность канала
avrdude-original: stk500_recv(): программатор не отвечает
avrdude-original: stk500_getsync() попытка 1 из 10: не синхронизировано: resp=0x00
strace : |autoreset: Неисправность канала
strace: |autoreset: Неисправность канала

Хорошо, верните загрузчик на A328p, используя ISP с помощью avrdude.
Затем загрузите IDE arduino.

Выберите в разделе «Плата»: Arduino UNO
Выберите в разделе «Порт» порт RPi uart: убедитесь, что вы выполнили шаг 3 (связывание последовательного порта с Arduino IDE) и исправили линию DTR от
Ваша ссылка UP.
PS: Надеюсь, вы использовали преобразователь уровня напряжения между RPi и Arduino, если он работает на 5 В:
Arduino на 3,3 В составляет 8 МГц. Для работы на частоте 16 МГц требуется 5 В.

Для теста я использовал скетч Blink в arduino ide, и он не помог с плагином m328p, как упоминалось ранее. Я пытаюсь использовать Arduinio Uno, Sleepy pi, m328p 3.3 и 5v. И до сих пор не работает. Имеет ли значение, если arduino IDE была установлена ​​до того, как стал доступен порт uart? m328p имеет постоянно мигающий индикатор готовности, значит загрузчик есть и работает. Так что я не знаю.

def reset():
pin = 36
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.HIGH)
time.sleep (0,12)
GPIO.output(pin, GPIO.LOW)

Вы определяете контакт сброса = 36. Если 36 означает нумерацию контактов J8, это будет Pin36 = GPIO16, а не 22 для сброса.

Но вы установили

что означает, что используется нумерация контактов BCM. Однако GPIO 36 недоступен на RPi.

Для использования набора системы нумерации BOARD

Наконец-то я подключил мост usb к uart, и знаете что, он все еще не работает.

Поэтому я подключил UART-мост к своему ПК и безуспешно попробовал. Я вернулся к arduino и перезаписал загрузчик, и вот результат. Мне это нравится.

Что не так. Arduino UNO iis подключается к pro mini, как показано ниже --- на чипе это mega328pau 1533
11 на 11, 12 на 12, 13 на 13, 10 на первый, 3,3 на vcc и GND на GND.

Итак, вы снова хотите прошить загрузчик на Arduino Pro Mini, используя Arduino UNO в качестве программатора ISP?
Я думал, вы хотите иметь возможность загружать скетчи с помощью uart.
Если вы хотите сделать это с помощью RPi, исправьте код DTR, как я предложил выше.
Если вы хотите использовать мост USB-Serial, вам нужно только выбрать правильный uart-порт в Arduino IDE.
Проверьте, есть ли у вас Arduino 3V или 5V. -> Если 5V использовать резисторы

Если у вас все еще есть проблемы, загрузите фотографию вашей проводки.

На данный момент я просто пытаюсь заставить свой компьютер общаться с pro mini напрямую через MICRO-USB-to-UART-TTL-Module-6Pin-Serial-Converter-CP2102 (посмотрите на ebay). Если я заставлю это работать, мне будет легче заставить работать RPI.

Когда я пытаюсь использовать мост UART, он подключается следующим образом: мост UART — Pro Mini
DST — RST, 3,3 В — VCC, GND — GND, TX — RX, RX — TX.

Простой вопрос, можно ли отправить скетч на pro mini без программатора? Нужен специальный загрузчик на pro mini.

pdesnoyers76 писал(а): Простой вопрос, можно ли отправить скетч на pro mini без программатора? Нужен специальный загрузчик на pro mini.

Пока это единственный способ загрузки эскизов.

Я не понимаю, почему первые 2 варианта не работают.

Я сказал вам в UP, что в вашем коде DTR есть ошибки. Вот почему это не работает.
Для моста USB-Serial он должен работать из коробки. Единственное, что я могу предположить, это то, что вы сделали ошибку проводки. Вот почему я предложил вам опубликовать фотографию вашей установки.

Я видел это и спасибо. Но я мог бы опубликовать это, но я применяю это исправление, и оно все равно не работает. Вот почему я перехожу на свой ПК с преобразователем USB/последовательный порт

Что касается картинки, пожалуйста. И примечание: я перемещаю DTR с BLK на GRN на adrduino, и это не меняет результат.

Вложения IMG_1017.jpg (25,23 КиБ) Просмотрено 6866 раз IMG_1020.jpg (61,87 КиБ) Просмотрено 6866 раз IMG_1019.jpg (43,91 КиБ) Просмотрено 6866 раз

Давайте сначала попробуем запустить метод USB-UART:
Если у вас есть 5V arduino, вы должны подключить контакт 5V к VCC.
Вы уверены, что у вас есть Arduino 3V3?

Однако правильная проводка должна быть:

FTDI -> заголовок программы Arduino Pro Mini
=============
DTR -> GRN (Reset)
RX -> TX
TX -> RX
3V3 ->VCC (если у вас Arduino 3V3)
CTS ->GND (если доступно)
GND->GND
GND->BLK< /p>

У Arduino есть контакт RAW, на который можно подать любое напряжение от 3,4 до 12 В.
Если вы не уверены, просто отключите линию 3V3 -> VCC и подключите 5V -> RAW.

Эта ошибка часто возникает, когда невозможно выполнить сброс перед загрузкой кода. Вот почему нам пришлось исправить линию DTR на RPi.
Итак, поскольку ошибка все еще присутствует как на RPI, так и на мосту USB-Serial, у вас, похоже, проблема с линией сброса.
Другие возможные варианты:
-загрузчик поврежден/вышел из строя
-вы не выбрали правильный порт и неправильную плату в IDE arduino
-используется последовательный порт (консоль/ PuTTY/Arduino Serial Monitor и т. д.) или связь с другим устройством
-старый/плохой драйвер usb-serial bridge
-неверная скорость передачи данных

Вы также можете попробовать перезагрузить доску вручную, чтобы проверить, связана ли ваша проблема со сбросом:
Во время загрузки вы должны увидеть отправку avrdude.
Хитрость заключается в том, чтобы нажать кнопку сброса на плате непосредственно перед отправкой пакетов. После этого программа должна быть успешно загружена. Если это не работает, попробуйте нажать кнопку сброса на доске после того, как вы нажмете кнопку загрузки в разные промежутки времени до 10 секунд или более.

Это работает. GRN Я думал, что это Земля. Почему они не назвали это RST или просто RESET. Какая доза обозначает GRN, зеленый? В любом случае. Итак, я снова подключаю все, как вы сказали, и меняю на 57600 бод и «ET Voila». Я уверен, что уже пробовал это, но. Я попробовал еще раз RPI с USB, и это работает. Итак, в свою очередь, я попробовал с портом UART, и что вы знаете, он работает. Сначала этого не произошло, потому что я сделал сброс в неправильном GPIO, но в конце концов это сработало.

Все мои проблемы связаны с неправильной проводкой и низкой скоростью передачи данных. Так вот как это подключить.
В любом случае скорость передачи данных на уровне 57600
FTDI -> Заголовок проги Arduino Pro Mini
=============
DTR -> GRN (Сброс )
RX -> TX
TX -> RX
3V3 ->VCC
GND->GND

Вот так подключается через RPI
RPI -> заголовок проги Arduino Pro Mini
=============
GPIO 16 -> GRN ( Сброс)
UART RX -> TX
UART TX -> RX
GPIO 1 3V3 ->VCC
GPIO 39 GND->GND

Это всегда код "13" -> Проблема между клавиатурой и креслом.

Привет! Спасибо, что заглянули в alselectro! Оглянитесь вокруг и загрузите RSS-канал, чтобы оставаться в курсе. Увидимся!

Arduino PRO MINI — как загрузить код

Arduino ProMini, как следует из названия, представляет собой миниатюрную версию UNO. Он работает на кристалле 16 МГц, ATMEGA328, но не имеет возможности подключения USB. Существуют версии 5 В (16 МГц) и 3,3 В (8 МГц). В этой демонстрации я использую версию 5v.

На плате есть регулятор напряжения, поэтому он может принимать напряжение до 12 В постоянного тока. Если вы подаете на плату нерегулируемое питание, обязательно подключайтесь к контакту RAW, а не к VCC .

Vcc принимает только 5 В.

В последней версии этой платы контакты ADC6 и ADC7 разделены, а также добавлены места для дополнительных подтягивающих резисторов I2C.

Для загрузки кода на pro mini требуется адаптер USB-TTL. Доступно много типов USB-адаптеров. Наиболее надежным из них, который работает до Windows 10, является тот, который построен на микросхеме CP2102.

Адаптеры CP2102 доступны в 2 вариантах. Один с 6 контактами, включая DTR, готовый терминал данных, который обрабатывает RESET, требуемый платой promini.

Другая плата обычно доступна с 5 контактами. Здесь СБРОС необходимо выполнить вручную на promini во время загрузки кода.

Сначала давайте загрузим код, используя 6-контактную версию.

Соединения

На некоторых платах Promini вывод DTR печатается как GRN.

Подключите плату USB к ПК и откройте Диспетчер устройств. Если драйвер был установлен ранее, будет выделен COM-порт. В противном случае загрузите отсюда драйвер silicon labs cp2102 и установите его.

Откройте Arduino IDE, введите выделенный COM-порт.

Выберите плату как Arduino Pro или Pro Mini, программатор как USBasp.

В новых версиях IDE есть возможность выбрать тип платы ProMini. В разделе «Процессор» выберите ATmega328 5v,16MHz

Из примеров откройте эскиз BL;INK

Нажмите кнопку ЗАГРУЗИТЬ.

Вывод DTR платы USB обеспечивает СБРОС, и ваш код будет загружен в PROMINI без ручного сброса.

Для загрузки кода с использованием 5-контактной версии требуется ручной СБРОС в PROMINI.

Соединения

Подключите USB к ПК и обратите внимание на выделенный COM-порт.

Откройте Arduino IDE. Вставьте COM-порт, выберите плату как Arduino Pro или Promini и программатор как USBASP

Из примеров откройте скетч BLINK

Нажмите кнопку ЗАГРУЗИТЬ.

Обратите внимание на сообщение в нижней части IDE.

Сначала появляется сообщение «Компиляция эскиза».

Затем оно меняется на «Идет загрузка»

Как только вы увидите сообщение «Идет загрузка», аккуратно нажмите кнопку RESET на Promini.

Это нужно сделать сразу же, как только вы увидите сообщение «ЗАГРУЗКА».

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

Вы также можете использовать доску UNO для загрузки кода на Promini.

Чтобы использовать плату UNO, вам необходимо обойти загрузчик. Для этого загрузите пустой код в UNO или подключите контакт RST к GND

Подключение контакта RST к GND обходит загрузчик, и только микросхема последовательного преобразователя, расположенная рядом с разъемом USB, используется в качестве USB-TTL.

Соединение здесь ПРЯМОЕ, а не обратное

Tx Arduino UNO переходит на Tx Promini

Rx от UNO переходит к Rx от Promini

Подключите USB-кабель к ПК и откройте IDE.

Выберите порт, к которому подключен UNO.

Выберите плату как Arduino Pro или ProMini

Откройте скетч BLINK и ЗАГРУЗИТЕ его.

Осторожно, сообщение в нижней части IDE.

Первоначально появляется сообщение «Компиляция эскиза».

Затем сообщение изменится на ЗАГРУЗКА…

Когда вы увидите сообщение UPLOADING… , нажмите кнопку RESET на PROMINI.

Код успешно загружен.

Обычно прошивки OpenEVSE прошиваются на плату с помощью аппаратного программатора, такого как USBasp. Раньше это требовалось, потому что прошивка стала настолько большой, что во флэш-памяти ATMega328P не оставалось места для загрузчика. Однако последние версии инструментов AVR, которые поставляются с Arduino, сократили двоичные файлы до такой степени, что теперь у нас есть место для загрузчика. После установки загрузчика OpenEVSE можно программировать точно так же, как Arduino Pro Mini, через адаптер USB->TTL UART, например кабель FTDI, с использованием протокола stk500 (arduino).

Прежде чем мы сможем запрограммировать чип с помощью загрузчика, нам нужно сделать небольшую аппаратную модификацию. После сброса загрузчик ждет, чтобы увидеть, хочет ли быть прошита новая прошивка, прежде чем продолжить загрузку установленной прошивки. Только в течение этого очень короткого промежутка времени микроконтроллер ATMega328P готов принять прошивку. Чтобы вызвать сброс с помощью программного обеспечения, нам нужно подключить контакт DTR кабеля FTDI к контакту RESET микроконтроллера через конденсатор 0,1 мкФ.

Ниже приведена фотография мода, выполненного на плате Wattzilla C3, которая является вариантом OpenEVSE:

Вывод DTR находится в крайнем левом углу 6-контактного последовательного разъема. Доступ к контакту RESET можно получить либо с левой стороны R10, как показано на рисунке выше, либо с контакта 5 разъема ISP (красный кружок).

После того, как аппаратный мод установлен, мы должны установить фьюзы для использования загрузчика и прошить загрузчик с помощью аппаратного программатора. В этом примере мы будем использовать OptiBoot, потому что он меньше и быстрее (115200 бод), чем стандартный загрузчик Arduino.

avrdude -c USBasp -B0.5 -p m328p -Uflash:w:optiboot_atmega328.hex -Ulfuse:w:0xFF:m -Uhfuse:w:0xDE:m -Uefuse:w:0x05:m - Блокировка:w:0x3F:m

После прошивки загрузчика мы можем прошивать прошивки, используя только кабель FTDI:

avrdude -carduino -PCOM5 -b115200 -p m328p -Uflash:w:open_evse.hex

Замените виртуальный последовательный порт вашего кабеля FTDI на COM5 выше.

Для тех, кто не умеет работать с командной строкой, также можно использовать Arduino IDE для записи загрузчика и прошивки.

  1. Настройте плату на Arduino UNO, используя меню, чтобы перейти к Инструменты->Плата->Arduino UNO
  2. Выберите свой аппаратный программатор через Инструменты->Программист
  3. Установите загрузчик через Сервис->Записать загрузчик
  4. Отключите аппаратный программатор и используйте Инструменты->Порт, чтобы выбрать виртуальный последовательный порт кабеля FTDI.

После этого вы можете загрузить свои эскизы с помощью кнопки загрузки. Вышеупомянутая процедура также будет работать с любым DIY или другим клоном Arduino, который не подключен к загрузчику. Обратите внимание, что загрузчик занимает 512 байт, поэтому максимальный размер эскиза уменьшается с 32 768 до 32 256 байт.

2 мысли о «Программирование OpenEVSE с помощью последовательного кабеля вместо аппаратного программатора»

Я получаю это сообщение после установки фьюзов:

avrdude: safemode: hfuse изменен! Был де, а теперь d9
Хотите, чтобы этот предохранитель поменяли обратно? [д/н] д

Это на ATmega328P? Проверьте проводку и попробуйте другой программатор. Он работает как с моим USBasp, так и с моим USBtiny.

Внимание! Это руководство было написано для микроконтроллеров AVR с загрузчиком Arduino, использующим выводы ICSP. Если вы используете микроконтроллер ARM с контактами SWD, вам понадобится специальный программатор (например, Atmel JTAG ICE 3 или Atmel-ICE) для подключения к порту SWD. Для получения дополнительной информации ознакомьтесь с нашим руководством по программированию на ARM.

У вас есть заблокированный Arduino, который больше не принимает код? Или, может быть, вы написали свою собственную прошивку и хотели бы загрузить ее на свой Arduino? Или, может быть, вы просто хотите узнать больше о внутренней работе Arduino, AVR и микроконтроллеров в целом. Что ж, тебе повезло! В этом руководстве вы узнаете, что такое загрузчик, зачем его нужно устанавливать/переустанавливать, а также узнаете, как это сделать.

Рекомендуемое чтение

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

Основы печатных плат

Что такое печатная плата? В этом учебном пособии вы узнаете, что представляет собой печатная плата, а также некоторые общие термины, используемые в мире печатных плат.

Последовательный периферийный интерфейс (SPI)

SPI обычно используется для подключения микроконтроллеров к периферийным устройствам, таким как датчики, сдвиговые регистры и SD-карты.

Что такое Arduino?

Что это вообще за «Ардуино»? В этом руководстве рассказывается, что такое Arduino, а также проекты и виджеты Arduino.

Установка Arduino IDE

Интегральные схемы

Введение в интегральные схемы (ИС). Вездесущие черные фишки электроники. Включает в себя акцент на разнообразие пакетов IC.

Руководство по подключению Pocket AVR Programmer

Что такое загрузчик?

Atmel AVR — отличные маленькие ИС, но их программирование может быть немного сложным. Вам нужен специальный программатор и несколько причудливых файлов .hex, и он не очень удобен для начинающих. Arduino в значительной степени покончил с этими проблемами. Они поместили файл .hex в свои микросхемы AVR, который позволяет вам программировать плату через последовательный порт, а это означает, что все, что вам нужно для программирования Arduino, — это USB-кабель.

Загрузчик представляет собой файл .hex, который запускается при включении платы. Он очень похож на BIOS, который работает на вашем ПК. Он делает две вещи. Во-первых, он оглядывается, чтобы увидеть, не пытается ли компьютер его запрограммировать. Если это так, он берет программу с компьютера и загружает ее в память ИС (в определенное место, чтобы не перезаписать загрузчик). Вот почему, когда вы пытаетесь загрузить код, Arduino IDE сбрасывает чип. Это в основном выключает и снова включает IC, чтобы загрузчик мог снова начать работать. Если компьютер не пытается загрузить код, он сообщает чипу запустить код, который уже хранится в памяти. Как только он найдет и запустит вашу программу, Arduino будет непрерывно циклически выполнять ее, пока на плате есть питание.

Зачем устанавливать загрузчик?

Если вы собираете свой собственный Arduino или вам нужно заменить микросхему, вам потребуется установить загрузчик. У вас также может быть плохой загрузчик (хотя это бывает очень редко) и вам необходимо переустановить загрузчик. Также бывают случаи, когда вы настроили свою плату в странных настройках, и переустановка загрузчика и возврат к заводским настройкам — самый простой способ исправить это. Мы видели платы, на которых люди отключали последовательный порт, что означает невозможность загрузки кода на плату, хотя могут быть и другие способы исправить это, переустановка загрузчика, вероятно, самый быстрый и простой способ.Как я уже сказал, плохой загрузчик на самом деле очень и очень редок. Если у вас есть новая плата, которая не принимает код, в 99,9% случаев это не загрузчик. В оставшемся 1 % случаев это руководство поможет вам решить эту проблему.

Выбор программиста

Мы собираемся поговорить о двух разных типах программаторов, которые можно использовать для установки или переустановки загрузчиков.

Вариант 1. Выделенные программисты

Чтобы быстро и легко программировать, мы рекомендуем использовать AVR Pocket Programmer (только для Windows).

Читайте также: