USB to UART bridge

19/10/2009 - 09:36

   Все микроконтроллеры AVR семейства MEGA имеют в своем составе модуль UART/USART. Он позволяет связывать микроконтроллер и компьютер по интерфейсу RS-232. Для этого необходим компьютер с COM портом, преобразователь уровней, ну и соответствующий микроконтроллер. Проблема в том, что современные компьютеры перестают оснащать COM портами, потому что на смену им приходит (или уже пришла) USB. На наше счастье ряд фирм выпускает специализированные микросхемы преобразующие USB в  RS232 без всякой головной боли. Им требуется минимальная "обвязка" внешних компонентов, и для них доступны готовые драйвера. Одна из таких микросхем - FT232BM фирмы FTDI.  Чтобы вы не тратили свое время на изучение документации, рисование схемы и разводку платы, предлагаю вам готовое решение на ее основе.

Схема

Файлы


   Плата двухсторонняя. Нижний слой - земляной. Можно обойтись без него и соединить все земли проводками. Светодиоды предназначены для индикации процесса приема/передачи данных.
   При подключении переходника к компьютеру, система сообщит о нахождении нового USB устройства и затребует драйвера. Драйвера можно скачать по приведенной выше ссылке или с официального сайта производителя.
   Проверить работоспособность девайса можно с помощью терминала. Выставляем номер COM-порта, замыкаем выводы RXD и TXD и шлем по терминалу символы. Светодиоды на плате будут вспыхивать, а терминал дублировать передаваемые данные.
 
собранный девайс

 

Комментарии   

# alexandershahbazov 08.12.2009 21:28
Могут ли быть потери данных при UART
кварцах . У меня сейчас работает 7.372800
непрерывно , но хотя бы раз в два дня
происходит потеря байта .
Есть ли какие-либо правила по
надежности передачи данных через UART
между МК и ПК .
Ответить | Ответить с цитатой | Цитировать
# Pashgan 27.12.2009 00:31
Не использовал uart в непрерывном режиме. У вас проверка на четность включена?
Ответить | Ответить с цитатой | Цитировать
# alexandershahbazov 27.12.2009 19:18
У меня на VB6 sp6 settings : 9600,n,8,1

А если проверка на четность включена , то
как этим воспользоваться ?
Ответить | Ответить с цитатой | Цитировать
# Pashgan 27.12.2009 19:38
Если модуль USART обнаруживает ошибку контроля четности, он выставляет флаг. Как воспользоваться ? Опрашивать флаг и если он установлен, посылать ПК сообщение об ошибке.
Ответить | Ответить с цитатой | Цитировать
# alexandershahbazov 02.03.2010 13:55
Уже долгое время идет без потерь .
В CodeVisionAVR увеличил размеры буферов
чтения и записи с 8 байт до 128 и на
стоп бит дал 2 бита : 19200,n,8,2 .
Почему-то и с EEPROM-ом все стало в
порядке ( параметры для устройства задавал через UART ) . Параметры с ПК до МК доходили , но EEPROM то записывал то нет . Что только с этим EEPROM я не делал .
Ваш совет по контролю четности держал до
последнего . Может быть еще пригодится .
Вроде все в порядке , а чувство такое ,
что толком до конца не разобрался .
Ответить | Ответить с цитатой | Цитировать
# Pashgan 03.03.2010 20:18
А прерывания запрещаете на время записи в EEPROM?
Ответить | Ответить с цитатой | Цитировать
# Jiri 31.01.2011 17:49
Цитирую Pashgan:
А прерывания запрещаете на время записи в EEPROM?

Такой вопрос. Требуется ли в обязательном порядке запрещать прерывания при записи в еерrоm? Или же это желательно для того, чтобы гарантировать корректное сохранение данных?
В даташите на тинку2313 приводят время записи(со стиранием) 3.4 ms Это слишком долго, т.к. (например) требуется чаще опрашивать порты. В том же даташите пишут, что запись осущ. последовательно й установкой бита EEMPE и последующей в теч. 4 тактов установкой бита EEPE регистра EECR. Есть подозрение, что прерывание не должно возникнуть именно в теч. этих 4-х тактов. Иначе зачем было делать прерывание по готовности eeprom (EE READY)?

Возможный код:
Код:
/* прерывания разрешены */
while(EECR & (1<<EEPE));
EEAR = someAddress;
EEDR = someData;
EECR |= 1<<EEMPE;
/* запретить прерывания */
EECR |= 1<<EEPE;
/* разрешить прерывания */

Собственно вопрос: так ли это? Можно ли так делать и не приведет ли это к проблемам?
Ответить | Ответить с цитатой | Цитировать
# alexandershahbazov 03.03.2010 21:41
Запрещал . На Timer0 идет работа с 2х
разрядным 7сегментником , на Timer1
каждые 5 секунд меняются 2 переменные
для опроса датчиков ds18b20 уже в основном теле .
Даже в EEPROMе дал смещение в 16 байт . Подумал что может быть ячейки плохо записывают . Причем значения записывались но не на свое место . В CVAVR за адресацией записи не следишь .
Потом стал пользоваться предложенными
функциями с даташит
по ATmega8 с конкретной адресацией . Тоже не помогло .
На время записи отключал индикацию ,
обходил опрос датчиков , ставил #asm("sei") ... #asm("cli") , давал задержку
delay_ms(10); . Все равно записанный байт
мог попасть куда угодно . Хотя "Program
EEPROM" из CodeVisionAVR Chip Programmer
всегда срабатывал четко .
Ответить | Ответить с цитатой | Цитировать
# alexandershahbazov 03.03.2010 21:42
После того как увеличил размеры буферов
для UART , дал 19200,n,8,2 , потом
смещение так и оставил в 16 байт - все
пошло . Больше месеца проверяю - все в
порядке .
Правда в программе на ПК я сделал так ,
что кнопки для отправки параметров на
МК активны только первые 3 секунды из 5 .
Еще что заметил :
При старте программы на ПК поля параметров должны заполняться с МК из
EEPROMа ( по заданию ) . Теперь они заносятся так быстро как-будто там уже
были прописаны .
Ответить | Ответить с цитатой | Цитировать
# Guest 07.03.2010 23:18
Интересно, дорожки D+/D-, идущие от FT к разъему, перекрещиваются из=за того, что применён разъём-А (предназна-й для хоста), или это какая-то особенность данной конструкции?
Ответить | Ответить с цитатой | Цитировать
# Guest 07.03.2010 23:20
Прошу прощения, забыл сразу спросить - почему в линиях D+/D- стоят 27ом? Я видел рекомендации 68ом, редко - 51ом. Есть какая-то хитрость?
Ответить | Ответить с цитатой | Цитировать
# Pashgan 08.03.2010 09:56
Simon, дорожки перекрещиваются из-за разъема. А резисторы в 27 Ом рекомендованы по описанию.
Ответить | Ответить с цитатой | Цитировать

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

Защитный код
Обновить