040-UART(RS-232) to USB-простой преобразователь.

Автор: | 11.05.2010

Преобразователь УАРТНаконец-то закончились праздники, и пришло время чего-нибудь сделать.

Начнем, пожалуй, с необходимого устройства, облегчающего жизнь рядового электронщика – устройства связи с компьютером. Это нужно для того, чтобы передать данные в компьютер (температура с датчиков, положение дверей, частота вращения двигателя, таблица значений с регистратора …) или принять данные из компьютера (таблицы значений для вычислений, настоечные данные для устройств, новая прошивка для загрузчика…). Для отладки нового устройства (посмотреть что там, в мозгах микроконтроллера, происходит) вообще незаменимая вещь.
Как Вы знаете, существует множество интерфейсов, посредством которых микроконтроллер может общаться с внешним миром. Но если речь идет о связи с компьютером – вне конкуренции интерфейс RS-232 (COM порт). Причина — простота работы с портом со стороны компьютера и наличие большого количества программ для этого предназначенных. Кроме того, почти в каждом микроконтроллере есть аппаратно поддерживаемый интерфейс USART (это тот-же RS-232, только с напряжениями 0 — 5v), что делает процесс связи легко реализуемым.
Для того, чтобы привести уровни сигнала микроконтроллерного USART к уровням COM порта компьютера нужно собрать несложный преобразователь (например, на МАХ232), но можно пойти по более интересному пути
Более интересный путь  — собрать преобразователь UART to USB. При этом USB порт воспринимается компьютером как виртуальный COM порт. В этом случае мы убиваем сразу несколько зайцев:
– USB порт есть в любом компьютере (хотя COM порт встречается еще довольно часто, но на ноутбуках его уже нет);
– как оказалось преобразователь UART to COM(RS-232) сделать гораздо сложнее, чем UART to USB (два раза делал программатор для СОМ порта с преобразователем МАХ232 – оба раза неудачно);
– если подключать преобразователь через USB хаб, то мы получаем сразу несколько виртуальных COM портов на одном USB, плюс безопасность для компьютера, так как хаб выступает в роли буфера.

Вот схема преобразователя UART to USB.

Схема преобразователя UART - USB


Сразу честно признаюсь – это не мое устройство. Взята данная схема с сайта  www.recursion.jp/avrcdc/ . Причина, по которой я ее здесь привожу – это простота схемы и дешевизна изготовления. Собрать схему довольно просто (можно даже на макете).

Внешний вид преобразователя UART to USB

Плата целяком

Готовое устройство я выполнил в форме «флешки» для того, чтобы удобней было пользоваться в «полевых» условиях. Для большего комфорта можно взять USB удлинитель, одним разъемом прицепить к компьютеру, во второй вставить нашу «флешку-преобразователь» и получим мобильное устройство, которое можно без проблем подключить к любой схеме.

Удлинитель для преобразователя

Печатная плата двухсторонняя, подходит для микроконтроллеров ATmega8/48/88/168 
040-M48-UARTtoUSB.lay v1.0 [30.02 KB] - рисунок макетной платы в формате Sprint-Layout

Вот вариант для изготовления по технологии описанной в посте №32.
040-M48-UARTtoUSB-2L.lay v1.0 [59.75 KB] - рисунок макетной платы в формате Sprint-Layout на одном слое

Прошивки для различных микроконтроллеров:
040-cdcmega.zip v1.0 [13.25 KB] - прошивка UART to USB для ATmega8/48/88/168
Фьюзы для ATmega8
Фьюзы для ATmega48/88/168
Фьюзы для CodeVisionAVR, PonyProg ставятся инверсно

SPI интерфейс для программатора выведен вместе со всеми интерфейсами сзади «флешки» – подключаем программатор прямо там. Штырек сброса паяем возле ножки сброса (чтоб не мешал). При программировании преобразователь нужно запитать напряжением 5v со стороны интерфейсов. Через USB нежелательно, так как напряжение питания через светодиод уменьшится. Если возникают проблемы по причине больших шумов – вешаем подтягивающий к питанию резистор на ножку сброса (5-10кОм). Наличие светодиода обязательно – он используется в качестве регулятора напряжения. Прошивка предусматривает работу управляющих линий (CTS, RTS, DTR), но для UART  они не нужны и я их не выводил на разъем интерфейсов. Если они Вам нужны — просто нужно «кинуть» перемычки с ножек микроконтроллера на ножки разъема интерфейсов.

После того как устройство собрано,
необходимо установить драйвер виртуального COM порта.
040-avrcdc_inf.zip v1.0 [39.51 KB] - Драйвер «Virtual Communications Port» для Win
В архиве есть папки для разных Win:
/raw — для (Windows 2000/XP)
/w2k — для Windows 2000 (bulk mode only)
/xpvista7 — для Windows XP/Vista/7 x32
/vista64 — для Windows Vista x64

Делается это очень просто:

Вставляем преобразователь
1 Вставляем «флешку-преобразователь» в USB порт;

Найдено новое устройство
2 Получаем в трее сообщение о том, что найдено новое устройство;

Мастер 1
3 Запустится «Мастер нового оборудования», выбираем «Установка из указанного места», жмем «Далее»;

Мастер 2
4 Выбираем «Включить следующее место для поиска» и в окошке указываем нужный путь к драйверу;
5 Жмем «Далее», драйвер установится, жмем «Готово»

Теперь в «Свойствах» «моего компьютера» в закладке «Оборудование» нажимаем кнопку «Диспетчер устройств». В окошке диспетчера устройств в разделе «Порты (COM и LPT)» увидим новое устройство — «Virtual Communications Port (COM5)».

Новое устройство
Для каждого USB порта будет назначен свой виртуальный COM порт (COM5, COM6, COM7 и т.д.).

Готово! Теперь можно пользоваться преобразователем.

Проверим работоспособность преобразователя, для этого нужно закоротить вход с выходом (RxD, TxD) и посылать с компьютера сообщения по виртуальному порту. Посланные сообщения должны возвращаться как принятые.

ПеремычкаНа нужные штырьки цепляем «джампер»-перемычку. Запускаем программу для работы с COM портом. Можно использовать стандартный виндовский гипертерминал, но мне больше нравиться другая программка — маленькая, портативная и функциональная.
Terminal v1.0 [320.94 KB] - Программа для работы с COM портом

Запускаем программу, устанавливаем нужный порт (смотрим номер порта в диспетчере устройств), скорость и другие параметры оставляем как есть, нажимаем «Connect», в окошке возле кнопки «->Send», пишем сообщение, нажимаем «->Send» и сморим результат. Нижнее окно — отправленное сообщение, большое окно — принятое сообщения. Если все работает — сообщения будут одинаковыми.

Проверка работоспособности COM порта

Данная «флешка — преобразователь интерфейсов» позже превратится в I2C toUSB, SPI to USB, SPI to UART и т.д. необходимо лишь перепрошивать ее необходимой прошивкой. (Что-то я у себя начинаю замечать тягу к универсализации :)).

Универсальный конвертер

P.S. Сайт-источник рекомендует для согласования уровней напряжения преобразователя(3.3v) и устройства(5v) соединять их через схему согласования. Но я думаю резисторов в пределах полукилоома в линиях RxD, TxD должно хватить для согласования — нужно попробовать.

Согласование уровней

P.P.S. Это первая практическая схема в блоге – дальше их будет больше, так как с основами мы, вроде-бы, разобрались (еще остались кой-какие вопросы – потихоньку буду писать).

(Visited 12 534 times, 1 visits today)

040-UART(RS-232) to USB-простой преобразователь.: 284 комментария

  1. alexandershahbazov

    Выходит что для работы ПК ( RS232 ) с МК ( UART ) достаточно иметь 3 пина GND , TXD и RXD . И уже на плате не стоит ставить max232 .
    Можно ли ATmega8 заменить на ATtiny2313 ( схема , прошивка , драйвер ) .

  2. GetChiper Автор записи

    В асинхронном режиме для связи с компьютером достаточно 2х сигнальных линий и земли.
    Преобразователь MAX232 ставят если нужно подключить микроконтроллер к COM порту (там уровни -15v +15v).
    На сате-источнике http://www.recursion.jp/avrcdc/cdc-232.html есть вариант и на ATtiny2313 c немного урезанной функциональностью.

  3. GetChiper Автор записи

    Прикинул печатку преобразователя на ATtiny2313 получилось очень хорошо — мне нравится. Плата односторонняя без единой перемычки — короче будет статья про универсальный преобразователь. Кроме того на универсальную плату преобразователя на ATtiny2313 у меня появились особые планы …

  4. alexandershahbazov

    Так как преобразователь называется «UART to USB» и на схеме написано
    «To MCU» , поэтому в начале мне показалось что на устройстве при
    использовании этого преобразователя MAX232 можно не ставить .
    А желание чтобы все было на ATtiny2313 вызвано более меньшим размером
    последнего в DIP корпусе .

  5. GetChiper Автор записи

    MAX232 ставить не надо! Сразу цепляем на микроконтроллер!

  6. alexandershahbazov

    Спасибо . Очень удобно .

  7. fkvfaydar

    Отличный сайт! А программить учить будешь?

  8. GetChiper Автор записи

    fkvfaydar :

    Отличный сайт! А программить учить будешь?

    Пока не планирую. Зато будет много готовых решений — вот разгребусь с запаркой на работе и засяду ваять 🙂 Руки чешутся страшно!

  9. fkvfaydar

    Жалко,жалко… а то у меня затык с прерываниями,а без них дальше двинуться не могу.
    PS Многа фотак эта клева! =) Наглядно и понятно

  10. alexandershahbazov

    Постараюсь собрать на ATmega8 с выходами RXD , TXD и GND .
    Пока он мне больше нужен как преобразователь UART to USB .
    Еще раз для надежности хотелось бы спросить :
    Достаточно ли выше приведенной схемы и драйверов для успешной работы
    этого преобразователя .
    Потом , можно ли заменить кварц в 12 МГц на 8 или 11.0592 МГц с
    соответствующим исправлением фьюзов для ATmega8 в DIP корпусе .

  11. GetChiper Автор записи

    Если есть микроконтроллер ATtiny2313 можно сделать на нем — статья почти готова.
    Преобразователь я собрал и проверил сам — работает (по крайней мере в режиме закороченного входа-выхода. серьезнее погонять еще не успел). На сайте-источнике есть даже документ о качестве работы устройства на разных системах.
    Кварц заменить нельзя и фьюзы тут не помогут — он должен быть точно 12МГц.

  12. ec

    в вашем варианте в SO-корпусе можно также было бы иcпользовать FT232. Но, судя по даташиту, FT232 выпускается только в SO. Чем хорош этот проект, так тем, что под него есть элементы в дип-корпусах, а их паять гораздо проще. Теоретически, если использовать данное решение в каких-либо конструкциях, наличие диода LED1 не обязательно, можно просто запитать МК от линии VCC устройства. Но тогда обязательно будет нужна хотя бы RC-цепь сброса при включении питания (хоть дернуть из розетки, если усб повиснет). По этой причине, использование тини45 будет ограничено только переходником, т.к. после заливки прошивки ее порт перестает быть как RST, причем навсегда 🙂

  13. GetChiper Автор записи

    FT232 конечно-же лучший вариант для преобразователя, но стоит он в разы дороже чем микроконтроллер плюс FT232 не очень доступная (даже в моем интернет магазине взамен ее предлагают «полный аналог» PL-2303, а это уже не то).
    Плату для преобразователя UART to USB на микроконтроллере ATtiny2312 в DIP корпусе выложу в следующей статье.
    Наличие LED1 обязательно, так как он уменьшает питающее напряжение до 3.3v (можно его убрать, но тогда нужно будет запитывать преобразователь от 3.3v).
    Наличие цепочки сброса не столь уж необходимая вещь. У микроконтроллера включен (посмотрите картинку фьюзов) вочдог таймер — если программа повиснет он сбросит микроконтроллер автоматически.

  14. ec

    светодиодом мочим сразу трех ушастых — создаем питание преобразователю от усб-порта компьютера, развязываем порт от преобразователя (в некоторых проектах я видел, ставят предохранители), создаем индикацию работы устройства. Падение напряжения на переходе светодиода создает нужное напряжение питания. Все это хорошо при использовании переходника по назначению. А если уже есть какое-то устройство со своим источником питания, (где есть +5 В VCC) запитать, думаю, можно оттуда.
    К сожалению не программист, на работу прошивки повышение напряжения питания не повлияет?

  15. GetChiper Автор записи

    Повышение напряжения питания только улучшит работу микроконтроллера. Вообще микроконтроллер работает от 2.8 до 5.5v, но чем ниже напряжение питания тем меньше может быть частота задающего кварца. При 3.3v питания 12МГц граничная частота.

  16. Уведомление: как паять smd « Эхо блогосферы

  17. val2107

    Собрал схему. Работает отлично, но без цепи согласования с другими устройствами не дружит. Также появился опыт параллельного программирования SMD контроллера причём не выпаивая из платы(был коск в фьюзах).

  18. val2107

    Да стабилитроны помогли, всё заработало.Пока тестировал на прошивки монетоприёмников и некоторых телефонов. Планирую попробывать работу на замене полного COM порта.

  19. Уведомление: чип и дип « Эхо блогосферы

  20. Zemlyanov

    А на скорости 115200 данный преобразователь работать будет?

  21. GetChiper Автор записи

    Он работает на любой скорости, автоматически ее определяя.

  22. Zemlyanov

    Я был не внимателен и не обратил внимание, что на приведенной Вами схеме указана скорость работы данного преобразователя и там верхний предел является скорость 38400 а это далеко не 115200. Поэтому кому верить Вам или параметрам, приведенным на схеме ? Я вообще не пойму как можно при кварце 12Мгц используя аппаратный UART добиться безошибочной передачи данных на такой скорости , для нормальной работы нужен кварц 11.0592Мгц. Или в прошивке используется программная реализация UART ?

  23. GetChiper Автор записи

    Приведенная мною схема взята «как есть» из http://www.recursion.jp/avrcdc/. Я, честно говоря, сам не обратил внимание на то, что там указана скорость 38400. Но по факту преобразователь работает на скорости вплоть до 256000 (больше нет возможности проверить). Насчет аппаратности UART не могу знать — не я писал программу.
    Если решил делать такой преобразователь рекомендую выкинуть гасящий светодиод и поставить на сигнальные линии стабилитроны — типа как здесь http://www.getchip.net/posts/041-uart-to-usb-prostojj-preobrazovatel-na-attiny2313/ — будет надежней.

  24. Zemlyanov

    Ну раз должно работать на нужной мне скорости тогда буду завтра собирать, и отчитаюсь о результатах. Стабилитронов на 3.6 В. под рукой увы нет, так что буду делать с ограничительным светодиодом

  25. alex_r

    Приветствую всех!
    Собрал и я такой преобразователь, правда с некоторыми изменениями:
    вместо atmega8-16 установил atmega8-8 в DIP корпусе(у неё частота работы по паспорту до 8ми Мгц),
    запитал контроллер от 5 вольт,
    поставил стабилитроны КС133 на сигнальные линии,
    на выходе преобразователь TTL — RS232 (на 2-х транзисторах).
    Всё завелось с первого раза, но….
    Безошибочная передача данных возможна только до скорости 38400 (как в описании), в принципе работает и до 115000 при передачи единичных байтов. Собирал я эту схему для прошивки спутникового ресивера, но программа прошивальщик работает только на 115000 б/с — так что ничего не вышло…
    Ещё, здесь, в соседней ветке люди писали про синие экраны при установке дров (BSOD). У меня на компе Windows SP2, драйвера установились только те которые в папке /raw, при установке других avrcdc_inf/xpvista7, я также получал синий экран. Возможна причина тому сервис пак 2. Здесь
    http://www.recursion.jp/avrcdc/faq.html
    написано что для установки драйверов avrcdc_inf/xpvista7 (с возможностью выбора низкой-высокой скорости) нужен сервис пак 3

  26. GetChiper Автор записи

    Возможно причина плохой передачи в том что микроконтроллер работает на частоте 12МГц, на которою он не рассчитан (я так понимаю мега с пониженным питанием и, соответственно, пониженной частотой.
    Может попробовать обновить ХРюху до третьего пака?

  27. Андрей

    Прошу пояснить расположение SMD компонентов при монтаже, на фото не четко — не пойму что стоит на 1 ноге USB со светодиодом и где кондесатор на 0,1 мкф.

  28. GetChiper Автор записи

    Вставил в статью кликабельную увеличенную фотографию преобразователя — должно быть видней.

  29. Андрей

    И все же — возможно ли и номинал SMD компонентов на фото?

  30. GetChiper Автор записи

    Все номиналы есть на схеме. Можно слегка их варьировать (чуть больше — чуть меньше).

  31. trition007

    Народ помогите, вообщем собрал схему на атмеги8 , прошивал CodeVisionAVR C Compiler , выставил как на рисунки биты и в итоге не комп пишет как не опознанное устройство, и перепрошить не могу. Что мне делать?

  32. trition007


    [url=http://rghost.ru/5429967.view][img]http://rghost.ru/5429967/image.png[/img][/url]
    http://rghost.ru/5429967

    Проверьте правельно ли раставил, если можете исправьте и желательно покажите на скриншоте.

  33. trition007

    Ау народ посмотрите, что не так.

  34. GetChiper Автор записи

    Фьюзы выставлены неправильно! В кодевижене фьюзы устанавливаются инверсно. Вот об этом я писал здесь http://www.getchip.net/posts/068-kak-pravilno-proshit-avr-fyuzy-fuse-bit/
    К сожалению Ваш микроконтроллер теперь не сможет работать с последовательным программатором. Нужно или взять новый микроконтроллер (что проще всего), или собрать устройство для восстановления фьюзов http://www.getchip.net/posts/059-ispravlyaem-avr-fyuzy-pri-pomoshhi-atmega-fusebit-doctor/

  35. trition007

    В кодевижене фьюзы устанавливаются инверсно. Я не понял что значит
    инверсно можете пример привести на моем скриншоте флюз что не так. Буду вам признателен.

  36. GetChiper Автор записи

    Инверсно — это значит там, где у меня галочка в кодевижене нужно ее убрать и наоборот если у меня напротив фьюза галочки нет в кодевижене ее нужно поставить.

  37. GetChiper Автор записи

    Да, так правильно.

  38. trition007

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

  39. avales

    Собрал преобразователь на Atmega48. Драйвер установил без проблем, при чем на ХР работает и W2K. Тестирование на терминальной программе прошло успешно. Но при задании виртуальному СОМ-порту скорости 19200 и попытке получить данные внутреннего АЦП контроллера ATmega168 — очень сильно тормозит. Проверил получение данных с АЦП с помощью адаптера Prolific — даже на 9200 все быстро, те АЦП передает нормально. Прошивал преобразователь на STK500 в AVRStudio. Если можно-как установить фузы и особенно что касается осциллятора в AVRStudio

  40. GetChiper Автор записи

    Действительно, и мной замечены некоторые поттормаживания в работе (совсем небольшие). Похоже в этом виновата программная реализация USB. Причем, преобразователь работает с любой скоростью, но есть какие-то задержки, я так полагаю, необходимые для USB.
    Можно попробовать различные варианты драйверов — это должно как-то сказаться на работе. Все собираюсь протестировать драйвера, но руки не доходят.

    Как прошить фьюзы вот здесь писал:
    http://www.getchip.net/posts/068-kak-pravilno-proshit-avr-fyuzy-fuse-bit/

  41. geovas

    GetChiper, если можете, скажите фьюзы к atmega8 для AVR Studio, ибо сейчас пересел на нею. Я тут уже с платой наколхозил (благо не себе делаю 🙂 ), перевернул разъем USB, пришлось проводами подсоединять. Теперь приборчик что-то не стартует, грешу на фьюзы.

  42. geovas

    И если вас не затруднит, проверьте мою плату (я все же решил ее переделать) на предмет ошибок: http://rghost.ru/6335731

    Она сделана как для ATtiny2313 (со стабилитронами), но под ATmega8-16 в DIP-корпусе.

  43. anatoliy

    @geovas
    Вроде ошибки в глаза не бросаются.

  44. geovas

    ОК, значит ее и запилю. Есть кстати подозрение, что мне стабилитроны паленые подсунули. Когда собирал предыдущий преобразователь на тиньке, я их предварительно проверил, а тут поспешил. В общем сделаю платы, куплю новых стабилитронов ну и останется узнать правильные фьюзы.

  45. anatoliy

    @geovas
    Это как паленые? Они что паяные были? Проверьте через резистор 10к на +5 и посмотрите сколько вольт на нем упало 🙂 Иногда партии бракованные в магазинах пападаются. У мя как-то было 40 штук лазерных диодов убитых в заводской упаковке.

    Самая распространённая ошибка у мя это МС не на том слое ПП 🙁

  46. geovas

    Анатолий, кстати аналогичная ошибка с отзеркаливанием! Думал я такой 🙂
    У стабилитрона напряжение стабилизации оказалось 3.2В. Возможно я их перегрел, но вроде не первый день паяю полупроводники, странно как-то…

    А вообще странно, заявленное Uст = 3.6, возможно 3.2 этого недостаточно. Кстати в схеме этот же стабилитрон выдавал внезапные 0.75В, я его попытался перевернуть — реакция та же. В общем куплю новые, чтоб не думать.

Добавить комментарий