Использование микросхемы FT245 для шины USB » Программирование устройств на PIC микроконтроллерах


Логин:
Пароль:
О сайте:

Pic.Rkniga.ru - Сайт как для начинающих, так и для опытных радиолюбителей, разрабатывающих свои устройства на популярных PIC микроконтроллерах.
Здесь можно обмениваться сообщениями на форуме, а также добавлять на сайт статьи и схемы своих устройств.

Меню сайта
Главная Форум по PIC микроконтроллерам Форум Статьи по PIC микроконтроллерам Статьи Справочная информаци по PIC микроконтроллерам Справочник Литература по PIC микроконтроллерам Литература Схемотехника Схемотехника устройств на PIC микроконтроллерах Микроконтроллеры Программаторы Все по программированию PIC микроконтроллеров Программы, Софт Программы Ссылки
Опрос

На каком языке программирования вы пишите программы?


Ассемблер
Си
Бейсик
Паскаль
Другой


Последние материалы
  • Тестовая плата для отладки программ на микроконтроллере PIC18F4550
  • Кнопка On/OFF на PIC12F629.
  • Часы с синхронизацией от китайского будильника
  • ШИМ регулятор на PIC16F628A.
  • Счетчики прямого и обратного счета на PIC16F628A.
  • Таймер отключения питания для мультиметра и не только.
  • Измеритель напряжения и тока
  • Маршрутный компьютер для электровелосипеда
  • Простой двухканальный термометр на PIC16F690 и датчиках DS18B20
  • Электронная "Незабудка" для забывчивых
  • Популярные материалы
    Случайная книга
    Программирование устройств на PIC микроконтроллерах » Справочник » Использование микросхемы FT245 для шины USB
    Использование микросхемы FT245 для шины USB
    Автор публикации: alex Просмотров: 6810 Добавлен: 7-07-2012, 03:31 Комментарии: 0

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

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

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

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

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

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

    Для решения проблемы связи с РС я когда-то выбрал продукцию фирмы FTDI [1]. Не буду утверждать, что и сейчас это лучший вариант, но просто необходимости нового поиска у меня пока не возникало. Для экспериментов взял модуль DLP USB245M [2]. Это старый модуль, но перед более новым у него есть одно преимущество – выводы шины данных расположены рядом, один за другим. Сильно упрощенная структура модуля выглядит следующим образом.

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


    Все данные проходят по общей шине. Используются также два управляющих (WR и RD) и два сигнализирующих сигнала (TXE и RXF).

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

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

     

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


    Текст программы приведен в приложении. Надо отметить, что для уменьшения объема текста проигнорированы некоторые особенности конструкции. Во-первых, при нажатии кнопки клавиатурного типа происходит дребезг контактов [3], в результате чего микроконтроллер получает не один импульс, а несколько десятков. Во-вторых, пока кнопка нажата программа успеет пройти весь цикл тысячи раз. В результате всего этого при однократном нажатии кнопки компьютер получит не один байт, а несколько тысяч. Это довольно просто устраняется программным путем, но так как сейчас это не принципиально, я не стал усложнять программу.

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

     

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

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


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

         Для использования последовательного порта его с начала необходимо открыть. Один из вариантов подробно описан в русскоязычной версии 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/smartprodcourse/technotes/docs/serial-port-vb.pdf


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

    ispolzusbft245.rar [52,98 Kb] (cкачиваний: 284)

    Комментарии