Объявление

Свернуть
Пока нет объявлений.

Использование микросхемы FT245 для шины USB

Свернуть
X
Свернуть
  •  

  • Использование микросхемы FT245 для шины USB

    Собирая электронное устройство, в работе которого предусматривается активное участие персонального компьютера, практически невозможно обойтись без шины USB (имеется в виду домашнее и полупрофессиональное применение – в промышленных системах куча других интерфейсов). Ниже рассказано об одном из вариантов решения данной задачи. Причем профессионально заниматься именно этим меня не учили (хотя по образованию я электронщик), поэтому периодически возникают вопросы характерные для любителей. Надеюсь, мой опыт кому-нибудь поможет.

    Во времена, когда я собирал свою первую приставку к РС, в любительских конструкциях царствовал последовательный порт RS232 и с помощью вставок из ассемблерного кода в программах легко реализовывался примитивный драйвер. Ситуация изменилась – на ноутбуках только USB, а „глумиться“ над регистрами операционная система не позволит (имеется в виду Windows2000 и выше).

    Для отработки технологии я составил простую схему (нажмите на картинку для ее увеличения) которая выполняет две функции: после нажатия кнопки отправляет в компьютер однобайтное число (которое компьютер отображает на экране); в свою очередь присланное число из компьютера выводит в двоичной форме на встроенный дискретный индикатор.
    Нажмите на изображение для увеличения.

Название:	1341557812_02000000.jpg
Просмотров:	100
Размер:	675.5 Кб
ID:	1432 />

    Не надо обращать внимание на ромбики в схеме (один нарисован у резонатора, другой – у выводов питания микроконтроллера) – это особенность программы KiCAD, которая имеет чисто условное значение. Чтобы не дергать микросхему из макетной платы, предусмотрено внутрисхемное программирование. В таком случае между выводами микроконтроллера (RB6 и RB7, к которым подключается программатор) и остальной схемой необходим разместить разделяющие резисторы (на схеме R1 и R2). Все устройство удобно размещается на макетной плате.
    Нажмите на изображение для увеличения.

Название:	1341557812_04000000.jpg
Просмотров:	38
Размер:	90.7 Кб
ID:	1433 />
    Для решения проблемы связи с РС я когда-то выбрал продукцию фирмы FTDI [1]. Не буду утверждать, что и сейчас это лучший вариант, но просто необходимости нового поиска у меня пока не возникало. Для экспериментов взял модуль DLP USB245M [2]. Это старый модуль, но перед более новым у него есть одно преимущество – выводы шины данных расположены рядом, один за другим. Сильно упрощенная структура модуля выглядит следующим образом.

    Нажмите на изображение для увеличения.

Название:	1341557812_05000000.jpg
Просмотров:	45
Размер:	85.2 Кб
ID:	1434 />
    Все данные проходят по общей шине. Используются также два управляющих (WR и RD) и два сигнализирующих сигнала (TXE и RXF).

    Если TXE=1, то буфер передачи заполнен полностью, т.е. перед тем как передать компьютеру очередной байт необходимо подождать когда освободиться место в очереди. Если RXF=0, то в буфере приема есть хотя бы один байт, т.е. компьютер уже что-то передал.

    Если в буфере приема есть хотя бы один байт, то для его считывания необходимо переключить сигнал RD с лог.1 в лог.0. Тогда один байт выведется на выводы шины данных. Для отправки данных в компьютер необходимо выставить байт на выводах шины и переключить сигнал WR с лог.1 в лог.0. В алгоритме работы программы, которая сначала принимает байт из компьютера (если есть), а затем передает туда сама, SB1 – кнопка (если кнопка нажата, то SB1=1 ).

    Нажмите на изображение для увеличения.

Название:	1341557812_06000000.gif
Просмотров:	73
Размер:	44.1 Кб
ID:	1435 />
    Текст программы приведен в приложении. Надо отметить, что для уменьшения объема текста проигнорированы некоторые особенности конструкции. Во-первых, при нажатии кнопки клавиатурного типа происходит дребезг контактов [3], в результате чего микроконтроллер получает не один импульс, а несколько десятков. Во-вторых, пока кнопка нажата программа успеет пройти весь цикл тысячи раз. В результате всего этого при однократном нажатии кнопки компьютер получит не один байт, а несколько тысяч. Это довольно просто устраняется программным путем, но так как сейчас это не принципиально, я не стал усложнять программу.

    На первых порах даже нет необходимости писать собственную программу для компьютера – можно использовать стандартные для работы с последовательным портом. Могу порекомендовать две: „DLP Test“ от фирмы FTDI и программу стороннего автора „RH_com“.
    Нажмите на изображение для увеличения.

Название:	1341557812_08000000.gif
Просмотров:	41
Размер:	68.0 Кб
ID:	1436 />
    Для "DLP Test" следует использовать следующую последовательность работы: 1) в окне „Select Driver“ выбрать пункт „VCP“; 2) в окне „Port“ установить нужный номер (если все правильно, то рядом появится надпись „Port Ready“). Все, устройство подключено. Одно замечание – перед тем как отправить число в Ваше устройство, не забудьте установить номер конкретного байта в окне „Xmit“ (фактически, в окошках „Send To target“ записываются возможные варианты чисел и именно „Xmit“ указывает какой конкретно байт будет использован).
    Теперь вторая половина – компьютер. Для программирования использовалась среда Microsoft Visual Basic 2008 Express Edition. Если используется операционная система Windows7, то при первом подключении USB модуля компьютер сам поставит драйвер эмулирующий СОМ-порт. В противном случае необходимо скачать драйвер с сайта производителя или его представителей.

    Нажмите на изображение для увеличения.

Название:	1341557812_10000000.jpeg
Просмотров:	63
Размер:	85.5 Кб
ID:	1437 />
    Для использования последовательного порта его с начала необходимо открыть. Один из вариантов подробно описан в русскоязычной версии MSDN [4]. Ниже приведен текст, оформленный в виде самостоятельной подпрограммы, которая открывает порт, записывает байт в порт и закрывает его. Вызов подпрограммы осуществляется командой SendSerialData(32), где 32 – число, которое необходимо отправить в порт.

    "ПЕРВЫЙ ВАРИАНТ" инициализации последовательного порта
    Sub SendSerialData(ByVal cifra As Integer) " Отправляет в порт значение переменной "cifra" (при вызове подпрограммы указывается в скобках)
    Dim cifra2(1) As Byte " Описывается массив
    " Открывается порт и указываются параметры его работы
    Using SelectedPort As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM3", 9600, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
    SelectedPort.WriteTimeout = 3000
    cifra2(0) = cifra
    SelectedPort.Write(cifra2, 0, 1) " В порт отправляется байт данных (из массива "cifra2" ; смещение 0 (от нулевого байта); один байт)
    SelectedPort.Close() " Порт закрывается
    End Using
    End Sub

    Необходимо немного подробнее рассмотреть команду “SelectedPort.Write “. Если написать просто SelectedPort.Write(cifra), то в порт уйдет номер символа из таблицы кодировки (например, вместо числа 32 программа отправит код символа «3»). Причем по-умолчанию используется 7-ми битная таблица ASCII – максимальный код 127 [5].
    В подпрограмме считывания данных из внешнего модуля я применил немного другой способ, который отлично описывается в [6] (хотя, в принципе, разница там микроскопическая). Надо принимать во внимание, что компьютер примет только те байты, которые были отправлены микроконтроллером в USB-модуль уже после открытия порта, все остальные он проигнорирует (для данной программы это означает, что сначала надо нажать виртуальную кнопку „Загрузка“, а потом кнопку микроконтроллера).

    Литература:
    1. Internet – FTDI. http://www.ftdichip.com
    2. Internet – FTDI. DLP Modules. http://www.ftdichip.com/Products/Modules/DLPModules.htm
    3. Internet - Подавления дребезга механических контактов. http://www.radioman.ru/teoria/1/mop_drebezg.php
    4. Internet – Библиотека MSDN (по-русски). http://msdn.microsoft.com/ru-ru/library/ms123401
    5. Internet – Таблица кодировки символов ASCII. http://arduino.ru/Reference/ASCIIchart
    6. Internet – Serial Port Using Visual Basic .NET and Windows. http://www.me.umn.edu/courses/me2011...al-port-vb.pdf

    Файлы в архиве:
    • Ассемблерная программа для МК
    • Весь проект в Visual Basic

      Возможность размещать комментарии к сообщениям отключена.

    Метки статей

    Свернуть

    Меток пока нет.

    Новые статьи

    Свернуть

    • Стандартный параллельный интерфейс на PC
      от admin
      Основным назначением интерфейса Centronics (аналог-ИРПР-М) является подключение к компьютеру принтеров различных типов. Поэтому распределение контактов разъема, назначение сигналов, программные средства управления интерфейсом ориентированы именно на это использование. Вто...
      08.02.2017, 22:45
    • Современные микросхемы драйверов RS-485 фирмы MAXIM
      от admin
      Журнал «Схемотехника» №10 2002 г.
      Олег Николайчук
      Целью настоящей статьи является ознакомление читателей с современными микросхемами драйверов сети RS485 фирмы MAXIM, их основными параметрами и особенностями.
      Интерфейс RS485 наиболее часто используется при создании современных локальных сетей различного назначения, как в промышленных изделиях, так и в любительской практике. Основными преимуществами интерфейса являются:
      • Относительно низкая себестоимость
      ...
      08.02.2017, 22:45
    • Системный контроллер ввода-вывода для сопряжения шин PCI и ISA
      от admin
      Журнал «Chip News» №6 2001 г.
      Ракович Н. Н.
      Мы уже беседовали на страницах журнала о продукции компании Winbond [Л.1], выпускающей широкую гамму разнообразных микросхем, начиная с памяти и микроконтроллеров и заканчивая приборами для мобильных средств связи и распознавания речи. Примерно в середине...
      08.02.2017, 22:45
    • Реализация последовательной асинхронной передачи данных в микроконтроллерах PIC
      от admin
      Введение.
      Серия PIC16Cxx от Microchip Technology, Inc. - это второе поколение высокопроизводительных восьмиразрядных микроконтроллеров на базе EPROM. Некоторые микроконтроллеры из этой серии (например PIC16C71 и PIC16C84) не имеют встроенного последовательного асинхронного порта. Эта статья содержит описание последовательного асинхронного интерфейса ( полудуплексное RS-232 соединение ) с программной обработкой прерывания для микроконтроллеров...
      08.02.2017, 22:45
    • Простой конвертер RS-232-TTL
      от admin

      Журнал «Схемотехника» №1 2000 г.
      Александр Нечаев
      При разработке различного рода электронных устройств с использованием микроконтроллеров очень часто оказывается полезной возможность подключения их к персональному компьютеру через последовательный порт. Однако напрямую это сделать...
      08.02.2017, 22:45
    • Программирование портов ввода/вывода LPT и ISA
      от admin
      Данный материал основан на моём (его) личном опыте работы с материнской платой неизвестного (нет, не солдата) производителя. Чипсет - SIS. Если вдруг в Вашем случае дело будет обстоять другим образом, напишите мне. Также хочу сразу предупредить - я не профессиональный программист!!!...
      08.02.2017, 22:45
    Обработка...
    X