Конвертер usb-uart на ch340g: дорабатываем до rs232ttl, тестируем, сравниваем

5.3 Решение конфликтов библиотек

Иногда случается конфликт библиотек, который заключается в том, что IDE находит на компьютере несколько одинаковых библиотек. Об этом сообщается в логе компиляции предупреждением: “несколько библиотек найдено… используется то, не используется сё“. Если вы ставили некоторые библиотеки через менеджер (Скетч/Подключить библиотеки/Управлять библиотеками…), они будут воевать с библиотеками, установленными вручную в папку с программой. Где вообще лежат библиотеки?

  • Стандартные общие библиотеки – в папке с программой/libraries
    • 64-битная версия Windows – C:\Program Files (x86)\Arduino\libraries\
    • 32-битная версия Windows – C:\Program Files\Arduino\libraries\
  • Установленные через менеджер – Документы\Arduino\libraries
  • Библиотеки для конкретного ядра:
    • Стандартное ядро Arduino – C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries
    • Другие ядра – C:\Users\username\AppData\Local\Arduino15\packages\ядро\hardware\avr\версия\libraries

Конфликтовать могут и ядра, поэтому решением всех проблем может стать чистая установка Arduino IDE с удалением остатков от предыдущей версии. Удаляем программу как программу, и вручную сносим папки:

  • Папка с программой
    • 64-битная версия Windows – C:\Program Files (x86)\Arduino\libraries\
    • 32-битная версия Windows – C:\Program Files\Arduino\libraries\
  • Документы\Arduino\
  • C:\Users\username\AppData\Local\Arduino15\

Схема включения

Микросхема требует минимум внешних компонентов — 4 конденсатора и кварцевый резонатор. Наличие внутренних подтягивающих резисторы для шины USB и
цепей подавления отраженного сигнала позволяет подключать выводы UD+ и UD- непосредственно к соответствующим
сигналам разъёма USB.

Схема включения очень проста (библиотеку для Eagle можно скачать в конце статьи):

Вывод V3 является выходом внутреннего источника опорного напряжения для USB интерфейса. При напряжении питания 3.3В он
должен быть соединён с Vcc. При напряжении питания 5В, между ним и землёй подключается блокировочный конденсатор
ёмкостью 4.7 – 20 нФ.

Вывод R232 является входом включения инверсии RXD. Высокий уровень на нём включает инверсию. Этот вход можно оставить
неподключенным, т.к. он имеет внутренний резистор, подтягивающий его к земле.

Кстати, при использовании внешних преобразователей уровней можно получить поддержку интерфейсов RS23, RS422, RS485.

При работе микросхема может потреблять ток от 12мА до 30мА. В режиме сна потребление сокращается до 150-200мА при питании от 5В
(и до 50мА — 80мА при питании от 3.3В).

2. Конвертер интерфейса на микросхеме CH340G

Данное изделие я в итоге заказал. Обошлось оно мне с пересылкой в 44,30 руб., то есть почти даром. Но это не тот случай, когда дёшево — значит плохо. При подключении он сразу определился в системе (Windows 8.1). Никаких проблем с драйверами не возникло. Ранее я уже подключал другой конвертер на CH340 (тот в виде шнура-переходника USB-COM), поэтому драйвер уже стоял. Надо сказать, что и в прошлый раз не было нужды искать драйвер и ставить его вручную — всё получилось в автоматическом режиме. Теперь же ранее установленный драйвер сразу признал новое устройство.

Добавлю, что модуль имеет три светодиода (все красные), один из которых сигнализирует о подаче питающего напряжения от USB, а два других отображают состояние сигналов TXD и RXD (загораясь при логическом нуле, то есть при низком напряжении относительно GND).

5.1 Ошибка компиляции

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

“Какой-то текст”, not declared, no such file…

В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: завести для скетчей отдельную папочку в корне диска с английским названием.

В чёрном окошке в самом низу Arduino IDE можно прочитать полный текст ошибки и понять, куда копать

При использовании каких-то особых библиотек, методов или функций, ошибкой может стать неправильно выбранная плата в “Инструменты/плата“. Пример: прошивки с библиотекой Mouse.h или Keyboard.h компилируются только для Leonardo и Micro.

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

Иногда причиной ошибки бывает слишком старая, или слишком новая версия Arduino IDE, читайте комментарии разработчика скетча. В большинстве случаев версия IDE ниже 1.8 будет выдавать ошибки, особенно в программах для ESP8266. Обновляйтесь!!

Также не рекомендуется ставить Arduino IDE из магазина Windows. Ставьте обычную как в инструкции выше.

Ошибка недостаточно свободного места возникает по вполне понятным причинам. Если в проекте используется плата Nano на процессоре 328p, а вы сэкономили три рубля и купили на 168 процессоре – скупой платит дважды. Оптимизация: статическая память – память, занимаемая кодом (циклы, функции). Динамическая память занята переменными.

3.1 Настраиваем Arduino IDE для плат Digispark

Запустить Arduino IDE, перейти в Файл/Настройки. В окошко “Дополнительные ссылки…” Вставить http://digistump.com/package_digistump_index.json и нажать ОК Если ссылка не работает (в этом виноват Чебурнет), попробовать эту https://raw.githubusercontent.com/digistump/arduino-boards-index/master/package_digistump_index.json

Перейти в Инструменты/Плата/Менеджер плат… Начать вводить в поиске “Digispark”. Выбрать и установить Digistump AVR Boards

Теперь в списке плат появится семейство плат Digispark! Выбираем первую Digispark (Default – 16.5mhz)

Также нужно установить драйвера, скачать можно на официальном GitHub проекта (в папке tools), либо с моего FTP. Драйвера есть для Win, MacOS и Linux.

Пользователям Linux читать здесь

Прошивка загружается следующим образом: ПЛАТУ НЕ ПОДКЛЮЧАЕМ, ПОРТ НЕ ВЫБИРАЕМ, нажимаем загрузка, ждём компиляции. Появится надпись “подключите плату”. Втыкаем дигги в USB и прошивка загружается. Почему так? Дигги имеет на борту свой USB интерфейс, поэтому работает напрямую.

Ответы на частые вопросы

Ардуину можно прошить только один раз? Нет, несколько десятков тысяч раз, всё упирается в ресурс flash памяти. А он довольно большой.

Как стереть/нужно ли стирать старую прошивку при загрузке новой? Память автоматически очищается при прошивке. Старая прошивка будет автоматически удалена.

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

Можно ли “вытащить” прошивку с уже прошитой Ардуины? Теоретически можно, но только в виде машинного кода, в который преобразуется прошивка на С++ при компиляции, т.е. вам это НИКАК не поможет, если вы не имеете диплом по низкоуровневому программированию. Так что нет, нельзя.

Источник

USB/UART конвертер на CH340G с DTR

17 Окт 2016

USB/UART конвертеры, такие маленькие платки подключаемые к USB, повсеместно используются радиолюбителями для программирования микроконтроллеров, подключения различных устройств, модемов, модулей, всего, в описании чего есть слова SERIAL или UART.

Я уже писал статью про подобную плату с CP2102. Но периодически эти платки сгорают или теряются или просто оседают в недрах очередной поделки. И заказывая очередную партию плат Arduino Pro Mini, до кучи взял USB/UART на CH340 за $1.4. Данная плата меня заинтересовала тем, что имеет вывод DTR, который я раньше видел только на платах с CH2103. А это значит, что Arduino Pro Mini можно программировать без мучительных нажатий на кнопку RESET.

CH340 от китайской компании WCH отличаются дешевизной. Их ставят как в отдельные модули, так в китайские клоны Arduino, отладочные платы ESP8266. Даташит на CH340.

Ну что, ж, посмотрим что же я купил. В прозрачном пакетике сам модуль и соединительный провод на 5 проводов.

На плате, кроме «GND», «VCC», «TX» и «RX» есть еще «DTR» и «CTS». У последнего, «пина приветсвия» я так и не понял назначение, так как сигнала на нем нет никакого (Может кто посветит, зачем он здесь?».

На плате имеется переключатель питания 5В (напрямую с USB) и 3.3 с маломощного стабилизатора (заявлено 120мА)
и кнопка, при нажатии на которую происходит отключения питания на VCC/. Этой кнопкой можно передергивать устройства, у которых отсутствует RESET.
Из за дополнительных кнопок плата немного больше чем другие аналогичные модули

К сожалению, переключатель 5/3.3В работает только на VCC и не переключает TTL уровень UART интерфейса. Большинство устройств с 3-х вольтовым питанием толерантно к уровням 5В, но если такое не заявлено, нужно будет использовать преобразователь логических уровней или самодельную опторазвязку.

Напряжение VCC при разных положения переключателя

Подключаю Arduino Pro Mini и без проблем программирую его без всяких нажатий на RESET

В моей Windows 7 64 бит драйвера на CH340 уже были. Не удивительно, учитывая сколько устройств к нему уж подключалось.

LINUX из моей «апельсинки» определил эти платки «из коробки»

Логический анализатор, подключенный в параллель TX, RX и DTR показывает работу последнего

А вот с модулем ESP8266 без внешнего питания ничего не вышло. ESP-шка просадила маломощный стабилизатор до 1.6В и работать отказалась

Итог

Вполне рабочее устройство, выполняющее свои функции. Хотя CP2102 мне понравился больше при более низкой стоимости.

Плюсы модуля:

  • Небольшая цена
  • Хороший функционал (DTR, переключатель 3.3/5, кнопка отключения VCC)
  • Распространенность драйверов на него

Минусы:

  • Не переключается уровень TTL 3.3/5В
  • Маломощный стабилизатор на 3.3В, не способный питать тот же ESP8266
  • Меньший функционал чем у CP2102 (нет возможности настройки VID/PID, например)
  • Теряются они )))

Posted in Arduino, Покупка на ALIEXPRESS.COM | Метки: CH340, USB/TTL

Загрузка прошивки

В этом уроке мы рассмотрим загрузку прошивки в ардуино через внешние “программаторы”. Давайте вспомним, о чем уже говорили в одном из первых уроков: загрузка прошивки в Arduino возможна двумя способами:

  • “Напрямую” во flash память микроконтроллера при помощи ISP (In System Programming) внутрисистемного программатора.
  • При помощи загрузчика (bootloader), который живёт в конце Flash памяти МК, принимает программный код по протоколу TTL (UART) и записывает его во Flash память.

Загрузчик (bootloader)

Загрузчик живёт в самом конце Flash памяти МК и позволяет записывать прошивку, отправляемую через UART. Загрузчик стартует при подаче питания на МК, ждёт некоторое время (вдруг кто-то начнёт слать код прошивки по UART), затем передаёт управление основной программе. И так происходит каждый каждый раз при старте МК.

  • Загрузчик позволяет прошивать МК через UART;
  • Загрузчик замедляет запуск МК, т.к. при каждом запуске ждёт некоторое время для потенциальной загрузки прошивки;
  • Загрузчик занимает место во Flash памяти. Стандартный старый для Arduino NANO занимает около 2 кБ, что весьма существенно!
  • Именно загрузчик мигает светодиодом на 13 пине при включении, как индикация работы.

Программатор

Помимо записи прошивки во flash память, программатор позволяет:

  • Считывать содержимое Flash памяти (скачать прошивку на компьютер)
  • Полностью очищать чип от всех данных и настроек
  • Записывать и читать загрузчик
  • Считывать/записывать EEPROM память
  • Читать и настраивать фьюзы (fuses, fuse-bits) и лок биты.

Программатор – ваш единственный друг при работе с “голым” микроконтроллером, то есть для его низкоуровневой настройки и загрузки прошивки.

ISP программатор

USBasp

Дешёвые ISP программаторы также есть в ассортименте у китайцев, рекомендую брать USBasp как самый распространенный. Поискать на алиэкспресс, мне нравится версия в корпусе. USBasp имеет не очень удобный выход 10-пин на шлейфе, поэтому рекомендуется купить также переходник 10-пин на 6-пин, который позволяет сразу подключаться к ISP header’у, который есть на большинстве плат Arduino

Внимание! Очень часто встречается брак в виде непропая контактов, поэтому во избежание проблем рекомендуется пропаять переходник и отмыть флюс (зубная щётка + бензин калоша).Быстрый старт:

  • Подключить usbasp к компьютеру
  • Скачать и установить драйвера на usbasp (скачать с моего сайта, скачать с Яндекс диска, ещё есть тут и тут)
  • Открыть диспетчер устройств и убедиться, что программатор определился системой
  • Открыть Arduino IDE
  • Выбрать usbasp в Инструменты > Программатор

Решение проблем

Решение большинства проблем с загрузкой через программатор (независимо от того, что написано в логе ошибки):

  • Вытащить и обратно вставить usbasp в usb порт
  • Вставить в другой usb порт
  • Переустановить драйвер на usbasp
  • Проверить качество соединения USBasp с МК
  • Перепаять переходник и отмыть флюс

Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):

USBasp: на плате есть перемычка JP3, которая включает режим низкой скорости загрузки. В новых версиях прошивки для USBasp скорость выбирается автоматически, но китайцы продают старую версию. Как прошить новую – ищите в интернете.

Основные ошибки в логе Arduino IDE

Причина – компьютер не видит USB ASP

  • Проверить и сменить USB порт
  • Попытаться переустановить драйвер
  • Проверить пайку USB разъема на плате программатора
  • Проверить наличие и целостность элементов вблизи usb разъема программатора, кварцевый резонатор
  • Возможно программатор криво прошит – при возможности попытаться перепрошить
  • Возможно микроконтроллер на плате программатора – брак или же мертв, попытаться заменить и прошить

Причина – usbasp не видит подключаемый микроконтроллер

  • Проверить правильность и целостность соединения с МК
  • Попытаться снизить частоту прошивки, джампером или же указав более низкую скорость в среде программирования
  • Проверить пайку разъема 10 pin и переходника 10 pin – 6 pin
  • Возможно прошиваемый микроконтроллер попался с браком, или же мертв.

Arduino as ISP

Почти любая другая плата Arduino может стать ISP программатором, для этого нужно просто загрузить в неё скетч ArduinoISP:

  • Открыть скетч Файл > Примеры > 11. ArduinoISP > ArduinoISP
  • Всё! Ваша Arduino теперь стала ISP программатором
  • Подключаем к ней другую Arduino или голый чип по схеме ниже
  • Выбираем Arduino as ISP в Инструменты > Программатор
  • И можем писать загрузчики, фьюзы или загружать прошивку напрямую во Flash

ISP программатор подключается к четырем пинам микроконтроллера, не считая питания, один из пинов передает сброс, остальные служат для передачи данных. В случае с Ардуино в роли программатора, на плату-программатор рекомендуется поставить конденсатор ёмкостью ~10 мкФ на пин RST.

Решение проблем

Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):

Arduino ISP: нужно изменить частоту загрузки прошивки в скетче Arduino ISP и снова прошить его в ардуино-программатор (см. строку в скетче 45 и ниже);

Чипы CH340g, FTDI FT232, ATMEGA 16U2 / 8U2

Зачем нужен USB / UART TTL преобразователь

Когда вы подключаете Ардуино к компьютеру или любому другому устройству по USB, вы связываете между собой сразу два мира: микропроцессорный, сосредоточенный на плате Arduino и мир внешних устройств. Подходы к организации взаимодействия между элементами в этих мирах сильно отличаются. Для работы внутри платы используется особый протокол со своими правилами взаимодействия – UART. И для того, чтобы “внутреннюю” линию соединить с “внешней” нужен определенный преобразователь-посредник, который будет хорошо понимать физические сигналы, используемые как для USB, так и для платы контроллера. Вот этим посредником и являются чипы USB- UART (иногда их еще обозначают называют USB-TTL, хотя это не совсем корректно) преобразователей, самыми популярными из которых являются микросхемы FTDI, CH340G,  ATMEGA U16.

USB преобразователи в Ардуино

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

Исторически наиболее популярным вариантом чипов USB/UART конвертера была линейка микросхем от шотландского производителя  FTDI. Главным ее недостатком была стоимость и весьма странная политика в области контроля контрафакта, зачастую приводящая к тому, что легальные купленные устройства блокировались драйверами компании. Сегодня существенную конкуренцию FTDI составляют микросхемы семейства CH340, массово производимые многочисленными китайскими производителями. Они гораздо дешевле и достаточно надежны и это постепенно привело к тому, что в большинстве недорогих контроллеров Arduino и адаптеров установлены именно чипы CH340 (CH340g).

Наверное, единственной, но очень важной проблемой при использовании CH340g взамен FTDI является необходимость в некоторых случаях установки USB драйвера. “Респектабельная” FTDI давно уже тесно интегрирована в Windows и при подключении устройства с FTDI-преобразователем никаких драйвером устанавливать не нужно – они уже есть в системе

Для подключения CH340g иногда нужно скачать драйвер и установить его – только после этого система увидит наше устройство.

Процедура установки драйвера для CH340g на самом деле очень проста и почти всегда проходит без ошибок на самых популярных операционных системах Windows7, Windows10. Именно поэтому никаких проблем с использованием недорогих ардуино плат, несущих на себе чип CH340, почти никогда не возникает.

Остается только вопрос – а зачем вообще нужен какой-то USB драйвер для подключения ардуино  к компьютеру? Давайте разберемся.

USB драйвер для ардуино

Мы не будем уходить в теоретические дебри, разбирая многочисленные коммуникационные протоколы, поддерживаемые современными компьютерными системами. Главное, что нужно понимать: когда мы присоединяем какое-то устройство к компьютеру, оно может передавать или получать данные только если его “поймут” с другой стороны. На стороне компьютера таким переводчиком является специальная программа, называемая драйвером. Драйвер USB работает в режиме эмуляции последовательного, COM-порта. Это означает, что при подключении операционная система создает виртуальные, программные COM-порты, с которыми и работает драйвер. В Windows их можно посмотреть в диспетчере устройств.

Если мы подключаем Ардуино к компьютеру, то чип с помощью драйвера попросит систему открыть порт и начнет взаимодействие . И для чипов разных  производителей потребуются разные драйвера. Проблемы возникают, когда драйвера нет. Система пытается найти его для подключенного устройства, не находит и мы никогда не  увидим его в списке устройств. Для решения проблемы надо найти и скачать соответствующие драйвера, а затем установить их на компьютер. Ниже мы рассмотрим, как это делается на примере USB драйвера CH340.

Устанавливаем драйвера

При установке Arduio IDE должны автоматически поставиться необходимые для работы драйверы. На большинстве китайских Arduino-плат стоит контроллер интерфейса USB CH341, для работы с ним нужен отдельный специальный драйвер. Китайский контроллер ничем не хуже, он просто дешевле =)

ПОЛЬЗОВАТЕЛЯМ WINDOWS

Далее подключить Arduino к компьютеру, подождать, пока Windows её распознает и запомнит (первое подключение). P.S. Вылезет окошечко, сообщающее, что устройство опознано и подключено к COM порту с определённым номером отличным от номера 1

ПОЛЬЗОВАТЕЛЯМ LINUX MINT

По умолчанию в linux можно прошивать китайские ардуинки без дополнительного оборудования. Но вначале ничего не получается и Arduino IDE выдает ошибку. Дело вот в чем. Linux (в моем случае linux mint) определяет ардуинку как устройство ttyUSB*. Обычно это ttyUSB0. Это можно узнать командой dmesg в терминале. То есть, в системе появляется интерфейс /dev/ttyUSB0. Но чтобы с ним работать, нужны права доступа. Читать и писать на устройство /dev/ttyUSB0 имеет пользователь root и пользователи группы dialout. Работы с правами суперпользователя лучше избегать, поэтому следует занести своего пользователя в группу dialout

Это можно сделать следующей командой(обратите внимание, команда whoami в обратных кавычках) sudo usermod -a -G dialout `whoami` После этого нужно перелогиниться. Дальше запускаем Arduino IDE и в меню «Инструменты-Порт» ставим галочку напротив /dev/ttyUSB0

За инфу спасибо Владу Шеменкову

3. Доработка модуля UART до полноценного RS232TTL

 Вывод   Назначение 
2 выход TXD
3 вход RXD
9 вход CTS
10 вход DSR
11 вход RI
12 вход DCD
13 выход DTR
14 выход RTS


Таб. 1. Нумерация выводовмикросхемы CH340Gс сигналами RS232

В общем-то, вся доработка заключалась только в том, чтобы подпаяться к соответствующим ножкам микросхемы. Для этого предварительно потребовалось прорезать окно в термоусадочной оболочке. Соответствие выводов микросхемы CH340G и сигналов RS232 смотрите в таблице Таб.1.

Как видно из таблицы, все сигналы, кроме TXD и RXD находятся на одной стороне микросхемы, но TXD и RXD уже выведены на разъём, поэтому паять дополнительные провода потребовалось лишь с одной стороны.

Работа в Arduino IDE

Прошивка загрузчика

Из Arduino IDE при помощи ISP программатора мы можем записать другой загрузчик (по факту загрузчик + фьюзы) и загрузить скетч, а также настроить/прошить фьюзы и лок-биты, но не очень удобным способом. Когда мы выбираем плату в Инструменты > Плата и загрузчик в Инструменты > Плата (загрузчик, bootloader), Arduino IDE автоматически делает “активным” нужный загрузчик. Нажимая Инструменты > Записать загрузчик мы прошиваем загрузчик, соответствующий выбранной плате и её настройкам. Также одновременно с загрузчиком прошиваются фьюзы и лок-биты, соответствующие выбранной плате в Arduino IDE. Как и где их поменять, смотрите чуть ниже.

Рассмотрим на примере записи загрузчика для atmega328, стоящей на китайской плате Arduino NANO. На данный момент китайцы прошивают в МК старую версию загрузчика, которая называется old bootloader в меню платы. Оригинальные платы идут с более современным загрузчиком, поэтому при работе с китайскими платами нам приходится выбирать old bootloader для загрузки прошивки через бортовой usb порт. Подключим usbasp по схеме выше, выберем его как программатор в Инструменты > Программатор, выберем плату Arduino NANO, загрузчик для atmega328 (первый в списке). Нажмём записать загрузчик. Всё! Теперь плату можно шить через бортовой usb порт, выбирая первый загрузчик. Он кстати легче, быстрее “прошивает” и сама прошивка быстрее “запускается”.

Как убрать загрузчик?

В стандартном “ядре” Arduino не предусмотрен вариант “без загрузчика”. Для того, чтобы вручную убрать поддержку загрузчика, нужно уметь работать с boards.txt и фьюзами: нужно будет изменить фьюз BOOTRST и подправить максимальный размер скетча. Есть более простой вариант – найти и установить ядро, в котором реализован выбор загрузчика с вариантом “без загрузчика”, например для ATmega328 это miniCore и наше GyverCore. Нужно установить поддержку ядра по рассмотренной ранее инструкции, выбрать плату, указать вариант “без загрузчика” и нажать “Записать загрузчик”. В МК будут прошиты соответствующие фьюзы.

Загрузка скетча

В Arduino IDE можно зашить скетч через программатор, для этого надо нажать Скетч > Загрузить через программатор. Это очень удобно в том случае, когда МК используется без загрузчика, или просто голый МК.

Фьюзы

Конфигуратор платы в Arduino IDE устроен следующим образом: каждой плате в Инструменты > Плата соответствует свой набор настроек, включая фьюзы, которые прошиваются вместе с загрузчиком. Некоторые из них:

  • Загрузчик (путь к файлу)
  • Скорость загрузки (через загрузчик)
  • Объем доступной flash и sram памяти
  • Весь набор фьюзов и лок-биты

Файл конфигурации называется boards.txt и найти его можно в папке с ядром Arduino: C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt. Документацию на boards.txt можно почитать здесь. При желании можно вывести нужные фьюзы через калькулятор (читайте выше), изменить их в boards.txt (главное не запутаться, для какой выбранной конфигурации платы делается изменение) и прошить в МК, нажав Инструменты > Записать загрузчик.

  • Фьюзы подписаны как low/high/extended fuses, можно вставлять полученное в калькуляторе значение.
  • Локбиты работают следующим образом: unlock_bits это локбиты, которые прошьются до записи загрузчика (при нажатии на кнопку Записать загрузчик). А вот после прошивки загрузчика будут автоматически прошиты lock_bits, которые и определят доступ к памяти контроллера во время его работы. Чтобы защитить прошивку от чтения – ставим lock_bits 0x3C.

Такая работа с фьюзами максимально неудобна, но есть и другие варианты:

  • Ядро GyverCore для atmega328, в нем мы сделали кучу готовых настроек фьюзов прямо в настройках платы, читайте в уроке про GyverCore. Несколько загрузчиков, включая вариант без загрузчика, выбор источника тактирования и другие настройки в один клик мышкой.
  • Программа AVRdudeprog, про нее поговорим ниже

USB-TTL (UART)

Этот способ реализован прямо на платах Arduino при помощи USB-TTL (USB-UART) преобразователя, именно поэтому мы можем подключить плату к компьютеру и загрузить код. USB-TTL позволяет только загрузку данных во flash, остальные возможности (как у ISP программатора) ему недоступны. В то же время он ограничен только возможностями загрузчика, но в этом уроке мы рассматриваем только стандартные. Также USB-TTL мост позволяет микроконтроллеру общаться с компьютером по последовательному соединению (тот самый Serial и монитор com порта).

Есть платы без бортового USB-TTL, например Arduino Pro Mini. Для работы с ними нужно купить внешний USB-TTL преобразователь. Также загрузка прошивки через UART возможна и в “голый” микроконтроллер при условии наличия там загрузчика, который запишет принятый код во flash. Про запись загрузчика мы поговорим ниже.

UART “загружатор” подключается к пинам RX и TX Ардуино (или микроконтроллера), RX->TX и TX->RX, также обязательно подключается земля GND. Если у прошиваемой платы нет своего питания, то подключается и питание. Загрузчик отрабатывает при запуске МК, поэтому непосредственно перед загрузкой прошивки МК должен быть сброшен (перезагружен), и для этого на платах USB-UART есть вывод DTR (Data Terminal Ready), который подключается к пину RST Reset и собственно выполняет сброс перед перед загрузкой прошивки. На платах Pro Mini есть отдельный пин DTR.

USB-TTL Arduino
DTR DTR
RX TX
TX RX
GND GND
VCC/5V/3.3V VCC

Китайцы выпускают USB-TTL модули в широком ассортименте, но в целом они все одинаковые по своей сути. Ссылка на результат поиска на aliexpress, и ссылка на все USB-TTL в моём любимом магазине WAVGAT. Что использую я? В основном платку на CP2102. Перед заказом модуля обязательно убедитесь в том, что у него есть выход DTR, иначе этот модуль можно будет использовать только для “общения” с контроллером через COM порт.

Для работы с таким преобразователем нужно установить драйвер для чипа, на базе которого собран модуль, это может быть CP2102, CH340/341, FT232, PL2303 и другие. Прошивка загружается как обычно: выбираем порт, на котором сидит преобразователь, версию загрузчика и жмём загрузить, всё! Важный момент: на некоторых китайских версиях плат Arduino Pro Mini не распаян пин DTR, т.е. он не идёт на RST и автоматический сброс перед загрузкой прошивки не выполняется. В этом случае сброс нужно производить вручную, кнопкой RST, непосредственно перед загрузкой прошивки…

Загрузка прошивки посредством загрузчика (bootloader) возможна с любого UART устройства, даже через Bluetooth. Но об этом мы поговорим в отдельном уроке.

Программатор из конвертера USB/TTL CH340

Для разных поделок купил недорогие и миниатюрные платы Arduino Pro Mini. Всем они хороши: маленькие размеры, много портов, на два больше, чем у Arduino UNO R3 (ещё есть А6 и А7), однако есть и пара недостатков для их использования.

Во-первых, чтобы запрограммировать Arduino Pro Mini нужен внешний программатор, так как использовать, к примеру, Arduino UNO R3 в качестве программатора не всегда удобно.

Во-вторых, у Arduino Pro Mini нет стабилизатора на 3.3В (если это 5В плата), что ограничивает сферу применения. Как обойти эти недостатки читайте ниже.

Программатор на CH340

Покопавшись в море информации на просторах Интернета, пришёл к мнению, что наиболее недорогой и быстрый способ сделать программатор для Arduino Pro Mini и ему подобных – это использование конвертера уровней USB/TTL на основе микросхемы CH340G. На aliexpress купил его за 57Р, что совсем смешные деньги по нынешним меркам .


Pic 1. Конвертер USB/TTL на чипе CH340G

Собственно такой конвертер можно сразу использовать для программирования Arduino Pro Mini, необходимо только в момент окончания компилирования скетча нажать кпопку RESET на плате Arduino и скетч загрузится, но это не совсем удобно – ловить момент окончания компиляции и жать на кнопки . Гораздо интереснее сделать загрузку скетча автоматической, как это происходит в Arduino UNO R3 или Arduino Nano. Оказывается для этого всё есть в данном конвертере. У чипа CH340 на 13-й ноге выведен сигнал DTR, а у Arduino Pro Mini уже есть такая ножка под этот сигнал. Остаётся небольшая доработка. Требуется подпаять к 13-й ножке CH340 штырёк, для подключения к плате Arduino.

Для начала доработки – снимем защитную плёнку с платы. Затем выпаяем разъём с 6-ю штырьками и заменим его на разъём с 7-ю штырьками. К 7-му штырьку нужно подпаять перемычку с 13-й ножки чипа CH340.


Pic 2. Снимаем защитную плёнку и выпаиваем разъём
Pic 3. Подпаиваем перемычку к 13-й ножке CH340
Pic 4. Обратная сторона конвертера CH340

Все ухищрения для программирования в автоматическом режиме вот этой платы Arduino Pro Mini.


Pic 5. Arduino Pro Mini

Чтобы запрограммировать с помощью нашего доработанного программатора Arduino Pro Mini, необходимо сделать соединения между Arduino Pro Mini и программатором на основе CH340.

  
             Arduino Pro Mini
         - VCC
               - GND
                - RX
                - TX
       - DTR


Pic 6. Соединяем Arduino Pro Mini с CH340

Для проверки работоспособности собрал схему управления светодиодом и загрузил соответственный скетч (любой).

На этом программатор был закончен и принят в эксплуатацию. Попользовавшись, могу сказать, что очень удобная и недорогая штучка получилась, рекомендую к повторению. С помощью этого программатора уже много раз программировал разные Arduino Pro Mini.

Сделал корпус в стиле а-ля ардуино , чтобы руками не хватать за контакты. Корпус из оргстекла (акрила).


Pic 7. Программатор CH340 в корпусе
Pic 8. Программатор CH340 в корпусе

Стабилизатор на +3.3В для Arduino Pro Mini

Переходим ко второму пункту доработки.

Ниже представлена схема этого стабилизатора. Он построен по линейному принципу. Основой стабилизатора является настраиваемый стабилитрон TL431. С помощью резисторов R2…R4 устанавливается напряжение стабилизации. Для точного подбора напряжения на выходе стабилизатора – изменяйте значение R2. Чем R2 меньше, тем меньше выходное напряжение. При указанных номиналах резисторов R2…R4, напряжение на выходе стабилизатора около 3.2В. Резистор R1 подобран такой, чтобы ток через TL431 был не менее 1 мА. Транзистор VT1 является регулирующим элементом.


Pic 9. Схема стабилизатора

Так как Arduino Pro Mini имеет размеры всего 30х17.5 мм, то собирать стабилизатор имеет смысл на планарных компонентах, для уменьшения размеров.

На кусочке фольгированного стеклотекстолита разместил все компоненты. Дорожки прорезаны небольшим резаком. Не стал заморачиваться с разводкой платы, схема простейшая, не имеет смысла. Получился модуль стабилизатора на 3.3В размерами 20х12.5 мм. Его использовал для барометра на BMP280 и Arduino Pro Mini. Всё замечательно работает.


Pic 10. Модуль стабилизатора. Вид сверху
Pic 11. Модуль стабилизатора. Вид с боку

На этом все доработки завершены. Можно приобретать платы Arduino Pro Mini и на них собирать разные полезные устройства. Опубликованные, на предыдущих страницах, скетчи легко загружаются в эти платы.

2018-09-14

Настраиваем Arduino IDE

Выбрать модель платы/микроконтроллера (загрузчика) Инструменты\Процессор\”Ваша модель”.

ВНИМАНИЕ! У используемой в моих проектах Arduino NANO может быть прошит “новый” или “старый” загрузчик, в продаже есть и те и те. Начиная с Arduino IDE версии выше 1.8.4 можно выбрать ATmega328P и ATmega328P (Old Bootloader), попробуйте оба, потому что это определяется методом тыка

Выбрать порт: инструменты\порт\”COM отличный от COM1, например COM3, COM5…” См. второй скриншот. Какой именно порт вы могли видеть при первом подключении Ардуино к компьютеру. Примечание: если у вас только СОМ1 – значит либо не встали драйвера, либо сдохла плата.

Готовые прошивки просто открываются двойным кликом. Чтобы загрузить прошивку, жмите кнопку ЗАГРУЗИТЬ на верхней панели инструментов, она в виде стрелочки.

ВНИМАНИЕ! В пути к папке со скачанными скетчами не должно быть русских букв! Создайте в корне диска папку Arduino и работайте в ней!

ВНИМАНИЕ! Как только достанете Arduino из пакетика, сразу прошейте в неё скетч с миганием светодиода (blink.ino) Таким образом вы узнаете, что Ардуина рабочая (на тот случай, когда после сборки/пайки она перестанет работать и прошиваться), то есть вы сами её сломали, а не она была изначально бракованная

Avrdudeprog

Avrdudeprog – утилита от русского программиста, являющаяся удобной оболочкой для avrdudue. Скачать AVRDUDE_PROG можно с официального сайта (прямая ссылка на загрузку, на всякий случай зеркало на моём ЯД и FTP этого сайта). В рамках этого урока, программа умеет следующее:

  • Чтение/запись/очистка flash памяти
  • Чтение/запись/очистка eeprom памяти
  • Полная очистка чипа
  • Калькулятор фьюзов и локбитов (чтение/запись)

Более подробный обзор на avrdudeprog можно посмотреть здесь. Давайте посмотрим на калькулятор фьюзов. Выбираем свой микроконтроллер и программатор (можно добавить другие модели микроконтроллеров и программаторов, читай тут). Переходим во вкладку Fuses, нажимаем прочитать. При успешном чтении увидим текущий набор настроек своего чипа. Можно их поменять и загрузить

Важно! Галку инверсные биты не трогаем! Лок-биты и отключение RST заблокирует микроконтроллер, не трогайте их, если такой цели нет! Можно загружать прошивку или загрузчик из .hex файла, указав путь к ней на первой вкладке в окне Flash. Очень удобная утилита для низкоуровневой работы с МК

Режимы работы

CH340G поддерживает симплексный, полудуплексный и полнодуплексный асинхронные режимы обмена.

Доступны все стандартные режимы передачи данных:

  • 1 стартовый бит и 5-8 битов данных
  • 1 или 2 стоп-битов
  • бит паритета с проверкой на чётность/нечётность

В таблице ниже приведены поддерживаемые скорости обмена. Зелёным цветом отмечены скорости, которые могут быть достигнуты на AVR-микроконтроллерах,
работающих на частотах 8 МГц, 16 МГц и 20 МГц (отклонение частоты передачи при этом находится в допустимых границах).

Скорость обмена, бод 8 MHz 16 MHz 20 MHz
50
75
100
110
134.5
150
300
600
900
1 200
1 800
2 400
3 600
4 800
9 600
14 400
19 200
28 800
33 600
38 400
56 000
57 600
76 800
115 200
128 000
153 600
230 400
460 800
921 600
1500 000
2000 000

При этом ошибка временных параметров передатчика не превышает 0.3%, а допустимое отклонение временных характеристик для приёмника может составлять
не менее 2%.

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий