Text
                    Электроника
Юрген Хульцебеш
bhv




t
электронике
Созданиерограммирование USB-устроиств на ПК
На CD-ROM:
•	примеры программ на Visual Basic
•	описания и спецификация электронных компонентов
•	драйверы и утилиты
УДК 681.3.06
ББК 32.973
Х98
Хульцебош Ю.
Х98 USB в электронике: Пер. с нем. — СПб.: БХВ-Петербург, 2009. — 224 с.: ил. + CD-ROM — (Электроника)
ISBN 978-5-9775-0324-2
В книге показано, как с помощью специализированных микросхем USB без интегрированного микроконтроллера создавать различные системы управления и устройства. Рассмотрены основы USB, аппаратное обеспечение (микросхемы, флэш-модули и др.), установка драйверов и разработка программ на Visual Basic. Приведены практические примеры различных устройств от простых (светофор, аварийная сигнализация, устройство для наблюдения за уровнем воды в аквариуме и др.) до более сложных (тестер дистанционного управления, устройство записи памяти EEProm, аналого-цифровой преобразователь и др.). Показано, как разработать универсальный интерфейс USB-12C, осуществить Flash-программирование АТ89ЬР-микро-контроллера через SPI/ISP-интерфейсы и многое другое. На компакт-диске находятся примеры программ на языке Visual Basic, описания и спецификация электронных компонентов, а также специализированные драйверы и утилиты.
Для профессиональных инженеров-электронщиков и радиолюбителей
УДК 681.3.06
ББК 32.973
Die berechtigte Obersetzung von deutschsprachiges Buch USB in der Elektronik, ISBN: 978-3-7723-4089-5. Copyright © 2008 Franzis Verlag GmbH, 85586 Poing. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Das Erstellen und Verbreiten von Kopien auf Papier, auf Datentrager Oder im Internet, insbesondere als PDF, ist nur mit ausdrilcklicher Genehmigung des Verlags gestattet und wird widrigenfalls strafrechtlich verfolgt. Die Russische Obersetzung ist von BHV St. Petersburg verbreitet, Copyright © 2009.
Авторизованный перевод немецкой редакции книги USB in der Elektronik, ISBN: 978-3-7723-4089-5. Copyright © 2008 Franzis Verlag GmbH, 85586 Poing. Все права защищены, включая любые виды копирования, в том числе фотомеханического, а также хранение и тиражирование на электронных носителях. Изготовление и распространение копий на бумаге, электронных носителях данных и публикация в Интернете, особенно в формате PDF, возможны только при наличии письменного согласия ИздательстваЕгапг18. Нарушение этого условия преследуется в уголовном порядке. Перевод на русский язык "БХВ-Петербург" ©2009.
ISBN 978-3-7723-4089-5 (нем.)	© 2008 Franzis Verlag GmbH, 85586 Poing
ISBN 978-5-9775-0324-2 (рус.)	© Перевод на русский язык "БХВ-Петербург", 2009
Оглавление
Предисловие..................................................  1
Глава 1. Измерение, управление и регулировка при помощи интерфейсов ПК.............................................    5
1.1.	Информационные единицы: данные............................8
1.2.	Двоичный счет (логические 0 и 1)..........................9
1.3.	Древнерусский счет на пальцах........................... 10
1.4.	Биты и байты..........................................   11
Глава 2. Основы USB.........................................  12
2.1.	USB 1.0,1.1,2.0, On-The-Go...............................12
2.2.	Идентификация тока, напряжения, устройства USB-интерфейса.13
2.3.	Последовательная передача данных USB, RS232, SPI, I2C....14
2.4.	Кодировка NRZI............................................15
2.5.	USB — неизвестная последовательная шина................. 16
2.6.	Типы передачи USB.........................................17
2.7.	USB-драйвер.......................................    ...18
2.8.	Идентификация оферента USB...........................    19
Глава 3. Аппаратное обеспечение...............................21
3.1.	USB-флэш-адаптер и описание............................  22
3.2.	Дополнительная плата.....................................25
3.3.	иМ232Я-модуль от компании FTDI...........................27
3.4.	Внутренняя структура микросхемы FT232R от FTDI...........29
VIII
Оглавление
3.5.	Функции микросхемы FT232R..............................................31
3.6.	Пример последовательного подключения микроконтроллера к USB.............................................................32
3.7.	Согласование уровней RS232/485 ......................................  33
3.8.	Бод-генератор......................................................... 35
Глава 4. Установка драйвера FTDI версии 2.x.................................37
4.1. Программа отображения USB (USB View Utility)...........................41
4.2. Удаление FTDI-драйвера.................................................42
Глава 5. Установление контакта..............................................43
5.1.	Вызов первой демонстрационной программы VB (Visual Basic).....44
5.2.	Первые вызовы программы в FTD2XX.DLL-библиотеке........................45
5.3.	Пример программы в Visual Basic.....................................   46
5.4.	Объявление функций FTD2XX для VB.......................................47
5.5.	Исходный код функций.................................................  48
5.6.	Другие вызовы функции................................................. 50
5.7.	Вызовы функций......................................................   51
Глава 6. Игры со светом.....................................................53
6.1.	Включение светодиода...................................................54
6.2.	Переключение светодиода..............................................  57
6.3.	Еще вариант переключения...............................................58
6.4.	Вспышка светодиода.....................................................58
6.5.	Управление яркостью светодиода.........................................61
6.6.	Управление двухцветовым (DUO) светодиодом..............................63
6.7.	Мигающее светосигнальное устройство....................................66
6.8.	Включение выхода TxD...................................................67
6.9.	Пример схемы светофора с тремя светодиодами............................69
6.10.	Пример схемы USB-осветителя для чтения.......................70
Глава 7. Опрос входов.......................................................72
7.1.	Система сигнализации...................................................76
7.2.	Аварийный счетчик импульсов............................................77
7.3.	Пример схемы системы охранной сигнализации..........................  .78
7.4.	Здесь ли кошка?......................................................  80
Оглавление
IX
7.5.	Осторожно: вода.............................................81
7.6.	Светло или темно?.......................................... 82
7.7.	Расширение аварийной сигнализации фотоячейкой...............83
7.8.	Более точное определение сопротивления LDR................  84
Глава 8. Управление кварцевыми часовыми механизмами..............90
8.1. Подключение катушки........................................ 90
8.2. Программное обеспечение.................................... 92
Глава 9. Bit Bang — USB усиливает темпы..........................94
9.1.	Синхронный режим Bit Bang...................................95
9.2.	Опрос входных сигналов от D0 до D7 при помощи режима Bit Bang....................................................    101
9.3.	Исходный код для режима Bit Bang............................102
9.4.	Bit Bang и эмуляция других портов...........................105
Глава 10. Простой аналого-цифровой преобразователь с Bit Bang......................................................107
10.1.	Понятие аналого-цифрового преобразователя (АЦП)............107
10.2.	Электрическая схема АЦП с компаратором............. ,.....109
10.3.	Первое тестирование ПО для АЦП.............................110
10.4.	Согласованность между ПО и аппаратным обеспечением USB.....112
10.5.	Исходный код к АЦП.........................................116
10.6.	Предвключенный операционный усилитель.....................119
10.7.	Замер напряжения вольтметра на аналоговом входе Е2.........121
10.8.	Тестер батарей............................................124
Глава 11. Измерение температуры при помощи NTC (отрицательного ТКС)............................................126
11.1.	Образец ПО для измерения температуры....................  127
11.2.	Исходный код измерения температуры....................    129
Глава 12. Генерирование частот и приложения.....................130
12.1.	Генератор частот последовательного интерфейса...........,.130
12.2.	Генератор частот с Bit Bang................................130
12.3.	Цифроаналоговый преобразователь с ШИМ.................... 133
X	Оглавление
...			! iim———	——— i	in
Глава 13. Хранение пароля в EEProm............................................... 136
13.1.	Основы памяти данных EEProm...................................136
13.2.	Основы интерфейса I2C.........................................136
13.3.	Память данных ищет подключение (контакт)......................138
13.4.	Предварительные размышления...................................139
13.5.	За пять шагов к успеху........................................140
13.6.	"Ловля" данных................................................148
13.7.	Сопровождение хранения пароля.................................150
13.8.	ПО памяти пароля — фрагмент исходного кода....................151
13.9.	Пример двухпроводной связи I2C............................... 153
Глава 14. Тестирование инфракрасного дистанционного управления..........................................................156
14.1.	Инфракрасная передача данных в RCS-коде.......................157
14.2.	Тестирование инфракрасного дистанционного управления..........158
14.3.	Исходный код. Тестирование инфракрасного дистанционного управления......................................................... 162
14.4.	Дополнительная вспышка при помощи фотодиода...................163
14.5.	Обработка во временной диаграмме..............................164
Глава 15. Анализатор для цифровых сигналов до 60 кГц................166
Глава 16.8-канальный логический анализатор.............................. 168
16.1. Анализ цифровых схем..........................................171
Глава 17. Управление шаговыми двигателями...........................172
17.1.	Однополярный двигатель ищет контакт...........................174
17.2.	Пошаговое "отбивание чечетки".................................175
17.3.	Пример программы для шагового двигателя...................... 176
Глава 18. Использование USB для защиты программ от копирования......................................................180
18.1. Вызов функций FTDI в Visual С.................................182
Глава 19. Изменение данных EEProm.................................  185
Глава 20. Последовательная запись и чтение без драйвера VCP.......................................
189
Оглавление
XI
Глава 21. Соединение USB с обучающим пакетом
Mikrocontroller........................................................................................ 194
Глава 22. Пример Flash-программирования микроконтроллера Atmel-AT89LP..................................................... 197
Приложение. Описание компакт-диска............................................ 207
Список источников................................................................................ 208
Предметный указатель ......................................................................... 209
Предисловие
В последние годы USB стал универсальным интерфейсом. Наряду с компьютерной индустрией вряд ли осталась какая-либо область электроники, не затронутая USB, будь то автомобильное радио с USB-входом для подключения МРЗ-плеера, цифровой спутниковый приемник с обновлением через USB или современный сотовый телефон с MP3 и интегрированной камерой, которая имеет USB-порт.
USB — это сокращение для Universal Serial Bus (универсальная последовательная шина). Версия 1.0 была разработана в 1995 г. консорциумом нескольких больших предприятий по электронике. USB-устройства во время работы могут быть подключены или удалены.
Если заняться USB подробно, то сложность этой техники сначала покажется немного ужасающей. Если раньше при помощи параллельных или последовательных интерфейсов ПК можно было управлять и регулировать только собственную электронику, то сейчас нужно разбираться и в USB, т. к. ПК новейших поколений оборудованы только USB.
Обширную литературу можно найти в Интернете, у производителей микроконтроллеров и различных издательских компаний. В большинстве случаев описываемые USB-контроллеры имеют ядро микропроцессора, вследствие чего кажущийся простым USB снова становится сложным.
Мы не будем подробно останавливаться на функциональности USB. Используемая здесь USB-микросхема от FTDI не имеет интегрированного микроконтроллера. Данная книга покажет, как интересные USB-системы управления, сбора (и регистрации) данных вполне могут быть частично созданы без микроконтроллера.
Изначальный мотив изготовителя микросхемы FTDI заключался в разработке конвертера из USB в последовательный и параллельный интерфейсы, чтобы современные ПК можно было дооборудовать этими интерфейсами через
2 Предисловие
USB. Это было первым основанием автора лично разобраться с USB- и FTDI-микросхемами, т. к. новый ПК не имел более последовательных интерфейсов, и микроконтроллер должен был программироваться через последовательный интерфейс.
Быстро было установлено, что хотя простая последовательная передача функционировала, включение отдельных сигналов последовательного интерфейса все же было слишком медленным по сравнению с нормальным последовательным (RS232)-интерфейсом старого ПК. Автора интересовал вопрос: является ли якобы быстрый USB все же медленным, и из этой постановки вопроса, в конце концов, родилась эта книга с большим количеством практических примеров.
В повседневной жизни встречается множество ситуаций, которые стоило бы разрешить при помощи компьютера. Книга начинается с простых экспериментов со светодиодом и светофором по USB. Пример аварийной сигнализации, как можно наблюдать за уровнем воды в аквариуме — в книге вы найдете также немало веселых моментов. Есть ли у вас где-нибудь устройство с кварцевыми часами, которое после небольшой перестройки через USB могло бы превратиться в игру?
К концу книги представляемые примеры становятся все сложнее. Измерения яркости или температуры при помощи собственноручно построенного аналого-цифрового преобразователя способствуют закладке основ, которые необходимы как для программного обеспечения USB, так и для аппаратного обеспечения. Кое-кто, возможно, удивится, как легко с помощью нескольких строк в прикладном программном обеспечении можно обслуживать построенный собственными руками аналого-цифровой преобразователь. Тестер дистанционного управления с фотодиодом, вольтметр, запоминание пароля и использование для USB-защиты программ от копирования являются дальнейшими практическими примерами.
Так как используемый USB-адаптер может служить в качестве конвертера USB/последовательный порт микроконтроллера, приводятся дополнительные примеры ПО.
Тренированный электронщик научится, как можно использовать линии ввода и вывода также для более сложных интерфейсов, таких как I2C или SPL Работа и8В-12С-интерфейса становится детской игрой, т. к. логический анализатор программного обеспечения фактически визуализирует сигнал данных и тактовый сигнал в генерируемой временной диаграмме. За пять простых шагов вы сможете разработать универсальный иБВ-12С-интерфейс.
Последний пример в этой книге покажет вам основы того, как можно выполнить более сложные задания, например, Flash-программирование AT89LP-микроконтроллера через SPI/ISP-интерфейсы.
Предисловие
3
Те, кто уже разработал, построил и спрограммировал электронику микроконтроллера, могут использовать описываемый в этой книге адаптер непосредственно через конвертер USB/последовательный порт или SPI/RS232-nporpaM-мируемый адаптер.
Отдельные примеры детально разъясняются и обширно иллюстрируются, позволяя понять взаимосвязи программного обеспечения на Visual Basic с аппаратным обеспечением и микросхемой USB. Эти взаимосвязи также могут быть использованы для собственных идей.
Тот, кто любит экспериментировать и желает воплотить в жизнь на практике некоторые дальнейшие примеры схем, должен иметь паяльник.
Актуальную информацию вы сможете найти на сайте: www.mimikro.de.
ГЛАВА 1
Измерение, управление и регулировка при помощи интерфейсов ПК
При использовании ПК для электронных экспериментов требуется хотя бы один интерфейс для внешней среды или для собственной электроники.
Через этот интерфейс ПК или же программное обеспечение ПК сообщается с подключаемой электроникой. Во многих случаях использовались (и все еще используются) последовательные или параллельные интерфейсы ПК (рис. 1.1).
Компьютер		Интерфейс	-—►	Электроника
Рис. 1.1
Как можно догадаться из названия, при последовательном интерфейсе данные пересылаются последовательно, т. е. наименьшие единицы информации передаются по сигнальному проводу друг за другом. При последовательном интерфейсе ПК для отправки и приема передаваемые данные используют соответствующую отдельную линию передачи данных. Дополнительно при последовательном интерфейсе имеются другие сигналы управления, которые регулируют коммунйкацию от компьютера к электронике, и наоборот (рис. 1.2).
Рис. 1.2
6
Глава 1
Типичные устройства, которые подключаются к последовательному интерфейсу, — это модемы, измерительные устройства, а также мышь. Для соединения нужны 9- и 25-полярные электрические разъемы D-Sub.
Примечание____________________________________________________
USB в основном использует последовательную передачу данных.
При параллельном интерфейсе одновременно может осуществляться переда; ча восьми состояний на восьми информационных магистралях. Как и в случае с последовательным интерфейсом, при параллельном интерфейсе также имеются дополнительные сигналы управления (рис. 1.3).
Параллельный интерфейс,внедряется в основном при использовании принтеров и других дополнений. Для соединения используются 25-полярные электрические разъемы D-Sub (или Centronics-разъемы у старых устройств).
Обычно, к последовательному или параллельному интерфейсу ПК подключается постоянно один прибор. Если принтер подключили к параллельному интерфейсу, тогда для второго принтера нужен еще один другой параллельный интерфейс. Если нет в наличии или недостаточно свободных интерфейсов, то тогда ПК можно дооборудовать расширительными платами, которые встраиваются в различные внутренние слоты. Обусловленные прежними определениями в развитии аппаратного и программного обеспечений и операционной системы у DOS и Windows вплоть до Windows ХР в общих случаях поддерживаются два параллельных и до 32 последовательных интерфейсов. Со специальной поддержкой изготовителя приборов возможны до 8 параллельных и 256 последовательных интерфейсов.
Как, наверняка, уже известно большинству читателей, для устройств, подключенных к последовательному или параллельному интерфейсам, необходимо установить соответствующее ПО — Драйвер. Этот драйвер, как правило, предоставляется для соответствующей операционной системы производителем устройства. Без подобного драйвера устройство не может использоваться или
Измерение, управление и регулировка при помощи интерфейсов ПК 7
может использоваться лишь ограниченно, т. к. операционная система ПК не может распознать его.
В измерительной технике, напротив, электронщику для этого интерфейса драйвер может потребоваться лишь в очень редких случаях, потому что он имеет дело непосредственно с функциями аппаратного обеспечения компьютера (с адресами ввода и вывода), которое со времен введения IBM XT до сих пор поддерживается и в современных системах.
При разработке USB учитывался опыт, который уже был получен на подключенных к компьютеру дополнительных приборах, что значительно облегчает пользователям применение. USB означает Universal Serial Bus (универсальная последовательная шина) и является интерфейсом для многих современных устройств. USB (исходя от одного подключения USB-хоста) может опознать до 127 подключенных устройств (адрес 00 держится вх запасе). Хост USB управляет всей активностью на USB-линиях и может прицельно настраивать каждый прибор через собственный адрес.
Область применения была, по сравнению с существующими последовательными и параллельными интерфейсами, значительно расширена. U SB-интерфейс находит применение не только в принтерах, модемах, мышках, сканерах и внешних жестких дисках, но он также активно используется и на других электронных приборах, таких как МРЗ-плееры, сотовые телефоны, видеоплееры, USB-карты памяти и т. д. Они зачастую поддерживаются непосредственно операционной системой без инсталляции драйвера. Если ПК не обладает достаточным количеством USB-интерфейсов, то можно разветвить USB на нужное количество портов при помощи так называемых хабов.
Выходя от так называемого USB-хост-контроллера (в нашем примере USB-интерфейс компьютера), другие устройства могут быть включены звездообразно на последовательно присоединенном 4-портовом хабе. Хаб имеет один или несколько USB-контактов для подключения других USB-приборов. Хост-контроллер на ПК регулирует коммуникацию с подключенными USB-устройствами и операционной системой.
Вместе с этим к 4-портовому хабу могут быть подключены и другие хабы. USB-контакт для Прибора 4 (рис. 1.4) может использоваться для другого 7-портового хаба, благодаря чему количество USB-контактов увеличивается на десять. В этом случае говорят о каскадировании.
Каждый раз только один подключенный USB-прибор может сообщаться с одним USB-хост-контроллером. Отправка сообщения одновременно на несколько подключенных приборов (Broadcasting— транслирование сообщений, режим передачи сообщения всем или нескольким абонентам сети одновременно) невозможна. Для повышения ширины полосы пропускания современные ПК имеют зачастую два, четыре или восемь хост-контроллеров.
8
Глава 1
Если несколько USB-устройств должны обмениваться между собой данными, например, копировать данные с одного USB-жесткого диска на другой, и наоборот, имеет смысл подключить жесткие диски к разным USB-xoct-koht-роллерам, а не к одному.
Рис. 1.4
USB-штекер имеет только 4 соединительных линии. Помимо подключения к источнику тока, которое не свойственно последовательным или параллельным интерфейсам, имеется всего лишь две других линии передачи данных,, по которым осуществляется общая коммуникация с хост-контрол лером. Вместе с тем, штекерные USB-разъемы не очень дороги и могут быть миниатюризированы.
Подключенные к USB устройства очень часто автоматически распознаются операционными системами, например, Windows 2000, ХР и Vista. Если прибор подключается впервые, то почти всегда происходит запрос инсталляции драйвера. После успешной установки и интеграции операционная система распознает прибор автоматически.
Иногда, однако, не удается заметить интеграцию драйвера, т. к. операционная система (например, для USB-карты памяти или USB-жестких дисков) уже содержит драйвер в списке совместимости оборудования и автоматически интегрирует его.
1.1.	Информационные единицы: данные
Что в компьютерных технологиях или информатике подразумевается под понятием данные! Как выглядят данные, которые используются для обработки в компьютерах в соответствии с микроконтроллерами, а также передаются по различным интерфейсам— от электронных устройств к компьютеру или в самом компьютере. В Интернете можно обнаружить такой ответ:
Данные— это логически сгруппированные единицы информации, которые передаются между (компьютерными) системами. Они состоят из двоичного кода. Требуется наличие кодирующих инструкций, с помощью информации которых данные могут быть преобразованы.
Измерение, управление и регулировка при помощи интерфейсов ПК
9
В информатике и электронной обработке данных под понятием "данные" понимается читаемое (машиной) и обрабатываемое, как правило, цифровое представление информации. Информация для этого сначала кодируется в знаки (или цепочки знаков), структура которых подчиняется строгим правилам.
Данные — это множественное число термина "данное", наименьшей неделимой единицы информации, которая передается в сообщении. Сообщение имеет значение для получателя и подчиняется фиксированным правилам. В компьютере, работающем цифровым образом, наименьшими единицами информации являются значения 0 и 1. Благодаря расположению в ряд нулей и единиц образуются цепочки знаков и чисел для дальнейшей обработки в программном и аппаратном обеспечении компьютера.
Примечание_______________________________________________________
Компьютер — это производное от англ, "to compute" (считать или вычислять).
Наиболее наглядным примером аналоговой передачи данных, вероятно, является телефон: в процессе говорения в микрофон телефонной трубки образуются звуковые волны, эти электронные данные передаются, а в динамике телефонной трубки получателя они снова преобразуются в звуковые волны.
В противоположность цифровым данным с дискретными значениями 0 или 1 аналоговый сигнал может принять каждое произвольное значение внутри установленных предельных значений, например: 0,1-0,2-0,2345....
1.2.	Двоичный счет (логические 0 и 1)
Сигналы или сигнальные линии в цифровом интерфейсе закодированы в двоичной системе и могут принимать только значения 0 или 1.
Все это становится довольно простым, если представить себе то, как мы считаем при помощи десяти чисел от 0 до 9 в нашей десятичной системе счисления (табл. 1.1).
Таблица 1.1
Десятичное основание 10 (0-9)	Двоичное основание 2 (0,1)	Шестнадцатеричное основание 16 (0—F)
0	0	0
1	1	1
2	10	2
		3	11	3
4	100	4
10
Глава 1
Таблица 1.1 (окончание)
Десятичное основание 10 (0—9)	Двоичное основание 2 (0,1)	Шестнадцатеричное основание 16 (0-F)
5	101	5
6	110	6
7	111	7
8	1000	8
9	1001	9
10	1010	А
11	1011	в
12	1100	С
13	1101	D
14	1110	Е
15	1111	F
16	10000	10
При всех системах счисления соответствующие дискретные единицы информации располагаются в ряд, и от этого зависит соответствующее значение позиции внутри информации (данных):
14 в десятичной системе = 14 = 1 х Ю1 + 4 х 10° = 10 + 4
14 в двоичной системе = 1110=1 х 23 + 1 х 22 + 1 х 21 + 0 х 2° = 8 + 4 + 2 + 0
14 в шестнадцатеричной системе = Е = 14 х 16° = 14
В приведенных системах счисления различны только основания, или количество возможных дискретных значений единиц информации. В десятичной системе ими являются числа от 0 до 9 (до основания 10, десять возможных дискретных значений), а в двоичной системе — два значения 0 и 1 (до основания 2).
1.3.	Древнерусский счет на пальцах
Очень просто производить деление двоичного числа на два: нужно сдвинуть все биты на одну позицию направо, а последний бит отбросить. Из числа 10 (двоичное число 1010) получается двоичное число 101 (десятичное 5). Также и из десятичного числа 11 получится число 5. Умножение на два производится со сдвигом битов налево.
Измерение, управление и регулировка при помощи интерфейсов ПК
Читатель может проверить следующее умножение двух чисел и попытаться проникнуть в суть дела. Автору этот вид умножения известен под названием "русский счет на пальцах". Рассмотрим пример умножения 17 на 12 (17х ] 2).
Левый столбец (17) каждый раз делится на 2, правый столбец (12) каждый раз умножается на 2. Остатки при этом не берутся в расчет (табл. 1.2).
Таблица 1.2
17	12
8	24
4	48
2	96
1	192
Сложим только те числа в столбце справа, которые в левом столбце имеют нечетное значение: т. е. 12 + 192 = 204. Ответ подошел, но всегда ли так происходит?
1.4.	Биты и байты
пит (binary digit, двоичный разряд) может принимать логические значения 0 и 1. Если расположить в ряд 8 битов, как в предыдущем примере, то тогда с 8 битами можно досчитать до 255 значений:
= 128 + 64 + 32+ 16 + 8 + 4 + 2+ 1 =255
Итак, 8 битов образуют 1 байт. Байт может принимать 256 значений (от 0 до 255).
1 байт — это тип данных с 8 битами, который образует единицу информации. Первый бит (самый левый, 128) обозначается также MSB (Most Significant Bit, наиболее значащий бит, старший разряд), последний бит (самый правый)— как LSB (Least Significant Bit, наименее значащий бит, младший разряд).
Word (слово данных) — это тип данных (единица информации) с 16 битами, или 2 байтами, может принимать 65536 значений (от 0 до 65536).
1 Мбайт (I 000 000 единиц) равен 10б байтов, однако иногда под мегабайтом принято понимать 220 байтов, что приводит к почти 5%-й разнице.
ГЛАВА 2
Основы USB
2.1.	USB 1.0,1.1,2.0, On-The-Go
USB 1.0
Известная на сегодняшний момент под названием USB 1.0 последовательная шина была разработана компанией Intel. Спецификации USB 1.0 были обнародованы в январе 1996 г.
USB 1.0 имел максимальный битрейт, равный 1,5 Мбит/с (низкая скорость — Low Speed), и поэтому не мог быть полезным для запоминающих устройств сверхбольшой емкости (например, жестких дисков). Однако запоминающие устройства сверхбольшой емкости уже принципиальным образом поддерживались. Первыми используемыми устройствами были, например, принтер, сканер, мышь и клавиатура.
USB 1.1
С USB 1.1 стало возможным достигнуть скорости передачи данных, равной 12 Мбит/с (полная скорость — Full Speed).
USB 2.0
В 2000 г. была обнародована спецификация USB 2.0 с высокоскоростной передачей данных (480 Мбит/с), а также созданы предпосылки для того, чтобы USB стал более привлекателен для периферийных устройств, таких как принтер, жесткий диск, карты памяти и т. д.
USB 2.0 со скоростью передачи данных, большей в 40 раз, чем при высокоскоростном режиме, остался совместим с версиями USB 1 .X.
Основы USB
13
USB On-The-Go
Благодаря USB On-The-Go (OTG) оборудованные USB-устройства могут непосредственно сообщаться между собой. Поэтому от компьютера, который принимает на себя функцию хоста, можно отказаться. Два USB-устройства могут обмениваться сообщениями без хоста. Это имеет смысл при использовании цифровых камер с USB-разъемом для управления USB-принтерами, чтобы иметь возможность распечатать фотографии непосредственно на принтере, без подключения к компьютеру.
Wireless USB (беспроводной USB)
При этом расширении USB речь идет о беспроводном USB. Данная спецификация была выпущена в мае 2005 г. Она делает возможным беспроводную связь между USB-устройствами при полной скорости передачи данных максимум 480 Мбит/с.
2.2.	Идентификация тока, напряжения, устройства USB-интерфейса
Физический USB-контакт имеет в общей сложности 4 линии (рис. 2.1), две для электропитания (земля и +5 В) и две линии передачи данных (D+ и D-).
Рис. 2.1
Потребление электроэнергии подключенного USB-устройства не должно превышать 100 мА, если USB-устройство не было сконфигурировано. Максимальное потребление электроэнергии при сконфигурированном USB-устройстве составляет 500 мА. Если потребуется более 100 мА, то этого должно потребовать USB-устройство. Устройства, которые снимают потребность в электроэнергии непосредственно через USB, снабжены опознавательным признаком bus powered (питаемый от шины). Само собой разумеется, что USB-устройства также могут быть оснащены своим собственным электропитанием. Такие устройства обладают признаком self powered (с собственным источником энергии).
14
Гпава 2
Линии передачи данных (D+ и D-) рассчитаны для оптимизации скорости передачи данных. Отдельные состояния сигнала этих линий не стоит называть, т. к. они были бы важны только при разработке USB-чипа.
Если USB-устройство подключается к USB-контроллеру или извлекается, то линии передачи данных используются по технологии Plug-and-Play (доел, англ. — включил и играй). Если линия передачи данных D+ Подключенного USB-устройства для напряжения питания имеет сопротивление 1,5 кОм, то устройство в этом случае интегрируется в качестве полноскоростного или высокоскоростного устройства. Если устройство, напротив, обладает сопротивлением 1,5 кОм по D-, то тогда это низкоскоростное устройство.
Все USB 2.0-совместимые устройства при подключении в шину с полной скоростью (Full-Speed) определяются как USB 1.1. Только когда хост-контроллер обнаружит, что речь идет о приспособленном к USB 2.0 устройстве, происходит переключение скорости через хост.
Если оба канала передачи данных D+ и D- остаются на низком уровне дольше 2,5 мкс, то тогда это состояние определяется как disconnect (разъединение), и устройство нужно отсоединить.
Длина USB-кабеля не должна превышать 5 м. Если потребуется кабель большей длины, тогда на каждые 5 м нужно использовать хаб.
2.3.	Последовательная передача данных USB, RS232, SPI, I2C
Краткое сопоставление наиболее частых последовательных интерфейсов приведено в табл. 2.1.
Таблица 2.1
	USB 2.0	RS232	SPI	I2C
Количество устройств	127	2	8	40
Скорость передачи данных	до 480 Мбит/с	до 115 Кбит/с	до 2 Мбит/с	до 2 Мбит/с
Максимальное расстояние	5 м, макс. 30 м	до 30 м	до 3 м	до 5 м
USB служит для подключения самых разных внешних приборов. Интерфейс RS232 можно встретить, например, у модемов, мыши и измерительных приборов.
Основы USB
15
Интерфейсы SP1 и I2C служат преимущественно для внешнего сообщения микроконтроллера с другими периферийными микросхемами (узлами) и поэтому поддерживают лишь небольшие расстояния.
При последовательной передаче сообщение раскладывается снова на свои наименьшие составляющие. 1 байт, таким образом, снова распадается на 8 битов. Присоединяются и другие данные: так, например, начало и конец одной единицы информации, если подключенное устройство не отвечает или если сообщение неполное.
Скорость передачи данных — это указание частоты (Frequenz). Она вычисляется по формуле: f = 1/t, где t— плотность одного бита. У USB 1.1 и при режиме Full Speed скорость передачи данных составляет 12 Мбит/с. Продолжительность (времени) передачи одного бита таким образом равняется 1/12 х 106= 83 нс. Что касается передающихся необработанных (исходных) данных, то скорость передачи данных в 12 Мбит/с не достигается. Эффективные значения USB 1.1 лежат между 6,5 и 9,5 Мбит/с, в зависимости от того, какой из типов передачи данных по USB используется для сообщения.
2.4.	Кодировка NRZI
При USB-передаче применяется способ кодировки NRZI (Non Return to Zero Inverted, кодирование без возвращения к нулю с инверсией). В начале распознается логический 0, а потом инвертируется актуальное состояние шины, а при 1 состояние остается неизменным. Чтобы осуществить хорошую синхронизацию на получателе с минимальными затратами, в действие вводится так называемый Bit Stuffer (рис. 2.2): в шесть или более подряд следующих друг за другом битов со значением 1 в принудительном порядке вставляется логический 0, для того чтобы получатель мог синхронизироваться.
Bit Stuffer (упаковщик битов)
NRZI-Декодер
Дифференциальный драйвер (D+ D-)
Рис. 2.2
Этот бит должен быть вставлен также в том случае, если в потоке данных возникает бит со значением 0. Этот шаг обязателен для того, чтобы у получателя можно было распознать и снова удалить этот дополнительный бит.
Кроме того, для того чтобы в процессе передачи сообщения получить прочную длительную точную синхронизацию, перед каждым пакетом данных образуется синхронизационное поле с 8 битами.
16
Глава 2
2.5.	USB — неизвестная последовательная шина
В Интернете обычно USB обозначается как неизвестная последовательная шина. Разобраться в деталях с USB, протеканием процессов при протоколе USB-передачи, дескрипторами, кодированием и декодированием данных, синхронизацией, скоростями передачи данных, необходимыми (а также и необязательными) драйверами на уровне операционной системы, со спецификациями OHCI, UHCI, EHCI или идентификатором производителя — не очевидно для электронщика-любителя.
В противоположность приложениям для последовательного или параллельного интерфейса, USB-приложения не Moiyr просто писать данные на различные адреса ввода и вывода или читать с них. Для того чтобы приняться за USB-устройство, приложения должны сообщаться с драйвером (класса или устройства), который, в свою очередь, на более низком уровне сообщается с USB-драйверами управления сообщениями по линиям передачи данных USB. В устройстве должны быть реализованы протоколы, с помощью которых компьютер может распознать и идентифицировать устройство, а также сообщаться с ним.
К счастью, многие производители USB-контроллеров уже сталкивались с этой проблемой. Поэтому в этой книге FTDI-контроллер можно увидеть далее с разводкой контактов последовательных сигнальных линий, как на рис. 2.3, или параллельным выводом данных (Bit Bang Mode), как на рис. 2.4.
USB Stocker
Рис. 2.3
Рис. 2.4
Основы USB
17
Чтобы программировать управление USB, необходимо вставить штекер, установить FTDI-драйвер и запустить программы, например, в Visual Basic или Pascal (для профессионалов подойдет и С).
Интересно, что сами сигналы последовательного интерфейса FTDI-контрол-лера можно использовать также и для 8-битовой параллельной передачи данных. Для этого должны быть смоделированы другие последовательные интерфейсы, такие как SPI или I2C.
Используемый в иллюстрациях USB-контроллер FTDI микросхемы FT232R рассчитан на USB 2.0.
Передача данных по USB происходит в пределах кадров размером в 1 мс. Это легко представить как периодическое временное окно. Миллисекундный временной такт генерируется USB-хост-контроллером.
Внутри временного окна сообщения передаются пакетами данных.
Передача данных внутри миллисекундных кадров различна. При Low Speed скорость передачи данных составляет 1,5 Мбит/с, при Full Speed— до 12 Мбит/с, при High Speed (только USB 2.0)— до 480 Мбит/с. При High Speed для достижения высокой скорости передачи данных USB каждый кадр подразделяется на 8 кадров размером 125 мкс.
2.6.	Типы передачи USB
USB-устройства могут по-разному сообщаться с USB-хост-контроллером. Для пересылки сообщений имеется четыре типа передачи.
Управляющая передача (Control-Transfer)
Управляющие передачи отсылаются обычно в оба направления, так что и отправитель и получатель всегда могут быть уверены, что данные прибыли. Каждое USB-устройство должно поддерживать тип передачи Control-Transfer.
Управляющие передачи очень важны для обмена первыми сообщениями. Они служат для конфигурации USB-устройства и, помимо прочего, для того, чтобы осведомиться (проинформироваться) о совместимости USB-устройства.
Передача с прерыванием (Interrupt-Transfer)
Передачи типа Interrupt-Transfer работают с проверкой ошибок и задуманы для маленьких наборов данных. Не гарантируется точно установленная ско
18
Глава 2
рость передачи данных. Происходит периодический опрос (считывание данных) подключенного USB-устройства. Такт опроса при Low Speed лежит в границах между 10 и 255 мс, при Full Speed— между 1 и 255 мс, а при High Speed — при 125 мкс.
При Low Speed за один опрос (считывание данных) передается до 8 байтов, при Full Speed — до 64 байтов, а при High Speed — до 1024 байтов. Отсюда следует максимальная скорость передачи данных при Low Speed — 800 байт/с, при Full Speed — 64 Кбайт/с и при High Speed — до 24 Мбайт/с. Несмотря на схожесть в названии, Interrupt-Transfer (передача с прерыванием) не имеет ничего общего с Prozessor-Interrupts (прерывания процессора).
Массовая передача (Bulk-Transfer)
Передачи типа Bulk-Transfer задуманы для больших по размеру наборов данных, которые нуждаются в проверке ошибок, но не являются злободневными. Эти передачи обладают меньшим приоритетом. Они проводятся контроллером, когда другие изохронные передачи и передачи с прерываниями отключены. Используемый FTDI-чип микросхемы FT232R поддерживает этот тип передачи.
Изохронная передача (Isochron Transfer)
Изохронные передачи являются важными для USB-устройств, которые обрабатывают большие наборы данных (файлы). Они имеют гарантированную скорость передачи данных. При Isochron Transfer не происходит корректирование ошибок. Изохронная передача не имеется в распоряжении при Low Speed.
2.7.	USB-драйвер
Вообще, драйвер — это связующее звено между аппаратным и программным обеспечением. Для того чтобы добраться до USB-устройства, программа должна сообщаться с драйвером, который в свою очередь на более низком уровне сообщается с USB-драйверами, которые управляют сообщениями по линиям передачи данных USB. Принципиально было бы также возможно обратиться к более низкому уровню непосредственно при помощи собственной программы, но в этом случае пришлось бы более детально разбираться со свойствами USB-устройства, специфичными для того или иного изготовителя. У новых операционных систем Windows драйверы на сегодняшний день имеют лишь необходимые права доступа, для того чтобы можно было обратиться к аппаратному обеспечению компьютера.
Основы USB 19
Компания FTDI выпускает для двух, используемых USB-контроллеров микросхемы FT232R для Windows два различных драйвера. Первый драйвер — это так называемый VCP-драйвер (Virtueller Com Port — виртуальный Com-порт). Этот драйвер заботится о том, чтобы операционная система интегрировала последовательный COM-порт, когда FTDI-USB-контроллер связывается с компьютером через USB. Благодаря этому обычно эмулируется последовательный интерфейс, прикидываясь перед операционной системой другим COM-портом. Так удается как можно быстрее дооборудовать более новые компьютеры виртуальным последовательным интерфейсом и добиться высокой совместимости с существующими прикладными программами.
Второй драйвер— D2XX. Здесь речь идет о драйвере FTDI2XX.SYS для WIN32 Driver Model (WDM — тип драйвера Win32). Собственное прикладное программное обеспечение сообщается по этому USB-драйверу Windows со стеком (стековой памятью), который, в свою очередь, пытается добраться до U SB-устройства.
Для двух драйверов FTDI в Интернете на сайте www.ftdichip.com имеется соответствующая программная документация.
Сначала при установке драйвера все еще нужно было выбирать один из двух драйверов. Если кто-то хотел использовать второй драйвер, то первый драйвер обязательно нужно было деинсталлировать. С выходом версии драйвера 2.0 с 2007 г. деинсталляция больше не требуется: драйвер для двух вариантов (D2XX и VCP) избавляет от надоедливых установок и удалений, так что можно продолжать экспериментировать.
Компания FTDI поддерживает не только драйверы для всех распространенных вариантов Windows, но также и для операционных систем Linux, Mac OS и др.
2.8.	Идентификация оферента USB
Чтобы USB-устройство могло быть выставлено на рынок, ему нужен так называемый VID (Venddr-ID, ID продавца) и PID, код продукта. ID Вендора FTDI-контроллера FTDI предоставляется бесплатно. Если FTDI-контроллер используется для других целей, то от FTDI может быть получен другой номер кода продукта PID (рис. 2.5).
Номера VID и PID сохраняются внутри FTDI-контроллера в EEPROM (электронно стираемом программируемом ПЗУ). Они даже могут быть изменены, но в этом случае должны быть согласованы и программы установки драйвера. После внесения изменений обычно требуется новая установка.
20
Гпава 2
Рис. 2.5
В книге были использованы ID вендора FTDI-VID и код продукта FTDI-PID, в то время как сам новый драйвер в любое время может быть получен с сайта www.ftdichip.com.
ГЛАВА 3
Аппаратное обеспечение
Почти все изготовители чипов производят элементы с интегрированным USB-соединением, так как USB-контакт можно найти почти в каждой области электроники. Соответственно и выбор многообразен, если не сказать — необозрим. В связи с этим выбор правильной микросхемы для собственных приложений не так-то легок. Несомненно, для этого нужно интересоваться и заниматься темой микроконтроллеров (ядром многих микросхем USB), что раньше, при последовательном или параллельном интерфейсе персональных компьютеров, было необходимо лишь условно. К тому же существует еще множество приложений для последовательных и параллельных интерфейсов ПК, которые в будущем должны будут заменены USB и нуждаются в простом соединении.
Если кто-то хочет иметь USB-соединение без (явно) интегрированного микроконтроллера, то для собственных экспериментов в расчет могут быть взяты лишь микросхемы USB тех изготовителей, которые предлагают USB-koh-вертер для последовательного или параллельного интерфейсу:
О Profilic Technologie (технология Profilic) PL2303X— этот узел является конвертером USB/последовательный порт для USB 1.1 в корпусе SSOP-28. Дескрипторы прочно вмонтированы во внутреннем ПЗУ (ROM— Read Only Memory). Для собственного PID или ID вендора, конечно же, понадобится внешнее EEProm, которое может быть подключено по двухпроводному соединению. Приложения ограничены сигнальными линиями последовательного интерфейса. Версия PL2303HX RevD имеет OTP-ROM (One time Programmable) и должна делать возможным использование последовательных сигналов в качестве 8 бит I/O (ввод/вывод);
О Silicon Labs СР2102/103— в противоположность микросхеме Profilic Silicon Labs предлагает интегрированное EEProm с 1024 байтами в QFN-корпусе и 23 штырьковыми выводами для USB 2.0 Full Speed;
2 Зак. 1084
22
Гпава 3
О MOSCHIP semiconductor MSC7820— MCS7820, находящийся в LQFP-корпусе с 48 штырьковыми выводами, поддерживает два последовательных интерфейса и в то же время передачу данных SIR-IrDA (инфракрасный), а также USB 2.0. Внешнее EEProm может быть подключено по двум линиям I2C;
□	FTDI—компания FTDI предлагает множество микросхем USB для эмуляции последовательного и параллельного интерфейсов. Так называемый режим Bit Bang Mode, который делает микросхему довольно интересной для других приложений, в своих первых версиях задумывался как простое дополнение программирования/соединения FPGA. FTDI свела воедино возможности преобразования из USB в другие последовательные интерфейсы (как последовательных интерфейсов ПК) в так называемой области MPSSE (Multi-Protocol Synchronous Serial Engine). При помощи режима Bit Bang микросхема FT232R дала простор другим приложениям без дополнительного микроконтроллера;
□	MAXIM — фирма Maxim со своими Мах3421 и Мах3420 предлагает две интересные микросхемы USB, которые имеют два прямых соединения микроконтроллера с преобразователем от USB 2.0 (Full Speed) auf SPI. Max3421 поддерживает изохронную передачу данных. Контроллер находится в TQFP-корпусе с 32 штырьковыми выводами. Помимо интерфейса SPI он имеет восемь других входов и выходов. Микросхема подготовлена в качестве USB-хоста для USB-OTG. Так как не поддерживается последовательный интерфейс ПК, то микросхемы могут открываться без дополнительного драйвера USB непосредственно через USB-драйвер Windows со стеком.
3.1.	USB-флэш-адаптер и описание
Это аппаратное обеспечение изначально было разработано для последовательного SPI-программирования семейства микроконтроллеров Atmel-AT89LP (рис. 3.1). Литературу и информацию для заказа вы сможете найти на сайте www.mimikro.de1.
Адаптер со стороны выхода имеет 10-полярный контакт, который, в зависимости от использования, разведен последовательно или параллельно (см. рис. 2.3 и 2.4).
Если смотреть сверху и направить USB-штекер от корпуса, то выводы 1 и 2 (GND) лежат на правой стороне: штырьковый вывод 1 в направлении чипа
http://www.atmel.ru, www.chip-dip.ru. — Прим. пер.
Аппаратное обеспечение
23
USB-контроллера, а штырьковый вывод 2 — в направлении нижнего края платы (рис. 3.2).
Рис. 3.1
Рис. 3.2
Монтаж FTD232R очень прост. Сопротивления от R1 до R8 в сигнальных линиях составляют 256 Ом и понижают ток при возможном коротком замыкании.
Через FET1 и перемычку JP_Mcc на штырьковый вывод 4 штекера проводится напряжение USB 5 В. Как только подключенный компьютер переключается в режим Standby (спящий режим), FET1 констатирует, что USB-догово-ренности сохраняются, и потребление тока по USB соответственно незначительно. R10 и С7 отвечают за то, чтобы включение происходило плавно.
24
Глава 3
С4 и С6 имеют соответствующую емкость в 100 мкФ, С5 имеет значение в 3,3 мкФ. С2 и СЗ (каждая по 22 пФ) служат уменьшению мешающих воздействий.
Ферритовый сердечник (FB — Ferritkem) в напряжении питания VccUSB — это рекомендация производителя FTDI при чувствительности к помехам или повреждениям.
Штырьковый вывод 10 штекера ISP (четырехполярный штекер для плоского ленточного кабеля) проложен через перемычку JP_DDA на D4 и примонти-рован. Список элементов USB-адаптера приведен в табл. 3.1.
Таблица 3.1
Элемент	Значение	Описание
С1	100n	C0805
С2	22р	C0805
СЗ	22р	C0805
С4	3,3 мкФ	C1206K
С5	10п	C0805
С6	100п	C0805
G7	100л	C0805
С8	22р	C0805
D1	ВАТ42ММ	MINIMELF
FB	FB	R1206
FET1	IRLML6402	SOT23
IC1	FT232RL	SSOP28
ISP	2X05Pinhead	
JP_DDA	Pinhead	
JP_VCC	Pinhead	
LED1	CHIPLED	_0805
R1	256	R0805
R2	256	R0805
R3	256	R0805
R4	256	R0805
R5	256	R0805
R6	256	R0805
Аппаратное обеспечение
25
Таблица 3.1 (окончание)
Элемент	Значение	Описание
R7	256	R0805
R8	256	R0805
R9	390	R0805
R10	1K	R0805
USB	PN87520	
Внимание!_________________________________________________
При экспериментировании к порту USB 2.0 без использования USB-хаба должен быть подключен только USB-адаптер.
Постарайтесь по возможности браться только за края USB-платы. Иначе, при определенных условиях, вы можете разрушить USB-адаптер за счет только одних статических разрядов!
Когда вы вставляете адаптер, вы увидите короткую вспышку светодиода LED1.
3.2.	Дополнительная плата
На дополнительной плате размещено большинство элементов для дальнейших экспериментов. Платы напрямую связаны с USB-адаптером. Панель ИС для 8 сигнальных проводов ввода/вывода служит в качестве коммутационной панели.
На плате находится операционный усилитель и конструктивные элементы для простого аналого-цифрового преобразователя (АЦП). При помощи перемычки JP1 на плате вы можете деактивировать питающее напряжение для аналоговой части (рис. 3.3). Штырьковые выводы 1, 2, 3 и 6 панели ИС непосредственно соединены между собой (рис. 3.4).
Список (структурных) элементов дополнительной платы (рис. 3.5):
□ Cl 100n C-EU025-024X044
□ С2 100n C-EU025-024X044
□	СЗ 100 pF CPOL-EUE2.5-7
□	С4 0,47 pF CPOL-EUE2.5-5
□	IC1 LM358N DIL08
Cl JP1 1X02 Pinhead + Jumper
26
Глава 3
Рис. 3.3
Рис. 3.4
□	Pl ЮОК Linear
□	Rl 100k R-EU_0204/7
□	R2 39К R-EU.0204/7
□	R4 ЮК R-EU.0204/7
□	R5 ЮКR-EU.0204/7
□	SI 20Pin, DIL20 gedrehter Sockel
□	Т1 ВС557 А ТО92
□	T2BS170TO
□	USB 2X05
Информацию о заказе заготовки для дополнительной платы вы можете найти в Интернете по ссылке www.mimikro.de.
Другие используемые в работе с книгой составляющие элементы:
□	двойной светодиод (Duo-LED) 3 или 5 мм — (2-полярный);
□	три светодиода 5 мм (красный, зеленый, 1 желтый);
□	LDR;
Аппаратное обеспечение
27
R5
ЮК
Рис. 3.5
О фотодиод BPW 40;
□	NTC 0.2-4К7 (4700);
□	сопротивление 1 К;
□	сопротивление 100 К;
□	сопротивление 27 Ом;
□	электролитический конденсатор (Elko) 100 мкФ;
О 24C16-EEProm;
□	диод ВАТ 42;
□	соединительный провод;
О соединение 10/10 от USB-адаптера к дополнительной плате.
3.3.	иМ232И-модуль от компании FTDI
ч
Компания FTDI предлагает собранный модуль с DIP-панелью (панель с двухрядным расположением штырьковых выводов) с 24 штырьковыми выводами, которая помимо прочего может быть использована как коммутационная панель. Этот модуль может быть приобретен у различных компаний (кроме FTDI):
□	АК Modul Bus на http: И www.ak-modul-bus.de;
О электронный магазин на http: //www.elmikro.com/de/ft232r.html;
28
Глава 3
□	Famell на http: //atfarnelLcom/jsp/search/productdetaiLjsp?sku=l146036;
□	AO Unitronik на http: П p5676.typo3serverdnfo/ftdi-r.0.htmll.
Модуль UM232R предназначен для подключения DIP-панелй и делает доступными все последовательные линии данных и линии с квотированием FT232R. С этими модулями шинные и самопитаемые (Self-Powered) конфигурации возможны наряду с присоединениями 5 и 3,3 В к микроконтроллерам с последовательным интерфейсом (модуль UU232 на рис. 3.6).
Примечание____________________
На плате нет конвертера уровня RS232.
Рис. 3.6
TXD 1 DTR# RTS#
VIO RXD
RI# GND DSR# DCD# GTS#
СВ4
СВ2 «
Jumper Л
Jumper J2
Quelle: FTDI UM232R Dokumentatlon
Рис. 3.7
1 Для России — http://www.mitracon.ru/, http://www.chip-dip.ru.
Аппаратное обеспечение
29
Имеются и другие модули со структурным элементом FT-232R, как, например, модуль MM232R для последовательного интерфейса, модуль UC232R (ChiPi) в штекере DB9 или кабельный адаптер TTL232R с FT232R в USB-штекере (вид сверху на рис. 3.7 взят из документации FTDI UM232R, электрическая схема FTDI для модуля UM232R на рис. 3.8).
Quelle; FTDI UM232R Dckumemauon
Рис. 3.8
axes
CfStii:
ET949&
WWT V I
ММАМЫМ Ж	*
—I
RTS*
*4MfVMN4k
STR*
IN*:* |исз лпп
ж Л - CSWIW 8. © r ..
•east
ut
iȴCC
-










ЛМмММмМййММС»




3.4.	Внутренняя структура микросхемы FT232R от FTDI
Функциональные блоки FT232R представлены на рис. 3.9.
Как уже упоминалось ранее, используемый в книге FTDI-FT232R-кoнтpoллep эмулирует последовательный интерфейс для USB-подключения.
Четыре входа
Сигнальные линии D- и D+ находятся на левой стороне и именуются USBDP и USBSM.
30
Глава 3
RXD ят» CTS# DIR* D8R* DCD*
Рис. 3.9
FT232R имеет внутренний стабилизатор напряжения 3,3 В, который напрямую соединен с Vcc, напряжением питания USB.
Выходы
Выходы на правой стороне являются сигналами последовательного интерфейса (табл, 3.2).
Таблица 3.2
Последовательный сигнал	Управление в качестве		Bit Bang	
TxD	выход	отправка данных	DO	ВХОД-ВЫХОД
RxD	вход	прием данных	D1	вход-выход
RTS/	выход		D2	вход-выход
CTS/	вход		D3	вход-выход
DTRZ	выход		D4	вход-выход
DSRZ	вход		D5	вход-выход
DCDZ	вход		D6	вход-выход
Rl	вход		D7	вход-выход
Аппаратное обеспечение
31
Эти восемь сигнальных линий выведены на соединительный штекер USB-флэш-адаптера. Сигналы могут быть использованы также в так называемом режиме Bit Bang контроллера FTDI-FT232R, тогда их следует пронумеровать от D07 до D7 (см. рис, 2.3 и 2.4).
Указание для электронщиков___________________________________
Входы и выходы имеют внутренние pull-up-сопротивления от 200 кОм к напряжению питания, каждый из которых при использовании в качестве входа становится активным.
Имеется также еще пять других сигналов CBUS, от CBUS0 до CBUS5. CBUS 1 управляет работой светодиодов на плате USB, CBUS 3 — внешним напряжением питания.
3.5.	Функции микросхемы FT232R
В блок-схеме на рис. 3.9 можно увидеть множество функциональных блоков:
□	USB-Transceiver (USB-приемопередатчик)— соединение с дифференциальными линиями данных USB D+ и D-. Этот функциональный блок имеет сопротивления для того, чтобы идентифицировать микросхему FT232R в качестве Full-Speed-устройства (с полной скоростью).
Из дифференциальных данных подготавливаются данные для USB-DPLL и для SIE (Serial Interface Engine— механизм последовательного интерфейса);
□	USB-DPLL — синхронизирует поток данных USB с SIE;
О Serial Interface Engine (SIE) — из последовательного потока данных USB снова образуются параллельные данные для дальнейшей обработки. Если отправляется сообщение от микросхемы FT232R к USB, то происходит обратное кодирование, из параллельных данных возникает поток данных USB;
□	USB Protocol Engine — в этой функциональной области подготавливаются команды для последовательного интерфейса, а также обрабатываются запросы команд USB от USB-хост-контроллера;
□	Fifo Tx/Rx буфер— FIFO-буферы контролируются FIFO-контроллером. В FIFO (сокращение от First in— First out) запоминаются данные, благодаря этому можно более быстро обработать и передать несколько байтов;
О UART-контроллер (Universal Asynchronous Receiver and Transmitter, универсальный асинхронный приемопередатчик, УАПП)— это непосредственное устройство вывода для последовательных выходных сигналов. Работая совместно с бод-генератором и FIFO-контроллером, подготавливает
32
Гпава 3
сигналы для последовательного интерфейса, а также приходящие сигналы от последовательного интерфейса;
□	бод-генератор — образует, как видно из его названия, скорости передачи в бодах для последовательного интерфейса от 300 бод до 3 Мбод. В режиме Bit Bang параллельные данные выдаются в тактовом импульсе скорости передачи в бодах;
□	внутренний генератор (осциллятор) — образует все необходимые такты для внутренних функциональных блоков. Внутренне генерируемые частоты от 6, 12, 24 и 48 МГц также могли бы передаваться дальше на CBUS-сигнал;
□	EEProm (ЭСППЗУ) — 1024-битовое EEProm сохраняет конфигурационные данные для USB, конфигурации CBUS и другие сведения, такие как PID, VID или серийный номер. От FTI можно получить специальную программу под названием MPROG, с помощью которой можно изменить конфигурацию микросхемы FT232R, а также данные в EEProm.
3.6.	Пример последовательного подключения микроконтроллера к USB
При помощи FTDI-контроллера можно довольно быстро и без особых затрат преобразовать адаптер из последовательного в USB. Для самой простой передачи сообщений микроконтроллера к USB требуются только сигналы TxD, RxD и заземляющая шина.
Для этого может использоваться также USB-флэш-адаптер. TxD USB-адап-тера (штырьковый вывод 7 соединительного штекера) соединяется с RxD микроконтроллера, a RxD USB-адаптера (штырьковый вывод 6 соединительного штекера) с TxD микроконтроллера. Теперь отсутствует только лишь общее соединение на корпус (соединение с "землей") с штырьковым выводом 2 соединительного штекера (табл. 3.3).
Таблица 3.3
Последовательный сигнал	USB-адаптер		Микроконтроллер	/
TxD	штырьковый выход 7	отправка данных	D0	вход
RxD	штырьковый вход 6	прием данных	D1	выход
"земля"	штырьковый вывод 2		D2	"земля”
Аппаратное обеспечение
33
После установки FTDI-драйвера по (виртуальному) com-порту может осуществляться сообщение с микроконтроллером.
Схема на рис. 3.10 показывает не только простое последовательное соединение, но также и то, как микроконтроллер одновременно питается тактом в 12 МГц от микросхемы FT232R на выходе CBUS 0 и PWREN для режима простоя USB.
$
1'2
Vcc
Ferrite Bead
10nF
GND
GND
100nF
	<		RXD			 		I 1	II	TXD
ЯСС'7					
			TXD				RXD
USBDM					
			RTS#			 			CTS#
USBDP					
' !** •			CTS#	" 					RTS#
уссю t*	T2;	121	OTTO		
					К IF
			. . USffw		
RESET# " '					
• W-			DCP«		1
0861 - Д					0
7p8C0 •. ..У •:					•s
			CBUSO	12MHz OUT	CLK..IN
			CBUS1		
3V3QUT		• /			
•			T cairn	1  	
G G	• -c- .=	50.	7	PWREN#	
: <: H	•	N	SCBUS3		no
•	:"D-	Ж .	D			
	A • . .		CBUS4	 	
Рис. 3.10
5/GNO
3.7.	Согласование уровней RS232/485
Если вы хотите использовать FTDI-чип в качестве конвертера USB для последовательного порта RS232 или 485, следует согласовать уровни. Структурные элементы серии 213 (Sipex SP213ECA, Maxim MAX213CAI или аналоговые устройства ADM213E) содержат необходимые драйверы аппаратного обеспечения RS232 для четырех сигналов отправки и пяти сигналов приема. Эти элементы дополнительно поддерживают Shut Down Mode (режим отключения), таким образом для сохранения USB-договоренностей они могут переводиться в режиме простоя ПК на минимальное потребление электроэнергии (рис. 3.11).
Если требуется только 4 сигнальных линии RXD, TXD, RTS и CTS (не нужна поддержка через режим Suspend), то вы можете использовать преобразователь уровней Мах232 или ST232.
34
Глава 3
usbdm
USBDP
уссю
vM'. ;
RESET*
•ЛИГ/
<ОЙ0.:;;;г
3V3OUT
•' .А" .
•. /а-" £ .<4 '•	# :•: Н . N
•’л	•••?©:
_ тх»
RXD дай
 CTJW’
FT232R .• • *’•-**. *
•••• <й№и
'.У CBUS2
4& • ЕГ,-
> ' .’Т'- V. .•
TXDATA
RXDATA
RTS
CTS
DTR
DSR
DCD
TXD RXD RTS» CTSt РТЕ»
D8R* PCD# _______Rtf
-------------- ТХШ» -------------- RXLED#
------GR02 ------—  GPIO3 SLEEP*
РИС. 3.11
Схема с Max232 довольно простая (рис. 3.12). Изображенные электролитические конденсаторы имеют емкость 1мкФ (рис. 3.13).
У RS485-nopTOB TxD и RXD передаются как дифференциальные сигналы. Сигнал CBUS2 (TXDEN) активирует драйвер отправителя, CBUS3 (PWREN)— прием данных. Элемент SP481 здесь приведен только для примера, такие же элементы имеются и в устройствах Maxim, и в аналоговых устройствах.
Рис. 3.12
Аппаратное обеспечение
35
Рис. 3.13
3.8.	Бод-генератор
Для передачи данных у последовательного USB-адаптера особенно важным является настройка скорости передачи в бодах. Принципиальным образом FTDI поддерживает все стандартные скорости передачи в бодах (300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 115200, 230400, 460800 и т. д.). Скорости передачи в бодах обычно установлены в программе-приложении или в ОС и могут быть настроены при помощи вызова функции FT_SetBaudRate.
Если раньше хотели использовать нестандартные скорости в бодах, нужно было детально разбираться и ориентироваться в генерировании скорости передачи данных и возможных коэффициентах деления. Коэффициенты деления после пересылки скорости в бодах также должны были передаваться при ПОМОЩИ вызова функции FT_SetDivisor.
В новых версиях драйверов FTDI этого больше не требуется: достаточно просто ввести скорость передачи (например, 49 000), и драйвер автоматически определяет лучшие настройки.
36
Гпава 3
Чтобы обойти процедуру настройки скорости в бодах (допустим, нужно перенастроить скорость передачи в 115 на 512 К), потребуется файд
FTDIPortinf. Там вы найдете запись [FtdiPort232.NT.HW.AddReg]. В записи
HKR ConfigData , 1,01,00, ЗЕ, ЗЕ, 10,27,88,13
каждой скорости передачи сопоставляются два последовательных байта. Пара 10,27 соответствует скорости передачи 300, а 88,13 —> скорости передачи 600 бод, и т. д.
Все стандартные значения для FTDI в руководстве "Aliasing Using the Original Sub-Integer Divisors".
Указание для "микронщика”
Существует несколько программ, которые используют последовательный порт для программирования микроконтроллеров. При этом выходные сигналы TxD, RTS и DTR обслуживаются непосредственно через (флэш)-программу. Так как обычно USB работает во временных тактах 1 мс, то по сигнальным линиям USB может быть изменена "только" каждая миллисекунда, тогда как при нормальном последовательном интерфейсе это значительно быстрее.
Принципиальным образом в этом случае рекомендуется использовать также конвертер USB/последовательный порт, но передача данных будет со скоростью несколько байтов в секунду.
ГЛАВА 4
Установка драйвера FTDI версии 2.x
Условием ваших экспериментов и функционирования Имеющихся тестовых программ является успешная установка драйвера.
Прежде чем вы подсоедините FTDI-USB-адаптер, в диспетчере устройств Windows вы должны проверить, не используете ли вы уже USB-устройство с микросхемой FTDI.
В этом случае вы обязательно должны удалить существующий FTDI-драйвер, чтобы иметь возможность установить прилагаемый драйвер.
Обычно FTDI-драйвер в операционных системах Windows можно удалить, зайдя в окно Пуск | Панель управления | Установка и удаление программ.
Иногда все же деинсталляцию провести не удается, можете тогда попробовать обойтись программой FTClean Utility на сайте www.ftdichip.com. Наконец, вы можете также еще раз запустить диспетчер устройств Windows и проверить, можно ли удалить драйвер для‘соответствующего устройства. В завершение попытайтесь снова удалить драйвер в окне Пуск | Панель управления | Установка и удаление программ.
Пожалуйста, не используйте для своих экспериментов USB-хаб, а подсоединяйте USB-адаптер непосредственно к свободному USB-порту компьютера!
Если подключить USB-флэш-адаптер к свободному USB-интерфейсу, светодиод на USB-адаптере ненадолго засветится. Мастер установки уведомит вас, что было найдено новое оборудование, и в следующем меню вам будет показано описание устройства FT232 USB UART (рис. 4.1-4.3).
Выберите, пожалуйста, опцию поиска подходящего драйвера для устройства и в следующем меню — каталог с драйвером. Каталог вы можете либо выбрать из обзора, либо задать вручную. Если ваш CD-ROM имеет, например, обозначение D:, то следует указать путь D: \ftdi Treiber (рис. 4.4—4.6).
Глава 4
 f	1  -

Рис. 4.1
‘wtwywwyi nmj!! !!l!WWWTwWty
Найден новый мастер оборудования
Рис. 4.2
Для новых драйверов FTDI версий 2.x эту программу установки придется запустить дважды.
После успешной установки драйвера FTDI вы можете проверить ее в диспетчере устройств: в строке Порты СОМ и LPT вы должны увидеть (VCP)-устройство USB Serial Port (СОМх) (рис. 4.7). Теперь можно обратиться к COM-порту через USB.
В контроллерах универсальной последовательной шины USB вы должны найти запись: USB Serial Converter.
Установка драйвера FTDI версии 2.x
39
Рис. 4.3
Рис. 4.4
40
Глава 4
Рис. 4.5
Рис. 4.6
Указание________________________________________________________
Если в поле Порты СОМ и LPT вы не увидите устройство USB Serial Port (СОМх), то в свойствах USB Serial Converter на вкладке Advanced (Дополнительно) можно активировать функцию Load VCP.
Установка драйвера FTDI версии 2.x
41

JHLAPTOP
ф 'Ю Сетевые платы
ф- Д Порты СОМ и LPT
Ь* JF Последовательный порт (СОМ1)
..USB Serial Port (COMB)
ЙЗвуковые, видео и игровые устройства
ф-ф IEEE-1394 Bus-Hostcontroller
Й” Ш Компьютер
ф-S Клавиатуры
ВКонтроллеры универсальной последовательной шины USB г
*	Generic 6-in-1 USB Card Reader
>	SiS 7001 PCI-zu-USB Open Host-Controller
>	SB 7001 PCI-zu-USB Open Host-Controller
►	SiS 7001 PCI-zu-USB Open Host-Controller
1 Standard PCI-zu-USB erweiterter Hostcontroller
• USB 2.0-Root-Hub

USB-Root-Hub

Рис. 4.7
4.1. Программа отображения USB (USB View Utility)
В Интернете можно загрузить бесплатную программу отображения USB (USB-Viewer) от Microsoft. Программное обеспечение находится на компакт-диске к книге в каталоге \Beispielprogramme\USBView.
С помощью этой программы вы можете напрямую увидеть отображение не только подключенных USB-устройств, но также и важных конфигураций USB-устройства (рис. 4.8).
Если в левом окне вы выберете устройство USB Serial Converter, то в правом окне вы получите подробные данные о конфигурации для FTDI-чипа. Например, для bcdUSB значение 0x200 соответствует USB 2.0, FTDI-USB ID вендора (VID) — 0x0403 и FTDI-USB код продукта — 0x6001, а также два коммуникационных канала с передачей типа Bulk и максимальной величиной пакета 64 байта. Значения bEndpointAddress различаются при сообщении в бите данных D7, который указывает направление 0 = OUT или 1 = IN.
42
Глава 4
Ml USB View
0le Options tlelP
-||Д--^^Л^ЛПЛМП|1^ЛПГГЮП.ПГ1ПГ--Г>УПГПП'-ЛА1П1П-Г'ГГ1Г1-ГГ.ГГПГ<11ГГГГГТГ---Л-3» SB 7001 PQ-ZU-US8 Open Host-Contfofcr
* & RootHub
(Portl] NoDeviceConnected
‘ • •*£* lPort2) NoDeviceConnected
* -Ий SB 7001 PO-ZU4JSB Open Host-Controtef
: й RootHub____________________________________________

:- (Port2)DeviceConnected: USB'Mattempeichefgeret *•<£» SB 7001 PQ-zu-USB OpenHod-Controle» :	RootHub
:	(Pott1)DeviceConnected: LogtechWheeNouse(USB)
(Poit2) NoDeviceConnected
s-fjb SB PCI-zu-USB envetertef Hostcontrota RootHub
; *£» (P0ft1) NoDeviceConnected
• •*£» (P0rt2j NoDeviceConnected
•• (Port3) NoDeviceConnected
:• •€» (Port4) NoDeviceConnected  **z? |Port5] NoDeviceConnected
•<=» |Port6] NoDeviceConnected
Device Descriptor: bcdUSB:	0x0200
;bDeviceClass:	0x00
bDeviceSubClass:	0x00
bDeviceProtocol:	0x00
bMaxPacketSizeO:	0x08	(8)
idVendor:	0x0403	(Future Technology Devices	Inte
idProduct:	0x6001
bcdDevice:	0x0600
iManufacturer:	0x01
iProduct:	0x02
ISerialNuBber:	0x03
bNuxConfigurat ions:	0x01
:Connect ionStat us: DeviceConnected Current Config Value:	0x01
Device Bus Speed:	Full
Device Address:	0x02
Open Pipes:	2
Endpoint Descriptor: ;bEndpointAddress:	0x81
Transfer Type:	Bulk.
vMaxPacketSize:	0x0040	(64)
blnterval:	0x00
Endpoint Descriptor.
bEndpointAddress:	0x02
Transfer Type:	Bulk
vMaxPacketSize:	0x0040	(64)
blnterval:	0x00
!...................
Рис. 4.8
4.2. Удаление FTDI-драйвера
Обычно FTDI-драйвер в операционных системах Windows можно удалить, зайдя в окно Пуск | Панель управления | Установка и удаление программ.
Подробную информацию (на английском языке) вы сможете найти также в документе Windows_XP_Installation_Guide.pdf в каталоге с драйвером на компакт-диске.
Указание_____________________________________________________
При необходимости используйте в своей работе программу FTCIean Utility (www.ftdchip.com), если удаления почему-либо не происходит.
Когда вы подготавливаете свои эксперименты, вы обязательно заранее должны отсоединить USB-адаптер от USB-порта вашего компьютера, чтобы избежать возможного короткого замыкания!
Когда после подготовки эксперимента вы снова подключите USB-адаптер, то драйвер заново будет интегрирован операционной системой, и после этого вы Сможете непосредственно запустить ваши программы.
ГЛАВА 5
Установление контакта
Если установка драйвера прошла успешно, то вы можете отважиться на первый тест.
Все демонстрационные программы содержатся в виде исполняемых ехе-файлов на прилагаемом к книге компакт-диске. Мы рекомендуем скопировать каталог с демонстрационными программами на жесткий диск.
После копирования не забудьте при необходимости снять у отдельных файлов защиту от записи.
В качестве языков программирования (создание простых прикладных программ для USB-адаптера) могут быть приняты в расчет, например, Visual Basic или Pascal. Для С-программирования потребуются солидные навыки программирования. Зачастую, в особенности у начинающих, в распоряжении нет С-компилятора. Предлагаемые демонстрационные программы в Visual Basic (VB) можно относительно легко преобразовать в другие языки программирования.
Для разработки собственных прикладных программ простого управления микросхемой FTDI232R все необходимые подпрограммы должны находиться в программной библиотеке FTD2XX.DLL. Процесс сообщения выглядит примерно так (рис. 5.1).
Файл WDM-драйвера FTD2XX.SYS и файл библиотеки FTD2X.DLL были установлены вместе с FTDI-драйверами. WDM-драйвер сообщается, с одной стороны, со стеком драйвера Windows, чтобы иметь доступ к физическому устройству USB, а с другой стороны — с FTDI-библиотекой FTD2XX.DLL.
Важно_________________________________________________________
Классические функции Win32-API (Application Programming Interface, интерфейс для программирования прикладных программ) ни в коем случае не должны быть спутаны с API-функциями FTDI-драйвера!
44
Глава 5
Рис. 5.1
5.1.	Вызов первой демонстрационной программы VB (Visual Basic)
Вы подключили USB-адаптер? Тогда запустите программу beispiel_l.exe в каталоге BSp_J демонстрационных программ.
Указание________________________________________________
Если при запуске программы возникает ошибка времени выполнения, следует сначала выполнить установку в каталоге BSp_1, чтобы установить среду времени выполнения VB.
Приведите в действие кнопку теста— вы должны получить следующий результат (рис. 5.2).
Результаты работы первой демонстрационной программы представлены в маленьком окне внизу.
Программа сначала определяет, как много FTDI-устройств имеется в наличии, затем следуют описания устройства и серийные номера. Далее программа пытается открыть канал связи для USB-адаптера (чтобы читать и отсылать сообщения). В заключение канал связи снова будет закрыт.
Поле Geratebeschreibung: FT232R USB UART (описание устройства) может быть изменено. Если USB-устройство подсоединено не как отдельное (FTDI)-USB-устройство (и поэтому не появляется в качестве первого USB-устройства в списке), то в программе для тестирования связи используется описание устройства FT232R USB UART.
Установление контакта
45
Рис. 5.2
Если вы используете драйвер с другим описанием, нежели FT232R USB UART, то тогда вы соответственно должны изменить это указание в программах для примеров в поле Gerat (устройство).
5.2.	Первые вызовы программы в FTD2XX.DLL-библиотеке
Как было описано в начале главы, для связи используются функции FTDI-библиотеки FTD2XX.DLL.
Все вызовы описаны в руководстве "D2XX Programmers Guide". Соответствующий PDF-документ имеется на компакт-диске.
В первой демонстрационной программе VB используются следующие вызовы функций библиотеки (табл. 5.1):
Таблица 5.1
Вызов функции	Краткое описание
FT_GetNumDevices	Отражает количество USB-устройств (вызывает FT_ListDevices)
FT_ListDevices	Отражает количество USB-устройств, описаний устройств и серийных номеров подключенных устройств
FTjOpenEx	Открывает канал связи для данного USB-устройства
FTjClose	Закрывает канал связи
46
Гпава 5
5.3.	Пример программы в Visual Basic
Все VB-программы записаны на компакт-диске в исходном коде. Если вы установили VB, то просто вызовите файл проекта Visual Basic с окончанием VBP, и тогда проект откроется: в данном случае файл Bsp.VBP в папке Bsp l (рис. 5.3). Чтобы открыть в VB исходную программу первого примера, нужно дважды щелкнуть кнопку теста в форме Beispiel 1 (в правом окне на рис. 5.4), исходный код будет показан в отдельном окне.
Рис. 5.3
Рис. 5.4
Установление контакта
47
Имя кнопки — bt_test. Если пользователь приводит в действие кнопку, то вызывается функция bt test ciicko.
Если окно проекта не открылось в верхнем правом углу, то это окно вы можете вызвать при помощи команды меню View | Project Explorer или комбинацией клавиш <Ctrl>+<R>.
5.4.	Объявление функций FTD2XX для VB
Чтобы сообщить Visual Basic, что должны быть вызваны функции во внешней библиотеке, их нужно объявить. Объявления содержатся в Moduli (в области объекта Module (модули) в Project Explorer VB). Здесь должны быть произведены два объявления:
Public Declare Function FT_ListDevices Lib ’’FTD2XX.DLL” (
ByVai argl As Long, _
ByVai arg2 As String, _
ByVai dwFlags As Long) As Long
Public Declare Function FT_GetNumDevices Lib ’’FTD2XX.DLL” Alias "FT_ListDevices" ( _
ByRef argl As Long, _
ByVai arg2 As String, _
By Vai dwFlags As Long) As Long
Также обращение К FTjGetNumDevices вызывает функцию FT_ListDevices в FTDI-библиотеке FTD2XX.DLL.
Затем зачастую объявляются используемые константы в модуле, например:
для FTjOpenEx
Public Const FT_OPEN_BY_SERIAL_NUMBER = 1
Public Const FT_OPEN_BY_DESCRIPTION = 2
Имена констант соответствуют в большинстве своем описанию в руководстве по программированию D2XX FTDI.
48
Глава 5
5.5.	Исходный код функций
Следующая подпрограмма вызывается в случае, если нажата кнопка Test в форме VB во время выполнения программы (листинг 5.1).
Private Sub bt_test_Click ()
On Error GoTo bt_test_fehler
LoggerList.Clear
If FT_GetNumDe vices (IngNumDevicest vbNullString, FT_LIST_BY_NUMBER
—ONLY)<>FT_OK Then LoggerList.Additem (’’ошибка вызова:
FT_GetNumDevices не работает”) Exit sub
Else
LoggerList.Additem (’’Anzahl vorhandener USB-GerSte (количество устройств): ” & IngNum Devices) End If
If FT_ListDevices (0, strBeschreibung, FT_LIST_BY_INDEX Or FT—OPEN— BY—DESCRIPTION)—
<	> FT—OK Then
LoggerList.Additem (’’ошибка вызова:
ЕД*—ListDeviceS— не работает")
Exit Sub
Else
LoggerList.Additem ("GerStfebeschreibung (описание устройства): ” & strBeschreibung) End If
If FT—ListDevices (0z strSerienNummer, FT—LIST—BY—INDEX Or FT—OPEN—
BY—SERIAL—NUMBER)—<> FT—OK Then
LoggerList.Additem ("ошибка определения серийного номера:
FT—ListDeviceS—не работает”)
Exit Sub
Else
LoggerList.Additem ("Seriennummer (серийный номер): ” & strSerienNummer) End If
If Left$(strBeschreibung, 15) <> "FT232R USB UART” Then strBeschreibung = Trim(Me.DeviceName.Text) & Chr{0) LoggerList.Additem "Alternative Geratebeschreibung verwendet (альтернативное описание устройства)”
End If
Установление контакта
49
If FT jDpenEx(strBeschreibung, FT_OPEN_BY_DESCRIPTION, IngHandle) <> FT_OK Then
LoggerList.AddItem ’’ошибка вызова: FT^OpenEx”
Exit Sub
Else
LoggerList.Additem ’’GerSt wurde gedffnet (устройство открыто): ” & Trim (strBeschreibung) End If
If FT_Close (IngHandle) <> FT_OK Then
LoggerList.Additem ’’Ошибка вызова: FT_Close” Exit Sub
Else
LoggerList.Additem ”Ger&t wurde geschlossen (устройство закрыто): ” & Trim(strBeschreibung) End If
LoggerList.AddItem ’’Test erfolgreich beendet (тест успешно завершен)” bt_test_f ehler__ende: Exit Sub bt_test_fehler:
MsgBox Err.Description
Resume bt_test_fehler_ende
End Sub
К отдельным шагам программы ведут ссылки:
On Error GoTo bt_test_fehler
Программа обработки ошибок начинается строкой:
LoggerList.Clear
И очищает ОКНО вывода Loggerlist.
If FT_GetNumDevices (IngNumDevices, vbNullString, FT_LIST_BY_NUM BERJDNLY)<>FT_OK Then oggerList.AddItem (’’Ошибка вызова: FT_GetNumDevices funktionierte nicht”) Else LoggerList.Add!tem (’’Anzahl vorhandener USB-GerMte: ” & IngNumDevices) End If
FT_GetNumDevices вызывает функцию FT ListDevices В FTD2XX.DLL, чтобы сообщить число USB-устройств. Должны быть введены три значения параметров:
□	IngNumDevices —- был определен в заголовке программы и после успешного вызова функции содержит число USB-устройств;
О vbnuiistring— требуется при других возможных вызовах функции FT ListDevices. Так как третий параметр должен сообщить количество устройств, то второй параметр должен быть установлен в 0;
50
Глава 5
□	ft_list_by_number_only— третий параметр указывает, какие значения должны сообщаться и возвращаться функцией. ft_list_by_number_only объявлен в Moduli как константа и имеет значение. &н8ооооооо, которое в этой форме не является особенно удобочитаемым.
Функция FT GetNumDevices после вызова — в соответствии с объявлением Public Declare Funktion FT_GetNumDevices Lib "FTD2XX.DLL" Alias "FT ListDevices" (....) As Long может возвратить значение. В случае успеха вернется 0. Константа ft_ok объявлена в Moduli.
Условный операт&р if опрашивает, успешен ли вызов, и если функция после вызова возвращает 0 (FT_OK), в окне вывода отображается количество устройств. Если значение не равно 0, то вызов был ошибочным, выдается сообщение об ошибке и тестовая программа завершается командой Exit sub.
5.6.	Другие вызовы функции
If FT_ListDevices(0,strBeschreibung,FT_LIST_BY_INDEX Or FT_OPEN_ BY_DESCRIPTION) <> FT_OK
If FT_ListDevices(O,strSerienNummer,FT_LIST_BY_INDEX Or FT_OPEN_ BY_SERIAL_NUMBER) <> FT_OK
Помимо описанного ранее вызова функции, который сообщает о количестве USB-устройств* FT ListDevices позволяет получить описание устройства или его серийный номер:
FT_ListDevices(0,strBeschreibung,FT_LIST_BY_INDEX Or_ FT_OPEN_BY_DESCRIPTION)
Параметр ft open by serial number называет серийный номер, который после вызова находится В строке strseriennummer:
FT_ListDevices(0,strSerienNummer,FT_LIST_BY_INDEX Or_ FT_OPEN_BY_SERIAL_NDMBER)
Строковые переменные strBeschreibung И strseriennummer ДЛИНОЮ ПО 256 символов содержат сведения о всех найденных USB-устройствах.
Приведенный пример программирования не вполне корректен. В качестве первого параметра функции (здесь 0 в качестве ID-устройства) он обращается только к первому USB-устройству. Если бы было подключено несколько FTDI-USB-устройств, то тогда нужно было бы сначала определить их количество и после этого привести отдельные описания:
Установление контакта
51
FT_ListDevices(0,strBeschreibungO,FT_LIST_BY_INDEX Or_ FT_OPEN_BY_DESCRIPTION)
FT_ListDevices(1,strBeschreibungl,FT_LIST_BY_INDEX Or_ FT_OPEN_BY_DESCRIPTION)
Код можно было бы также Обобщить и в отдельном вызове функции: в качестве первого параметра нужно было бы задать указатель (на Buffer Array), во втором параметре — установленное! число USB-устройств. Это следует принимать во внимание в случае, если вы разрабатываете собственные программы для сложной среды с несколькими USB-устройствами.
Если первым не стоит USB-адаптер с микросхемой FT232R от FTDI, перед тем как USB-устройство откроется для сообщения, просто наберите:
If Left$(strBeschreibung, 15) ,о "FT232R USB UART" Then strBeschreibung = Trim(Me.DeviceName.Text) & Chr(O) LoggerList.Additem ’’альтернативное устройство” End If
Описание FT232R USB UART получено из (изменяемого пользователем в тексте) поля формы DeviceName. Описание должно заканчиваться знаком 0. Этот 0 присоединяется С Chr (0) К строке описания strBeschreibung.
Если вы работаете с типом микросхемы FT232R от FTDI йли если даже меняете описание в EEProm, то нужно изменить описание устройства во время выполнения функции Gerat (устройство), чтобы можно было проверить эту тестовую программу.
5.7.	Вызовы функций
Если прикладная программа хочет обмениваться информацией с USB-уст-ройством, то для начала нужно открыть канал связи (листинг 5.2).
If FT_OpenEx(strBeschreibung, FT_OPEN_BY_DESCRIPTION, IngHandle) <> FT_OK Then
LoggerList.Additem. ’’Ошибка вызова: FT_OpenEx"
Exit Sub
Else
LoggerList.Additem ” устройство открыто: ” & Trim(strBeschreibung) End If
If FT_Close (IngHandle) <> FT_OK Then
LoggerList.Additem ’’Ошибка вызова: FT_Close”
Exit Sub
52
Глава 5
Else
LoggerList.Additem " устройство закрыто: " & Trim(strBeschreibung) End If
Устройство открывается При ПОМОЩИ FT_OpenEX (strBschreibung, FT_OPEN_ by_description, ingHandie) на основе описания в strBeschreibung. От операционной системы, если вызов функции был успешен, обратно получаем дескриптор. Это не что иное, как однозначный номер, который назначается операционной системой для связи. Этот номер находится в ingHandie, глобальной переменной, которая была объявлена в Moduli.
При каждом последующем' сообщении используется это значение ingHandie.
Однако вы можете открыть USB-устройство и при помощи серийного номера, если вторым параметром будет ft open by serial number, а первый содержит серийный номер. В качестве альтернативы можно использовать функцию FT_OPEN (ID, IngHandie) .
При помощи FT_ciose(IngHandie) сообщение завершается, для того чтобы снова освободить зарезервированные (операционной системой) ресурсы:
LoggerList.AddItem ’’Test erfplgreich beendet”
Теперь, когда все части первой демонстрационной программы были успешно рассмотрены, В окне вывода ПОЯВИТСЯ сообщение: Test erfolgreich beendet (тест успешно завершен).
ГЛАВА 6
Игры со светом
Как еще можно использовать стандартную конфигурацию микросхемы FT232R, кроме как для последовательного сообщения с другими микроконтроллерами?
Так как последовательные сигналы на соединительном штекере адаптера могут быть опрошены, или же выходы могут быть изменены, то существуют следующие возможности (рис. 6.1):
□ Сигналы TxD, RTS и DTR— это выходы, программируемые вызовом функций из FTD2XX.DLL. Состояния входов также можно опросить при помощи вызовов функций. Обзор последовательных сигналов интерфейса представлен в табл. 6.1.
USB
Stocker
Рис. 6.1
Таблица 6.1
Последовательный сигнал	
TxD	ВЫХОД
RxD	вход
RTS/	выход
CTS/	вход		
3 Зак. 1084
54
Глава 6
Таблица 6.1 (окончание)
Последовательный сигнал	
DTR/	ВЫХОД
DSR/	вход
DCD/	вход
RI	вход
□ Подключив выходные сигналы к ярким светодиодам, к примеру, можно построить собственный USB-осветитель для чтения и управлять им при помощи вашей программы.
6.1.	Включение светодиода
Попытаемся включить светодиод LED (нем. Licht emittierende Diode) на выходе DTR.
Важно
Перед каждым экспериментом отсоединяйте USB-адаптер от порта, чтобы не вызвать короткого замыкания питания USB!
Анод светодиода должен быть соединен с напряжением 5 В USB, а катод светодиода — с DTR. Светодиод горит только тогда, когда используется в прямом направлении. Анод должен быть положительнее катода. Рабочее напряжение 3-5-миллиметровых светодиодов лежит в границах от 2 до 3,5 В. Светодиод, таким образом, нельзя напрямую подсоединять к 5 В!
Анодный токопровод обычно длиннее, чем катодный. Аноды можно распознать по тому, что площадь анода в теле накала значительно меньше (рис. 6.2).
Дополнительное сопротивление не является необходимым, т. к. оно уже содержится в подводящем проводе DTR на USB-адаптере.
Рис. 6.2
Игры со светом
55
Рис. 6.3
На рис. 6.3 показано, как подсоединяется светодиод в штекерной колодке: анод светодиода — к 5 В (штырьковый вывод 20), а катод — к штырьковому выводу 1 (для соединительного мостика).
В качестве соединительного мостика вы должны вставить проволочную перемычку от DTR (штырьковый вывод 15) на штырьковый вывод 6.
Подсоедините USB-адаптер с дополнительной платой к вашему компьютеру. Если светодиод подключен правильно, то при инициализации (новой интеграции драйвера) светодиод многократно вспыхивает. Далее светодиод затухает.
Запустите программу bespiel_2.exe в каталоге Bsp_2 демонстрационных программ. Если вы щелкнете переключатель LED AN (светодиод ON), то светодиод должен загореться, а если нажмете на LED AUS (светодиод OFF) — погаснуть (рис. 6.4).
Исходный текст программ для второго примера можно найти в файле Bsp.VBP каталога Bsp_2. Следующие программы вызываются тогда, когда щелчком в поле формы выбраны LED AN или LED AUS:
Private Sub Optionl_Click(Index As Integer) ’при LED AN LED_Click (False) ’вызов LED_Click с параметром False End Sub
Private Sub Option2_Click(Index As Integer) ’при LED AUS
LED_Click (True) ’^ызов LED_Click с параметром True End Sub
Собственно выполнение описано в листинге 6.1.
56
Глава 6
Рис. 6.4
Private Function LED_Click(AnAus As Boolean) On Error GoTo LED_Click_fehler LoggerList.Clear
If FT_GetNumDevices (IngNumDevices, vbNull.String, FT_LIST_ BY_NUMBER_ONLY) <>FT_OK Then LoggerList. Additem (’’Ошибка: FT__GetNumDevices He функционирует”) Exit Function
Else
LoggerList.Additem (’’Количество USB-устройств: ” & IngNumDevices) End If strBeschreibung = Trim (Me. Devi ceName. Text) & Chr(O)
If FT_OpenEx (strBeschreibung, FT_OPEN__BY_DESCRIPTION, IngHandle) <> FT_OK Then
LoggerList.Additem ’’Ошибка вызова: FT_OpenEx" Exit Function Else LoggerList .Additem ”----”
End If If AnAus Then
If FT_ClrDtr (IngHandle) = FT_OK Then ’ = 5 V an DTR = LED aus LoggerList.Additem ’’LED aus” End If Else
Игры со светом
57
If FT jSetDtг(IngHandie) « FT_OK Then ’ = О V an DTR = LED an LoggerList.AddItem ’’LED an” End If End If If FT_Close(IngHandie) <> FT_OK Then LoggerList.AddItem ” Ошибка вызова: FT_Close" Exit Function Else LoggerList.AddItem ”----”
End If LED_Click_fehler_ende: Exit Function LED_Click__f ehler: MsgBox Err.Description Resume LED_Click_fehler_ende End Function
В зависимости от того, какая опция была выбрана, функция LED Ciick вызывается с параметром True (Истинно) или False (Ложно). Передаточное значение сохраняется в AnAus.
Большинство вызовов должны быть вам уже знакомы из прошлого примера. В отличие от первого примера при открытии устройства используется описание устройства FT232R USB UART непосредственно из поля формы DeviceName.
Если ANAUS (ONNOFF) ИМвеТ СОСТОЯНИв True, ТО происходит ВЫЗОВ FT ClrDtr (IngHandie). При этом DTR получает уровень напряжения USB 5 В, так что светодиод затухает. Не дайте сбить себя с толку названием cir (от англ. Clear): в этом случае напряжение не всегда равно О В!
Если anaus (onoff) имеет состояние False, то вызывается команда FT SetDr (ingHandie). При этом DTR подводится к О В. Сейчас через светодиод (и дополнительный резистор в DTR-проводе на USB-адаптере) проходит ток достаточный, чтобы он засветился.
6.2.	Переключение светодиода
Если в предыдущем примере анод светодиода был подведен к напряжению питания 5 В, а катод — к DTR-сигналу, теперь вы можете реверсировать поведение (режим работы) светодиода. Для этого подсоедините анод светодиода к сигнальному проводу DTR, а катод к "земле".
Так подсоединяется светодиод в штекерной колодке (рис. 6.5).
58
Гпава 6
Рис. 6.5
Анод светодиода подводится к DTR (штырьковый вывод 15), а катод к штырьковому выводу 6 (для соединительного мостика). Вы должны проложить соединительный мостик от штырькового вывода 3 к штырьковому выводу 4 при помощи проволочной перемычки на "землю" (GND). Только после этого соедините USB-адаптер с ПК.
Если заново вызвать программу beispiel_2.exe, то вы обнаружите обратную картину: при вызове FT CirDtr (ingHandie) DTR подводится к уровню напряжения USB в 5 В и поэтому светится.
6.3.	Еще вариант переключения
Так же, как и DTR_Signal, RTS-сигнал у последовательного интерфейса является выходом. Для того чтобы включить светодиод с сигнальным проводом RTS, нужно ЛИШЬ вместо ГГ_С1г И FT_SetDr вызвать функции FT_ClrRtS и FT SetRts. Не забудьте подсоединить светодиод к сигнальному проводу RTS (штырьковый вывод 17 штекерной колодки).
6.4.	Вспышка светодиода
Третий пример программы — это лишь небольшое развитие первого примера. Оно основывается на длительности кадра USB (1 миллисекунда).
Если от прикладной программы к USB-устройству посылается команда, следующая команда может следовать только через 1 мс (рис. 6.6). Внутри каждого из миллисекундных временных окон отправляется один из пакетов данных:
□	FtStatus - FT_SetDtr(lngHandle);
□	FtStatus = FT_SetDtr(lngHandle);
□	FtStatus = FT_ClrDtr(lngHandle).
Игры со светом
59
SetDTR SetDTR ClrDTR
Рис. 6.6
сигнальная линия DTR
1 мс и$В_кадры
Тип передачи USB-Bulk не гарантирует, что следом за кадром данных устройства передается кадр данных того же устройства, что порой может привести к продлению длительности свечения подсоединенного светодиода. Подробнее с этим режимом, который играет лишь второстепенную роль, вы познакомитесь в другом примере.
На рис. 6.7 светодиод в штекерной колодке подсоединяется от DTR к 5 В: анод светодиода подводится к 5 В (штырьковый вывод 20), а катод к штырьковому выводу 1 (для соединительного мостика). В качестве соединительного мостика вы должны проложить проволочную перемычку от DTR (штырьковый вывод 15) к штырьковому выводу 6 штекерной колодки.
Рис. 6.7
Только после этого присоедините USB-адаптер с дополнительной платой к компьютеру.
Запустите программу beispiel_3.exe в каталоге Bsp_3 демонстрационных программ (рис. 6.8).
Ползунок в нижней области формуляра предварительно установлен на 20 мс. Диапазон настройки (регулирования) составляет от 1 до 500 мс. Если приведена в действие кнопка LED Blitz (вспышка светодиода), то происходят 5 прогонов с 500-миллисекундными паузами, каждый раз с одной вспышкой заданной продолжительности свечения. Чем правее ползунок, тем дольше
60
Глава 6
будет длительность свечения светодиода. В крайнем правом положении отношение между включенным и выключенным светодиодом будет 1:1 (500 мс светится — 500 мс погашен).
Рис. 6.8
Если несколько миллисекунд вам покажутся продолжительнее, чем обычно, то причина здесь в инерции человеческого глаза.
Исходный код для третьего примера содержится в файле Bsp.VBP каталога Bsp_3.
Следующий фрагмент из кода программы отражает ход событий:
For i = 1 То 5
For il = 1 То Me. HScroll__PWM. Value
Ft Status = FT_SetDtr (IngHandie) ' dauert immer 1 Frame « 1ms
Next il
FtStatus = FT_ClrDtr(IngHandie) ’ LED aus
Sleep (500) ’ 500ms Sekunden warten
Next i
Внутри цикла no i, который будет проходить 5 раз, находится второй цикл по и. Число прогонов il зависит от настроенного значения ползунка. Каждый вызов функции FT_setDtr(ingHandie) позволяет пройти 1 мс (1 кадр).
После цикла путем вызова функции FT_cirDtr(IngHandie) происходит затухание светодиода, а с помощью sleep (500) добавляется время простоя, равное 500 мс.
Игры со светом
61
Программно-техническим способом можно было бы также вмонтировать таймер, который бы каждую миллисекунду проверял соответствующие состояния и действовал в соответствии с ними. Однако, предполагаем, что этот таймер достаточно быстро износится.
6.5.	Управление яркостью светодиода
Четвертый пример основывается на предыдущем, однако в немного другом ракурсе.
PWM (ШИМ)— это сокращение от Pulse Width Modulation (широтноимпульсная модуляция). ШИМ называют модуляцией сигнала прямоугольной формы при постоянной частоте (рис. 6.9).
5 В (25% коэффициент) ОВ
5 В (75% коэффициент) ОВ
(вкл
t выкл
20 мс
Рис. 6.9
При постоянной частоте (здесь 50 Гц = 20 мс) изменяется отношение времени включения ко времени выключения и, следовательно, среднее значение постоянного напряжения выходного сигнала. Если время включения t вкл одинаково по продолжительности со временем выключения I выкл, то коэффициент заполнения равен 50%, а среднее постоянное напряжение составляет ровно половину приложенного напряжения. Если коэффициент заполнения меньше, как показано в верхней характеристике, то средняя мощность меньше. Если коэффициент заполнения больше, как показано в нижней характеристике, то средняя мощность соответственно Дольше.
Таким образом, можно управлять яркостью светодиода, регулировать частоту вращения двигателя постоянного напряжения или так же смоделировать простой ЦАП.
ШИМ можно легко сгенерировать программно-техническим способом. Для начала нужно хотя бы раз произвести опыт.
Так подключается светодиод в штекерной колодке (рис. 6.10): анод светодиода подводится к 5 В (штекерный вывод 20), а катод к штырьковому выводу 1 (для соединительного мостика). В качестве соединительного мостика вы должны вставить проволочную перемычку от DTR (штырьковый вывод 15) к штырьковому выводу 6.
62
Глава 6
Рис. 6.10
Запустите программу beispiel_4.exe в каталоге Bsp_4 в демонстрационных программах.
Ползунок в нижней области формы (рис. 6.11) предварительно настроен на 1 мс. Диапазон настройки составляет от 1 до 19 мс. Если приводится в действие включатель LED PWM, то светодиод светится с малой яркостью. Чем дальше вы будете двигать ползунок направо, тем ярче будет светиться светодиод. В крайнем правом положении светодиод будет светиться постоянно. Вы можете заметить легкие колебания яркости: это объясняется тем, что передача данных по USB время от времени работает с перебоями, следовательно, при
Рис. 6.11
Игры со светом
63
пересылке сообщений (в режиме передачи типа Bulk) возникают промежутки между USB-кадрами.
Исходный код для четвертой демонстрационной программы содержится в файле Bsp.VBP каталога Bsp_4.
Следующий фрагмент из кода программы показывает ход событий:
For i = 1 То 200 шах 20 ms ftlr einen Durchlauf Schleife 1
For il « 1 To Me.HScroll_PWM,Value
FtStatus = FTjSetDtr (IngHandle) ' dauert imrner 1 Frame = 1 ms Next il
Schleife 2
For il = 1 To (Me.HScfoll_JPWM.Max - Me. HScroll_PWM. Value)
FtStatus « FT_ClrDtr(IngHandle) ' dauert immer 1 Frame = 1 ms Next il Next i
Внутри цикла i, который будет проходить 200 раз, находятся два других цикла il. Число прогонов первого цикла и зависит от настроенного значения передвижного регулятора. Если значение было настроено на 1, то при подстановке получится:
For il = 1 to 1
Светодиод включен. В следующем цикле светодиод выключается. Значение Me.HScroii_PWM.Max составляет 19. Второй цикл будет проходить 19 раз, если ползунок настроен на 1. В общей сложности прогон длится 20 мс. Если продвинуть ползунок далее направо, то увеличится число при первом прогоне циклов, лампочка светится дольше. Второй прогон циклов сократится пропорционально режиму выключения. Количество прогонов с 20 мс остается одинаковым, следовательно, и частота остается постоянной.
6.6.	Управление двухцветовым (DUO) светодиодом
Светодиоды различных конструктивных форм, цветов и мощностей могут иметь интегрированные функции, например, светосигнальный светодиод или светодиод с интегрированным добавочным резистором: Двойные светодиоды (DUO) имеют два цвета. Существуют двойные светодиоды как с тремя, так и с двумя контактами. Двойные светодиоды с тремя контактами зачастую имеют общий токопровод катода. Если напряжением питается один анод, то све
64
Гпава 6
тодиод, к примеру, светится красным цветом. Если питается другой анод, то светодиод горит другим цветом, например, зеленым. Если оба анода подсоединены одновременно, то красный и зеленый цвета смешиваются в оранжевый оттенок.
У двойных светодиодов, имеющих только два контакта, светодиоды включаются в корпусе антипараллельно (встречно-параллельно). Нужно реверсировать светодиод или обратить напряжение на контактах, чтобы образовать другие цвета светодиода.
Так как напряжение должно быть "повернуто" (вы же не хотите для получения второго цвета постоянно менять контакты светодиода), можно использовать для эксперимента сигнальные провода DTR и RTS.
Подключение светодиода представлено на рис. 6.12. Подключите двойной светодиод к RTS или DTR. На этот раз не нужно учитывать полярность светодиода. Соедините USB-адаптер с компьютером.
TxD
RxD
RTS
06
07
Рис. 6.12
•_ ли.
CTS OTR[ OSRf DCD
Запустите программу beispiel_5.exe в каталоге Bsp_5 демонстрационных программ (рис. 6ЛЗ).
Соответствующие сигнальные провода вы можете включить при помощи диалоговых полей DTR или RTS. Если оба диалоговых поля имеют одинаковое состояние, то светодиод остается темным.
Если активировано только поле DTR, светодиод светится одним цветом, а если активировано только поле RTS — то другим цветом.
Исходный код для пятой демонстрационной программы содержится в файле Bsp.VBP каталога Bsp_5.
Листинг 6.2 отражает ход событий.
Игры со светом
65
Рис. 6.13
Private Sub CbDtr_Click() LEDS_Click Me.CbDtr.Valuef True End Sub
Private Sub CbRts_Click()
LEDS_Click Me. CbRts. Value, False End Sub
Private Function LEDS_Click(AnAus As Boolean, DTRoderRTS As Boolean) ’ DTRoderRTS = True DTR или RTS
’ ANAUS = True сигнал на 5B
If DTRoderRTS Then
If AnAus Then
If FT_ClrDtr (IngHandle) »• FT_OK Then LoggerList.Additem "DTR сигнал на 5B" End If
Else
If FT_SetDtr(IngHandle) » FT_OK Then LoggerList.Additem '*DTR сигнал на OB" End If
End If
66
Глава 6
Else
If AnAus Then
If FT_ClrRts(IngHandle) = FT_OK Then LoggerList.Additem "RTS сигнал на 5B” End If
Else
If FT_ClrRts(IngHandle) = FT_OK Then LoggerList.Additem "RTS сигнал на 5B" End If
End If
End If
End Function
Функция LEDS_Click (AnAus Boolean, DTRoderRTS As Boolean) вызывается с различными параметрами, в зависимости от того, выбрал ли пользователь RTS или DTR. При следующем щелчке диалогового поля DTR активируется функция FT_ClrDtr(IngHandle) ИЛИ FT_SetDtr(IngHandle), а При щелчке диалогового ПОЛЯ RTS активируется функция FT_ClrRts(IngHandle) ИЛИ FT SetRts (IngHandle). Если было выбрано то или иное диалоговое поле, передаточное значение anaus истинно, и соответствующий сигнальный провод устанавливается на 5 В.
В зависимости от состояний сигнальных проводов DTR и RTS напряжение на светодиоде является обратным, и светодиод светится соответственным цветом.
6.7.	Мигающее светосигнальное устройство
В пятом примере подключите двойной светодиод, как в предыдущем примере, и соедините USB-адаптер с подключенной дополнительной платой с компьютером (рис. 6.14).
Подключите двойной светодиод к RTS или DTR. На этот раз не нужно учитывать полярность светодиода.
Если привести в действие кнопку Wechselblinker (переменный блинкер), то светодиод попеременно 5 раз мигнет соответствующим цветом. Исходный код примера 5 очень прост, и поэтому здесь изображен лишь его фрагмент:
For i% = 1 То 5 FT_ClrDtr (IngHandle) FT_SetRts (IngHandle)
Игры со светом
67
Sleep 500 FT_ClrRts FTJSetDtr Sleep 500 Next i
(IngHandie) (IngHandie)
DTR-сигнал в цикле сначала подводится к 5 В, после этого RTS-сигнал присоединяется к 0 В. Светодиод в этом случае светится одним цветом 500 мс. Затем RTS подсоединяется к 5 В, a DTR— к 0 В, светодиод светится 500 мс другим цветом. Этот процесс повторяется пять раз.
Рис. 6.14
6.8.	Включение выхода TxD
В основной конфигурации микросхемы FT232R выходы представлены не только сигналами DTR и RTS, но и TxD-сигналом последовательного интерфейса на рис. 6.15.
В программной документации FTDI вы будете напрасно искать вызов функции как FT SetTxd, ПО аНЭЛОГИИ С вызовами функций FT_SetDtr ИЛИ FT SetRts в предыдущих примерах. Для включения сигнального провода TxD вводятся ВЫЗОВЫ функций FT SetBreakOn, а также FT SetBreakOff.
Рис. 6.15
68
Гпава 6
Подключается светодиод в штекерной колодке так: анод светодиода — к штырьковому выводу 20 (5 В), а катод — к штырьковому выводу 19 штекерной колодки (TxD), как на рис. 6.16.
Рис. 6.16
Запустите программу beispiel_6.exe в каталоге Bsp_6 демонстрационных программ. Если щелкнуть кнопку TxD schalten (включить TxD), то светодиод должен загореться, а при повторном нажатии на TxD schalten он снова должен погаснуть.
Исходный код для шестой демонстрационной программы можно найти в файле Bsp.VBP каталога Bsp_6.
Следующий фрагмент из исходного кода изображает вызовы функций Break (прерываний):
If Me.CbTxD.Value Then
If FT_SetBreakOn(IngHandie) = FT_OK Then LoggerList.AddItem ’’Break ON — LED an?” End If
Else
If FT_SetBreakOff(IngHandie) = FT_OK Then LoggerList.AddItem ’’Break OFF” End If
End If
От состояния диалогового поля CbTxD зависит, вызывается ли функция FT SetBreakOn или же функция FT SetBreakOff, и, следовательно, включается или отключается светодиод.
Игры со светом
69
6.9.	Пример схемы светофора с тремя светодиодами
Предлагается при помощи трех выходных сигналов последовательного интерфейса — DTR, RTS и TxD — создать небольшую схему светофора с тремя разноцветными светодиодами в красном, желтом и зеленом цветах. В восьмом примере вы найдете "программный светофор". Немного сноровки — и теперь вам на основании предыдущих примеров удастся создать собственное ПО.
Красный светодиод подключен к катоду на TxD, желтый — к RTS, а зеленый — к DTR. Все аноды светодиода подведены вместе к USB-напряжению питания +5 В. В качестве соединительного мостика вы должны вставить проволочную перемычку от штырькового вывода 20 к штырьковому выводу 1, как на рис. 6.17.
Рис. 6.17
Присоедините USB-адаптер с подключенной дополнительной платой к ПК. Исходным пунктом является красный свет светофора: красный светодиод должен быть включен, все остальные — выключены. Ход процесса легче всего представить в виде таблицы (табл. 6.2), с повторением уровней.
Таблица 6.2
Уровень	Сигнал	Процесс	Вызовы функций
1	е о о	(желтый и зеленый светодиоды выключены) красный — включен	FT_ClrRts FT_ClrDtr FT_SetBreakOn
70
Глава 6
Таблица 6.2 (окончание)
Уровень	Сигнал	Процесс	Вызовы функций
2	• о	дополнительно включить желтый светодиод	FTJ5et-Rts
3	о о	выключить красный и желтый светодиоды и включить зеленый светодиод	FT_ClrRts FTjSetBreakoff FT_SetDtr
4	о о	выключить зеленый и включить желтый светодиод	FT_ClrDtr FT_SetRts
1	оо*	желтый светодиод выключить, а красный — включить	FT_ClrRts FT_SetBreakOn
Между отдельными фазами нет простоев, которые преобразуются при помощи уже известной функции sleep или таймера.
6.10.	Пример схемы USB-осветителя для чтения
Точно так же, при помощи трех сигналов выхода DTR, RTS и TxD, можно соорудить USB-осветитель для чтения. Подключите дополнительно или отключите каждый отдельно взятый светодиод при помощи разработанных вами программ. В данном случае на компакт-диске нет демонстрационного ПО, но последовательность одинаковых вызовов функций, как при схеме светофора, вы довольно быстро сможете воспроизвести своими руками.
Вы можете подвести все катоды светодиодов вместе к "земле" (а также к штырьковому выводу 2 соединительного штекера) и соединить выходные сигналы. Так как выходные сигналы USB-адаптера обладают сопротивлением, то возможно прямое присоединение светодиодов на рис. 6.18.
Совет_____________________________________________________
Во многих магазинах радиоэлектронных товаров и дискаунтерах (магазинах, продающих товары очень дешево) можно приобрести относительно недорогие "встроенные лампы" с двумя или тремя светодиодами, которые можно легко перестроить.
Если вы интересуетесь светодиодами, то найдете далее небольшой пример схемы для измерения яркости при помощи светодиода в качестве элемента солнечной батареи.
Игры со светом
71
Можно разработать увлекательные схемы (например, так называемого solar tracker) или провести очень точные измерения яркости. Благодаря двум антипараллельно подключенным светодиодам можно определить происхождение источника света.
Рис. 6.18
о
GND
Рис. 6.19
В соединении с микроконтроллером отдельный светодиод может послужить в качестве источника света и одновременно в качестве сенсорного датчика света (рис. 6.19).
Если управляющий электрод G BF245 не был проведен (или не был присоединен) к ’’земле", то тогда светятся показания светодиода 1 (LED1). Чем больше будет UGS, тем больше FET будет переходить в состояние отсечки (запретное состояние). Отрицательное напряжение UGS будет просто генерироваться по 2 или 3 светодиодам "солнечных элементов". В зависимости от положения солнца UGS будет соответственно отрицательным и показание Либо гаснет, либо Светится в темноте. При помощи конденсатора, подключенного параллельно светодиодам солнечных элементов, можно настроить время задержки включения и выключения. Прямая перестановка (без других элементов), однако, все же потерпит неудачу из-за слишком низкого входного сопротивления сигнальных проводов.
ГЛАВА 7
Опрос входов
Сигналы DCD, DSR, R1 и CTS являются цифровыми входами, которые опрашиваются в программе благодаря вызову функции в FTD2XX.DLL (рис. 7.1).
Рис. 7.1
Эти входные сигналы имеют в микросхеме FT232R напряжения питания USB внутренние сопротивления 200 кОм. Если вход не подсоединен, то к соответствующему входу по внутреннему сопротивлению прилегает 5 В.
Отсюда напрашивается простое использование системы аварийной сигнализации. Обычно аварийные сигнализации контролируют не запирание, а размыкание (закрытой) электрической цепи. Этого можно достичь при помощи микросхемы FT232R, используя простую проводную связь от одного из входов к '’земле” и таким образом подводя соответствующий вход к 0 В. Если проводная связь прерывается, то на выходе вновь 5 В, и в прикладной программе срабатывает сигнал тревоги.
Первая попытка опросить входной сигнал CTS: отсоедините U SB-адаптер от USB-штекера вашего компьютера. Линию CTS при помощи соединительного провода подведите к "земле". Этот соединительный провод должен представлять собой закрытый переключатель, т. е. замкнутую электрическую цепочку к "земле".
Опрос входов
73
От штырькового вывода 16 к штырьковому выводу 4 вы должны провести соединительный провод к "земле" (GND) (рис. 7.2).
Рис. 7.2
Присоедините USB-адаптер с подключенной дополнительной платой к ПК. Запустите программу beispiel_7.exe в каталоге Bsp_7 демонстрационных программ.
Если вы нажмете кнопку Signale abfragen (опросить сигналы), должно активироваться только диалоговое поле CTS Alarm Leitung 1 (линия сигнала 1). Другие диалоговые поля остаются не активированными, т. к. они связаны с 5 В. Если вы теперь удалите проволочную перемычку и вновь нажмете кнопку Signale abfragen (опросить сигналы), то CTS снова деактивируется, что равнозначно срабатыванию сигнала тревоги (рис. 7.3).
При помощи других входных сигналов DSR, DCD и RI вы можете проводить дальнейшие эксперименты. Однако при этом будьте осторожны: вы не должны вызвать короткое замыкание от штырькового вывода (или вывода 10) напряжения питания USB к земле!
Исходный код для седьмой демонстрационной программы находится в файле Bsp.VBP каталога Bsp_7 (листинг 7.1). Следующие программы вызываются в том случае, когда нажимается кнопка Signale abfragen в VB-форме:
Private Sub bt_Eingang_abfragen_Click()
IF FT_GetModemS tat us (IngHandle, Modemstatus) <> FT_OK Then
LoggerList.Additem '’ошибка вызова:
FT_GetModemStatus ”
Else
Me.Cb_cts.Value = (ModemStatus And &H10) / &H10
Me.cb_dsr.Value = (ModemStatus And &H20) / &H20
74
Гпава 7
Me.cb_ri.Value = (ModemStatus And &H40) / &H40
Me.Cb_dcd.Value = (Modemstatus And &H80) / &H80 End If
End Sub
Рис; 7.3
Вызов функции FT_GetModemstatus показывает состояние соответствующих сигнальных проводов в возвращенном значении Modemstatus в отдельных битах. Они должны быть опрошены по одному и далее обработаны (рис. 7.4), как в листинге 7.2.
^СР|[нГ1 |ds^ lets! ПЛ £х "D71 D6l- I D5| ID41
X X = статус модема, последние 8 битов
DO = биты данных
О О
0	1	0
0
0J 0 |= маска &Н10 (НЕХ10) = 10 в шестнадцатеричной системе
Рис. 7.4
Private Sub bt_Eingang_abfragen_Click()
IF FT_GetModemStatus(IngHandie, ModemStatus) <> FT_OK Then
LoggerList.Additem "Ошибка вызова: FT GetModemStatus"
Опрос входов
75
Else
Me.Cb_cts.Value =' (Modemstatus And &H10) / &H10
Me.cb_dsr.Value = (ModemStatus And &H20) / &H20
Me.cb_ri.Value = (ModemStatus And &H40) / &H40
Me.Cb_dcd.Value « (ModemStatus And &H80) / &H80 End If
End Sub
В качестве примера ми рассмотрим обработку CTS немного подробнее. CTS управляется битом данных D4. При помощи (Modemstatus And &Н10) бит данных D4 в Modemstatus с битом данных D4 в маске &Н10 логически связывается посредством логического И. При логической операции И оба бита должны иметь значение 1, чтобы результат был равен 1 или не был равен О (рис. 7.5). Если CTS равняется 0, то результат также остается равен 0, диалоговое поле cbcts деактивировано.
CTS = 0:
о
= CTS = о
о о
о
1	0	0	0	0 - маска &Н10
(ГО
ООО
0	0	0 = результат = 0
Рис. 7.5
Только когда CTS имеет значение 1, в качестве результата также получают 1. Результатом из (Modemstatus And & ню) было бы в данном случае ЧИСЛО 16 (10 в шестнадцатеричной системе). Для того чтобы результат при диалоговом поле cb_cts мог быть использован Так же, как и значение 1, нужно еще произвести деление маской &Н10 (рис. 7.6).
CTS = 1:
= CTS - о
Рис. 7.6
Другие сигналы DCD, RI и DSR в соответствии с положением бита в Modemstatus маскируются с &Н80, &Н40 и &Н20.
76
Гпава 7
7.1.	Система сигнализации
По щелчку Aiarmanlage (сигнальное устройство) входные сигналы будут периодически опрашиваться. Если сигнальные линии CTS, DCD, RI или DSR связаны с "землей", то соответствующая электрическая цепочка замкнута, а соответствующее диалоговое поле активировано. При прерванной цепи тока обозначение соответствующего диалогового поля отображается красным цветом, диалоговое поле деактивировано. Сигнальные линии опрашиваются таймером 1 (Timerl), который запускается нажатием кнопки Aiarmanlage с промежутками по 500 мс. Фрагмент из исходного кода в примере 7 приведен в листинге 7.3.
Private Sub Timerl_Timer ()
If FT_GetModemStatus (IngHandle, ModemStatus) <> FT_OK Then LoggerList.Additem ’’Ошибка вызова: FT_GetModemStatus” Else
Me.Cb_cts.Value = (ModemStatus And &H10) / &H10
Me. Cb_cts. ForeColor. = 0 ’ по тревоге красный
If Me.Cb_cts.Value = False Then'Cb__cts.ForeColor = 255
Me.cb_dsr.Value = (ModemStatus And &H20) / &H20
Me.cb_dsr.ForeColor - 0
If Me.cb_dsr.Value = False Then cb_dsr.ForeColor = 255
Me.cb__ri.Value = (ModemStatus And &H40) / &H40
Me.cb_ri.ForeColor = 0
If Me.cb_ri.Value = False Then cb_ri.ForeColor = 255
Me.Cb__dcd.Value = (ModemStatus And &H8Q) / &H80
Me.Cb_dcd.ForeColor =0
If Me.Cb_dcd.Value = False Then Cb_dcd.ForeColor = 255
End If
.. End Sub
Bee 500 мс разветвляются в подпрограммы таймера 1 (Timer 1). Чтобы можно было изобразить состояние сигнализации в цвете, анализируется соответствующее состояние сигнальных линий и меняется цвет, при известных условиях от 0 до 255 (красный цвет).
Таймер 1 (Timer 1) запускается или останавливается, когда срабатывается кнопка Aiarmanlage (листинг 7.4).
Опрос входов
77
Private Sub bt_alarm_Click()
If TimerIstAn Then
Me.bt_alarm.Caption - "Alarmanlage"
Me.Timerl.Interval = 0
TimerlstAn = False <
LoggerList.Additem ("Alarmanlage ausgeschaltet")
Me.lb_anzeige.Visible = False
Me.lb_impulse.Visible = False Else
Me. bt_alarm. Caption = "Alarm aus"
Me.Timerl.Interval = 500
TimerlstAn = True
LoggerList.Clear
LoggerList.Additem ("Alarmanlage scharf geschaltet")
Me.lb_anzeige.Visible = True
Me. lb_impulse. Visible = True End If
End Sub
При первом запуске подпрограммы свойство TimerlstAn принимает значение True, а интервал таймера установлен на 500 мс. Одновременно с этим высвечиваются другие сведения пользователя (ib anzeige и ib imbuise). Кнопка переименовывается в Alarm aus (сигнал тревоги выключен).
Новое приведение в действие кнопки останавливает таймер и обнуляет свой-СТВО TimerlstAn.
7.2.	Аварийный счетчик импульсов
У каждого сигнала тревоги на линии CTS аварийный счетчик импульсов повышается на величину 1. Для этого предыдущее состояние сигнальной линии сохраняется в bcts vorher и сравнивается с текущим состоянием сигнальной линии CTS (диалоговое поле cb cts). Эта сверка (сравнение) требуется тогда, когда должно быть подсчитано срабатывание сигнала тревоги и, как в данном случае, должно быть задокументировано время срабатывания. Подходящий для этого фрагмент из исходного кода в примере 1 приведен в листинге 7.5.
78
Глава 7
Private Sub Timerl_Timer ()
. Me.Cb_cts.Value = (ModemStatus And &H10) / &H10
Me.Cb_cts.ForeColor « 0
' по тревоге красный
If Me.Cb_cts.Value - False Then Cb^cts.ForeColor « 255 ’счетчик тревог, только если отличается от предыдущего If bcts_vorher = True And Me.Cb_cts.Value = False Then {4e.tb_.impulse.Text = Str (Vai (Me. tb_impulse.Text) + 1) Me.LoggerList.AddItem "Alarm urn " & Time() End If
bcts__vorher = Me. Cb_cts. Value
Me.cb_dsr.Value « (ModemStatus And &H20) / &H20
Me.cb_dsr.ForeColor • 0
If Me.cb_dsr.Value = False Then cb_dsr.ForeColor « 255
• •
End Sub
Каждый раз, когда вы удаляете проволочную перемычку для сигнальной линии CTS, замечается изменение состояния и документируется время изменения. Если теперь вы снова подключите проволочную перемычку к сигналу CTS, ничего не произойдет.
7.3.	Пример схемы системы охранной сигнализации
На практике в линиях сигнала тревоги используются герконы (герметизированные магнитоуправляемые контакты). В магнитном поле герконовый переключатель выключен (заперт). Если магнитное поле удаляется, то геркон открывается. У окон и дверей целесообразно прикрепить постоянный магнит к подвижному элементу (рис. 7.7).
Геркон должен быть установлен, конечно же, в непосредственной близости к постоянному магниту, чтобы электрическая цепь при закрытом окне все равно была замкнута.
Постоянные магниты и герконы представлены на рис. 7.8 (постоянный магнит для установки), рис. 7.9 (переключатель герконов для установки) и рис. 7.10 (геркон в стеклянном корпусе).
Опрос входов
79
Геркон
Магнит
Дверное полотно
Дверной проем
Рис. 7.7
Рис. 7.9
Рис. 7.10
Рис. 7.8
Совет____________________________________________________________
Во многих дискаунтерах для окон и дверей предлагаются довольно недорогие мини-системы охранной сигнализации, которые зачастую можно быстро перестроить для данной цели.
Так могла бы выглядеть электрическая схема вашей самостоятельно собранной системы сигнализации для вашего компьютерного пространства (рис. 7.11):
□	4 геркона для двери, окна, выдвижного ящика стола, шкафа с компакт-дисками или замка-выключателя, который активирует сигнализацию;
□	2 реле (5 В, 20 мА), например для присоединения к сигналу тревоги телефонной электроцентрали с тихим сигналом и опускной двери вашего шкафа с компакт-дисками или звукового сигнала тревоги;
□	яркий светодиод, для того чтобы взломщик не остался в темноте.
Собранная вашими руками охранная сигнализация вашего компьютерного пространства при использовании дополнительной платы могла бы выглядеть так, как показано на рис. 7.12.
80
Глава 7
GND GND	GMD
РИС. 7.11
Рис. 7.12
Уже при помощи первых примеров этой книги вы можете самостоятельно подбирать и создавать программы для обработки, оценки и реакций в случае сигнала тревоги. Конечно же, для случая сигнала тревоги вы можете сделать так, чтобы вместе со временем сигнала тревоги фиксировался и фоновый протокол.
7.4.	Здесь ли кошка?
Что вы думаете об электронной проверке откидной дверцы для кошки для узнавания привычек вашей кошки?
Вам понадобится для данного эксперимента по одному геркону как внутри, так и снаружи откидной дверцы для кошки. Контакты изначально открыты и замыкаются лишь тогда, когда откидная дверца двигается. Если вы хотите
Опрос входов
81
немного поэкспериментировать, то сами сможете сделать необходимые изменения в имеющемся примере. Для ваших экспериментов вы можете использовать пример 12 (периодическое чтение входов в режиме Bit Bang).
Внимание!______________________________________________________
Если вы работаете с реле на выходной стороне с напряжениями > 24 В? то в случае ошибки речь может пойти об опасности для жизни или огнеопасности!
7.5.	Осторожно: вода
Для цифровой обработки в качестве 0 или 1 сигнал должен иметь ровно О В или 5 В на входе. Существуют пороги, которые на входе сигнала могут быть превышены или не превышены. При напряжении питания 5 В пороги переключения у микросхемы FT232R лежат между 1,3 и 1,9 В, стандартно — при 1,6 В. Если входное напряжение лежит в этой пороговой области, то может быть интерпретировано в качестве 0 или 1. При напряжении ниже 1,3 В гарантированно обнаруживается уровень LOW (низкий), при напряжении выше 1,9 В гарантированно обнаруживается уровень HIGH (высокий).
У цифровых выходов высокий уровень микросхемы FT232R имеет стандартное напряжение 4,1 В (3,2-4,9 В, при 6 мА потребителя). Низкий уровень обычно составляет около 0,4 В (0,3-0,6 В).
Если на входе, как в примере с системой сигнализации, переключатель подключен к "земле", то напряжение точно будет лежать ниже 0,3 В. Так как входы в микросхеме FT232R внутренне имеют сопротивление 200 кОм для напряжения питания, можно определить сопротивление, чтобы на входе был обнаружен низкий уровень. Сопротивление на входе должно, при пренебрежении других факторов, лежать ниже 70 кОм, чтобы низкий уровень был распознан микросхемой FT232R. На практике обнаруживается, что сопротивление около 65 кОм создает низкий уровень.
Для тестирования подходит седьмой пример сигнала тревоги (рис. 7.13).
Присоедините USB-адаптер с подключенной дополнительной платой к ПК (рис. 7.14).
Щелкните сигнал тревоги в Programmbeispiel_7.exe. Когда вы накоротко замкнете концы проводов, то вы увидите, что в программе активируется сигнал CTS.
Если вы подержите оба изолированных конца проводов на расстоянии нескольких миллиметров между большим и указательным пальцами, то CTS-сигнал все еще будет активирован. Сопротивление в этом случае будет менее 70 кОм. При необходимости увлажните пальцы, если система не будет функ-
82
Глава 7
ционировать. Из медицинского опыта значение сопротивления поверхностного слоя от 600 кОм до 1 МОм означает сбалансированное энергоснабжение, очень низкое значение закончится перекислением и нагрузкой, но не бойтесь: здесь это объясняется влажностью.
Vcc 5В
Ve1,3Vt (напр.: к CTS)
Rx ?
Рис. 7.13
Рис. 7.14
Как известно, вода тоже проводит: если вы погрузите два изолированных конца провода в наполненный стакан, то сигнал CTS все равно будет активирован. Теперь вы знаете, как при помощи вашего USB-компьютера можно наблюдать за состоянием воды в вашем аквариуме, бассейне или стиральной машине!
7.6.	Светло или темно?
LDR (Light Dependent Resistor)— это светочувствительный фоторезистор. LDR используются в автоматах уличного освещения или в качестве датчиков в светоячейках. Чем больше света падает на светочувствительный фоторезистор, тем меньше будет сопротивление и тем больше будет электрический ток. При темноте LDR обладает высоким сопротивлением в несколько мегаом, при освещенности — электрическим сопротивлением несколько меньшего значения килоом. Изменение сопротивления вы можете тестировать, как и в предыдущем примере.
Подключите светочувствительный фоторезистор к штырьковому выводу 16 и выводу 11 штекерной колодки.
Соедините USB-адаптер с подключенной дополнительной платой к ПК (рис. 7.15).
Опрос входов
83
Рис. 7.15
Запустите сигнал тревоги в Programmbeispiel_7.exe. Как видите, при достаточном освещении в программе тотчас активируется сигнал CTS, сопротивление LDR составляет менее 70 кОм. Если вы в достаточной степени затемните LDR, то сигнал CTS когда-нибудь деактивируется, т. к. с возрастающей затемненностью значение сопротивления становится больше.
Если вы хотите сократить светочувствительность, измените угол падения света с помощью отверстий в картоне разного размера перед LDR. В соединении с USB-лампой для чтения светодиоды с LDR включаются автоматически.
7.7.	Расширение аварийной сигнализации фотоячейкой
Каждый геркон аварийной сигнализации в разд. 7.1 вы также можете заменить LDR или фотодиодом. Фотоэлемент можно осветить светодиодом или
Рис. 7.16
84
Глава 7
недорогой лазерной указкой. Пока луч света не будет прерван, фотоэлемент будет иметь незначительное сопротивление. Если луч света прерывается (или лазерная указка выходит из строя), вы получите аварийную сигнализацию (рис. 7.16).
7.8.	Более точное определение сопротивления LDR
Для автомата уличного освещения или фотоячейки может быть использован предыдущий пример. Однако что нужно сделать, если в наступающей темноте хочется включить первую лампу, а при темноте и вторую лампу? Для такого подключения потребуется лучшая обработка изменений сопротивления светочувствительного фоторезистора. Можно было бы, к примеру, внедрить в практику аналого-цифровой преобразователь, который из соответствующего аналогового значения яркости генерировал бы эквивалентное цифровое значение. Но зачем же сразу стрелять из пушек по воробьям? Существуют и более простые решения, о которых пойдет речь далее.
Если соединить емкость С по сопротивлению R с напряжением питания V, то напряжение V на конденсаторе будет повышаться экспоненциально от начального до конечного значения (рис. 7.17).
Рис. 7.17
Время заряда зависит лишь от размера конденсатора С и сопротивления R. Время заряда длится тем дольше, чем больше емкость С конденсатора и чем больше сопротивление R. Произведение конденсатора С и сопротивления R определяется в качестве временной константы т.
Во время длительности т напряжение каждый раз увеличивается в 0,63 раза относительно разности до конечного значения. После первого отрезка времени т напряжение на конденсаторе составляет 63,2% от входного напряжения,
Опррс входов 85
после второго т — 86%, после 5 т — на конденсаторе почти полное напряжение.
Кривая напряжения Vc на конденсаторе следует уравнению:
Vc = V х (1 - e4T/RC)).
V — это входное напряжение. Если сформулировать проще: когда подводишь напряжение через зарядное сопротивление к конденсатору, то конденсатор заряжается дольше. Если зарядное сопротивление мало, то подводимое напряжение достигается очень быстро. При большом зарядном сопротивлении оно длится соответственно дольше. Для лучшего понимания вы можете вызвать программу RC_e_Funktion.exe в каталоге Beispielprogramme\e-funktion на компакт-диске. Это "интерактивная диаграмма", разработанная проф. Рюдигером Хартвигом, которую он любезно предоставил в качестве небольшой забавной игры. Здесь речь идет о наглядности описанной до этого функции V(T) со значениями R и С в показателе степени е-функции. Значения R и С вы должны ввести в обоих полях слева. После ввода значений щелкните Neuzeich (перерисовка), и в диаграмме будет изображена соответствующая характеристика (кривая) функции. При помощи курсора мыши вы можете в желтых полях выбрать значения для Т или V (рис. 7.18).
4 Зак. 1084
Рис. 7.18
86
Глава 7
Значения могут быть рассчитаны в диаграмме, а также в маленьких полях. Так почти сразу удается определить, сколько миллисекунд пройдет до того, как — при заданных значениях R и С — напряжение достигнет определенной величины. Путем экспериментирования с различными заданными величинами R или С можно быстро получить представление влияния различных величин.
По LDR конденсатор при освещенности заряжается быстро, а при темноте — медленно. Для заряда требуется выходной сигнал на USB-адаптере. В данном случае используется TxD-сигнал. Измерение времени происходит при помощи входного сигнала CTS. Если конденсатор С1 (ЮОмкФ) на выходе TxD, который напрямую соединен с входом CTS, в выходном состоянии не заряжен, то сигнал CTS находится на уровне LOW (низкий).
Если напряжение на конденсаторе когда-нибудь перейдет порог переключения на входе CTS, то сигнал CTS меняется с состояния LOW на состояние HIGH (высокий).
Измерение текущей освещенности в момент времени представлено на рис. 7.19.
+5 в
Рис. 7.19
Указание_________________________________________________________
Конденсатор заряжается не только через сопротивление светочувствительного фоторезистора LDR, но и по 200-кило0мным внутренним сопротивлениям CTS-и TxD-контактов.
Общий ход программы очень прост. Заряд конденсатора и измерение времени запускаются циклически при помощи таймера.
Подключите LDR к штырьковому выводу 1 и штырьковому выводу 20 штекерной колодки. 100-микрофарадный электролитический конденсатор под
Опрос входов
87
ключается к штырьковому выводу 4 и положительным полюсом присоединяется к штырьковому выводу 3. От CTS и TXD в качестве соединительного мостика вы должны воткнуть две проволочные перемычки. Присоедините USB-адаптер с подключенной дополнительной платой к ПК (рис. 7.20).
Запустите программу beispiel_10.exe в каталоге Bsp lO демонстрационных программ. Нажатием кнопки Start начинается цикличное измерение в интервале 500 мс. Нажатием кнопки Stop измерение заканчивается. Если во время измерения вы немного затемните рукой LDR, то ползунок сдвинется вправо, а с возрастающей освещенностью — влево (рис. 7.21).
Рис. 7.20
Рис. 7.21
88
Гпава 7
Исходный код для десятого примера содержится в файле Bsp.VBP каталога Bsp_l 0.
Подпрограмма (представлена в листинге 7.6) вызывается в том случае, если нажимается кнопка Test в форме VB.
Private Sub bt_test_Click() Me.Timerl.Interval s 1000 End Sub
Каждую секунду подпрограмма таймера 1 (Timerl-Routine) разветвляется (листинг 7.7).
Private Sub Timerl_Tiraer () On Error GoTo Timerl_fehler CtsMask = &H10 MeinZaehler = 0
FT_SetBreakOff IngHandie ’ Elko загрузить
WartenAufC£s:
Ft Status « FT_GetModemStatus (IngHandie, ModemStatus) If (ModemStatus And CtsMask) Then ’ единица ?
MeinZaehler = MeinZaehler + 1
GoTo WartenAufCts
End If
If MeinZaehler > Me.HScrolll.Max Then MeinZaehler » Me.HScrolll.Max
Me.HScrolll.Value » MeinZaehler
FT_SetBreakOn IngHandie ’ Elko перезагрузить Sleep 20
End Sub
Путем вызова функции rr setBreakOf f сигнал выхода TxD подводится на 5 В и запускается процесс заряда 100-микрофарадного конденсатора. Затем счетчик MeinZaehler повышается на 1 так долго, пока вызов функции FT_GetModemStatus (IngHandie, ModemStatus) В статусе модема возвращает высокое состояние входного сигнала CTS.
Показания счетчика передаются для визуализации на передвижной регулятор HScrolll. Вызов функции FT SetBreakOn разряжает конденсатор для следую
Опрос входов
89
щего измерения. Иногда передвижной регулятор резко двигается влево: налицо замедление при передаче данных USB. USB-трансляция приостанавливается, конденсатор заряжается дальше, а счетчик не считает заряд высоким, T. К. замедляется ВЫЗОВ функции FT_GetModemStatus.
Тип передачи данных Bulk микросхемы FT232R не задуман для критических по времени трансляций. Это поведение можно ускорить, если сократить периодические опросы, например, с 1 000 до 200 мс.
В программе это происходит или благодаря образованию среднего значения, или, как в данном случае, благодаря простой сверке. Сумерки наступают не внезапно, а постепенно (листинг 7.8).
If ((MeinZaehler < Me.HScrolll.Value • 0.9) And (bNichtgezShlt = Ifalse)) Then bNichtgez^hlt « True Else
Me.HScrolll.Value = MeinZaehler bNichtgezShlt = False End If
ГЛАВА 8
Управление кварцевыми часовыми механизмами
Есть ли у вас аналоговый кварцевый часовой механизм или недорогой кварцевый будильник?
В этой главе мы покажем, как в кварцевом часовом механизме вы после небольшого преобразования можете управлять катушкой, которая создает магнитное поле для вращательного движения постоянно вращающегося магнита. При собственных экспериментах используемый ходовой механизм мог бы идти в 15-20 раз быстрее. Как насчет электронной игры с секундной стрелкой кварцевого часового механизма или вокзальных часов в качестве индивидуального счеТчика (числа) часов работы для вашего ребенка?
Будьте осторожны при разборке часового механизма. Очень часто, когда удаляешь заднюю стенку, сразу выпадают ведущие шестерни. Тогда будет сложно снова правильно собрать часовой механизм.
В кварцевом будильнике можно найти, помимо различных электронных частей, вращающийся магнит, который может поворачиваться в магнитном поле катушки и приводит в действие ведущие шестерни. У так называемых "отстающих" часов другим является только передаточное отношение. В этом случае за одну секунду секундная стрелка двигается на 5-6 позиций дальше, вместо 1 позиции за одну секунду. Достоинство довольно скоро становится "ползущим" недостатком, потребление тока — значительно больше, а батарея намного быстрее разряжается.
8.1. Подключение катушки
Нужно в кварцевом часовом механизме (рис. 8.1) припаять два провода напрямую к двум контактам катушки, которая создает соединение с U SB-адаптером (рис. 8.2).
Управление кварцевыми часовыми механизмами
91
Рис. 8.1
Рис. 8.2
Новые провода напрямую соединяются с катушкой на маленькой плате и при помощи проделывания небольшой дырочки выводятся наружу. Если провода не подсоединены к USB-адаптеру, то кварцевый часовой механизм — после перестройки еще работоспособный — может и далее питаться при помощи батареи. Для этого эксперимента батарея в кварцевом часовом механизме не требуется!
Магнитное поле катушки создастся в воздушном зазоре благодаря подводке напряжения. При этом постоянно вращающийся магнит в воздушном зазоре ориентируется на магнитное поле катушки. Это хорошо для первого такта, но в следующем шаге магнит должен вращаться дальше. Этого можно добиться у часового механизма благодаря реверсированию напряжения на катушке (см. разд. 6. 6).
Соедините соединительными проводами катушку со штырьковым выводом 17 (RTS) и штырьковым выводом 15 (DTR) штекерной колодки (рис. 8.3).
Рис. 8.3
Для продолжительной работы нужно вставить дополнительное сопротивление от 100 до 500 Ом в одну из двух линий, чтобы катушка не была перегру-
92
Гпава 8
жена. Вообще при кратковременном экспериментировании это сопротивление не требуется. Присоедините теперь USB-адаптер с дополнительной платой к ПК.
8.2. Программное обеспечение
Запустите программу beispiel_9.exe в каталоге Bsp_9 демонстрационных про грамм. Он близок по коду к примеру 5 для двойных светодиодов, однако были дополнения для регулировки выдержки времени.
В поле Impulsdauer вносится продолжительность импульса, в Impuls-abstand — интервал между импульсами, a Anzahl Durchlaufe — количество прогонов (проходов) циклов. Десять прогонов соответствуют примерно 20 секундам, когда продолжительность импульса настроена на 100 или интервал между импульсами 400, т. к. оба этих значения складываются.
Если нажата кнопка Test, то ваш часовой механизм должен двигаться 20 секундных тактов (рис. 8.4).
Рис. 8.4
Как можно использовать данную программу, например, для электронной игры? Если вы сократите длительность импульсов в интервале 10-40 и выберете интервал между импульсами равным нулю, то ваши часы будет идти нестабильно, иногда даже в обратном направлении. Если повысить число прогонов, то может случиться, что секундная стрелка несколько раз произвольно поменяет свое направление.
Управление кварцевыми часовыми механизмами
Удалите минутную и секундную стрелки из вашего часового механизма — и вперед: при каждом нажатии кнопки Test секундная стрелка будет произвольно останавливаться в неожиданном положении.
Хрипение или звучание?__________________________________________
Вместо катушки подключите пейджер (если у вас он имеется) из кварцевого часового механизма. Удастся ли вам точно так же сгенерировать сигнал тревоги будильника по USB?
ГЛАВА 9
Bit Bang — USB усиливает темпы
До этого вы познакомились с возможностями последовательных сигналов интерфейса микросхемы FT232R. В распоряжении имелись только предопределенные входы и выходы последовательного порта. Однако происходит иначе, когда микросхема включается в так называемом режиме Bit Bang. Этот режим уже встречался и в некоторых предыдущих версиях FTDL Режим Bit Bang разрешает двунаправленно использовать восемь линий I/O микросхемы FT232R. Каждая линия I/O может быть подведена отдельно как на вывод (Output), так и на ввод (Input). Дополнительно наличествуют другие CBUS-линии Bit Bang, которые также могут быть двусторонне использованы. Сигналы CBUS не используются у USB-флэш-адаптера. Передача байтов (Byte-Transfer) на сигналах CBUS ограничена USB-кадрами, и соответственно, медленная.
Скорость передачи данных при режиме Bit Bang определяется тактовой скоростью бод-генератора и составляет кратные 16 скорости передачи в бодах.
При скорости передачи, равной 9600 бод, теоретическая передача данных составляет 9600х 16 байт/с = 153600 байт/с, один байт за каждые 6,5 мкс.
При режиме Bit Bang для микросхемы FT232R может быть использован асинхронный режим, известный из предшествующих версий FTDI. В противоположность асинхронному режиму при синхронном состояние линий I/O сначала считывается и записывается в буфере чтения, прежде чем оно будет записано. Данные поэтому записываются только тогда, когда Имеется в наличии соответствующее место для чтения, что при неправильном управлении непреднамеренно может привести к потере данных.
USB-адаптер имеет на стороне выхода 10-полярный контакт, который в режиме Bit Bang разведен, как на рис. 9.1.
У дополнительной платы сигнальные линии D0 до D7 находятся на правой стороне штекерной колодки (рис. 9.2).
Bit Bang — USB усиливает темпы
95
Рис. 9.1
Рис. 9.2
9.1.	Синхронный режим Bit Bang
Следующий пример продемонстрирует, как вы включаете режим Bit Bang, конфигурируете, параллельно отправляете данные и считываете данные из внутреннего буфера чтения микросхемы FT232R. При синхронном режиме предыдущее состояние линий I/O сначала читается и сохраняется в буфере чтения, прежде чем записывается первый байт. При этом важно, чтобы всегда имелось свободное место в буфере чтения. Если в буфер записывается только один байт, то нужно записать еще второй байт, чтобы, как в нашем случае, микросхема FT232R прочитала первый байт.
Пример 11 наглядно демонстрирует это. Подключите USB-адаптер к вашему компьютеру и запустите программу beispiel_l 1 .ехе в каталоге Bsp_11 демонстрационных программ. При нажатии на кнопку Test synchronous BitBang в окне событий вы должны получить сообщения, как на рис. 9.3.
Сначала задается скорость передачи в бодах 300 и устанавливается режим Bit Bang, затем записываются данные 1234567 ... lmnop. Следующая ячейка содержит событие из буфера чтения: Р1234567 ... lmno. Возможно, только после нового вызова в качестве первого знака в буфере чтения вы получите заглавную букву р.
96
Глава 9
* USB Test
к
if
AnzaH vorhandener US3 Gerate: 1 » Start© BitBang schreiben
IBaudRate betragt 300 Set Bit Bang Mode
ЯЙМШМ1
BiBMig
»
<S?:W &Ж
$* J strWriteBuffer geschrieban:
И 123456789:;<«>?@ABCDEFGHUKLMN0P 11 P123456789:;<»>?@AECDEFGHUKLMN0 ep BitBang zuriickgesetzt
f » beendet s
!<X'. $ I
St’.;
Xv
*<

1:Ж:

$
®


Ж

Рис. 9.3
Соотношение записи и чтения таково:
1234567 ... LMNOP
Р1234567 ... LMNO
Первый знак в буфере чтения содержит последнее состояние предыдущей записи! Только со второго знака в буфере чтения результат идентичен записанным значениям. Чтобы-прочитать записанную последней р, байт должен больше читаться, чем записываться.
Как теперь можно определить, были ли входы на самом деле прочитаны? Сигнальные линии D0 до D7 были определены в демонстрационном ПО в качестве входов (рис. 9.4). Результат в буфере чтения подтверждает, что на входе не происходило никаких изменений в процессе записи.
Рис. 9.4
Bit Bang — USB усиливает темпы
97
Удалите USB-адаптер от вашего компьютера и подключите к USB-адаптеру дополнительную плату. Соедините линию передачи данных D5 (штырьковый вывод 15) с +5 В при помощи проводной связи.
Теперь снова подключите USB-адаптер к дополнительной плате и заново запустите тест с режимом Bit Bang. Теперь придется немного подождать, пока операционная система вновь интегрирует драйвер. Результат выглядит сейчас иначе, из больших букв образовались маленькие буквы:
1234567 ... IMNOP р1234567 ... Imno
Проволочная перемычка сначала показывает в результате, что вход D5 был принципиальным образом прочитан и изменен проволочной перемычкой. Для того чтббы понять, как из прописных букв образовались маленькие, нужно рассмотреть знак как последовательность вторичных знаков (последовательность битов).
Заглавная буква L имеет такую группу вторичных знаков: 0100 1100 (в шестнадцатеричной системе Hex— 4С), маленькая 1— ОНО 1100 (Hex 6С). D5 (это шестой бит, если смотреть справа налево, начиная с 0) благодаря проволочной перемычке устанавливается на 1, следовательно, большая буква L становится маленькой буквой 1. Однако почему цифры 1, 2 или 3 остаются без изменений? ’’Большая” 1 имеет группу вторичных знаков ООП 00001 (Hex 31), бит D5 так или иначе уже установлен, и потому не происходит никаких изменений.
Исходный код для одиннадцатого примера находится в файле Bsp.VBP в каталоге Bsp_l 1. Следующие подпрограммы (листинг 9.1) вызываются, когда нажата кнопка Test asynchronous Bit Bang во время выполнения программы в форме VB.
Private Sub bt_TestBitBang_Click() Dim i As Long ’ очистка
LoggerList.Clear
’ открытие прибора
’ установка скорости
FtStatus = FT_SetBaudRate(IngHandle, 300)
If FtStatus <> FT_OK Then
LoggerList.Additem "Fehler SetBaudRate"
98
Глава 9
GoTo CloseHandle Else
LoggerList.AddItem "BaudRate betr^gt 300” End If intMask = &HFF ’ D0-D7 установить в output intMode = 4 ’ синхронизировать Bit Bang ’ Bit Bang режим установить FtStatus = FT_SetBitMode (IngHandie, intMask> intMode) If FtStatus <> FT_OK Then
LoggerList.AddItem ”Fehler bei FT_SetBitMode” GoTo CloseHandle Else LoggerList.AddItem ”Set Bit Bang Mode” End If заполнить строку символами strWriteBuffer = ”” For i = 49 To 80 strWriteBuffer = strWriteBuffer & Chr$(i) Next i
После инициализации устройства сначала следует установить скорость передачи в бодах при помощи вызова функции FT SetBaudRate. Для скорости передачи в бодах следует ввести Handle — однозначный номер для открытого канала связи и значение.
Вызов функции FT SetBitMode активирует и деактивирует режим Bit Bang в передаточном значении intMode. При вызове одновременно в intMask будет пересылаться то, как Должны использоваться входы.
Значения ДЛЯ intMode:
□	0 — снова выключить режим Bit Bang;
О 1 — для асинхронного Bit Bang;
□	4 — для синхронного Bit Bang.
При помощи маски intMask каждая отдельная сигнальная линия может быть установлена на вход или выход. &HFF означает, что все сигнальные линии от D0 до D7 используются в качестве выхода. Бит D0 в intMask служит в данном случае для сигнальной линии DO: 1 — это использование сигнальной линии в качестве выхода, а 0 — в качестве входа.
Затем строка данных strWriteBuffer, которая должна быть выведена, заполняется ASCII-символами от 49 до 80 (Hex 31-50, от знака 1 до знака р).
Bit Bang — USB усиливает темпы
99
If re_Write(IngHandie, StrWriteBuffer, Len(strWriteBuffer), _ IngBytesWritten) <> FT_OK Then LoggerList.AddItem "Write Failed" GoTo CloseHandle
Else
LoggerList.Additem "strWriteBuffer,geschrieben:" End If
LoggerList.AddItem strWriteBuffer
Вызов FT Write помимо параметра ingHandie нуждается еще в трех других. В качестве второго значения должен передаваться указатель на выходной буфер (программисты С должны были подумать об оговоренном представлении указателя на адрес). В данном случае выдается содержание strWriteBuffer. Следующий параметр называет число передаваемых байтов, передается длина цепочки знаков strWriteBuffer. В четвертом и последнем параметре функция отражает число записанных байтов. Поэтому заранее IngBytesWritten устанавливается в 0.
Do
FtStatus e FT_GetStatus(IngHandie, FT_RxBytes, FT_TxBytes, __ lngevent__get_s t at) If FtStatus <> FT_OK Then If FtStatus = FT_IOJERROR Then LoggerList.Additem "FTjGetStatus IO Error aufgetreten” GoTo CloseHandle End If End If Loop Until FT_RxBytes = IngBytesWritten
Перед чтением при помощи re_Getstatus нужно проверить, как много байтов содержит (Ях)-буфер чтения. В этом Do-Loop-unti 1-цикле условие— пока в буфере чтения не будет находиться столько re_RxBytes (байтов), сколько было записано ранее при вызове функции re write.
flTimedout « False flFatalError = False IngTotalBytesRead = 0 strReadBuffer = ”” Do IngBytesRead = 0 FtStatus = FT_Read(IngHandie, strReadBuffer, FT_RxBytes, _ IngBytesRead) If (FtStatus = FT_OK) Or (FtStatus - FT_IO_ERROR) Then If IngBytesRead > 0 Then IngTotalBytesRead = IngTotalBytesRead + IngBytesRead
100
Гпава 9
Else flTimedout = True End If Else flFatalError = True End If
Loop Until (IngTotalBytesRead « FT_RxBytes) Or _ (flTimedout = True) Or _ (flFatalError = True)
Прямое чтение из буфера чтения микросхемы FT232R происходит при помощи вызова функции FT Read. В этом случае цикл выполняется, пока все байты (количество В FT_RxBytes) не будут Прочитаны. В IngTotalBytesRead содержится общее число прочитанных байтов. Прочитанные данные записываются в strReadBuffer. Внутри цикла обрабатываются такие возможные случаи ошибок, как Timedout ИЛИ Fatalerror:
If (flTimedout = False) And (flFatalError = False) Then LoggerList.Additem strReadBuffer Elself flTimedout = True Then LoggerList.Additem "FT_Read timeout Fehler ftStatus = " & FtStatus Else LoggerList.Additem ’’FTJRead Fehler ftStatus = " & FtStatus End If
Затем пользователю в окне вывода показывается результат в strReadBuffer, а также возможно возникшие ошибки в Loggerlist:
intMode = О
FtStatus » FT__SetBitMode (IngHandle, intMask, intMode) If FtStatus <> FT_OK Then
LoggerList.Additem ’’Fehler bei FT_SetBitMode” GoTo CIoseHandle Else
LoggerList.Additem ’’BitBang zurtickgesetzt” End If CIoseHandle: If FT_Close(IngHandle) <> FT_OK Then LoggerList.Additem ’’Fehler bei Aufruf: FT_Close” Exit Sub Else LoggerList.Additem ”» beendet” End If End Sub
Bit Bang — USB усиливает темпы
101
В конце по FT SetBitMode при помощи intMask = о вызывается программа для деактивации режима Bit Bang. После этого канал связи ingHandie снова становится закрытым.
9.2.	Опрос входных сигналов от DO до D7 при помощи режима Bit Bang
Цифровые водные сигналы могут опрашиваться в режиме Bit Bang при помощи вызова функции FT GetBitMode. Для этого соответствующие линии сигналов должны находиться на входе. Если к входу ничего не подключено, то выход находится на 5 В, т. к. входы в микросхеме FT232R имеют сопротивление от 200 кОм к 5 В.
Пример 12 поможет вам в экспериментировании с режимом Bit Bang. Подключите USB-адаптер с дополнительной платой к вашему компьютеру и запустите программу beispiel_12.exe в каталоге Bsp_12 демонстрационных программ (рис. 9.5).
* USB Test
Рис. 9.5
102
Глава 9
При подключенном USB-адаптере нажатием кнопки BitBang ап вы можете активировать режим Bit Bang на время ваших экспериментов. В поле выбора Ein-Ausgang (вход-выход) определите для каждой сигнальной линии, должна ли она использоваться в качестве цифрового входа или цифрового выхода. Ваш выбор будет графически изображен справа, при разводке соединительного штекера USB-флэш-адаптера.
Активация или деактивация выходного и входного сигналов
После того как вы выбрали, какие выходы вы хотите использовать, в окрашенном синим цветом поле вы можете установить имеющуюся в распоряжении сигнальную линию в 0 или 1. При нажатии кнопки schreiben сигнальные линии будут активированы (если включен режим Bit Bang). Вы можете легко испытать функции при помощи светодиода, который подключен на выбранном выходе.
Опрос входов
Входы могут периодически опрашиваться в предварительно настроенном 500-миллисекундном такте при помощи кнопки: Lesen mit Timer (чтение таймером).
Каким образЪм вы можете теперь тестировать вход? Либо вы снова проведете проволочную перемычку от соответствующего сигнального входа к "земле" (штырьковый вывод 11 штекерной колодки на дополнительной плате), либо попытаетесь проделать это при помощи LDR из предыдущего примера: в общем, подведите один контакт ко входу, а другой — к "земле". В темноте при чтении должно отображаться измененное состояние на соответствующем входе.
9.3.	Исходный код для режима Bit Bang
Исходный код для примера Bit Bang Содержится в файле Bsp.VBP каталога Bsp. 12. Вызываются следующие подпрограммы (листинги 9.2-9.4).
Private Sub bt_BitBangAn_Click ()
’ установить Baudrate
FtStatus = FT_SetBaudRate(IngHandie, 300)
Bit Bang — USB усиливает темпы
103
If FtStatus <> FT_OK Then LoggerList.Additem ’’Fehler SetBaudRate” GoTo CloseHandle
Else
LoggerList.AddItem ’’BaudRate betr^gt 300” End If intMode - 4 ’ синхронизировать Bit Bang ’ установить режим Bit Bang
FtStatus = FT_SetBitMode(IngHandie, intMask, intMode) If FtStatus <> FTJDK Then
LoggerList.AddItem '’Fehler bei FT_SetBitMode” GoTo CloseHandle Else
LoggerList.AddItem "BitBang Mode aktiviert” End If CloseHandle:
End Sub
Вызовы функций известны из предыдущего примера. Параметр intMask устанавливается путем выбора входа/выхода.
Private Sub bt_wr_Click(Index As Integer) *
’ заполнить строку введением в поле выбора Databyte = 0 For i = 0 То 7
If Me(”cb_wr” & Trim(Str(i))) .Value = 1. Then Databyte » Databyte Or 2 Л i End If Next i strWriteBuffer = Chr$(Databyte)
If FT_Write(IngHandie, strWriteBuffer, Len(strWriteBuffer), IngBytesWritten) <> FT_OK Then LoggerList.Additem ’’Write Failed” GoTo CloseHandle Else LoggerList.AddItem ’’Datenbyte geschrieben:” & strWriteBuffer End If
End Sub
104
Глава 9
Байт для вывода должен быть собран из отдельных битов (в окрашенном голубым цветом поле выбора). Отдельные поля выбора битов, которые должны записаться, именуются последовательно: cb wrO, cb wri, cb_wr2 до cb_wr7. cb wro заменяет собой LSB (наименее значащий бит), a cb_wr7 — MSB (наиболее значащий бит).
В зависимости от соответствующей позиции бита в байте данных записываемый байт данных собирается в цикле от 0 до 7.
Если активирован DO, то cb wro имеет значение 1. При 1 последняя (правая) позиция устанавливается в 2Л0 (1). Если активирован D1, то cb wri имеет значение 1. При 1 вторая с конца позиция устанавливается в 2Л1 (2). Аналогично продолжая последовательность, если активирован D7, то cb_wr7 имеет значение 1. При 1 первая позиция устанавливается на 2Л7 (128). По окончаний при помощи функции ft write выводится байт данных.
Private Sub Timerl_Timer ()
’ I/O статус
FtStatus = FT_GetBitMode(IngHandle, Databyte)
If FtStatus <> FT OK Then -1 -
LoggerList.Additem "Fehler bei FT_GetBitMode"
GoTo CloseHandle
Else
' и теперь байт данных показать побитно
For i = 0 То 7
Me("cb_rd" & Trim(Str(i))).Value = ((Databyte And 2 л i) /'2 i) Next i
End If
End Sub
Чтение происходит периодически при помощи таймера 1 (Timerl) и функции FT GetBitMode. FT GetBitMode в байте данных поставляет актуальное состояние входных сигналов. Также здесь положение бита в байте данных определяет соответствующий сигнал: Bit О (LSB) — для сигнала DO, Bit 7 (MSB) — для входного сигнала D7.
Для изображения отдельных битов в формуляре нужно дальше анализировать байт данных. Обнаружение отдельных битов в прочитанном байте данных
Bit Bang — USB усиливает темпы
105
происходит в цикле i от 0 до 7 (в зависимости от соответствующей позиции бита в байте данных):
((Databyte And 2 Л i) / 2 л i)
При i = о все равно получается 0, если соответствующий входной сигнал DO является 0 (Low), в других случаях—- 1. Одновременно с результатом активируется диалоговое поле:
Me("cb_rd" & Trim!Str(i)))
При i = о диалоговому полю LSB соответствует cb rdo. Отдельные поля называются при необходимости от cb rdo до cb_rd7.
9.4.	Bit Bang и эмуляция других портов
Благодаря режиму Bit Bang микросхемы FT232R многие системы сбора (и регистрации) данных и измерений могут полностью обходиться без микроконтроллера. На рис. 9.6 представлены лишь некоторые из применений расширения.
Для синхронного режима Bit Bang используются следующие вызовы функций в FTD2XX.DLL:
О! FT SetBitMode — значение 0x04 активирует синхронный режим Bit Bang, 0 вызывает сброс в стандартный режим;
Рис. 9.6
106
Глава 9
□	AE SetBaudRate — скорость передачи в бодах определяет скорость передачи данных. Скорость передачи данных равняется 16-кратной настроенной скорости в бодах;
□	' FT Write — запись данных;
□	FT_GetBitMode — состояние I/O на данный момент;
□	FT Read чтение данных, которые были прочитаны микросхемой FT232R при синхронной записи.
В качестве примеров в этой книге приводится чтение и запись накопителя данных EEProm и более сложная демонстрационная программа для программирования семейств микроконтроллеров Atmel-AT89LP.
Также показаны примеры электрических схем для 12С-ЦАП (рис. 9.7) и модуля расширения порта I2C (рис. 9.8).
Рис. 9.8
ГЛАВА 10
Простой аналого-цифровой преобразователь с Bit Bang
При помощи АЦП {аналого-цифровые преобразователи) можно оцифровывать аналоговые напряжения. В противоположность цифровым данным с (дискретными) значениями 0 или 1 аналоговый сигнал в установленных предельных значениях может принять любое значение.
Преобразователи бывают 8-, 10-, 12-, 16- или 24-битные. При 8-битном преобразовании аналоговое значение представляется в 256 ступенях (1 байт — 28), при 24-битном преобразовании в 16,7 млн ступеней (4 байта — 224).
Если аналоговый сигнал 5 В при помощи 8-битного преобразователя превращается в цифровые значения, то это соответствует 256 ступеням, каждая по 19,6 мВ. При 10-битном преобразовании (1024 значения) ступень составляет около 5 мВ— четырехкратная разрешающая способность по сравнению с 8-битным АЦП.
Интерес представляют также однобитные преобразователи, которые могут быть известны на примере компакт-дисков. Оцифровываются лишь изменения уровня сигнала. В наиболее простом случае цифровая 1 обозначает повышающееся, а 0— понижающееся напряжение. Каждый бит представляет при этом прочную ступень. Если напряжение остается постоянным, то происходит постоянное чередование 1 и 0. Такой процесс подходит в особенности для аудиосигналов.
10.1.	Понятие аналого-цифрового преобразователя (АЦП)
Существуют различные возможности аналого-цифрового преобразования, как, например, параллельный способ (флэш-преобразователь), метод весов (последовательная аппроксимация, SAR) или метод подсчета (преобразователи однократного и двойного интегрирования Single- и Dual-Slope, которые
108
Глава 10
здесь не будут подробно объяснены). Сами методы вообще различаются по скорости преобразования, времени преобразования и точности или линейностью. Чем больше разрешающая способность, чем выше частота развертки и меньше возможных источников ошибок. Короче говоря, чем более дорогостоящая электроника, тем дороже и АЦП.
У АЦП снимается (считывается) аналоговый сигнал с прочной частотой. Несложным является также система работы Single-Slope, которая здесь была еще более упрощена для положительных напряжений. Измеряемое напряжение преобразуется во время, пропорциональное напряжению. Измерение времени происходит путем счета тактовых импульсов в течение этого времени.
Если конденсатор с емкостью С заряжается постоянным током I, то напряжение U линейно возрастает на конденсаторе за время t. Это напряжение сверяется с входным напряжением Ue. Сверка происходит при помощи интегрированной схемы, операционного усилителя, кратко называемого ОУ. Как только линейно возрастающее напряжение переступает входное напряжение Ue к моменту времени tx, на выходе ОУ внезапно меняется выходное напряжение Uk. Компаратор "опрокидывается". Промежуток времени от tO до момента времени tx является, таким образом, признаком для величины входного напряжения Ue. Чем больше время до того момента, когда компаратор опрокидывается, тем больше оказывается входное напряжение.
К моменту времени tO запускается линейно возрастающее напряжение, и Uk-сигнал периодически опрашивается. С каждым тактом счетчик повышается. Счетчик останавливается, как только изменяется Uk. Состояние счетчика соответствует измеряемому времени. На рис. 10.1 счетчик останавливается после tx, через двенадцать циклов. Если удвоить опросный такт — у напряжения Uk он представлен пунктирными линиями между отдельными тактами — удвоится также и разрешающая способность.
Счетный такт (длительность tf) одновременно также представляет достигаемую разрешающую способность. Если за 256 тактов достигается напряжение 5 В, то это соответствует разрешающей способности входного напряжения Ue порядка 20 мВ, при удвоении (с 512 тактами) — около 10 мВ.
АЦП, оборудованный последовательным интерфейсом 12С цифрового вывода аналоговых входных сигналов, был бы, разумеется, идеальным, но немного дороже, чем представленное здесь решение. Для медленно изменяемых входных напряжений зачастую хватает даже и экономичного решения с незначительной точностью.
Для схемы потребуются следующие элементы: линейно возрастающее напряжение, ОУ в качестве компаратора напряжения, по возможности постоянное сканирование выходов ОУ и определенный момент времени старта.
Простой аналого-цифровой преобразователь с Bit Bang
109
Рис. 10.1
10.2.	Электрическая схема АЦП с компаратором
Техническая перестройка разъясняется на основе фрагмента из электрической схемы дополнительной платы на рис. 10.2.
Линейно возрастающее напряжение на конденсаторе С4 вызывается при помощи транзистора Т1. Сопротивление R2, емкость С4 и вариации изготови
110
Глава 10
теля в усилении транзистора Т1 влияют на длительность фронта наклонной (линейно возрастающего напряжения на конденсаторе или на одном из входов ОУ).
Температурный и длительный дрейф компонентов поступает во временную константу и, следовательно, в точность измерения.
При помощи сигнальной линии TXD U SB-адаптера можно управлять транзистором Т1, таким образом может быть определено начало заряжания С4. Конденсатор С4 для следующего измерения должен быть разряжен. По FET Т2 конденсатор для разрядки замыкается накоротко к "земле". Этот процесс может управляться при помощи RXD-сигнала USB-адаптера.
Состояние выхода компаратора опрашивается по сигнальной линии DSR. Теперь, что касается USB, то ранее вы уже научились, как управлять входными и выходными сигналами на USB-адаптере. В программе нужно лишь все правильно связать.
10.3.	Первое тестирование ПО для АЦП
Пример 13 показывает возможности соединения простого АЦП с USB-адаптером. Оцифровываются значения яркости фотоэлемента.
Отсоедините USB-адаптер от компьютера и подключите к USB-адаптеру дополнительную Пплату. Подключите фототранзистор (или LDR) ко входу Е1 (штырьковый вывод 9) и +5 В (штырьковый вывод 10), 1-килоомное сопротивление от второго входа Е1 (штырьковый вывод 8)— к "земле" (штырьковый вывод 4, GND) дополнительной платы (рис. 10.3).
Рис. 10.3
Вставьте перемычку JP1. У фототранзистора катод (или скорее, наиболее короткий контакт транзистора) должен быть подключен штырьковым выводом Ю к 5 В. Установите потенциометр Р1 в нейтральное положение. Соеди
Простой аналого-цифровой преобразователь с Bit Bang
111
ните дополнительную плату с USB-адаптером и только после этого подключите USB-адаптер к вашему компьютеру. Электрическая схема на рис. 10.4 покажет, как подключен фотоэлемент на входе операционного усилителя.
A5V
Фотоэлемент
1К
Усилитель
настраиваемое усиление
к АЦП компаратор
GND §
GND
Рис. 10.4
Запустите программу beispiel_13.exe в каталоге Bsp_13 демонстрационных программ и нажмите кнопку AD starten, чтобы начать периодическое измерение. (Кнопка A/D Test — не для периодического измерения).
Если вы нажали кнопку AD starten, то она меняется на AD stoppen. Данные АЦП опрашиваются каждые 500 мс, результаты представляются справа около кнопки. Показанные результаты — это только результаты счетчика АЦП, и они не являются значениями напряжения!
Если вы затените фототранзистор или LDR, то (слегка неустойчивые) значения станут меньше или снова больше, как только вы осветите фотоэлемент настольной лампой. Переполнение в области показаний изображается знаками »>. При необходимости сократите скорость передачи в бодах, чтобы согласовать диапазоны яркости со значениями счетчика. При помощи потенциометра Р1 вы можете настроить усиление, а также другие согласования.
Если вы теперь уже хотите работать с настраиваемыми значениями скорости передачи в бодах, величиной буфера и размером передачи данных, следует остановить все еще активную программу измерения и после изменений настройки снова запустить ее.
Возможно, вы сразу заметите более выраженную градацию, чем в примере 10 с простым АЦП для LDR (рис. 10.5).
112
Глава 10
* USB Test	...	..	,	.	;X
Рис. 10.5
10.4.	Согласованность между ПО и аппаратным обеспечением USB
С синхронным режимом Bit Bang вы познакомились в примере 11. Имеющиеся в распоряжении 8 сигнальных линий могут, в зависимости от использования каждой из них, быть сконфигурированы в качестве входа или выхода. TXD и RXD конфигурируются как выходы. Все другие сигналы остаются входами.
При синхронном режиме предыдущее состояние сигнальных линий сначала читается и сохраняется в буфере чтения, прежде чем записывается следующий байт. При этом очень важно, чтобы в буфере чтения всегда имелось свободное место. Внутренний буфер записи микросхемы FT232R имеет величину в 128 байтов, буфер чтения— 256 байтов. 128 байтов соответствуют 7-битовому АЦП. Одновременно с этим происходит передача по USB. Она составляет при полной скорости USB 64 байт/кадр соответственно 6-битовому АЦП.
Простой аналого-цифровой преобразователь с Bit Bang 113
В режиме Bit Bang происходит доступ к записи и чтению с 16-кратным тактом настроенной скорости передачи в бодах. Скорость передачи данных в бодах — это указание частоты. При скорости передачи 9600 бод длина слова в битах в режиме Bit Bang составляет около 6,5 мкс. Если умножить ее на 128 байтов буфера чтения, получим 833 мкс длительности считывания в 6,5-микросекундном такте, или 417 мкс для 64 байтов (рис. 10.6).
Выходы TXD и RXD нужно подготавливать только в буфере записи, а буфер записи нужно заполнять только до настроенного количества байтов, и состояние сигнальной линии DSR при записи в режиме Bit Bang будет читаться автоматически.
Рис. Ю.6
Демонстрационное ПО автоматически определяет значения для длины слов в битах и максимальную продолжительность записи, а также показывает возможности настройки. При скорости передачи в 900 бод продолжительность записи составляет около 417 мкс, а при 4800 бод — около 833 мкс (рис. 10.7).
Рис. 10.7
Если вы измените размер буфера, можете проверить, работает 64 байтов или более, является ли процесс критическим по времени, или эта возможность для вашего собственного использования вообще не может быть принята в расчет, и при необходимости должен быть введен в эксплуатацию более дорогой АЦП. Для испытания и измерения яркости в 64 ступенях данного решения вполне хватает.
Возвратимся к АЦП. Продолжительность времени для линейно возрастающего напряжения от 0 до 5 В составляет 1 до 2 мс. При скорости передачи 9600 бод и 64-байтовом буфере продолжительность считывания составляет 417 мкс, т. е. значительно меньше. Так же измеряемый диапазон охватывает область не от 0 до 5 В, а, может быть, только от 0 до 1,5 В. Если входное напряжение является большим, то компаратор в это время не будет опрокидываться, а также не будет меняться сигнал DSR! Это переполнение в области показаний изображается знаками »>.
114
Глава 10
Следующая временная диаграмма поясняет некоторые взаимосвязи. UC2 достигает при t2 напряжения Ue, напряжение Uk на выходе компаратора опрокидывается при t2. Если сопротивление базы R2 на транзисторе Т1 или зарядном конденсаторе С4 уменьшается, то напряжение быстрее возрастает линейно. Чтобы испытать поведение линейно возрастающего напряжения при помощи осциллоскопа, можно было бы заменить R2 потенциометром от 0 до 200 кОм и при необходимости подключить другие емкости параллельно С4.
UC| показывает кривую напряжения при меньшем сопротивлении базы R2. В этом случае входное напряжение Ue достигается быстрее, компаратор опрокидывается значительно ранее уже при tl.
На рис. 10.8 диаграмма показательно была расширена возможными сканированиями при различных скоростях передачи данных (в бодах).
С различными скоростями передачи данных (в бодах) и размерами буфера можно согласовать разрешающую способность с линейно возрастающим напряжением (Uci или исг) и с измеряемой областью напряжения. Несколько различных возможностей отображаются под линией оси времени Uk. Продолжительность сканирования определяется скоростью передачи в бодах и размером буфера. При скорости передачи 9600 бод и 64-байтовом буфере линейно возрастающее напряжение Uc должно будет превысить входное напряжение Ue за 417 мкс, т. к. иначе не прийти к какому-либо результату измерения.
Если скорость передачи удваивается с 9600 до 19 200 бод, при том же размере буфера, продолжительность сканирования уменьшается в пользу разрешающей способности АЦП, область измерения для входного напряжения Ue сокращается в два раза.
Если за время считывания вы не приходите к результату измерения, то можно уменьшить скорость передачи в бодах. При делении скорости пополам — в примере на рис. 10.8 с 9600 до 4800 бодов— продолжительность считывания примерно удваивается с 416 мкс до 832 мкс.
Если при более высокой скорости передачи в бодах хочется и дальше удлинять продолжительность считывания, то буфер должен быть больше 64 байтов. Настройки в 9600 бод и 128 байтов могут привести, как показано в диаграмме, к прерываниям и замедлениям при считывании, т. к. микросхема FTDI поддерживает тип Bulk максимум с 64-байтовой передачей данных. При очень медленном линейно возрастающем напряжении эта связь играет второстепенную роль, но отчетливо удлиняет продолжительность измерения.
Возможно, при экспериментировании вас удивит то, что счетчик иногда просто не превосходит определенного значения: при размере буфера в 1024 байтов он каждый раз достигает только 750 байтов. Причиной является операци-
Простой аналого-цифровой преобразователь с Bit Bang
115
онный усилитель, который не может дойти до 5 В, а максимально лишь до значения меньше 4 В. В данном случае вы должны сократить значение входного усилителя при помощи потенциометра Р1, чтобы согласовать область измерения.
МИНИ	9600 Baud. 64Byte, 416ps
*80® Baud, 64Byte, 832ps
Baud> 128Pyte* ।
Рис. 10.9
116
Глава 10
В противоположность буферу записи и чтения микросхемы FT232R, по USB может быть передано большее количество байтов в буфере компьютеров. Этот "размер USB-передачи" также является настраиваемым, и он был принят во внимание в ПО данной книги.
Чем вызваны колебания результатов? Не только такие факторы, как буфер записи, передача USB типа Bulk или 64 байта при полной скорости USB (USB Full Speed), играют роль в данном случае, но и другие, которые остались без внимания: колебания питающего напряжения USB или частота 50 Гц настольной лампы — они также приводят к различным результатам при применении фотоэлементов.
Ради более стабильных значений вы можете многократно проводить измерения медленных сигналов, например, при колебаниях дневного света, и получать соответствующие результаты.
10.5.	Исходный код к АЦП
Исходный код для данного примера содержится в файле Bsp.VBP каталога Bsp_13. По кнопке AD Lesen будет циклически вызвана функция sub bt ad read Click И таймер 2 (ЛИСТИНГ 10.1).
Private Sub bt_ad_read_Click() ’ Timer 2 подготовить и запустить или остановить If TimerIstAn Then
Me.bt_ad_read.Caption = "AD Lesen" Me.Timer2.Interval = 0 TimerlstAn = False LoggerList.Additem "A/D Daten lesen gestoppt" Else intMask = &H0 Or 2 A TXD Or 2 A RXD Call BitBangAn
Me.bt_ad_read.Caption = "AD stoppen" CLadebuffer » ""
For il% = 0 To Vai(Me.lbJosize.Text) — 1 CLadebuffer = CLadebuffer & Chr$(&H0) Next il
LoggerList.Additem "A/D Daten werden periodisch gelesen" Me.Timer2.Interval = 500 TimerlstAn = True End If End Sub
Простой аналого-цифровой преобразователь с Bit Bang
Перед вызовом функции call BitBangAn должны быть установлены входы и выходы для режима Bit Bang.
TXD— это константа 0 (для DO), RXD— константа 1 (для DI). С помощью логической операции ИЛИ сигнальные линии RXD и TXD объявляются выходами. Другие биты в intMask остаются на 0 — являются входами.
Чтобы каждый раз не приходилось заполнять буфер записи, когда работает таймер, CLadeBuffer однократно заполняется нулевыми значениями (листинг 10.2).
Private Sub Timer2_Timer ()
strBeschreibung - Trim(Me.DeviceName.Text) & Chr(0)
If FTjOpenEx (strBeschreibung, FTJ)PEN_BY_DESCRIPTION, IngHandle)
<> FT_OK Then
LoggerList.Addltem ’’Fehler bei Aufruf: FT_OpenEx" Exit Sub
End If
strWriteBuffer » Chr$(&Hl) ’ транзистор TXD высокоомный
SendRead_FTDI_Bytes ’ и писать
strWriteBuffer « Chr$(&H3) ’ С разрядить через FET на RXD SendRead_FTDI__Bytes ’ и писать
strWriteBuffer = strWriteBuffer & CLadebuffer SendRead_FTDI_Bytes ’ и писать (и читать) For il% = 1 To Len(strReadBuffer) If ((Asc(Mid(strReadBuffer, il, 1))_ And 2 A DSR) / 2 A DSR) = 0 Then Me.lb_Anzahl.Caption = Str(il) Exit For Next il • выход за пределы области ?
If il >» Len(strWriteBuffer) Then Me.lb_Anzahl.Caption ® ”»>” CloseHandle:
If FT_Close(IngHandle) <> FT_OK Then
LoggerList.Addltem ’’Fehler bei Aufruf: FT_Close” Exit Sub
Else End If
End Sub
5 Зак. 1084
118
Глава 10
После открытия USB-устройства передается байт со значением 1. Первый бит управляет на TXD транзистором Т1 высокоомного сопротивления, конденсатор С4 медленно разряжается. Со следующим байтом (со значением 3) бит 1 остается в значении 1 (и транзистор Т1 в высокоомном состоянии), а С4 разряжается через FET (полевой транзистор) Т2, чтобы создать состояние старта, После того как буфер записи был заполнен CLadeBuffer, записывается буфер strWriteBuffer. Начиная со второго байта в буфере записи имеются только лишь "нули", что соответствует состоянию старта. Транзистор Т1 становится (и остается) проводимым и вызывает по конденсатору С4 линейно возрастающее напряжение для компаратора. Полевой транзистор Т2 является (и остается) высокоомным в течение продолжительности измерения.
Так как при синхронном режиме Bit Bang снова чтение происходит сразу же, результат сигнальной линии DSR (которая отражает состояние выхода компаратора) после вызова SendRead_FTDI_Bytes сразу оказывается в буфере чтения.
В маленьком цикле For (для) сейчас последовательно проверяется DSR-бит (=D5) каждого отдельного байта в strReadBuffer, изменилось ли состояние компаратора.
Если обнаруживается изменение, вам будет показано число счетчика в результате, и цикл будет прерван.
В табл. 10.1 изображено протекание с указанием времени в микросекундах для 9600 бод.
Таблица 10.1
Сигнал	Байт		2	3	4	п-3	п-2	п-1	п
	D7	0	0						
	D6	0	0						
DSR	D5	0	1	1	1	1	0	0	0
	D4	0	0						
	D3	0	0						
	D2	0	0						
RXD	D1	1	0	0	0	0	0	0	0
TXD	D0	1	0	0	0	0	0	0	0
t в мкс		6.5	13	19,5	26				
За кнопкой A/D Test прячется вызов функции bt_ad_ test click, которая использует одинаковые подпрограммы, и результат затем обрабатывается гра-
Простой аналого-цифровой преобразователь с Bit Bang 119 фически. Информацию для графического анализа вы найдете в примере ПО 16 (испытание дистанционного управления).
Здесь еще одно указание автора: если вы планируете собственные разработки или хотите изменить это ПО для собственных целей, то, как только подключается USB-адаптер, вы каждый раз должны принимать ho внимание исходное состояние (состояние на выходе) его сигнальных' линий. Уже при подключении адаптера могут возникнуть конфликтные ситуации. Здесь это имело бы место, если бы Т1 и Т2 одновременно были проводящими, что бы могло привести к короткому замыканию напряжения питания!
Вы могли бы также ускорить этот процесс при помощи вашего ПО, и тогда транзисторы Tl, Т2 или даже напряжение питания USB вашего компьютера могли бы быть повреждены.
10.6.	Предвключенный операционный усилитель
Операционный усилитель — это интегрированная схема нескольких транзисторов с различными режимами работы. С режимом работы в качестве компаратора напряжения вы уже познакомились.
Используемая микросхема LM358 имеет два интегрированных операционных усилителя. Второй операционный усилитель вводится в эксплуатацию для усиления входных сигналов на входе EI и на выходе соединен со входом компаратора АЦП.
Далее разнообразные возможности с операционным усилителем будут рассмотрены только в связи с настройками потенциометра Р1.
1.	Потенциометр находится в левом положении (рис. 10.10). Выход ОУ соединен с инвертированным входом. Коэффициент усиления ОУ равен 1. Выходное напряжение Ua равно входному напряжению Ue.
2.	Потенциометр находится в среднем положении (рис. 10.11). Усиление ОУ определяется из Ua/Ue = 1+(R1/R2). Так как R1 и R2 в среднем положении одинаковы, происходит двойное усиление входного напряжения. В интервале от левого до среднего положения коэффициент усиления составляет от 1 до 2.
3.	Потенциометр находится в правом положении (рис. 10.12). При настройке вашего усилителя вы должны учитывать, что максимальное выходное напряжение ОУ при рабочем напряжении USB 5 В должно быть немного меньше 4 В.
120
Глава 10
Рис. 10.12
Простой аналого-цифровой преобразователь с Bit Bang
121
10.7.	Замер напряжения вольтметра на аналоговом входе Е2
При помощи простого АЦП могут быть измерены аналоговые напряжения на входе Е2. На первом этапе был предусмотрен диапазон измерения от 0 до 2 В. Этот пример ПО составлен таким образом, что диапазон от 0 до 4 В показывается дискретно по 0,1 В.
Промышленные АЦП имеют обычно очень точный источник опорного напряжения и опорные емкости. Самостоятельно собранный АЦП лишен этих преимуществ (рис. 10.13). Крутизна линейно возрастающей кривой на основании допусков микросхем является различной, поэтому результаты измерений неудовлетворительны.
A5V
усилен*	Ш
штекерная колодка	_L_
GND ш™Рьковыйвывод4	GND
Рис. 10.13
Калибровка вольтметра
Для подгонки (уравнивания) вход Е1 с дополнительным сопротивлением 100 кОм и сопротивлением R1 подводится к 5 В на половинное напряжение питания. Отсоедините USB-адаптер от компьютера и подключите дополнительную плату к USB-адаптеру (рис. 10.14).
Подключите сопротивление 100 кОм от вывода 9 (Е1) к выводу 4 (GND). Соедините вывод 7 (Е2) с +5 В (вывод 10) при помощи проволочной перемычки. Установите перемычку JP1. Поставьте Р1 в левое положение.
122
Глава 10
Рис. 10.14
Соедините дополнительную плату с USB-адаптером и после этого подключите USB-адаптер к вашему компьютеру. Входное напряжение на АЦП составит половинное напряжение питания USB (2,5 В), если потенциометр настроен на левое положение.
Запустите nporpaMMy_Voltmeter.exe в каталоге Bsp_Voltmeter. Далее, для периодического измерения, нажимайте кнопку Voltmeter starten.
Рис. 10.15
Показанное в диалоговом поле Zahler AD Wandler состояние счетчика представляет около 2,5 В (рис. 10.15). В данном случае состояние счетчика колеб-
Простой аналого-цифровой преобразователь с Bit Bana___________________
лется между 594 и 604. В качестве среднего значения вносится 600. Это среднее значение образует, вместе со значением 2,5 В, расчетную базу для пересчета U = состояние счетчика • 2,5/среднее значение.
Удалите 100-килоомное сопротивление, и, разумеется, также проволочную перемычку, если вы хотите измерить напряжения на входе Е2.
При измерении входного напряжения Ue установите Р1 в левое Положение. Перемычка JP1 должна быть вставлена, чтобы ОУ питался напряжением. Так выглядит измерение напряжения в электрической схеме (рис. 10.16).
Рис. 10.16
Эксперименты показали, что лучшие скорости передачи в бодах для стабильных результатов лежат в интервале между 38 400 и 76 800. Снижение размера буфера сокращает продолжительность измерения и уменьшает диапазон измерения. Изменение скорости с 76 800 на 38 400 делит пополам как разрешающую способность, так и значение напряжения в показании (это не было принято во внимание в ПО) и расширяет диапазон измерения вдвое.
При превышении показания уже при входном напряжении 2,5 В вы увидите знаки »> в окне счетчика. В этом случае вы можете сократить входное напряжение, уменьшить скорость передачи в бодах и увеличить размер буфера. Благодаря этим мероприятиям частота дискретизации согласуется с линейно возрастающим эталонным напряжением на входе компаратора.
Попробуйте поэкспериментировать с различными возможностями! Если у вас есть паяльник, вы можете также изменить емкость С4 на дополнительной плате и вместе с ней крутизну линейно возрастающего напряжения.
В качестве альтернативы можно также заменить сопротивление базы R2 на транзисторе Т1 потенциометром от 0 до 200 кОм, чтобы повысить или уменьшить крутизну линейно возрастающего эталонного напряжения.
124
Глава 10
Усилитель
Как уже говорилось, при больших скоростях передачи (в бод) обычно получают более стабильные результаты, чем при незначительных скоростях.
Поэтому лучше изменять крутизну линейно возрастающего эталонного напряжения при помощи R2 и С4 для желаемого диапазона измерения.
Конечно, вы также можете повышать усиление при помощи потенциометра Р1 до тех пор, пока приложенное входное напряжение не будет соответствовать показанию. Необходимы лишь легкие Модификации программного кода предыдущих примеров с АЦП.
10.8.	Тестер батарей
Емкость АА- или ААА-батареи 1,5 В измеряется нагрузочным током между 50 и 150 мА. Если напряжение под нагрузкой падает до значения ниже 0,8 В, то батарея пустая. От 0,9 до 1,2 В — батарея слабая, а выше 1,2 Ом — батарея все еще хорошая.
Испытайте АА-батарею при помощи программы вольтметра из предыдущего примера. Нагрузочное сопротивление рассчитывается по формуле 1,5 В/0,05 А = 30 Ом. Стандартное сопротивление было бы 27 Ом (рис. 10.18).
При измерении входного напряжения Ue установите Р1 в левое положение. Перемычка JP1 должна быть вставлена для питания ОУ. Сопротивление 27 Ом включается параллельно входу.
Простой аналого-цифровой преобразователь с Bit Bang
125
Рис. 10.18
ГЛАВА 11
Измерение температуры при помощи NTC (отрицательного ТКС)
В этом примере вы узнаете, как использовать АЦП с NTC для измерения температуры в диапазоне примерно от -20 °C до 40 °C посредством USB.
NTC (Negative Temperature Coefficient, отрицательный ТКС, отрицательный температурный коэффициент сопротивления) — это зависимые от температуры полупроводниковые сопротивления. Отрицательные ТКС часто используются в температурных переключателях, регуляторах, конечно, для измерения температуры.
Резисторы с отрицательным ТКС уменьшают значение сопротивления при повышающейся температуре. При снижении температуры значение сопротивления повышается. Резисторы с отрицательным ТКС при высоких температурах проводят ток лучше, чем при низких. Поведение — нелинейное.
Значения сопротивления 5-килоомного отрицательного ТКС в зависимости от температуры в градусах Цельсия представлены табл. 11.1.
Таблица 11.1
Температура	-50	0	25	70
Сопротивление	100 000	10 000	5 000	1 000
Характеристическое сопротивление отрицательного ТКС указывается при 20 или 25 °C.
Характеристическое сопротивление R25 в примере выше составляет 5 кОм. В продаже оно обозначается просто как NTC-5K. Общая формула для резистора с отрицательным ТКС следующая:
R25 / RT = е В х (1/298К - 1/Т).
Измерение температуры при помощи NTC (отрицательного ТКС)127
RT — это сопротивление при температуре Т, В характеризует ход кривой и постоянную величину. При использовании 4.7K-NTC R25 составляет 4472, В составляет 3977. Значения вы можете изменять в исходном коде программы.
Выбор отрицательного ТКС происходит в зависимости от области температуры или сопротивления, точности измерения, желаемого времени срабатывания и, при необходимости, требуемого размера.
Многие производители в своих технических паспортах указывают другие формулы и таблицы, при помощи которых можно значительно улучшить точность измерения при помощи резисторов с отрицательным ТКС, а также математически линеаризовать далее их поведение.
Перед этим следует немного поразмыслить: чем точнее должно быть измерение температуры при помощи отрицательного ТКС, тем лучше должны быть разрешающая способность необходимого АЦП и математический пересчет. На примере вольтметра вы видели, что разрешающая способность простого АЦП с 64 ступенями стабильно достигается по диапазону измерения от О до 4 В.
Резистор с отрицательным ТКС одним контактом находится непосредственно на напряжении питания, другой контакт соединен с "землей" 1-килоом ным сопротивлением. Возможная область измерения от —20 °C до 40 °C требует двукратного усиления. Без усиления будет более высокая область измерения, но плохая разрешающая способность. Резистор с отрицательным ТКС должен быть рассчитан по падению напряжения на 1-килоомном сопротивлении, в программе он должен быть пересчитан.
11.1. Образец ПО
для измерения температуры
Отрицательный ТКС подключается ко входу Е1 платы. Отсоедините USB-адаптер от компьютера и подключите дополнительную плату к USB-адап-теру.
Присоедините отрицательный ТКС ко входу ЕГ (вывод 9) и +5 В (вывод 10), а сопротивление в 1 кОм от второго входа Е1 — к "земле" (вывод 4, GND) дополнительной платы (рис. 11.1).
Вставьте перемычку JP1. Установите потенциометр Р1 в среднее положение. Соедините дополнительную плату с USB-адаптером и только после этого снова подключите USB-адаптер к компьютеру.
Для измерения температуры запустите программу Temperatur.exe, которую вы можете найти в каталоге Bsp_14. Так как ПО вольтметра используется
128
Гпава 11
в качестве основы, вы должны скорректировать вольтметр, как в предыдущем примере, на 2,5 В и ввести значение счетчика (рис. 11.2).
Рис. 11.1
Рис. 11.2
На основе показания АЦП резистор с отрицательным ТКС вычисляет температуру. Значения В и R25 отрицательного ТКС вы можете изменить в исходном коде программы.
Указание
Само собой разумеется, вы можете изменить текущую температуру и при помощи потенциометра, но вместе с тем также поменяется и линейность.
Измерение температуры при помощи NTC (отрицательного ТКС)
129
11.2. Исходный код измерения температуры
Исходный код находится в файле Bsp.VBP в каталоге Bsp_14. По сравнению с программой вольтметра в конце подпрограммы таймера 2 были проведены лишь небольшие дополнения, которые непосредственно приводятся в листинге 11.1.
Private Sub Timer2_Timer ()
’ Т1тег2-программа дописана следующим кодом, ’ чтобы определить сопротивление и температуру NTC Dim U_mess__1000 As Single Dim R_NTC As Single ’ двойное усиление!
U^mess_1000= (il • 2.5 / Vai (Me.lb_2_5J7olt.Text)) I 2 ' сопротивление = 1000 Ом, напряжение U_mess_1000 ’ U_mess_1000/1000 = UJNTC/R_NTC • U_NTC « 5 В — U_mess_1000 • R_NTC= U_NTC/U_mess_1000 • 10000 « ’ RNTC = (5B-Ujness_1000) /Umess_1000 • 1000 R_NTC « 1000 • (5 — UjnessJLOOO) / U_mess_1000 ’ показания NTC кОм
Me.lb__R_NTC.Caption Format(R_NTC / 1000, "O.O") & " K” • таблица В и R25 значений ’ пересчет температуры Me.lb_temp.Caption « _
Format(1 / (Log(R_NTC / 4472) I 3977 + 1 / 298) - 273, «0») & «°C» CloseHandle:
If ET_Close (IngHandle) <> FT_OK Then
LoggerList.Addltem "Fehler bei Aufruf: FT_Close” Exit Sub
Else
End If
• End Sub
Для микросхемы FT232R вы можете использовать в качестве альтернативы отрицательному ТКС с простым АЦП готовые микросхемы термометра с высокой точностью, а также интерфейсы I2C (например, DS1820 или LM75).
ГЛАВА 12
Генерирование частот и приложения
При помощи микросхемы FT232R можно генерировать на сигнальных линиях различные частоты. Сигналы очень хорошо подходят для синхронизируемых приложений и задач управления.
12.1.	Генератор частот последовательного интерфейса
С этим приложением вы познакомились уже в главе 6. В этом случае вы почти всегда связаны с миллисекундным USB-кадром, определенную роль играет и быстродействие компьютера. Чем меньше частота, тем точнее вы можете генерировать желаемый ход сигналов.
12.2.	Генератор частот с Bit Bang
В режиме Bit Bang можно генерировать более высокие частоты. Буфер чтения в 16-битовом такте настроенной скорости передачи выдается на сигнальные линии. При настроенной скорости 9600 бод тактовая частота составляет 153 600 байт/с; каждые 6,5 мкс состояние сигнала может меняться. Применение максимальных скоростей передачи 64 байта/кадр данных по USB в режиме полной скорости для приложений реального времени ограничено.
Другие примеры использования вы найдете в главе 13 о генерировании тактовых сигналов для последовательных эмуляций интерфейса I2C и в главе 16, где дан анализ цифровых схем.
Следует упомянуть цифровые счетчики, составление кодов для запоминающих устройств, а также управление пьезодвигателями.
Генерирование частот и приложения
131
Рис. 12.1 покажет, насколько простым является перестройка 8-битного счетчика на сигнальных линиях от DO по D7.
Рис. 12.1
Запустите программу Bsp_Frequengenerator.exe в каталоге \Bsp_l 5\Bsp_ Frequenzgenerator.
Без осциллоскопа вы ничего не увидите, когда нажмете кнопку START. Данные, как нам показывает рис. 12.2, выдаются на сигнальных линиях с DO до D7.
19200
$
1
№
i
зй !>й Й
Рис. 12.2

| Anzahl vorhandener USB Gerate: 1
I asynchrones BitBang aktivieren
I BaudRate betragt 19200
I asynchrones BitBang Mode aktiviert
| Frequenzgenerator gestartet
H 256 Byte geschrieben
•beendet-14:23:29
s




Можно довольно быстро реализовать генератор частот для микросхемы FT232R в режиме Bit Bang (листинг 12.1).
132
Глава 12t
Private Sub bt_freq_Click ()
Bit Bang mit ausgewShlter Baudrate einschalten im asynchronen Mode!
Call bt_BitBangAn ’ наполнить буфер выбранными.байтами от 0-255 strWriteBuffer = ””
For il% = 1 To Vai(lb_bsize.Text) / 256
For ib% = 0 To 255
strWriteBuffer =* strWriteBuffer & Chr$(ib)
Next ib
Next il
LoggerList.AddItem "Frequenzgenerator gestartet”
• и записать в асинхронном Bit Bang режиме
If FT_Write(IngHandie, strWriteBuffer, Len(strWriteBuffer), __ IngBytesWritten) <> FT__OK Then
LoggerList.AddItem "Write Failed”
GoTo CloseHandle
Else
LoggerList.AddItem Len(strWriteBuffer) & ” Byte geschrieben”
End If
CloseHandle:
If FT_Close(IngHandie) <> FT_OK Then
LoggerList .AddItem ”Fehler bei Aufruf: FT_Close”
Exit Sub
Else
LoggerList.Add!tem "-beendet-” & Time()
End If
End Sub.
Исходный код вы найдете в демонстрационной программе \Bsp_l 5\Bsp_ Frequenzgenerator. Функция Bit Bang работает в этом примере в асинхронном режиме. Достаточно простой функции FT Write. Буфер записи заполняется, прежде всего, показаниями счетчика 0 до 256, процесс при необходимости повторяется несколько раз, если заданный размер буфера составляет 512 или 1024 байтов.
Гэнерирование частот и приложения
133
12.3.	Цифроаналоговый преобразователь с ШИМ
ШИМ (широтно-импульсная модуляция) называют модуляцию сигнала прямоугольной формы при постоянной частоте (см. рис. 6.9).
При постоянной частоте (в данном случае 50 Гц = 20 мс) изменяется отношение времени включения ко времени выключения. Бели время t екл такое же по величине, как и t выкл, то скважность составляет 50%, а среднее постоянное напряжение — ровно половину приложенного напряжения. Если скважность меньше, как нам показывает верхняя характеристика на рис. 6.9, то и средняя мощность Меньше. Если скважность, больше, как нам показывает нижняя характеристика, то средняя мощность соответственно больше. Вместе с этим также меняется среднее значение постоянного напряжения выходного сигнала.
RC-звено (резистивно-емкостное звено) интегрирует временную характеристику входного напряжения, если временная константа т = R х С больше длительности импульса.
При достаточно высокой тактовой частоте по правильно выбранному RC-звену можно сгенерировать постоянное Напряжение, которое соответствует скважности. При скважности 50% постоянное напряжение составляет половину питающего напряжения USB, около 2,5 В.
ШИМ-сигналы удается достаточно легко генерировать для микросхемы FT232R в режиме Bit Bang. Исходный код листинга 12.2 вы найдете в каталоге \Bsp_l 5\Bsp_DAWandler демонстрационных программ.
Private Sub bt__da_test_Click ()
' включить Bit Bang с заданной скоростью
’ установить правильный выход (TxD в Formload)
intMask = &Н0 Or 2 л PWMAusgang
Call bt2_BitBangAn
’ заполнить буфер, 128 байтов для ШИМ
Dim ipwm As Integer strWriteBuffer = ””
For il% = 1 To Vai(lb_bsize.Text) / 128
’ сначала высокий (High)
For ipwm = 0 To Me.HScroll_PWM.Value
strWriteBuffer » strWriteBuffer & Chr$(&H0 Or 2 A PWMAusgang) Next ipwm
134
Глава 12
’ затем низкий (low)
For ipwm = Me.HScroll_PWM.Value To Me.HScroll_PWM.Max strWriteBuffer « strWriteBuffer & Chr$(&H0)
Next ipwm
Next il
strBeschreibung = Trim(Me.DeviceName.Text) & Chr(O)
If FT_OpenEx(strBeschreibung, FT_OPEN_BY_DESCRIPTION, IngHandie)
FTJDK
Then
LoggerList.AddItem ’’Fehler bei Aufruf: FT_OpenEx” Exit Sub
End If ’ в цикле удлинить интервал For ipwm = 1 To 10
SendRead_FTDI_Bytes
Next ipwm
CloseHandle:
If FT_Close(IngHandie) <> FT_OK Then
LoggerList.AddItem ’’Fehler bei Aufruf: FT_Close’’ Exit Sub
Else
LoggerList. Additem ’’-beendet-’’
End If
End Sub
Для того чтобы сгенерировать сигнал ШИМ с частотой дискретизации 50%, первые 64 бита должны генерироваться в одном состоянии, следующие 64 бита— в другом состоянии. Постоянная частота составляет 128 битов, умноженных на выбранную тактовую частоту (длина слова в битах). Используемый ползунок имеет максимальное значение 127. В зависимости от настройки ползунка равным образом изменяется и генерируемая в буфере записи скважность.
Для вывода буфера записи функция sendRead ETDi Bytes вызывается в цикле. Число прогонов вы должны согласовать с вашими потребностями и выбранными RC-величинами.
Сопротивление подключается на одной стороне к TXD, конденсатор на другой стороне сопротивления— к "земле" (рис. 12.3). Постоянное напряжение следует измерять на конденсаторе. Конечно, в программе можно настроить и другие выходы в качестве TXD.
При больших частоте и т вывод должен повторяться несколько раз, т. к. буфер записи очень скоро будет пустым. На основании передачи данных по
Генерирование частотиприложения
135
USB вы получите более сильные колебания постоянного напряжения (прилагаемое программное обеспечение RC-e-funktion демонстрирует это на конкретных примерах). При скорости передачи 76 800 бод вывод при размере буфера 1024 байта не длится и миллисекунды, и полное напряжение не может быть достигнуто!
TxD О-
Аналоговый выход
R1
С
Рис. 12.3
При маленьких сопротивлениях определенную роль играет также входное сопротивление 200 кОм сигнальной линии.
Если для тестирования вам понадобится подключить через электролитический конденсатор в 100 Ц динамик ПК (пьезогромкоговоритель или динамик с дополнительным 100-омным сопротивлением), то при разных скоростях передачи в бодах вы будете слышать соответственно и разные тоны (или прерывания).
При этом нужно учесть, что сигналы с 16-кратной скоростью передаются на следующую операцию и в программе снова делятся на 128.
ГЛАВА 13
Хранение пароля в EEProm
В этой главе вы узнаете, как можно эксплуатировать память данных EEProm по USB в режиме Bit Bang для микросхемы FT232R. Обратиться к EEProm можно через последовательный интерфейс I2C. FT232R становится преобразователем интерфейсов. Программа простым способом может обрабатывать и анализировать передаваемые данные и временную характеристику интерфейса I2C.
13.1.	Основы памяти данных EEProm
Данные могут храниться в EEProm (Electrically Erasable Programmable readonly memory, электронно-стираемое программируемое ПЗУ, ЭСППЗУ) десятками лет без подключенного напряжения питания.
В отличие от компакт-диска, который может быть записан лишь один раз, данные в EEProm многократно заново записываются в запоминающих ячейках, аналогично дискам многократной перезаписи CD-RW.
Современные EEProm в большинстве своем позволяют до миллиона циклов записи и чтения. Многие производители EEProm поддерживают интерфейс I2C. Однократно записываемая память без напряжения питания сохраняет свои данные минимум 40 лет.
13.2.	Основы интерфейса I2C
EEProm 24С16 управляется по шине I2C при помощи двух сигнальных линий — SCL и SDA. SCL — это тактовый сигнал. Он обычно генерируется исключительно ведущим устройством шины (Master), а читается подключенными чипами (Slaves, ведомые устройства), поэтому направление передачи устанавливается однозначно.
Хранение пароля в ЕЕРгот
137
SDA пересылает биты данных. По этому контакту как Master, так и Slave передают свои данные.
Существует ряд точно определенных ситуаций, которые регулируют общий ход — от состояния покоя через старт, передачу данных, подтверждение данных и остановку между Master и Slave, как нам наглядно демонстрируют временные диаграммы ( Timings на рис. 13.1).
SCI.
SDA
CONDITION
INPUT CHANCE;
CONDITION
START CONDITION
SCL
SDA
ACK
STOP CONDITION
Рис. 13.1
Состояние приложенного на SDA бита данных может меняться только тогда, если SCL = 0. При SCL = I приложенные данные (каждый раз 1 бит) являются принципиально значащими. Сокращение MSB (первый бит в крайнем левом положении) расшифровывается как Most Significant Bit (наиболее значащий бит) и передается в первую очередь.
Старт-условие постоянно проверяется подключенным Slave-устройством и должно устанавливаться перед каждой передачей данных. Старт начинается тогда, когда SDA меняет свое состояние с HIGH на LOW, a SCL при этом HIGH. Остановка имеет силу, когда SDA снова меняет свое состояние LOW
138 Глава 13
на HIGH, a SCL находится в HIGH. Девятый АСК-бит сигнализирует значащие данные (рис. 13.2).
WC
АСК	АСК	АСК
BYTE WRITE
|~П I T'I'I DEVSEL ।  ।  । ।
rq riii । ri г . BYTEADDR
fW
(Л
Рис. 13.2
После старт-условия через I2C передается Device Select Byte (выбранный байт устройства) (байт адреса DEV-SEL) со значением чтения или записи. Биты от В7 до В4 адреса при ST24Cxx устанавливаются в 1010. При 16-килобитном ЕЕРгот 24С16 ЕЕРгот может подключаться к I2C, биты с ВЗ по В1 в DEVSEL являются битами адреса А10, А9 и А8. Так же, как принято у I2C, последний бит первого бита адреса I2C (ВО, R/W в DEVSEL) определяет, должен ли проводиться процесс записи или чтения.
После этого передается 8-битный начальный адрес памяти, с которого должны записываться или считываться данные. Память может читаться и записываться по байтам или постранично. При постраничной записи до 16 байтов адрес памяти каждый раз увеличивается на 1.
13.3.	Память данных ищет подключение (контакт)
Электрическое подключение последовательного ЕЕРгот к интерфейсу I2C выглядит очень просто. На рис. 13.3 изображен пример с ST24C16.
Рис. 13.3
Хранение пароля в EEProm 139
SDA — это контакт для соединения с сетью, SCL — вывод часов, штырьковые выводы 1 по 3 не разведены. WC — обозначает Write Control (контроль записи). Будучи подведен к +5 В, он может предотвратить непреднамеренную запись или стирание EEProm.
Теперь вы, возможно, спросите себя, почему эта схема имеет три, а не два контакта, тем более что для микросхемы FT232R достаточно контактов RXD и RTS (или DCD). Почему монтируется дополнительный диод? Ответы на эти вопросы вы получите в следующем разделе.
13.4.	Предварительные размышления
Для моделирования последовательного интерфейса I2C нужно владеть двумя сигнальными линиями: SDA и SCL.
Многие электронщики очень нелегко справляются с моделированием последовательных интерфейсов, потому что они имеют один лишь осциллоскоп и не имеют логического анализатора. Осциллоскоп регистрирует периодические сигналы, логический анализатор исследует последовательные биты непериодических, цифровых сигналов. Без анализатора можно проводить испытания в течение нескольких часов или дней. Отдельный неправильный бит может довести разработчика до отчаяния. Однако тем большей оказывается его радость, когда все ему удается. Другие надеются на то, что кто-нибудь уже сделал соответствующую разработку, и ищут решения в Интернете. Также и компания FTDI, изготовитель FT232R, предлагает решение I2C. Этим решением является готовый программный интерфейс, который должен удовлетворять нескольким условиям аппаратного обеспечения. Если точно придерживаться предписаний FTDI, то вы в каждом случае сможете использовать готовое решение. Однако если возникнет проблема (нужно устранить ошибку или вы планируете использовать другой последовательный интерфейс), не следует ждать поддержки производителя при приемке незначительного числа изделий.
Теперь, собственно, нам не хватает только логического анализатора. Вы еще помните? При синхронном режиме Bit Bang микросхемы FT232R предыдущее состояние сигнальных линий сначала читается и сохраняется в буфере чтения, прежде чем записывается один байт. Чтение предыдущего состояния сигнальных линий — это уже своего рода анализатор!
Чтобы развить связь образующихся в программе данных с (почти) действительным поведением сигналов на линии передачи данных, нужно лишь представить результат буфера чтения в качестве временной диаграммы, как это происходит в книге.
Теперь ответ на вопрос о дополнительном диоде от линии RTS к линии RXD: микросхема FT232R в режиме Bit Bang может использовать сигнальную линию в качестве входа или выхода и лишь условно — двусторонним образом
140
Глава 13
(одновременно в качестве входа и выхода). Линия передачи данных SDA служит одновременно отправке и приему данных. Чтобы читать данные из EEProm, нужно сначала привести действие EEProm с желаемым адресом. Для этого сигнальная линия RTS должна находиться на выходе. После этого EEProm снабжает прием данных "подтверждающим" битом и отправляет данные. Для этого линия передачи данных RTS должна находиться на входе. Программа управляет постоянным переключением сигнальной линии из входа на выход, и наоборот. Процесс такого функционирования показывается в отдельном примере с двухпроводной связью. Действительная временная характеристика не может быть обработана на основании переключения, т. к. компьютер должен перенимать ее в программе. В примере с двухпроводным соединением вы узнаете, как можно анализировать сначала запись, а потом чтение данных. Одновременная обработка невозможна.
Для обработки временной характеристики дополнительные диоды и другая сигнальная линия DCD позволяют чтение при записи линий передачи данных. RTS используется в качестве входа, DCD — в качестве выхода. Если DCD имеет высокий уровень напряжения (High), то RTS может читать данные EEProm.
Если DCD меняет свой уровень с высокого на низкий, то это состояние в свою очередь также читается RTS. Таким образом, становится почти возможным анализ поведения интерфейса в реальном времени.
13.5.	За пять шагов к успеху
13.5.1.	Поэтапная разработка интерфейса I2C при помощи программного анализатора
Отсоедините USB-адаптер от компьютера и подключите дополнительную плату к USB-адаптеру. Вставьте 24C16-EEProm в штекерную колодку так, как показано на рис. 13.4.
Рис. 13.4
Хранение пароля в EEProm 141
Присоедините штырьковый вывод 5 (D2 =₽ RTS) с диодом ВАТ42 к штырьковому выводу 13 (D6 = DCD) штекерной колодки. Соедините дополнительную плату с USB-устройством и после этого подключите USB-адаптер к вашему ПК. Программа находится в каталоге Beispielprogramme\Bsp_I2CEEProm \dreidraht_mitDiode. Запустите программу I2C_3.exe.
Шаг 1: генерирование условия старта I2C
SCL в соответствии с изображением в техническом паспорте (рис. 13.5) изменяет состояние HIGH на LOW, после того как SDA изменит свое состояние на LOW. Запрограммированный результат выглядит следующим образом (рис. 13.6).
SCL
SDA
Рис. 13.5
Рис. 13.6
Сначала данные должны быть подготовлены как отдельные байты в буфере записи. После этого буфер записи записывается (и снова читается) в режиме Bit Bang, и в заключение во временной характеристике представляются результаты для SDA и SCL.
Private Sub bt_I2CStart_Click () strWriteBuffer - ”’’ i2CStart
If FTWriteRead(True) - False Then MsgBox ’’FTWriteRead Error” LoggerList.AddItem ’’Beendet ” & Time End Sub
Буфер записи strWriteBuffer стирается. Вызывается функция i2cstart, после этого буфер функцией FTWriteRead записывается. Задача функции i2cstart
142
Глава 13
заключается лишь в том, чтобы записать сигналы для условия старта в буфер
Записи strWriteBuffer:
Private Sub I2CStart()
Databyte = 0
Databyte = Databyte Or 2 A SCL Or 2 A SDA ’ set SDA and
SCL
strWriteBuffer = strWriteBuffer & Chr$'(Databyte)
Databyte = Databyte And Not (2 A SDA) • clear SDA strWriteBuffer = strWriteBuffer & Chr$(Databyte) Databyte = Databyte And Not (2 A SCL) ’ clear SCL strWriteBuffer = strWriteBuffer & Chr$(Databyte) END Sub
При помощи функций AND (логическое И) и OR (логическое ИЛИ) это очень легко запрограммировать: благодаря or 2ascl линия передачи данных SCL устанавливается точно на HIGH-сигнал (5 В), другие биты остаются не подверженными влиянию. При помощи and not (2ascl) эта линия устанавливается на LOW, другие биты в байте данных также остаются .незатронутыми. SCL и SDA при вызове программы были соотнесены с сигнальными линиями: SCL = RXD, SDA = DCD и SDAREAD = RTS.
На рис. 13.7 представлено содержание буфера с временной диаграммой для 12С-сигналов (с указанием времени для 9600 бод).
Сигнал
RXD DCD RTS
RTS
Временная характеристика
Временная SDA
характеристика
t в мкс
6,5 13 19,5	26
пх6,5
Рис. 13.7
Программа обрабатывает RXD- и DCD-биты в буфере и в функции FTWriteRead вычерчивает отдельными линиями временную характеристику.
Хранение пароля в EEProm
143
Шаг 2: генерирование условия остановки для I2C
Со знаниями, полученными ранее, нам удастся быстрее правильно измерить сигналы для дальнейших преобразований. Для начала, функция остановки в листинге 13.1.
Private Sub I2CStop()
Databyte = О
strWriteBuffer = strWriteBuffer & Chr$(Databyte) ’ clr SDA и SCL
Databyte = Databyte Or 2 A SCL ’ set SCL
strWriteBuffer = strWriteBuffer & Chr$(Databyte)
strWriteBuffer = strWriteBuffer & Chr$(Databyte)
Databyte = Databyte Or 2 A SDA ’ set SDA
strWriteBuffer = strWriteBuffer & Chr$(Databyte) END Sub
Линии SCL и SDA последовательно устанавливаются на HIGH. Шаг 2 сначала вызывает функцию старта, а затем функцию остановки. Третий шаг является наиболее сложным.
Шаг 3: последовательное разложение байта для передачи
Для последовательной передачи каждый байт должен быть разложен на отдельные биты: MSB (наиболее значащий бит) сначала, a LSB (наименее значащий бит) в конце. В это же время SCL должна быть передана на следующую операцию (измерена). Это выполняет программу I2CByte в цикле (листинг 13.2).
Private Sub I2CByte(ByVai data As Byte) ’ разложить байт в последовательность битов
• и сразу писать в strWriteBuffer
Dim n As Integer
Dim BitPosition As Byte
BitPosition = 128 ’ сначала MSB = 2A7=128, в конце LSB
For n = 1 To 8
If data And BitPosition Then
Databyte = Databyte Or (2 A SDA) ’ SDA to ’H’
Else
Databyte = Databyte And Not (2 A SDA) ’ SDA-to ’L’ End If
144
Глава 13
strWriteBuffer = strWriteBuffer & Chr$ (Databyte) ’ и один такт Databyte = Databyte,Or ,(2 л SCL) SCL to 'H' strWriteBuffer « strWriteBuffer & Chr$(Databyte) Databyte = Databyte And Not (2 л SCL) ’ SCL to ’L’ strWriteBuffer = strWriteBuffer & Chr$(Databyte) BitPosition = BitPosition / 2 Next n ’ и сгенерировать, девятый бит
End Sub
Передаваемый байт находится в data. Начиная с позиции MSB (128 = 27), устанавливается SDA, если бит имеет единицу (1), иначе он стирается. В цикле, в конце, BitPosition (позиция бита) каждый раз делится на два (64 = 26, 32 = 25 и т. д.), дальнейшие биты устанавливаются в следующих прогонах цикла или стираются. Для каждого бита сигнал SCL должен передаваться на следующую операцию (измеряться) по функциям AND и OR. И, наконец, должен быть сгенерирован еще и девятый бит. Девятый АСК-бит сигнализирует, действительны ли данные (имеют ли данные силу). Теперь SDA должен быть установлен на уровень HIGH. Благодаря этому для чтения освобождается линия DSR.
Третий шаг объединяет все: старт, генерирование байтов и остановку:
Private Sub bt_I2C_Commandl_Click () strWriteBuffer » ••••
I2CStart
I2CByte (&H55) ’ писать произвольный байт
I2CStop
If FTWriteRead(True) ='False Then MsgBox "FTWriteRead Error” LoggerList.Addltem ’’Beendet ” & Time END Sub
Временная характеристика в техническом паспорте на рис. 13.8, в сравнении с генерируемой временной характеристикой на рис. 13.9, вытянута по горизонтали.
SCI.	|\	/ 1 \ / 2 \ / 3 \	_____/ 7 \/ в \/ 9

START CONDITION
Рис. 13.8
Хранение пароля в EEProm
145
Рис. 13.9
Переданным байтом было число 85 = 55Н = 0101010101 в двоичной системе. Старт, байт и остановка функционируют правильно, девятый бит генерируется равным образом. В отличие от фрагмента из технического паспорта сигнал SDA у девятого бита остается на уровне HIGH.
Шаг 4: запись байта
Чтобы передать сообщение к 24С1 б-EEProm, 12С-функции должны исполняться в правильной последовательности друг за другом.
После сигнала старта дрлжен выводиться адрес EEProm в текстовом диалоговом поле tb devsei (для Devise Select). Адрес— 160, последним битом 160 (АО в шестнадцатеричной системе счисления, 1010 0000 в двоичной системе) является 0. Определите, куда должна быть произведена запись. Предварительно настроенная ячейка памяти 0 в текстовом поле tb byte addr может быть изменена пользователем. Байт в текстовом поле ti^ data соответствует сообщению, которое должно быть записано. Допустимы только числа от 0 до 255, т. к. программа не улавливает неверный ввод. Затем еще остановка I2C и два дополнительных такта.
Сгенерированную временную характеристику вы можете анализировать и сравнить с техническим паспортом (рис. 13.10).
После старт-условия идут первые биты с 1010 0000, в соответствии с DEVSEL-адресом 160 (восьмой бит для записи, девятый— подтверждающий бит). За ними следует адрес запоминающей ячейки 0. Другие данные (0101 0101) соответствуют вводу значения 85 в поле Data.
После восьмого бита данных сначала сигналы SDA wr и SDA rd расходятся. Вспомним: линия SDA управляется через диод, для того чтобы при записи одновременно можно было производить чтение на другой линии (в данном случае RTS). DCD соответствует сигналу SDA-wr. Диод DSD активен. EEProm подтверждает прием Low-сигналом сразу же после окончания восьмого бита данных. Является ли верным результат, полученный без использования какого-либо измерительного прибора, и был ли в действительности записан байт?
146
Глава 13
Рис. 13.10
Шаг 5: чтение байта
Результат шага 4 может быть проверен путем чтения той же ячейки памяти в EEProm (рис. 13.11).
Рис. 13.11
Читаемые данные находятся в конце временной характеристики. 0101 0101 соответствуетт вводу значения 85 в поле Data.
Указание_________________________________________________________
Данные всегда должны вплотную примыкать к началу SCL-сигнала, первый бит к этому моменту времени нулевой. В конце первого такта EEProm прикладывается следующий бит (1)
А теперь посмотрим листинг 13.3. Чтобы читать данные из запоминающей ячейки в 24С1 б-EEProm, 12С-функции должны исполняться в правильной последовательности друг за другом.
Хранение пароля в ЕЕРгот
147
Private Sub bt_I2C_Read_Click() strWriteBuffer = "" I2CStart
I2CByte Vai(Me.tb_devsel.Text) ' I2C адрес EEProm
I2CByte Vai(Me.tb_byte_addr.Text) ’ адрес хранения I2CStart
I2CByte (Vai(Me.tb_devsel.Text) + 1) ’ читать (LSB в DEVSEL в 1) I2CByte (&HFF) ' генерировать такт I2CStop
If FTWriteRead(True) = False Then MsgBox "FTWriteRead Error"
End Sub
После сигнала старта первым выдается адрес ЕЕРгот. Адрес— 160; последним битом 160 (FOHex, 101 0000 в двоичной системе) является 0. Какая ячейка памяти в ЕЕРгот должна быть прочитана? Предварительно установленный 0 в текстовом поле tb byte addr (см. шаг 4) передается следующим байтом.
Для чтения ЕЕРгот требует новый сигнал старта и снова адрес DEVSEL, теперь с 1 в LSB в качестве сигнала. Отсутствуют лишь тактовые сигналы для чтения и остановка I2C.
Изображенные временные характеристики каждый раз генерируются из буфера чтения в реальном времени! За пять шагов вы не только разработали преобразователь USB-I2C, но и одновременно с этим спрограммировали его внедрение для ЕЕРгот!
Дальнейшие указания в разработке ПО
С изменением размера буфера с 128 до 256 байтов удваивается длительность записи. Всегда в качестве максимального значения для временной характеристики используется выбранный размер буфера.
Изменив значение DEVSEL со 160, вы, возможно, больше не сможете обратиться к подключенному ЕЕРгот. По кнопке I2C-Byte Lesen адрес DEVSEL автоматически увеличится на 1. Так что не нужно менять DEVSEL. Описание алгоритма ячейки с адресом 256 находится в примере Kennwortspeicher на компакт-диске.
148
Глава 13
13.6.	"Ловля" данных
На рис. 13.12 с помощью кнопки 6 Bytes lesen считываются шесть последовательных байтов введенного адреса. Размер буфера автоматически переставляется на 512 байтов.
Рис. 13.12
Функции I2C соединяются в bt_read6Bytes_ciick в необходимой последовательности:
Private Sub bt__read6Bytes_Click ()
strWriteBuffer == ””
I2CStart
I2CByte Vai(Me.tb_devsel.Text) ’ адрес EEProm
I2CByte Vai (Me. tb_byte_addr .Text) ’ адрес хранения BMerkmal = Len(strWriteBuffer) ’ исходная позиция For i% = 0 To 5 I2CStart ’ I2CByte (Vai(Me.tb_devsel.Text) + 1) ’ читать I2CByte (&HFF) • такт I2CStop Next i
If FTWriteRead (True) « False Then MsgBox ’’FTWriteRead Error”
End Sub
После стартового сигнала I2CStart однократно передаются DEVSEL и первый начальный адрес. С каждым новым чтением внутренний счетчик адреса EEProm автоматически увеличивается на 1 и выравнивается на следующий адрес. В цикле шесть раз в буфере записи strWriteBuffer записываются по
Хранение пароля в ЕЕРгот
149
одному 12С-старту, показание DEVSEL 161, такты для чтения и сигнал 12С-остановки.
После записи буфера записи при помощи FTWriteRead данные находятся в буфере чтения strReadBuffer. Последовательные биты должны быть "выловлены" из этого потока данных и преобразованы в байты: результат представляется в окне сообщения, например, в следующем виде: 85-85-117-117.
Функция i2c_converterReadByte заботится о преобразований битов в байты. В качестве параметра вводится та позиция байта, начиная с которой последовательные биты должны соединяться в байт:
Private Function I2C_ConvertReadbyte (ByVai AbBytePosition As Long) As Byte
’ последовательные биты снова соединить в байт ’ данные верны при росте SCL ’ сначала MSB, в конце LSB Dim i As Integer Dim BitPosition As Byte Dim Data_in As Byte Dim rb As String rb = strReadBuffer data = 0 BitPosition = 128 For i = 1 To 25 Step 3 ’ до позиции 2 байта ’ байты в строке
Data_in = Asc(Mid$(rb, i + AbBytePosition, 1)) ’ SDA low или high?
If Data_in And (2 A SDAREAD) Then data = data Or BitPosition End If BitPosition = BitPosition5/ 2 Next i I2C_ConvertReadbyte = data End Function
Сначала обрабатывается MSB, в конце LSB. Эта функция похожа на преобразование байтов в последовательные биты, но с отличием величины шага цикла 3 (For i = to 25 step з). Необходимые тактовые сигналы SCL отнимают 3 байта, поэтому обработка и анализ происходят каждый раз с интервалом в 3 байта, soared при пуске программы был установлен на сигнал RTS. Результат в data возвращается по окончании работы функции.
Параметр AbBytePosition Для вызова функции I2C_ConverterReadbyte — В буфере чтения. Перед записью признак BMerkmal = Len(strWriteBuffer) уста-
6 Зак. 1084
150
Глава 13
навливается в качестве исходное позиции. От этой позиции отдельные биты читаемых байтов встречаются с регулярным интервалом:
Private Sub bt_read6Bytes_Click()
strWriteBuffer = ””
I2CStart
I2CByte tVai(Me.tb_devsel.Text) ’ адрес EEProm
I2CByte Vai(Me.tb_byte_addr.Text) ’ адрес хранения
BMerkmal = Len(strWriteBuffer) ’ исходная позиция For i% = 0 To 5 I2CStart ’ 3 байта
I2CByte (Vai(Me.tb_devsel.Text) +1) ’27 байтов
I2CByte (&HFF) ’ 27 байтов
!2CStop ’ 4 байта
Next i
If FTWriteRead (True) = False Then MsgBox ’’FTWriteRead Error”
BMerkmal = BMerkmal + 3 + 27
Ausgabestring « Vai(I2C_ConvertReadbyte(BMerkmal)) For i = 1 To 5
BMerkmal. = BMerkmal + 61
Ausgabestring « Ausgabestring & ” — ” & Vai (I2C__ConvertReadbyt e (BMerkmal))
Next i
MsgBox Ausgabestring
End Sub
В описании переменных I2cstart требует 3 байта, i2CByte — 27 байтов. Первое значение начинается после 30 байтов, следующие после 61:
I2cstart = 3 байта + 2 х i2CByte = 54 байтов + I2cstop = 4 байта,
в сумме составляют 61 байт.
Строка вывода окна сообщения заполняется первым байтом, начиная с положения BMerkmal + 30, и следующими байтами в цикле с дальнейших позиций BMerkmal + 61.
13.7.	Сопровождение хранения пароля
Емкость памяти 24C16-EEProm составляет 16 Кбит, соответственно 2048x8 байтов. В демонстрационной программе на рис. 13.13 используются первые 4x128 байт (4x128 знаков), т. е. 25% имеющейся в распоряжении емкости памяти.
Хранение пароля в EEProm
151
• USB Test
I^^Mft^^usbuart =g
.... ..a . . «
за#
яме
АЛ А Л А Л ••• ♦< ••♦•••••••••••••••••••••••	w •• w м •••••••• *« w «••• w ••«••• ее ••«*••»••••••• •••••« w •• w w •••••« w »••••••••••••••• •• •• •••• — •• •• •• • ••» w •• •••••••••• w »•••»«•••• w •••••»•••••• ее •••»••••••••»» и	w •
1234444y5W#ww.WWMWWWWW^^ .....—.......1........—.....................................—......................................
Рис. 13.13
BaudRate betragt 38400
Lesen beendet um 07:31:51
Schweeer Nationalbank: Konto 4711 KW: Pinguin. Deutsche Bark. Konta 987654321. PIN: 4711
Handy Pin 4711.2.ter Pin: 4712

ЕЬэд name: Maulwurf, Kennwort T atort


Если вы в первый раз читаете данные из "пустого" EEProm, бросаются в глаза странные символы, т. к. все байты EEProm при переполнении принимают значение 255 и в изображении генерируют служебные знаки.
Чтение EEProm идет быстро. При сохранении данных паролей возможна потеря скорости. Причину вы узнаете в описании исходного кода. Протестируйте передачу в 1200 бод — при чтении вы также заметите торможение.
13.8.	ПО памяти пароля — фрагмент исходного кода
После старт-условия через I2C передается Device Select Byte (байт адреса DEVSEL в табл. 13.1). Биты В7 по В4 адреса DEVSEL заданы в ST24Cxx значением 1010. Биты с ВЗ по В1 в DEVSEL— это биты адреса А10, А9 и А8. Как обычно в I2C, последний бит первого байта адреса. I2C (ВО = R/W в DEVSEL) определяет, производится запись или чтение.
В табл. 13.2 — остаток для следующего байта адреса от 0 до 255. При обращении к запоминающей ячейке 261 (100000101 в двоичной системе) значения от А10 до АО должны разделяться на оба байта:
152
Глада 13
.DEVSEL = 160 ' адрес DEVSEL I2C EEProms
DEVSEL = DEVSEL + (Int(Start / 256) • 2) • A10-A8 ' посылка команд I2C I2CStart
I2CByte Vai(DEVSEL)
I2CByte Vai(Start And &HFF) ’ только правый байт для старта
Таблица 13.1
DEVSEL	B7	B6	B5	B4	B3	B2	B1	BO
24C16	1	0	1	0	A10	A9	A8	R/W
Таблица 13.2
Следующий байт адреса	B7	В6	В5	В4	ВЗ	В2	В1	ВО
24C16	А7	А6	А5	А4	АЗ	А2	А1	АО
DEVSEL-байт сначала задается опорным значением 160. start — это желаемый адрес запоминающей ячейки, число 261. start/256 удаляет нижние 8 битов, остаток^— 1. 1 не может идти в ВО регистра DEVSEL (сохраняется RW-бит), а сдвигает на одну позицию дальше влево, к В Г. Поэтому результат умножается на 2 и складывается с числом 160.
Остаток для следующего байта адреса от 0 до 255 получают при помощи маски (логическая операция AND) FF в шестнадцатеричной системе счисления.
Чтение 128 байтов происходит в вызове readi28Bytes:
Private function read!28Bytes(Start As Integer)
. Auszug:
* послать команду I2C
I2CStart
I2CByte Vai(DEVSEL)
I2CByte Vai(Start And &HFF) ' только правый байт для старта
BMerkmal = Len(strWriteBuffer) ' исходная позиция
For i% = 0 То 127 ' 128 Bytes
I2CStart
I2CByte (DEVSEL +1) ' чтение (LSB в DEVSEL в 1)
I2CByte (&HFF) ' генерация такта для чтения
I2CStop
Next i
Хранение пароля в EEProm
153
I2CByte (&HFF) ’ еще пара тактов
SendRead_ETDI_Bytes
Функция известна уже из предыдущего примера и здесь приспособлена для 128 байтов. В writebytes записываются 128 байтов. Каждый байт передается в цикле по отдельности:
Private function writebytes(Start As Integer) . Auszug:
For i = 0 To Len(wrtxt) — 1 strWriteBuffer = ""
I2CStart
!2CByte.Vai(DEVSEL)
I2CByte Vai(Start + i) ’ адрес Start = 160 + i
!2CByte Asc(Mid (wrtxt, i + 1, 1)) ’ каждый байт в wrtxt
I2CStop
I2CByte (&HFF) ’ генерация такта
SendRead_FTDI_Bytes
Next i
Перед этим данные подготавливаются в строке данных, для того чтобы удалить служебные знаки EEProm. В цикле каждый отдельный байт передается по USB в строке wrtxt. Здесь не проверяется, является ли передача данных, распознаваемая по подтверждающему биту, успешной.
Так как процесс приводит к потерям скорости, он мог бы улучшиться благодаря постраничной записи (Page Write) и проверке подтверждающего бита для 24С16-EEProm.
Длительность цикла записи, согласно техническому паспорту, составляет максимально 10 мс. Для оптимизации было бы также возможно установить время цикла записи в зависимости от скорости передачи в бодах и после записи многих байтов сравнить данные благодаря обновленному чтению.
13.9.	Пример двухпроводной связи I2C
Вы можете эксплуатировать линии данных и тактовые шины интерфейса I2C с двумя сигнальными линиями.
Сигнальная линия RXD остается в качестве тактовой шины SCL I2C, линия RTS является линией передачи данных SDA I2C. (DCD включается в программе как вход над внутренним сопротивлением 200 кОм микросхемы FT232R на положительном напряжении питания.)
154
Глава 13
Так как обработка сигналов уже была разобрана в предыдущем примере, остановимся на свойствах демонстрационного ПО для записи и чтения.
Отсоедините USB-адаптер от компьютера и подключите дополнительную плату к USB-адаптеру (рис. 13.14).
Рис. 13.14
Вам не нужно вставлять изображенный диод. Соедините дополнительную плату с USB-адаптером и только после этого подключите USB-адаптер к вашему компьютеру.
Данную программу вы найдете в каталоге Bsp_I2C_EEProm\zweidraht. Запустите программу I2C_2Drahtverbindung.exe и щелкните кнопку 4. DC Byte schreiben (рис. 13.15).
Запись байтов представляется во временной характеристике SCL/SDA. Так как линия SDA используется в качестве выхода, остается только надеяться, что ЕЕРгот также обработал переданные данные (рис. 13.16).
Это можно, конечно, проверить при помощи чтения записанных ранее данных: во временной характеристике представляются и обрабатываются только прочитанные данные.
Функцией FTWriteReadAnalyze (в VB-программе) SDA может переключаться с выхода на вход и обратно. Адрес ЕЕРгот записывается, когда SDA включается как вход. Для чтения SDA затем переключается на выход.
Само собой, отдельные шаги можно было бы также промежуточно сохранить и при необходимости снова присоединить к временной диаграмме, но тогда она не поддавалась бы анализу.
Пересчитанное из временной характеристики и представленное значение 170 после чтения обрабатывается В функции I2C_ConvertReadByte.
Хранение пароля в EEProm
155
Рис. 13.15
Рис. 13.16
I
ГЛАВА 14
Тестирование инфракрасного дистанционного управления
Инфракрасные передачи данных вы обнаружите, например, в мобильном телефоне или пульте дистанционного управления для телевизора, для CD/DVD-плеера и т. д.
Рис. 14.1
Вообще на стороне отправителя используются инфракрасные передающие диоды, а на стороне приемника— инфракрасные приемные диоды. Спектральная чувствительность фотодиодов зависит от используемого полупроводникового материала. Пример показан на рис. 14.1 для элементов германия (Germanium) и кремния (Silizium). Инфракрасные передачи раббтают в области длины волн от 850 до 950 мкм и являются невидимыми для человеческого глаза. Спектральный фильтр перед приемником пропускает из общего спектра света только инфракрасный свет, чтобы предотвратить мгновенное реагирование фотодиода на нормальный дневной свет.
В противоположность фотодиоду LDR является инертным и не подходит для быстрых сигналов инфракрасной передачи данных.
Фотодиоды используются в обратном направлении. В темноте фотодиод имеет высокое внутреннее сопротивление. С повышением освещенности сопро-
Тестирование инфракрасного дистанционного управления
157
тивление уменьшается, а обратный ток увеличивается. На основании линейных связей меяеду обратным током и освещенностью фотодиоды также популярны для измерительных целей.
Фотодиоды или чувствительные фототранзисторы можно найти, помимо прочего, в оптопарах (оптронах), для гальванической развязки электрической переключательной схемы, устройствах ввода с перфокарт, в соединениях с тактовыми шайбами, в фотоячейках, при бесконтактных измерениях температуры или в схемах вспышки фотоаппарата.
Фотодиоды имеют очень короткое время реакции и переключения. Время реакции фототранзистора BPW40 составляет 3 мкс. Фотодиод BPW34 имеет время переключения 20 нс, SFH2400 — даже 5 нс! Чем меньше время реакции фотодиода, тем быстрее происходит передача данных.
Часто используемые инфракрасные микросхемы приемника SFH506-36 или TSOP1736 имеют фотодиод со встроенным усилителем и в то же время одновременно демодулятор, т. е, измеряемый световой сигнал в микросхеме сразу же переводится в цифровое значение.
14.1.	Инфракрасная передача данных в RCS-коде
Инфракрасная передача данных является последовательной передачей данных. Однако т. к. человеческий глаз не может воспринимать свет в инфракрасном диапазоне, то очень трудно без каких-либо вспомогательных средств перепроверить работоспособность дистанционного управления или инфракрасной передачи.
Одним из наименее стандартизованных методов передачи при дистанционном управлении является разработанный компанией Philips код RC5. RC5 путем нажатия кнопки передает пакет данных длиной в 14 битов. При этом первые два бита — это стартовые биты 1. Затем следует Т (Toggle-Bit), 5 битов А для адреса устройства и 6 битов В для команды прибору:
11ТАААААВВВВВВ14
Каждый отдельный бит состоит из двух частей — паузы, равной 900 мкс, и фазы тактовых сигналов около 900 мкс инфракрасного света частотой 36 кГц, чтобы приемник мог лучше отличить передаваемые данные от окружающего света.
Для бита со значением 1 сначала выжидается пауза и потом происходит отправка, для бита со значением 0 все обстоит противоположным образом, такт сначала отправляется, а затем ожидается пауза (рис. 14.2).
158
Глава 14
Бит 1
900 мкс 900 мкс
Бит О
1,8 мс
Рис. 14.2
Передается байт всегда ровно 1,8 мс, т. е. фаза отправки и пауза длятся каждая по 900 мс. Благодаря этому передача 14 битов через 25 мс завершается. Если кнопки на дистанционном пульте управления держать нажатыми, слово данных повторяется каждые 114 мс.
Описываемая здесь временная характеристика соответствует коду RC5. В зависимости от изготовителя она может выглядеть по-разному. При инфракрасной передаче данных в телефонах используются SIR (Serial Infrared) со скоростью 115 Кбит/с или FIR (Fast Infrared) со скоростью от 567 Кбит/с до 4 Мбит/с. Infrared Data Association (IrDА) описывает спецификации и протоколы передачи данных инфракрасного порта.
Способ передачи SIR характеризуется очень короткими импульсами, около 1,6 мкс, чтобьцсэкономить энергию. Если увеличить длительность этих импульсов, передаваемые данные также могли бы обрабатываться микросхемой FT232R. Время реакции BPW4G составляет около 3 мкс, и в данном случае он не подходит.
Фотодиод BPW40 по сути дела является фототранзистором. Так как не вводится в эксплуатацию дополнительный инфракрасный фильтр, фотодиод сразу реагирует на дневной свет.
В данном эксперименте нужно не только определить, включен ли инфракрасный сигнал дистанционного управления. Эту проблему можно было бы решить, в случае необходимости, при помощи схемы усилителя со светодиодным индикатором или зуммера. Также следует проверить, происходит ли цифровая смена с 0 на 1, и наоборот, что невозможно в простой схеме усилителя.
14.2.	Тестирование инфракрасного дистанционного управления
Если устройство больше не реагирует на дистанционное управление, то зачастую причиной являются батареи. Если после смены батарей дистанцион
Тестирование инфракрасного дистанционного управления
159
ное управление все еще не функционирует, то встает вопрос, является ли причиной само дистанционное управление или приемник. При помощи USB-адаптера и фотодиода вы можете протестировать функциональность дистанционного управления.
Подготовительные работы для тестирования при помощи фототранзистора BPW40 и примера 16 на компакт-диске:
1.	Соорудите тонкую картонную трубочку — для этого подойдут карандаш и липкая лента — и наденьте ее сверху на фототранзистор. Трубка должна ограничивать падение света на фототранзистор, т. к. в ином случае дневной свет сразу активирует сигнал CTS (D3) через транзистор.
2.	Удалите USB-адаптер от компьютера и подключите дополнительную плату к USB-адаптеру (рис. 14.3).
Рис. 14.3
BPW40 подключается к штырьковому выводу 4 (земля = GND) и штырьковому выводу 16 (CTS). Анод обычно длиннее, и он должен быть подключен к штырьковому выводу 16 (CTS = D3).
3.	Снова подключите USB-адаптер с дополнительной платой и запустите программу beispiel_16.exe в каталоге Bsp_16 демонстрационных программ.
4.	Нажмите кнопку BitBang ап (Включить Bit Bang), чтобы активировать режим Bit Bang, а затем на Lesen mit Tinier (Считывать с таймером); чтобы контролировать состояния проводимости (линий). Фототранзистор должен быть затемнен, чтобы сигнал D3 (CTS), как и другие сигналы, был активирован. Если держать включенную настольную лампу по направлению к фототранзистору, то состояние изменится. Направляя пульт на фототранзистор и нажимая кнопку дистанционного управления, вы, возможно, заметите кратковременные изменения состояния— дистанционное управление отправляет ИК-сигналы.
160
Глава 14
-USB Test	...	........	....	. '. . [Xj
gpiiiiiiii 11111111111m111111111111 iiiiiiiiii iiiiuui i\i111111111111111111 11111111111111111111111in11111111111 и §|iTTi 1111111111111111111
Рис. 14.4
Сигнал D3 можно анализировать в режиме Bit Bang микросхемы FT232R (рис. 14.4). Частоту дискретизации можно настроить указанием скорости передачи в бодах, а длительность дискретизации (считывания)— указанием размера буфера. Если вы изменяете одно из значений, программа автоматически определяет новую длину слова в битах и длительность записи.
16-кратным тактом настроенной скорости передачи в бодах после сигнала пуска можно опросить сигнальную линию CTS (D3) до тех пор, пока не будет настроена емкость буфера. Результат изображается построчно в нижней части формуляра. Каждая строка показывает 128 байтов.
Прежде чем нажмете на кнопку FB Test, вы должны убедиться, что D3 активирована (стоит флажок, как у других сигналов). Запись начинается только тогда, когда изменяется D3. Иначе вы должны заранее затемнить фототранзистор. После этого быстро нажмите на клавишу вашего дистанционного управления (конечно, держа по направлению к фототранзистору), и вы получите первые результаты, возможно, схожие с результатами рис. 14.4. В этом случае можно оценить функциональное состояние дистанционного управления.
Тестирование инфракрасного дистанционного управляя
161
Примечание
В данном примере испытывалось дистанционное управление японского производства, которое не посылает RCS-код!
Графическое изображение результатов занимает максимум 8 строк по 128 байтов и определяется настройкой размера буфера. Первая строка содержит первые 128 байтов, вторая строка— следующие 128 байтов. Если изображено более одной стррки, то для общей временной диаграммы вы должны мысленно последовательно соединить строки одну за другой. При каждом нажатии одной и той же кнопки дистанционного управления вы будете видеть схожие результаты.
Частота дискретизации в примере (1200 бод) составляет примерно 52 мкс, длительность записи при настроенном размере буфера 512 байтов составляет 26 мс. Тактовая частота, равная 36 кГц (около 27,7 мкс длительности), во время фазы отправки инфракрасного света дистанционного управления RC содержит 32 соответствующих световых вспышки продолжительностью света 6,9 мкс, со световыми паузами, составляющими около 20,8 мкс, в общей сложности 32 х (6,9 + 20,8 мкс) = 900 мкс. Частота 52 мкс в этом примере не годится при длительности отдельной световой вспышки 7 мкс и приводит к ошибкам. Рациональная частота дискретизации в этом примере— 38400 бод или 1,6 мкс. Паузы между световыми вспышками при коде RC5 с 900 мкс длятся значительно дольше, и поэтому при частоте дискретизации 1200 бод могут быть лучше исследованы. С размером буфера 512 байтов длительность записи составляет 26 мс, что соответствует времени, за которое один пакет данных (14 битов) передается при RC5. Если повысить продолжительность записи и сократить скорость передачи в бодах, то примерно через 120 мс произойдет повторная отправка.
Подробный анализ при более длительных записях более критичен по времени, т. к. микросхема TF232R имеет буфер от 128 до 256 байтов. Кроме этого, в программе после опроса сигнальной линии D3 срабатывает процесс чтения по USB. Также здесь нет точно определенной временной задержки. Поэтому при повторе чтения могут произойти дополнительные искажения результатов.
Достигнуть более высокой точности можно благодаря элементу временной задержки (RC-звено) для тактового сигнала 36 кГц фазы отправки. В данном случае легче всего было бы сразу применить кратко описанные вначале ИК-микросхемы приемника SFH506-36 или TSOP1736.
162
Глава 14
14.3.	Исходный код. Тестирование инфракрасного дистанционного управления
Исходный код для примера содержится в файле Bsp.VBP каталога Bsp_l6. Следующий фрагмент из исходного кода показывает важнейшие вызовы функций для теста дистанционного управления, если нажата кнопка FB Test:
Private Sub bt_fb_test_Click () ’ включить Bit Bang с заданной скоростью Call bt_BitBangAn_Click
• •
’ D3 деактивирован? тогда старт чтения' •
Do
FtStatus = FT_GetBitMode(lngHandle, Databyte)
If FtStatus <> FT_OK Then
LoggerList.Additem "Fehler bei FTjGetBitMode”
GoTo CloseHandle
End If
Loop Until ((Databyte And 2 A 3) / 2 A 3) = 0
•
SendRead_FTDI_Bytes
End Sub
bt_BitBangAn_ciick вызывает функцию bt_BitBangAn_ciick и активирует у микросхемы FT232R режим Bit Bang с настроенной скоростью передачи данных (в бодах). Вызов функции ET GetBitMode в цикле выполняется до тех пор, пока бит данных D3 (CTS на штырьковом выводе 1) не перейдет в 0. Бит данных D3 переходит в 0, как только нажимается Клавиша дистанционного управления.
Анализ продолжается вызовом функции sendRead FTDi Bytes. Вызовы уже знакомы из главы 9 и теперь были лишь соединены в одной собственной функции. Данные в цепочке знаков strWriteBuffer выдаются в синхронном режиме Bit Bang, считываемые данные после вызова содержатся в strReadBuffer.
Строка данных strWriteBuffer вначале при вызове bt fb test ciick заполняется знаками в соответствии с установленным размером буфера.
Тестирование инфракрасного дистанционного управления
163
В листинге 14Л обрабатываются данные для графического изображения.
strWriteBuffer = ”” For il% = 1 То Len(strReadBuffer) If ((Asc(Mid(strReadBuffer, il, 1)) And 2 л 3) / 2 л 3) =0 Then strWriteBuffer « strWriteBuffer & ”|” Else strWriteBuffer = strWriteBuffer & " " End If Next il • максимум 128 знаков в результате Dim i As Integer
Me.lb_erg0.Caption = Mid(strWriteBuffer, 1, 128) ’ предварительно все остальные For i = 1 To 7
Me("lb_erg" & Triirt(Str(i))) .Visible = False Next i If Vai(lb_bsize.Text) > 128 Then iz = Vai(ib_bsize.Text) / 128 For i = 1 To iz — 1 Me("lb_erg" & Trim(Str(i))).Caption = Mid(strWriteBuffer, i • 128, 128) Me("lb_erg" & Trim(Str(i))).Visible « True Next i End if
Строка данных strWriteBuffer, в зависимости от состояния D3 каждого принятого байта, заполняется в strReadBuffer вертикальным слэшем | или пробелом. | Означает ИК-сигнал света, т. к. фототранзистор к этому моменту времени устанавливает входной сигнал на уровень LOW. Содержание строки strWriteBuffer после этого функцией Mid разделяется максимум на 8 строк ПО 128 баЙТОВ каждая, С метками ОТ 1Ь_егд0 ДО lb_erg7.
14.4.	Дополнительная вспышка при помощи фотодиода
Небольшой пример электрической схемы для любителя помастерить представлен на сайте www.heise.de и рис. 14.5.
Контакт для внешней фотовспышки предлагают только дорогие цифровые камеры. По случаю можно найти те или иные бракованные фотовспышки.
164
Глава 14
При помощи фотодиода и с учетом небольших затрат на схему вы можете зажечь фотовспышку без проводов. Осторожно, существуют старые вспышки, которые на контактах подводят до 150 В, для таких устройств эта схема, конечно, непригодна.
При помощи короткого светового импульса (вспышки) транзистор проводит ток к "земле" и зажигает фотовспышку! Конденсатор заботится о том, чтобы вспышку вызывал не постоянный свет, а только световой импульс. Если вы желаете, чтобы вспышка вашей цифровой камеры работала постоянно, то нужно обратиться к примеру программы в разд. 6.4.
14.5.	Обработка во временной диаграмме
В качестве альтернативы для описанной ранее построчной обработки М. Ку-шель разработал небольшую подпрограмму на Visual Basic. Файлы находятся на компакт-диске в каталоге с примерами Bsp_16.
Результаты изображаются в нижней области формы во временной диаграмме (рис. 14.6). Каждый раз изображается общая продолжительность записи, чтобы получить максимальную разрешающую способность. Пример показывает развертку сигналов дистанционного управления с частотой дискретизации 26 мкс и продолжительностью записи 13,3 мс, при размере буфера 512 байтов.
Тестирование инфракрасного дистанционного управления
165
t I
»!22l2R^^TJtalS

ti
I
ж
IS

AnzaH vorhandener USB Gerate: 1 BitBang aktivieren BaudRate betragt 2400 ; BitBang Mode aktiviert BitBang lesen Waele auf Startsignal T aste auf Fefnbdienung drlicken *beendet*

S’
Ж
ii
Рис. 14.6






ГЛАВА 15
Анализатор
для цифровых сигналов до 60 кГц
Программа из предыдущего примера подходит и в качестве простого "одноканального анализатора" для цифровых сигналов до 60 кГц.
При тестировании дистанционного управления одновременно записываются все восемь сигнальных входов. Результаты, таким образом, уже находятся в буфере памяти strReadBuffer, а биты каждой сигнальной линии должны быть еще графически подготовлены! При дистанционном управлении обработана лишь одна сигнальная линия.
В программе ц тесте дистанционного управления может происходить ожидание события (стартового сигнала для начала записи), а также может быть запущен логический анализатор. Запуск мог бы, конечно, последовать на самые различные состояния всех сигнальных линий. Согласно всем прогнозам, при запуске могут случиться небольшие замедления, обусловленные быстродействием компьютера.
Если у вас есть генератор частот или тактовый генератор, то подключите его как фотодиод к дополнительной плате и тестируйте самостоятельно.
Указание____________________________________________
Вы должны учитывать, что высокоскоростная передача данных USB (USB-Full-Speed-Transfer) составляет 64 байта/кадр. Для простых обработок этот анализатор, однако, будет очень полезным.
Далее вы увидите некоторые результаты. На рис. 15.1 входная частота составляет около 60 кГц. Продолжительность записи установлена на 104 мкс при буфере 128 байтов. На рис. 15.2 входная частота составляет около 10 кГц, продолжительность записи установлена на 104 мкс (при 128-байтовом буфере). На рис. 15.3 входная частота составляет около 10 кГц. Продолжительность записи установлена на 208 мкс при буфере 256 байтов.
Анализатор для цифровых сигналов до 60 кГц
167
Рис. 15.1
Рис. 15.2
Рис. 15.3
Пожалуйста, не интерпретируйте рис. 15.3 таким образом, будто частота по сравнению с рис. 15.2 удвоилась. Обе входные частоты составляют по 10 кГц. С изменением размера буфера с 128 на 256 байтов удваивается длительность записи. Окончание временной диаграммы на рис. 15.2 происходит на 104 мкс, а на рис. 15.3 — на 208 мкс! Поэтому изображение на рис. 15.3 является соответственно более сжатым.
ГЛАВА 16
8-канальный логический
анализатор
Данный логический анализатор — это расширение предыдущего примера на восемь каналов с запуском программного обеспечения. Правда, он не совсем совершенен, зато бесплатный и выполняет свою задачу. Недостатки:
1. Запуск (обработка входных сигналов и ожидание стартового сигнала для начала записи) происходит благодаря (системному) программному обеспечению компьютера и вызывает, в зависимости от скорости компьютера, различные замедления.
2. Не может быть гарантирована постоянная скорость записи, т. к. используется передача данных типа USB Bulk, максимально возможная передача 64 байтов при полной скорости USB.
Достоинства:
Если вы используете сигнальную линию в качестве тактового выхода, это хороший анализатор для исследования свойств и поведения цифровых схем (8-битовый счетчик с 256-байтовым буфером на рис. 16.1).
Скорость передачи в бод определяет частоту дискретизации цифровых сигналов, размер буфера, продолжительность записи. На рис. 16.2 вы видите в качестве примера увеличение продолжительности записи 8-битового частотомера с 512-байтовым буфером.
По сравнению с 256-байтовым размером буфера в 512 байтах при одинаковой скорости передачи длительность записи удваивается.
Хотите ли вь! выбрать 0 или 1 в качестве LOW или HIGH, вы определяете в программе. Приведем фрагмент из исходного кода:
Private Sub bt_fb_test__Click ()
изменить для инвертирования представления времени опрос CBool = 0 или для инвертирования = 1
8-канальный логический анализатор
169
iAnzahl = CInt(Len(strReadBuffer)) For iPos = 1 To iAnzahl
LinieXyWertZeichnen 0, CBool(((Asc(Mid$(strReadBuffer, iPos, 1&)) And 2 л 0) / 2 л 0) = 0)
LinieXyWertZeichnen 1, CBool(((Asc(Mid$(strReadBuffer, iPos, 1&)) And 2 л 1) / 2 л 1) = 0)
Next iPos.
• •
End Sub
ж
И



5:
&
z Anzahl vorhandener USB Gefate: 1
>j| BaudRate betragt 38400 BitBang Mode aktiviert BitBang lesen
Ш Watte auf Ttiggersignal :| -beendet*
в

йааАйй—с ш д c a t г	л th мКг if
•sw W
iSS
Рис. 16.1





ж


Запуск является довольно простым. Сначала, в соответствии с состоянием диалогового поля chkSignaiLeitung, составляется байт запуска (листинг 16.1).
Private Sub bt_fb_test_Click()
Dim Triggerbyte As Byte
170
Глава 16
Triggerbyte = 2 А 0 • chkSignalLeitung(O).Value + 2 А 1 •. chkSignalLeitung(l) .Value + 2 A 2 • chkSignalLeitung(2) .Value + 2 A 3 • chkSignalLeitung(3).Value + 2 A 4 • chkSignalLeitung(4).Value + 2 A 5 • chkSignalLeitung(5).Value + 2 A 6 • chkSignalLeitung(6).Value + 2 A 7 • chkSignalLeitung(7).Value
’ статус I/O и ожидание, пока Databyte = Triggerbyte Do
FtStatus = FT_Get Bi tMode (IngHandle, Databyte)
If FtStatus <> FT_OK Then
LoggerList.Addltem ’’Fehler bei FT_GetBitMode”
GoTo CloseHandle
End If
Loop Until Databyte = Triggerbyte
SendRead_FTDI_Bytes
End Sub
Рис. 16.2
В цикле ожидание выполняется до тех пор, пока сигналы на выходе (в байте данных) не будут идентичными данным состояния в байте запуска.
8-канальный логический анализатор
171
16.1. Анализ цифровых схем
Если вы уже удивились, почему предыдущие временные диаграммы были почти совершенны, а ваши результаты выглядят иначе, то причина может быть в том, что сигнальная линия DO была установлена не в качестве входа, а в качестве выхода. С этим выходом совпал двоичный счетчик. Кроме самого тактового сигнала, вы видите только первые семь битов подключенного 8-битового счетчика.
Можно как определять такт, так и анализировать цифровую схему в то же время (способ при разработке I2C описан в главе 13).
ГЛАВА 17
Управление
шаговыми двигателями
С единственным драйвером микросхемы при помощи U SB-адаптера можно соорудить комплекс управления двух однополярных шаговых двигателей. При помощи другой микросхемы можно объединить до четырех однополярных шаговых двигателей.
Шаговые двигатели преобразуют электрические сигналы в отдельные шаги вращательного движения. Шаговый двигатель со 180 шагами за вращение с каждым импульсом двигается дальше на угол шага 2°. 3,66-й шаговый двигатель за 100 шагов совершает полное вращение, что соответствует управлению полным Шагом. Помимо этого существуют также и полушаговое управление: при 3,6°-м двигателе для полного поворота нужно 200 полушагов, что снова соответствует 1,8°-му полношаговому двигателю.
Шаговые двигатели подходят для приводных механизмов и задач позиционирования и, в зависимости от применения, могут быть получены в различных вариантах, которые покрывают разные требования в точности и нужной мощности.
Не только у роботов и приводных механизмов в промышленности — везде, где требуется линейное движение — вводятся в эксплуатацию шаговые двигатели, например, при позиционировании читающей головки в дискетах и CD/DVD-дисководах, а также в принтерах, сканерах и фотокопировальных аппаратах.
На рис. 17.1 показан шаговый двигатель с метрической резьбой на вале двигателя, используемый в качестве линейного серводвигателя. Диаметр корпуса составляет 8 мм. При помощи гайки вращательное движение преобразуется в линейное движение 0,014 мм/шаг. Собственный шаг двигателя составляет 18°.
Если вы хотите поэкспериментировать с шаговыми двигателями, можете разобрать все еще функциональный двигатель из неисправного дисковода CD-ROM-дисковода для дискет или сканера.
Управление шаговыми двигателями
173
Рис. 17.1
Однополярный шаговый двигатель имеет пять (или шесть) электрических контактов; четыре из них предназначены для управления катушками и один (или два) — для питающего напряжения.
В однополярном шаговом двигателе электрическая настройка катушек нуждается в мощных задающих устройствах, которые включают напряжение питания соответствующей катушки. Мощные задающие устройства для настройки шаговых двигателей не имеются в наличии на дополнительной плате.
Если шаговый двигатель имеет только 4 контакта, то речь обычно идет о биполярном шаговом двигателе. При биполярном шаговом двигателе вы ввиду простоты при случае должны использовать L293D или схожую микросхему (рис. 17.2).
Рис. 17.2
174
Глава 17
17.1.	Однополярный двигатель ищет контакт
Существующие микросхемы разной мощности однополярных шаговых двигателей позволяют соорудить управление при помощи мощных транзисторов (как, например, BD697), для больших мощностей — при помощи микросхем L298 шаговых двигателей, при помощи шестнадцатеричных полевых транзисторов или готовых задающих микросхем ULN для средних мощностей.
Существует несколько типов задающих микросхем ULN. В качестве примера, ULN2803 имеет TTL/CMOS-совместимые входы для прямого соединения с микросхемой FT232R.
Электрическая схема показывает управление шагового двигателя с четырьмя входными сигналами (рис. 17.3). Каждый вход отвечает за включение напряжения питания отдельной катушки; DO — за катушку LI, D1 — за L2, D2 — за L3, a D3 — за L4.
V+
Рис. 17.3
V+
GND
Рис. 17.4
Управление шаговыми двигателями
175
Эта электрическая схема показывает использование с двумя входными сигналами DO и D1. Инвертированный выход от DO к штырьковому выводу 18, отвечающий за первую катушку, устанавливается на вход 2 для второй катушки на выходе штырькового вывода 17 (рис. 17.4).
При помощи другой микросхемы ULN2803 в этом случае можно управлять 4 шаговыми двигателями, т. к. в распоряжении имеются восемь линий от DO доО7.
17.2.	Пошаговое "отбивание чечетки"
Катушки должны пошагово подключаться последовательно.
Табличное изображение управления для полношагового режима дано в табл. 17.1.
Таблица 17.1
Шаг1	Катушка 1	Катушка 2	Катушка 3	
1	1	0	0	0
2	0	1	0	0
3	0	0	1	0
4	0	0	0	1
Табличное изображение управления для полношагового режима с двумя входными сигналами дано в табл. 17.2.
Таблица 17.2
Шаг1	D0	D1
1	0	0
2	1	0
3	1	1
4	0	1
Табличное изображение управления в полушаговом режиме дано в табл. 17.3. Предложенная микросхема ULN2803 уже имеет внутренние диоды, которые снижают индуктированное напряжение при отключении катушек. Каждый выход микросхемы должен нагружаться максимум до 500 мА. Рабочее напряжение не должно превышать 50 В. Разрешено подключать входы и выхо-
176
Глава 17
ды микросхемы ULN2803 параллельно, чтобы поддерживать более высокие токи длительной нагрузки, сильнее 500 мА.
Таблица 17.3
Шаг1	Катушка 1	Катушка 2	Катушка 3	
1	1	0	0	0
2	1	1	0	0
3	0	1	0	0
4	0	1	1	1
5	0	0	1	0
6	0	0	1	1
7	0	0	0	1
8	1	0	0	1
17.3.	Пример программы
для шагового двигателя
Программирование программного обеспечения для режима Bit Bang микросхемы FT232R (рис. 17.5) разрабатывается очень просто. Исходный код находится в файле Bsp.VBP в каталоге Bsp_17 (листинг 17.1).
|гТ232п USB UART



BaudRate betragt 9600 asynchronen BitBang Mode aktiviert 1 Byte gescbrieben -beendet-17:18:56
ж о
ж

Рис. 17.5
Управление шаговыми двигателями
177
private Sub stepO
On Error GoTo step_error strBeschreibung « Trim(Me.DeviceName.Text) & Chr(O) LoggerList.Clear
If FT_OpenEx (strBeschreibung, FT__OPEN_BY_DESCRIPTION, IngHandle) <>_ FT_OKThen
LoggerList.Addltem "Fehler bei Aufruf: FT_OpenEx” Exit Sub End If ' установить скорость в бодах FtStatus = FT_SetBaudRate(IngHandle, Vai(lb_baudrate.Text)) If FtStatus <> FT_OK Then LoggerList.Addltem ’’Fehler SetBaudRate" GoTo CloseHandle
Else
LoggerList.Addltem "BaudRate betragt ” & lb_baudrate.Text End If intMask .= &HFF ’ установить режим Bit Bang Modus — все выходы intMode = 1 ’ асинхронный Bit Bang FtStatus = FT_SetBitMode(IngHandle, intMask, intMode) If FtStatus <> FT-OK Then LoggerList.Addltem "Fehler bei FT_SetBitMode” GoTo CloseHandle Else LoggerList.Addltem "asynchronen Bit Bang Mode aktiviert" End If ’ записать байт
If Fr_Write(IngHandle, strWriteBuffer, Len(strWriteBuffer), __ IngBytesWritten).<> FT_OK Then LoggerList.Addltem "Write Failed" GoTo CloseHandle
Else
LoggerList.Addltem Len(strWriteBuffer) & " Byte geschrieben" End If
CloseHandle:
If FT_Close(IngHandle) <> FT_OK Then LoggerList.Addltem "Fehler bei Aufruf: FT__Close" Exit Sub
Else
LoggerList.Addltem "-beendet-" & Time() End If End sub
178
Глава 17
Используется режим Bit Bang, т. к. должен быть произведен процесс записи, а не чтения.
Перед вызовом подпрограммы step должен быть записан соответствующий байт strWriteBuffer. Это происходит для каждой отдельной кнопки от Schrittl до Schritt4 (шаг1-шаг4):
Private Sub bt_sl_Click()
strWriteBuffer = Chr$(l) 'D0=l
Call step
End Sub
Private Sub bt_s2_Click () strWriteBuffer = Chr$(2) Call step
End Sub
Private Sub bt_s3_Click() strWriteBuffer » Chr$(4) Call step
End Sub
Private Sub bt_s4__Click ()
strWriteBuffer = Chr$(8) ’D3=l
Call step
End Sub
Для управления шаговым двигателем с двумя входными сигналами DO и D1 вы можете попробовать последовательность со значениями 1, 2, 3 и 4 (вместо 1,2,4 и 8). Возможна ли также последовательность 0, 1, 3 и 2?
Шаговый двигатель через микросхему ULN2803 подключается к DO до D3 дополнительной платы. Не забудьте создать необходимое соединение с корпусом.
Шаговый двигатель и электроника были демонтированы из старого 511/4-дюй-мового дисковода (рис. 17.6). На плате, к счастью, уже находится микросхема ULN2003/MC1413P. Входы микросхемы были напрямую соединены с USB-адаптером. Функциональность проверялась тест-программой. Быстро может быть установлена правильная последовательность с 3-1-2-4 (вперед) и 4-2-1-3 (назад). Вместо того чтобы изменить последовательность кабеля, можно, конечно, повернуть байты в программе.
Рис. 17.7 представляет некоторые шаговые двигатели для линейных приводных механизмов, сравнивая их по размеру: слева (однополярный) LSP25 с 5 В и потреблением тока 0,5 А компании Nanotec, в середине (биполярный) LSP08 с 1,8 В/0,12 А и диаметром корпуса 8 мм и справа построенный из дисковода для дискет 12-вольтовый двигатель компании Mitsubishi. Все двигатели работают в шагах 18°.
Управление шаговыми двигателями
179
Рис. 17.6
Рис. 17.7
ГЛАВА 18
Использование USB для защиты программ от копирования
Путем вызова функции FT_ListDevices можно прочитать описание устройства или серийный номер микросхемы FT232R. Возможно (а также разрешается) заново запрограммировать описание устройства, а также серийный номер в EEProm микросхемы. Для этого производитель FTDI предлагает программу под названием MPROG.
При покупке микросхемы FT232R в большем числе изделий клиент FTDI может даже получить собственный PID-код. В обоих случаях следует преобразовать FTDI-драйвер для инициализации; согласования производятся в .inf-файле! Драйвер после изменений должен быть заново установлен или загружен.
Каждая поставляемая микросхема FTDI имеет определенный ID FTDI-чипа, который является неизменяемым. ID чипа может быть дополнительно закодирован другой информацией, которая сдана на хранение в свободной области в EEProm микросхемы FT232R. Поэтому микросхема USB хорошо подходит в качестве штекера защиты программ от копирования (Dongle), чтобы защитить дорогое ПО от неразрешенного копирования.
Вызов функции FT_EE_UASize (в FTD2xxx.DLL) отражает данные, которые в EEProm свободны для использования в качестве защиты от копирования. Байты при ПОМОЩИ ВЫЗОВОВ функций FT_EEJJAWrite И FT EE UARead МОГуТ ЧИ-таться и записываться.
Для чтения ID чипа нужно использовать библиотеку FTChipID.DLL, которая находится на компакт-диске в каталоге Beispielprogramme\Bsp Dongle (рис. 18.1).
Программа FTDI_ChipID.exe в каталоге Bsp_Dongle показывает различие между серийным номером в EEProm и неизменяемым ID FTDI-чипа.
Исходный код листинга 18.1 содержится в файле Bsp.VBP в каталоге Bsp Dongle. В данном примере вызов FTID GetDeviceChipID ссылается на
Использование USB для защиты программ от копирования
181
устройство 0. У нескольких FTDI232R-ycrpoftcTB нужно принимать во внимание индекс устройства.
’ декларация в Modul.Bas
Public Declare Function FTID_GetDeviceChipID Lib ’’FTChipID.DLL” _
(ByVai dwDevicelndex As Long, ByRef IpChipIDBuffer As Long) As Long ’ вызов
Private Sub GetDeviceChipID_Click()
On Error GoTo FtdiChipId_error
ftid_Status = FTIDjGetDeviceChipID(O, ChipID)
If ftid_Status <> FTID_SUCCESS Then
LoggerList.Addltem ”FTID_GetDeviceChipID failed status =
& ftid_Status
Exit Sub
Else
LoggerList.Addltem (’’Chip ID » ” & ChipID)
End If
FtdiChipId_error_.ende:
Exit Sub
FtdiChipId_error:
MsgBox Err.Description
Resume FtdiChipId_error__ende
End Sub
Другие вызовы функций в библиотеке FTChipID.DLL даны в табл. 18.1.
7 Зак. 1084
Рис. 18.1
182
Глава 18
Таблица 18.1
Вызов функции	Краткое описание
FTIDjGetNumDevices FTIDjGetDeviceSerialNumber FTI D_GetDeviceDescription FTID_GetDeviceLocationID FTID_GetDllVersion	Определяет количество FT232R и FT245R Определяет серийный номер Определяет описание устройства Определяет Location-ID Определяет версию FTChipID.DLL
Если недостаточно этих возможностей при ограниченном количестве байтов в FTDI-EEProm, можно прибегнуть к дополнительному EEProm I2C. Информацию о том, как интегрируется дополнительный EEProm I2C, вы найдете в главе 13.
18.1. Вызов функций FTDI в Visual С
В каталоге Beispielprogramme\Bsp_Dongle\VCCWin32Beispiel компакт-диска находится простой пример Visual С для вызовов функций в библиотеке FTChipID DLL. Предоставленная готовая программа ChipID.exe находится в каталоге для отладки. Если вы сразу не скопировали FTChipID.DLL в системный каталог Windows, то будет нужен файл в каталоге программы.
Запустите программу ChipID.exe и нажмите кнопку Find 232R Devices. Программа покажет результаты всех подключенных к USB устройств FT232R и FT245R (рис. 18.2).
Anzahl vorhandaner USB Gerate: 1 Geratebeschreibung: FT232R USB UART
Si
Ж
в
jijIi
Mf
s«wtFT232R USB UART
Garat wurde gebffnet: FT232R USB UART Garat wurda geschtossen: FT232R USB UART Test erfdgreich beendet Chip ID «1863694293
FT232R USB U...
0x00000021	0x6F15B7D5
ив



—мМзМ

Рис. 18.2
Использование USB для защиты программ от копирования
183
Листинг 18.1 представляет данные в виде таблицы в Listview control. В программе Visual Basic, напротив, вы видите у ID чипа последовательность цифр 1863694293. Определенный ID чипа в VC-программе изображается в шестнадцатеричной системе счисления как 6F15B7D5.
Void PopulateListView(HWND hWndDlg, HWND hList) { ETIDJSTATUS dStatus;
unsigned long ulNumDevices, ulLocID, ulChipID;
char cSerialNumber[50], cDescription[100], cLocationlDS[ 10]
char cChipIDS [ 10J,, ErrorMessage [256];
LVITEM Ivltem;
if(hList = NULL) { hList = GetDlgltem(hWndDlg, IDC_DEVICE_LIST);
1
SendMessage(hList, LVM_DELETEALLITEMS, 0, 0); dStatus = FTID_GetNumDevices(SulNumDevices); if((dStatus = FTID_SUCCESS) && ulNumDevices) { for(int i = 0; i < (int)ulNumDevices; i++) { InsertDevNumberItem(hList, &lvltem, i);
dStatus = FTID_GetDeviceSerialNumber(i, cSerialNumber, 50); if(dStatus = FTID_SUCCESS) { InsertSubltem(hList, &lvltem, 1, cSerialNumber); }
dStatus - FTID_GetDeviceDescription(i, cDescription, 100); if(dStatus = FTID_SUCCESS) { InsertSubltem(hList, &lvltem, 2, cDescription); }
dStatus = FTID_GetDeviceLocationID(i, &ulLocID);
if(dStatus == FTID_SUCCESS) {
sprintf(cLocationlDS, «0х%08Х», ulLoCID);
InsertSubItem(hList, &lvltem, 3, cLocationlDS); } dStatus = FTID_GetDeviceChipID(i, &ulChipID); if(dStatus = FTID_SUCCESS) { sprintf(cChipIDS, «0х%08Х», ulChipID);
InsertSubItem(hList, &lvltem, 4, cChipIDS); )
184
Глава 18
if(dStatus != FTIDjSUCCESS) {
FTID_GetErrorCodeString("EN", dStatus, ErrorMessage, 256) ;
MessageBox(hWndDlg, ErrorMessage, NULL, MB_OK);
} }
Исходный код содержится в файле ChipID.cpp в каталоге Bsp_Dongle \VCCWin32Beispiel. Таблица Listview control hList заполняется при вызове функции Void PopulateListView(HWND hWndDlg, HWND hList).
Для определения количества подключенных FTDI-устройств первой вызывается функция FTiD GetNumDevices. Если были найдены одна или несколько микросхем FT232R (в случае успеха), будут установлены параметры для каждого устройства FT232R В цикле ОТ О ДО (int) ulNumDevices.
Вызов sprintf преобразует содержащееся в ulChipID число для последующего вывода в шестнадцатеричный формат.
ГЛАВА 19
Изменение данных ЕЕРгот
Компания FTDI со своим драйвером D2XX предоставляет в распоряжение много дополнительных функций для интегрированного ЕЕРгот. Изменения в ЕЕРгот требуются тогда, когда вы хотите приспособить CBUS для других приложений или использовать PID. При этом следует быть осторожным, чтобы ваша микросхема FT232R и драйвер и далее оставались в работоспособном состоянии.
Для чтения ЕЕРгот могут использоваться ВЫЗОВЫ FT_EE_Read, FT_EE_ReadEx и FT ReadEE. Вызовами функции для программирования ЕЕРгот являются FT_EE_Program, FT_EE__ProgramEx И FT_WriteEE.
ЕЕРгот стирается функцией FT_EraseEE.
Вызов функции FT EE UASize отражает количество байтов, которые в ЕЕРгот свободны для использования в качестве штекера защиты от копирования. Байты могут записываться и читаться при помощи вызовов функций FT_EE_UAWrite И FT_EE_UARead.
Для некоторых функций необходим указатель на заданную структуру данных (см. программную документацию FTDI-D2XX).
При помощи программы MPROG в вашем распоряжении оказывается лучшая и более надежная возможность изменять данные ЕЕРгот. Если вы здесь что-то изменили, позднее, возможно, еще обнаружите, что вы изменили в последний раз, если внезапно будет запрошена новая установка драйвера.
Самую новую программу MProg Utility найдете на домашней странице FTDI в поле Recources. Версию 3.0 (MProg3.0_Setup.exe) можете взять на компакт-диске, прилагаемом к книге (эта версия не подходит для версий Windows 98 и Windows Me).
Установка очень простая и не требует пояснений.
Подключите USB-адаптер и проверьте, распознается ли микросхема FT232R после запуска программы MPROG 3.0.
186
Глава 19
Если вы нажмете на символ считывания МЙ1 то в нижнем поле формы в небольшом окне будет показано сообщение Number of programmed Devices = 1. Следующим шагом в меню Tools и Read and Parse вы можете сделать так, чтобы актуальные настройки автоматически позволяли определять, что подключено хотя бы одно FTDI-устройство (рис. 19.1).
Рис. 19.1
FT232R автоматически распознается, и будет показана конфигурация, которую вы можете сохранить в шаблоне файла (Template), как на рис. 19.2.
В меню File выберите пункт Save as или символ дискеты в главном окне, чтобы сохранить данную конфигурацию (рис. 19.2). Эту конфигурацию вы снова сможете загрузить позже и при необходимости также вновь записать в FT232R-EEProm.
Режим правки EditMode
является активным только тогда, когда вы перед
этим составили новый шаблон и сохранили или загрузили существующий
Изменение данных ЕЕРгот
187
шаблон. В этом случае находящиеся в ЕЕРгот основные настройки можно изменить.
По нажатию на записывается ЕЕРгот с заново установленными значениями.
Если вы внесли какие-нибудь произвольные значения у PID или при описании изделия, то USB-драйверы FTDI при следующем подключении USB-адаптера могут более не загружаться. В этом случае, прежде чем драйвер снова будет корректно установлен, следует при помощи редактора изменить значения в файле ABE2XX.inf в соответствии со значениями, внесенными в ЕЕРгот.
Наиболее важные (при необходимости измененные вами) настройки (рис. 19.3) — это поля для USB Bus Powered или Self Powered, а также функциональность CBUS-сигналов c CBUS0 по CBSU4.
Рис. 19.2
188	Глава 19
Рис. 19.3
ГЛАВА 20
Последовательная запись и чтение без драйвера VCP
USB-адаптер может быть последовательно соединен с другими микроконтроллерами. TxD USB-адаптера (штырьковый Вывод 7 соединительного штекера) соединяется с RxD микроконтроллера, a RxD USB-адаптера (штырьковый вывод 6 соединительного штекера)— с TxD микроконтроллера (табл. 20.1). Теперь не хватает только общего соединения с корпусом (корпуса) с штырьковым выводом 2 соединительного штекера.
Таблица 20.1
Последовательные сигналы	USB-адаптер		Микроконтроллер	
TxD	штырьковый вывод? выход	отправка данных	RxD	ВХОД
RxD	штырьковый выводб выход	прием данных	TxD	вход
"земля"	штырьковый вывод 2			"земля"
После установки FTDI-драйвера по (виртуальному) COM-порту может осуществляться сообщение с микроконтроллером. Драйвер FTD2XX также можно использовать напрямую, без установки VCP-драйвера для виртуального СОМ-порта:
Примером послужит простой измерительный прибор. Измерительный прибор отправляет результаты измерения по требованию, т. е. после передачи стартовой команды измерительный прибор активен. Затем устройство устанавливает значения и отсылает результаты обратно по последовательному интерфейсу. Используемый здесь измерительный прибор нуждается в байте со значением 10 в качестве сигнального старта (чтобы измерить подключенную емкость) и в качестве результата возвращает 6 байтов. Для вывода в форму-ЛЯрС ИСПОЛЬЗуСТСЯ ИЗВССТНЫЙ Loggerlist.
190
Гпава 20
Полный исходный код VB подразделяется на несколько функциональных блоков (листинги 20.1-20.8).
Private Sub read_ti_instrument () ’ USB-устройство открыть strBeschreibung = "FT232R USB UART”& Chr(0)
If FT_OpenEx (strBeschreibung, FTJ)PENJBYJ)ESCRIPTION, IngHandle)
<> FT_OK Then
LoggerList.Additem ’’Fehler bei Aufruf: FT_OpenEx" Exit Function Else LoggerList.Additem ”----"
End If
’ задать значения последовательного интерфейса ’ установить скорость 19200 бод
FtStatus = FT_SetBaudRate(IngHandle, 19200)
If FtStatus <> FT_OK Then
LoggerList.Additem ’’SetBaudRate Failed”
GoTo CloseHandle
Else
LoggerList.Additem ’’SetBaudRate to 19200” End If ’ установить биты данных, стоп-биты и паритет ’ 8 битов данных, 1 стоп-бит, нет паритета If FT_SetDataCharacteristics(IngHandle, FT_BITS_8, FT_STOP_BITS_ 1, FT_PARITY_NONE) <> FT_OK Then
LoggerList.AddItern- ’’SetDataCharacteristics Failed” GoTo CloseHandle End If ’ контроль потока отсутствует — no flow control If FTjSetFlowControl(IngHandle, FTJFLOW_NONE, 0, 0) <> FT_OK Then LoggerList.Additem ’’SetFlowControl Failed” GoTo CloseHandle End If ’ 5 second read timeout
Последовательная запись и чтение без драйвера VCP
191
If FT_SetTimeouts(IngHandief 5000, 0) <> FT_OK Then LoggerList.AddItem "SetFlowControl Failed” GoTo CloseHandle
End If
’ послать стартовый сигнал 10 ,на микроконтроллер
strWriteBuffer = Chr$(10) IngBytesWritten = 0.
If FTJWrite(IngHandie, strWriteBuffer, 1, IngBytesWritten) <> FT_ OK Then
LoggerList.AddItem ’'Startsignal war fehlerhaft” GoTo CloseHandle End If
' прочитать количество байтов
flTimedout = False flFatalError = False ' Get number of bytes waiting to be read If FT__GetQueueStatus (IngHandie, FT_RxBytes) <> FT_OK Then LoggerList.AddItem "Status war fehlerhaft" GoTo CloseHandle End If
' ожидание, пока не достигнуто требуемое количество ’ (ожидается 6 байтов)
WarteAufMehr:
FtStatus = FT_GetStatus(IngHandie, FT_RxBytes, FT_TxBytes, lngevent_get_stat)
If FtStatus = FT_OK Then
Else
If FtStatus = FT_IO__ERROR Then
LoggerList.AddItem "Status IO Fehler"
192
Гпава 20
GoTo CloseHandle
End If
End If i « i + 1 If i > 20000 Then LoggerList.Addltem "Lesen abgebrochen" GoTo CloseHandle
End If
If FT^_RxBytes < 6 Then GoTo WarteAufMehr
’ прочитать 6 байтов (количество в FT_RxBytes) в strReadbuffer ’ обратить внимание на возможные ошибки • flTimedout » False flFatalError = False IngTotalBytesRead = 0 strReadBuffer » ”” Do IngBytesRead = 0 FtStatus » FT_Read(IngHandle, strReadBuffer, FTJRxBytes, _ IngBytesRead)
If (FtStatus - FT_OK) Or (FtStatus « FT_IO_ERROR) Then If IngBytesRead > 0 Then
IngTotalBytesRead = IngTotalBytesRead + IngBytesRead Else flTimedout = True End If Else flFatalError = True End If
Loop Until (IngTotalBytesRead = FT_RxBytes) Or _ (flTimedout ® True) Or _ (flFatalError = True)
’ данные буфера strReadBuffer показать в Loggerlist ’ или сообщения об ошибках
Последовательная запись и чтение без драйвера VCP
193
If (flTimedout = False) And (flFatalError= False) Then LoggerList.Additem strReadBuffer flFailed = False Ejlself flTimedout « True Then LoggerList.Additem ”FT_Read timeout Fehler: = ” & FtStatus Else LoggerList.Additem ”FT_Read Fehler = " & FtStatus End If
• окончание программы
CloseHandle:
If FT_Close(IngHandle) <> FT_OK Then
LoggerList.Additem ’’Close Failed”
End If
LoggerList.Additem hClosed at:” & Time
End Sub
ГЛАВА 21
Соединение USB с обучающим пакетом Mikrocontroller
Издательство Franzis предлагает новый обучающий пакет Microcontroller — вводный курс для программирования микроконтроллера. Обучающий пакет работает с последовательными интерфейсами ПК. Присоединить USB можно при помощи имеющегося в магазинах последовательного конвертера USB. Плату из обучающего пакета Microcontroller можно напрямую соединить с USB-флэш-адаптером. После этого вы можете проводить ваши эксперименты с микроконтроллером при помощи USB-флэш-адаптера (рис, 21.1).
Рис. 21.1
Никогда не соединяйте одновременно USB-адаптер и последовательный порт, т. к. 12-вольтовые сигналы интерфейса RS232 могут привести к разрушению USB-адаптера!
Для монтажа полезной будет электрическая схема в документации к обучающему пакету Mikrocontroller.
Сигнальная линия CTS должна быть соединена с RXD штекером, т. к. на плате не размещено никаких других элементов.
Соединение USB с обучающим пакетом Mikrocontroller______________________195
Можно было бы также привязать напряжение питания +5 В непосредственно к питающему напряжению VCC. В обучающем пакете Mikrocontroller напряжение питания генерируется из RTS-сигнала по 5-вольтовому регулятору. В этом примере для надежности был промежуточно включен мощный транзистор BD236/238. База транзистора включается через сопротивление 4К7 с RTS. Благодаря этому отключение питающего напряжения с имеющимся в обучающем пакете программным обеспечением остается функциональным.
Для повышения мощности при электропитании дополнительно используется линия DTR. Она в данном случае напрямую соединяется с DTR на USB-адаптере. О других сигналах: TXD нужно соединить напрямую с РВ2, RXD/CTS — напрямую с РВ1, a DTR— напрямую с РВО. В конце потребуется также соединение с корпусом (GND).
Инверсия сигналов может быть выполнена в основных настройках FT232R-EEProm. Для этого, пожалуйста, используйте программное обеспечение FTDI-MPROG, которое было описано в главе 19.
Рис. 21.2
196
Глава 21
Сигналы TXD, RXD, CTS и DTR должны быть инвертированы, a FT232R-EEProm должен быть записан с новыми значениями. Чтобы проверить, успешно ли был записан EEProm, при помощи пункта Read and Parse меню Tools программы MPROG вы должны снова прочитать значения. Если вы также хотели бы инвертировать RTS, то для отключения напряжения можно использовать вместо PNP-мощного транзистора мощный транзистор п-р-п-типа(рис. 21.2).
Не забудьте после ваших экспериментов с обучающим пакетом Mikrocontroller снова деактивировать сигналы!
Инициализация Tinyl3 (Bootloader und Fuses) и использование порта в качестве выхода тестировались автором некоторое время. Далее действуйте так же, как описано в документации обучающего пакета Mikrocontroller. Сначала выберите СОМ-порт USB-адаптера (см. главу 4). Перепроверьте для начала электропитание платы: включается значением RTS=1.
Установите проволочную перемычку от RES к ’’земле" и нажмите кнопку Bootloader und Fuses для инициализации (рис. 21.3). Процесс длится 30-40 секунд и в заключение подтверждается сообщением ок.
После этого у вас все должно получиться, как было описано в документации обучающего пакета Mikrocontroller.
Рис. 21.3
ГЛАВА 22
Пример Flash-программирования микроконтроллера Atmel-AT89LP
Эта глава задумана, прежде всего, для профессионалов, которые, может быть, захотят создать собственную программу для эмуляции интерфейса SPI.
Сразу отметим для пользователей AT89ISP: при необходимости вы должны изменить перемычку JP DDA на USB-адаптере и таким образом подвести штырьковый вывод 10 к "земле", если вы используете штырьковый вывод 10, в соответствии с документацией Atmel-AT89ISP, в качестве "земли" контакта ISP. В противном случае вы при вашей разработке ПО принимаете во внимание то, что D4 должен находиться на LOW.
Многие микроконтроллеры допускают так называемое внутрисхемное программирование (In-System-Programmierung, ISP) через последовательный порт SPL
Для SPI Box потребуется готовый программированный Atmel АТ89С2051, если у вас нет соответствующего программирующего устройства или вы не можете самостоятельно программировать контроллер. С помощью SPI Box, вероятно, можно также осуществить последовательное преобразование к I2C, однако для этого определенно необходимо приспособление ПО микроконтроллера.
С USB-микросхемой FTDI-FT232R многие последовательные интерфейсы могут быть реализованы с небольшими затратами в почти любом виде при помощи простого программного обеспечения. Для этого на страницах FTDI в Интернете показаны различные примеры в области MPSSE (Multi-Protocol Synchronous Serial Engine, многопротокольный синхронный последовательный интерфейс) с микросхемой FT2232C. Общее управление обходится без дополнительного микроконтроллера, однако проводится только с CBUS микросхемы FT232R.
Этот пример показывает, как использовать FTDI-FT232R в качестве ISP-флэш-адаптера для семейства Atmel-AT89LP. Пример в Visual Basic разъясняет, как настроить микросхему FT232R для режима Bit Bang и как двухки-
198
Гпава 22
.побайтная флэш-память Atmel AT89LP2052 читается через SPI-USB за одну-две секунды.
Разработчик в состоянии использовать функции соответствующих DLL в разных языках программирования (C++, Delphi, VB и др.) и для этого не нуждается в основательных знаниях. Драйверы WDM и VCP с 2007 г. могут использоваться одновременно. Функции Win32-API не должны быть перепутаны с API-функциями драйвера FTDI. Драйвер WDM в этом случае предлагает функции AE-Win32-API с некоторыми расширениями.
Для эмуляции интерфейсов очень интересным является режим Bit Bang (Bit Bang Mode) микросхемы FT232R. Режим Bit Bang разрешает переключать восемь I/O-линий FT232R в двухсторонний режим. Каждая линия I/O может по отдельности устанавливаться как на Output (вывод), так и на Input (ввод). Дополнительно имеются другие линии CBUS, которые тоже могут быть использованы двунаправленно. Пересылка байтов при этом, однако, ограничена USB-кадрами, и соответственно является более медленной.
Скорость передачи данных при режиме Bit Bang определяется тактовой частотой бод-генератора (см. главу 9 о режиме Bit Bang).
Синхронный режим Bit Bang для чтения флэш-памяти является идеальным для ISP-программирования. Сначала байты/биты записываются в буфере для режима программирования, потом для шагового перемещения тактовой линии SCK, затем собираются и передаются FT232R. В буфере чтения, наконец, непосредственно находятся данные MISO.
Расположение (распайка) выводов и описание приведены в табл. 22.1.
Таблица 22.1
FT232RL	FT232RQ	Описание
1	30	DO Input/Output Bit Bang Data Bus Bit 0
5	2	D1 Input/Output Bit Bang Data Bus Bit 1
3	32	D2 Input/Output Bit Bang Data Bus Bit 2
11	8	D3 Input/Output Bit Bang Data Bus Bit 3
2	31	D5 Input/Output Bit Bang Data Bus Bit 5
9	6	D6 Input/Output Bit Bang Data Bus Bit 6
10	7	D7 Input/Output Bit Bang Data Bus Bit 7
6	3	D1 Input/Output Bit Bang Data Bus Bit 1
Необходимые для синхронного режима функции драйвера D2xx:
□	FT SetBitMode — значение 0x04 активирует синхронный режим Bit Bang, 0 — вызывает сброс в стандартный режим;
Пример Flash-программирования микроконтроллера Atmel-A T89LP
199
О FT_SetBaudRate— скорость передачи в бодах определяет скорость передачи данных. Максимальная скорость 1Мбод. Значение 9600 бод определяет скорость передачи данных 9600 х 16 = 153 600 байтов в секунду, или около 1 байта за каждые 6,5 мкс;
□	FT_Write — запись данных;
□	FT_GetBitMode — актуальное состояние I/O;
□	FT_Read — чтение данных, прочитанных при синхронной записи.
22.1. ISP-программирование Atmel AT89LPxO52 через SPI
SPI-интерфейс (Serial Port Interface) служит одновременно и в качестве программируемого интерфейса для последовательного ISP (In System Programmierung— внутрисхемное программирование) AT 89LPxO52. Ntv временем этот способ является обыкновенным и предлагает для интегрированной инструментальной среды IDE (Integrated Development Environment) некоторые преимущества, т. к. можно отказаться от дорогостоящего программирующего устройства, а микроконтроллер может остаться в схеме для программирования. Однако это высказывание не совсем верно. Если у микроконтроллера Atmel AT89LPxO52 было деактивировано ISP, то далее поможет только параллельное программирование, которое, в общем, чуть-чуть изменилось относительно предыдущих версий (рис. 22.1).
Рис. 22.1
Итак, микроконтроллер для программирования > может удерживаться в текущем режиме, а также программироваться заново и запускаться вновь. Микроконтроллер Atmel программируется как Slave.
Для этого сохраняется заданная последовательность рядов. После цепочки старта ISP, которая служит для активации последовательного ISP-программирования в текущем режиме, вводится программирование цепочек А АН, АСН, 53Н. В этом случае могут передаваться до 32 байтов данных за один цикл (Page) с преамбулой (ААН), соответствующим операционным кодом (опкодом), адресами и данными. В каждой странице (Page) после каждо
200
Гпава 22
го байта данных счетчик адресов автоматически увеличивается на 1. При записи MOSI-данные должны совпадать с началом сигнала SKS. Читамые MISO-данные совпадают с окончанием последнего сигнала SCK.
В противоположность существующим ISP-привязкам Atmel поддержка SS-сигнала (вывод 8 расширенного ISP-штекера) для ISP-программирования необходима, т. к. микроконтроллер во время программирования действует как Slave. Сигнал через общий цикл должен быть активным (L). Если сигнал SS в состоянии Н, то SPI-порт Slave (исполнителя) деактивирован.
Последовательное и параллельное программирования имеют одинаковые команды. Отличается только аппаратное обеспечение. Параллельное программирование нуждается в десяти сигналах (Pl, XT АП и CS), последовательное использует лишь 4 SPI-сигнала (SS/, SCK, MOSI, MISO) и при необходимости сигнал для сброса, чтобы запрограммировать заново и запустить в схеме микроконтроллер в текущем режиме, не прибегая к установке или удалению дополнительной перемычки.
Atmel для адаптера программирования AT89ISP имеет следующую разводку кабеля ISP-штекера, описанную в табл. 22.2.
Таблица 22.2
Штырьковый вывод	Имя	Применение
1	SCK	Serial Clock
3	MISO	Master In — Slave Out
4	vcc	Power
5	RST	Reset
9	MOSI	Master Out—Slave In
2,10	GND	Masse
6,7,8	NC	No Connection
22.2. Пример из Visual Basic — чтение Flash
В листинге 22.1 описан процесс инициализации и чтения флэш-памяти. В качестве подспорья может послужить спецификация Atmel для ISP-программирования.
Private Sub btJRead2052Flash_£lick()
init_j>rogrammer ' open USB Device and set to Bit
Пример Flash-программирования микроконтроллера Atmel-AT89LP
201
фапд Mode device_power_up 1 power up sequence strWriteBuffer =
command_start ’ set SS and SCK to low in writeBuffer datasend &HAA ’ = ser 24 Bytes!
datasend &HAC datasend &H53 command_end strWriteBuffer = strWriteBuffer & Chr$(Databyte) ’ short wait strWriteBuffer = strWriteBuffer & Chr$(Databyte)
For p% = 0 To 2047 Step 32 • 2048 bytes read 64 pages of 2052 coiumand_start ’ set SS and SCK to low datasend (&HAA) '• send preamble datasend (&H30) * send opcode for read code page datasend (Int(p / 256)) ’ send AdressHigh datasend (p And &HFC) ’ send AdressLow lngwr_command_end = Len(strWriteBuffer) For i = OTo 255 ' 32-8
Databyte = Databyte Or (2 A SCK) ’ SCK to ’H’ strWriteBuffer = strWriteBuffer & Chr$(Databyte) Databyte =» Databyte And Not (2 A SCK) ' SCK to ’L' strWriteBuffer = strWriteBuffer & Chr$(Databyte) Next i command_end ’ set SS to ’H' — last byte SendRead_FTDI_Bytes ’ FTDI write and read back ’ ConvertReadData не содержится LoggerList.AddItem & _ ’ обращает прочитанные биты в байт ConvertReadData_32Bytes (Mid$(strReadBuffer, lngwr_command_end)) strWriteBuffer = ”” strReadBuffer = ”” Next p device_power_down ’ power down and close FTDI Device End Sub
Вызов функции convertReadData_32Bytes не приводится в исходном коде. Функция снова преобразует отдельные биты в буфере записи в читаемые байты (листинг 22.2).
’ запись в буфер и повторное чтение байтов
Public Function SendRead_FTDI_Bytes() As Boolean
If FT__Write (IngHandie, strWriteBuffer, Len(strWriteBuffer)., Ing-
202	Гпава 22
— - ---------------------------------  . - - ------------ -
BytesWritten) о FT_OK Then LoggerList.Additem "Write Failed" GoTo CloseHandle
End If Do
FtStatus = FT_GetStatus(IngHandle, FT_RxBytes, FTJTxBytes, lngevent_ get_stat)
If FtStatus = FTjDK Then Else
If FtStatus = FT_IO_ERROR Then LoggerList.Additem "Get Status 10 Error" GoTo CloseHandle
End If End If
Loop Until FT_RxBytes = IngBytesWritten flTimedout = False flFatalError = False IngTotalBytesRead = 0 strReadBuffer = "" Do IngBytesRead « 0 ’ количество возвращенных байтов FtStatus = FT_Read(IngHandle, strReadBuffer, FT_RxBytes, IngBytesRead) If (FtStatus « FT OK) Or (FtStatus = FT 10 ERROR) Then If IngBytesRead > 0 Then IngTotalBytesRead = IngTotalBytesRead + IngBytesRead Else flTimedout = True End If Else flFatalError = True End If
Loop Until (IngTotalBytesRead « FT_RxBytes) Or (flTimedout « True) Or (flFatalError = True) SendRead_FTDI_Bytes = True Exit Function CloseHandle:
SendRead_FTDI_Bytes = False intMode = 0
If FT_Close(IngHandle) <> FT_OK Then LoggerList.Additem "FT__Close Failed" End If End Function
Пример Flash-программирования микроконтроллера Atmel-AT89LP 203
9 пример инициализации в Bit Bang режиме Private Function init_programmer() As Boolean Dim i As Long LoggerList.Clear flFailed = True init_programmer = false If FT_ListDevices(0, strDescription, FT_LIST_BY_INDEX &_ Or FTJ)PEN^BY_DESCRIPTION) <> FT__OK Then
LoggerList.Addltem ("ListDevices failed”) Exit Function Else
LoggerList.Addltem (’’Device Description ” & strDescription) End If ’ пример инициализации в Bit Bang режиме If FTJDpenEx (strDescription, FT__OPEN__BY___DESCRIPTION, IngHandle) <> FTjOK Then
LoggerList.Addltem ’’Open Failed” Exit Function End If FtStatus = FTJ5etBaudRate (IngHandle, PJBaudrate) ’ Set baud rate If FtStatus <> FT_OK Then
LoggerList.Addltem ’’SetBaudRate Failed” Exit Function End If • set Mosi, SCK, RST and SS to Outputs intMask = &H0 Or (2 A MOSI) Or (2 A SCK) Or (2 A RST) Or (2 A SS) intMode = 4 FtStatus « FT_SetBitMode (IngHandle, intMask, intMode) If FtStatus <> FT_OK Then
LoggerList.Addltem ’’Set Bit Bang Mode failed”
Exit Inunction Else LoggerList.Addltem "Bit Bang Mode o.k” End If IngBytesWritten = 0 Databyte = 0 init_programmer = True ’ обработка ошибок и затем init_programmer » False End Function ' один байт последовательного потока обменивается с Clock Private Sub datasend (byval data As Byte) ' prepare byte for serial data to micros SPI- add I store to writebuffer Dim n As Integer Dim stelle As Byte
204
Гпава 22
stelle = 128 ’ first get data MSB For n = 1 To 8 If data And stelle Then
Databyte = Databyte Or (2 A MOSI) ’ set MOSI Else
Databyte = Databyte And Not (2 A MOSI) ’ clear MOSI End If strWriteBuffer « strWriteBuffer & Chr$(Databyte) Databyte = Databyte Or (2 A SCK) ’ one elk, SCK to ’H’ strWriteBuffer = strWriteBuffer & Chr$(Databyte) Databyte = Databyte And Not (2 A SCK) ' SCK to ’L’ strWriteBuffer = strWriteBuffer & Chr$(Databyte) stelle = stelle / 2 Next n End Sub Private Sub device_power_up() FtStatus = FT_GetBitMode(IngHandle, testbyte) If FtStatus <> FT_OK Then
LoggerList .Addltem ’’Bit Bang Mode failed during power up” Exit Sub End If Databyte = 0 strWriteBuffer0= ”” strWriteBuffer = Chr$(Databyte) ’ все устанавливаем в Low SendRead_FTDI_Bytes Databyte = Databyte Or (2 A RST) Or (2 A SS) strWriteBuffer = Chr$(Databyte) SendRead_FTDI_Bytes ’ немного ожидания (только 2 мс) 1' листа данных Sleep (20) End Sub Private Sub device_power_down() Databyte = Databyte And Not (2 A SCK) strWriteBuffer = Chr$(Databyte) SendRead_FTDI_Bytes
Databyte = Databyte And Not (2 A RST) ’ RST to low strWriteBuffer = Chr$(Databyte) SendRead_FTDI_Bytes
Databyte = Databyte And Not (2 A SS) strWriteBuffer = Chr$(Databyte) SendRead4iTDI_Bytes intMask = &H0 intMode = 4
205
Пример Flash-программирования микроконтроллера Atmel-AT89LP
FtStatus » FT_SetBitMode (IngHandie, intMask, intMode) If FtStatus <> FT_OK Then
LoggerList.AddItem "Set Bit Bang Mode to inputs failed” GoTo CloseHandle End I f If FT_Close(IngHandie) <> FT_OK Then LoggerList.AddItem ’’Close Failed” End If End Sub Private Sub command_start() ’ set hardware conditions for SS and SCK ’ SS to ’L’, SCK to ’L’ Databyte = .Databyte And Not. (2 A SS). And Not (2 A SCK) strWriteBuffer = strWriteBuffer & Chr$(Databyte) End Sub Private Sub command_end() ’ toggle SS signal to H Databyte « Databyte Or (2 A SS) strWriteBuffer = strWriteBuffer & Chr$(Databyte)
ПРИЛОЖЕНИЕ
Описание компакт-диска
Если вы копируете каталоги и файлы компакт-диска на жесткий диск, следует деактивировать защиту от записи файлов.
В каталоге Beispielprogramme вы найдете отдельные примеры программ и исполняемые ехе-файлы.
В каталоге Bsp_l находится программа инсталляции. Если вы не установили Visual Basic, и исполняемые демонстрационные программы не функционируют из-за отсутствующих VB-библиотек, запустите первым делом Setup.exe в каталоге Bsp_ 1.
После успешной инсталляции вы можете исполнить сгенерированные в этом обучающем пакете ехе-файлы.
В каталоге Bsp_Dongle, помимо примера в Visual C++, находятся необходимые библиотеки для функций ID FTDI-чипа. В каталоге e-funktion вы найдете программу RC_E-Funktion.exe, которая визуализирует ход функции RC-e.
В каталогах Datenblatter и FTDI Manuals в формате PDF содержатся наиболее важные данные изготовителя.
В каталоге FTDI MPog находятся программы и документация для программирования FTDI-EEProm.
В каталоге FTDI-Treiber, который вы должны были выбрать после первого подключения USB-адаптера для инсталляции драйвера, находится также и каталог Ver 2.02.04 с драйвером CDM. Речь идет о непосредственно исполняемом ехе-файле для установки драйвера со стандартными VID и PID, как
это имеет место у USB-флэш-адаптера, предложенного в данной книге.
Список источников
1.	USB-справочник для электронщиков
2.	www.wikipedia.de
3.	GSM-Bentheimer Softwarehaus GmbH www.gms2000.de,www.mimikro.de
4.	Спецификации Atmel на www.atmel.com
5.	FTDI, www.ftdichip.com
6.	Б. Кайнка. Базовый курс. Микроконтроллер
7.	Райхельт Elektronik, www.reichelt.de
8.	NanotecOmbH, www.nanotec.de
9.	www.usb.org
10.	www.heise.de
Список литературы был тщательно проработан автором. Ни в коем случае не перенимается ответственность за технические и полиграфические ошибки или упущения в данном документе. Кроме того, не перенимается ответственность за повреждения, которые могут возникнуть из-за содержащейся в документе информации.
Изменения содержания оговариваются. Это касается также и изменений объема по форме, оформлению и технике (технологии).
Все права (включая перевод) сохраняются. Без письменного разрешения автора не разрешается воспроизведение этого документа в любой форме (печать, фотокопия, микрофильм и другие способы), фрагментами, а также обработка, размножение и распространение с использованием электронных систем.
Зарегистрированные товарные знаки, торговые наименования и прочее в этом документе не обозначены в качестве таковых. Они являются собственностью их соответствующих владельцев.
Предметный указатель
А
Atmel-AT89LP 106
В
Bit Bang, режим 94
Bulk-Transfer 18
С
Centronics-разъемы 6
Control-Transfer 17
D
D2XX 19
DCD 139,153
Dongle 180 DTR-сигнал 57 Dual-Slope 107
E
EEProm 136
EEProm 24C16 136
FT_SetBitMode 98
FT_Write 99
FT2232C 197
FT232R
0 микросхема 94,95,100, 101,105,106
FT232R USB UART 44
FTDI 180
FTDI-драйвер 37,180
FTDI-чип 41
FTWriteRead 149
G
GND-сигнал 58
H
Handle 98
I
Infrared Data Association 158
Interrupt-T ransfer 17
Isochron Transfer 18
Fast Infrared 158
FET 118
FIFO-контроллер 31
FT_Read 100
FT SetBaudRate 98
LDR 82
LSB 11
M
MPROG 185
MSB 11
210
Предметный указатель
N
NRZI15
О
OTG 13
Р
PID-код 180
R
RES .196
RTS-сигнал 58
RXD-сигнал 110,189
S
SAR 107
SendReadFTDI JBytes 134
Serial Infrared 158
Serial Interface Engine Cm. SIE
Shut Down Mode 33
SIE 31
Single-Slope 108 solar tracker 71 strReadBuffer 149 Sub bt_ad_read_Click 116
TXD 112,134,189
u
USB Full Speed 116
USB-Plug-and-Play 14
V
VCP19
VID 19
Virtueller Com Port Cm. VCP
w
WDM 19
Б
Байт адреса DEVSEL 151
Д
Драйвер отправителя 34
E
Единица информации 9
И
Изохронная передача данных 22
ИК-сигналы 159
Интерфейс ПК 5
К
Катодный токопровод 54
Кодирование без возвращения к нулю с инверсией См. NRZI
Конфигурация микросхемы FT232R 32
Предметный указатель
211
м
Микроконтроллер Atmel-AT89LP 22
Модуль MM232R 29
н
Нестандартные скорости в бодах 35
О
Операционный усилитель 119
п
Параллельный интерфейс 6
Параметр функции 50
Передвижной регулятор 88
Периодические опросы 89
Последовательная аппроксимация
См. SAR
Предопределенные входы 94
Р
Развертка сигналов 164
Реверсирование напряжения 91
Резистор с отрицательным ТКС 127
С
Светочувствительный фоторезистор См. LDR
Серийный номер 50
Скорость передачи 35
Стандартные значения для FTDI 36
Тест дистанционного управления 166
Тип
0 драйвера Win32 См. WDM
0 передачи данных Bulk 89
У
Установка драйвера FTDI38
Флэш-преобразователь 107
X
Хост-контроллер 31
э
Элемент SP481 34
ЭСППЗУ 136
Электроника
USB
в электронике
В книге рассмотрены:
•	Измерение,управление и регулирование при помощи интерфейсов ПК
•	Основы USB, аппаратное обеспечение, установка драйверов
•	Примеры программ на Visual Basic
•	Игры со светом, опросы входов, управление кварцевыми часами
•	Разработка генератора частоты и 8-канального логического анализатора
•	Измерение температуры
•	Управление шаговыми двигателями
•	Запись ЕЕРгот-данных
и многое другое
Интерфейс USB прочно вошел в мир современных электронных и компьютерных устройств и продолжает завоевывать все большую популярность.
В книге показано, как с помощью специализированных микросхем USB без интегрированного микроконтроллера создавать различные интересные системы управления и устройства.
Книга начинается с простых экспериментов включения/ выключения светодиода с помощью интерфейса USB, а также примеров несложных устройств: аварийной сигнализации, устройства для наблюдения за уровнем воды в аквариуме и др.
По мере приближения к концу книги представляемые примеры становятся все сложнее.
Вы создадите тестер дистанционного управления с фотодиодом и вольтметр, научитесь взаимодействовать с памятью ЕЕРгот (Electrically Erasable Programmable readonly memory), разработаете USB-защиту программ от копирования, узнаете, как легко с помощью нескольких программных строк управлять аналого-цифровым преобразователем, собранным своими руками.
Последние примеры из книги научат выполнять более сложные задания, например Flash-программирование АТ891_Р-микроконтроллера через SPI/ISP-интерфейсы, разработку универсального USB-120-интерфейса и др. Все примеры детально описаны и проиллюстрированы. Благодаря этому можно легко понять взаимосвязи программ, разработанных на языке Visual Basic, и созданных USB-устройств. Рассмотренные примеры помогут вам воплотить в жизнь собственные идеи.
OZON.rU
IIIIMIIIIIIMIII
25017816
fbHIV
БХВ-ПЕТЕРБУРГ 190005, Санкт-Петербург, Измайловский пр., 29 E-mail: mail@bhv.ru Internet: www.bhv.ru Тел.: (812) 251-42-44 Факс: (812) 320-01-79