Чтение онлайн

ЖАНРЫ

Интернет-журнал "Домашняя лаборатория", 2007 №8
Шрифт:

Неиспользованные выводы микроконтроллера подключены к внутреннему земляному полигону.

На фиг.12 слева земляной полигон соединен с чистой землей платы несколькими переходными отверстиями. За счет этого устройство оказывается не помехоустойчивым. Помеховый ток, протекающий чистой земле и уходящий в истинную землю через емкостную связь, создает градиент потенциала ("перекос"). Переходные отверстия передают перекос на земляной полигон микроконтроллера. Помеховый ток частично протекает через ножки микроконтроллера, подключенные к полигону, что может вызвать сбой.

На фиг.12 справа земляной полигон микроконтроллера соединен с чистой землей в одной точке, рядом с земляной

ножкой микроконтроллера. Помехоустойчивость устройства максимальна, т. к. чистая земля на противоположной стороне платы при этом становится разновидностью экрана, защищающего "сверхчистую" землю полигона.

Перекрестные помехи

Помимо внешних источников наносекундных помех, различные узлы внутри устройства сами могут генерировать взаимные помехи.

Современные цифровые микросхемы, особенно БИС, тоже являются источниками НП. В момент переключения сотни и тысячи транзисторов внутри БИС меняют свои состояния, в результате сотни и тысячи паразитных емкостей перезаряжаются (например, емкости затворов в КМОП микросхемах). В результате через ножки земли и питания микросхем протекают импульсные токи наносекундной и суб-наносекундной длительности и большой амплитуды. Распространяясь по шинам земли и питания платы, эти токи несколько ухудшают суммарную помехоустойчивость устройства, но сами по себе, как правило, причиной сбоев не являются.

Для уменьшения вредного влияния этих токов, в цепи питания рядом с микросхемами ставят керамические развязывающие конденсаторы. Конденсаторы должны стоять как можно ближе к ножкам земли и питания, чтобы уменьшить размер контура, по которому циркулируют токи перезаряда.

Сказанное является прописной истиной. Тем не менее, достаточно часто приходится слышать такие высказывания: "мое устройство сбоит, я поставил больше конденсаторов в питание, а оно все равно сбоит". Складывается впечатление, что некоторые разработчики считают, будто развязывающие конденсаторы ставятся для защиты от внешних помех. Это, конечно, заблуждение. Как следствие такого заблуждения, иногда встречаются платы, где развязывающие конденсаторы стоят вдалеке от микросхем, хотя ничто не мешало поставить их гораздо ближе к выводам питания.

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

ПРОГРАММИРОВАНИЕ

Работа с коммуникационными портами (СОМ и LPT) в программах для Win32

Мне часто задают вопросы о работе с СОМ портами из программ, написанных для Windows 95/98/NT. Причем чаще всего спрашивают разработчики всевозможных управляющих устройств. Эти устройства либо были разработаны давно, еще в эпоху MS-DOS, либо разрабатываются сейчас. Но объединяет их одно — устройство должно подключаться к компьютеру, в большинстве случаев через RS-232 (СОМ), реже, через Centronics (LPT).

В литературе, чаще всего, управление последовательным и параллельным портами описывается на уровне регистров этих портов, причем примеры программ приводятся на языке Assembler. Это не удивительно. Последовательный порт довольно медленное устройство, к тому же специфическое. Поэтому в программах работающих с портами используются прерывания. Параллельный порт быстрее, но тоже медленный и не менее специфичный. Взять хотя бы возможность этого порта работать в двух направлениях, да еще и с использованием ПДП (DMA).

Написать программу, управляющую устройством через СОМ порт, для MS-DOS не так сложно. Это частенько делали не программисты, а сами разработчики устройства. Сложнее было сделать красивый и удобный интерфейс

пользователя. Этим обычно занимались профессиональные программисты. С платформой Win32 дело обстоит сложнее. Но только на первый взгляд. Конечно, напрямую работать с регистрами портов нельзя, Windows это не позволяет, зато можно не обращать внимания на тонкости различных реализаций (i8055, 16450, 16550А) и не возиться с обработкой прерываний.

Описание программирования будет состоять из подробного описания функций, специфических для работы с портами, краткого описания функций работы с файлами (с портами в Win32 работают как с файлами), краткого описания функций многопотоковой обработки и, естественно, примеров программ.

Функция CreateFile

Как я уже говорил, с последовательными и параллельными портами в Win32 работают как с файлами. Следовательно, начинать надо с открытия порта как файла. Использовать привычные функции open и fopen при этом нельзя, необходимо воспользоваться функцией CreateFile. Эта функция предоставляется Win32 API. Ее прототип выглядит так:

HANDLE CreateFile (

LPCTSTR lpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES IpSecurityAttributes,

DWORD dwCreationDistribution,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile

);

Функция имеет много параметров, большинство из которых нам не нужны. Приведу краткое описание параметров:

• IpFileName

Указатель на строку с именем открываемого или создаваемого файла. Формат этой строки может быть очень хитрым. В частности можно указывать сетевые имена для доступа к файлам на других компьютерах. Можно открывать логические разделы или физические диски и работать в обход файловой системы. Однако для наших задач это не нужно. Последовательные порты имеют имена "СОМ1", "COM2", "COM3", "COM4" и так далее. Точно так же они назывались в MS-DOS, так что ничего нового тут нет. Параллельные порты называются "LPT1", "LPT2" и так далее. Учтите, что если у Вас к порту СОМ1 подключена мышь, Windows не даст открыть этот порт. Аналогично не удастся открыть LPT1 если подключен принтер. А вот с модемом дела обстоят немного по другому. Если какая-либо программа использует модем, например вы дозвонились до своего провайдера Internet, то Вашей программе не удастся открыть порт к которому подключен модем. Во всех остальных случаях порт будет открыт и Вы сможете работать с модемом сами, из своей программы.

• dwDesiredAccess

Задает тип доступа к файлу. Возможно использование следующих значений:

• 0 — Опрос атрибутов устройства без получения доступа к нему.

• GENERICREAD — Файл будет считываться.

• GENERICWRITE — Файл будет записываться.

• GENERIC_READ|GENERIC_WRITE — Файл будет и считываться и записываться.

• dwShareMode

Задает параметры совместного доступа к файлу. Коммуникационные порты нельзя делать разделяемыми, поэтому данный параметр должен быть равен 0.

• IpSecurityAttributes

Задает атрибуты защиты файла. Поддерживается только в Windows NT. Однако при работе с портами должен в любом случае равняться NULL.

• dwCreationDistribution

Управляет режимами автосоздания, автоусечения файла и им подобными. Для коммуникационных портов всегда должно задаваться OPENEXISTING.

• dwFlagsAndAttributes

Задает атрибуты создаваемого файла. Так же управляет различными режимами обработки. Для наших целей этот параметр должен быть или равным 0, или FILE_FLAG_OVERLAPPED. Нулевое значение используется при синхронной работе с портом, a FILE_FLAG_OVERLAPPED при асинхронной, или другими словами, при фоновой обработке ввода/вывода. Подробнее про асинхронный ввод/вывод я расскажу позже.

Поделиться с друзьями: