Другая жизнь lpt порта (часть 2)

Другая жизнь LPT порта (часть 2)

Для записи сигналов на LPT порт я рекомендую собрать схему (рис.1), состоящую из восьми переключателей и восьми резисторов сопротивлением 270 Ом — 1 кОм. При данном положении переключателей (кнопок) SW1-SW8 на всех верхних контактах присутствует логическая «1», при замыкании любого – на соответствующем контакте появится логический «0». Контакты можно подключать непосредственно к шине D0-D7 (контакты 2-9, адрес &H378) или к ERROR, SELECT, PAPER END, ACK и –BUSY (контакты 15, 13, 12, 10 и 11, адрес &H379).


Рис.1

Для отображения данных идущих с LPT порта рекомендую следующую схему.


Рис.2

Резисторы R1-R8 номиналом 270 — 330 Ом, светодиоды любые, скажем АЛ307Б. Питания такая схема не требует, все и так будет светиться. Я себе вывел вообще все сигналы, сразу все видно. А вообще настоятельно рекомендую скачать программу LPT 3D HARD Analyzer. Написал ее Валерий Ковтун. С помощью этой программы … в общем сами увидете.

Давайте соберем генератор прямоугольных импульсов на микросхеме К561ЛА7. Питание генератора +5В. Дело в том, что удобнее все устройства собирать, например, на 155, 555 серии, чтобы сигналы имели ТТЛ уровень. Логический «ноль» 0-0,8В и лог «единица» 2,4-4,2В. Удобство 561 серии заключается в универсальности питания — она одинаково хорошо работает от +3В до +12В. Поэтому выбор микросхем остается на ваш вкус, вопрос лишь в том, чтобы получить прямоугольные импульсы амплитудой не более +5В. Схема простого генератора импульсов изображена на рисунке 3.

Сам генератор собран на элементах D1.1-D1.3, а элемент D1.4 я просто использовал для более «красивых» фронтов выходных импульсов. R1, R2, C1 – частотозадающие элементы. При данных параметрах элементов частота генерации составляет приблизительно 5-7 Гц. Для наглядности работу генератора можно представить в виде следующего графика:


Рис.4

Выход инвертора D1.4 соединен с 2 контактом LPT разъема (шина D0). Перед использованием генератора, необходимо перевести шину D0-D7 в режим приема данных. Для этого на адрес &H37A мы посылаем 43.

Код следующий. Для тех, кто использует

inpout32.dll

dlportio.dll

DOS

, а после этого начинаем опрашивать порт &H378.

Код следующий. Для тех, кто использует

inpout32.dll

dlportio.dll

DOS

Переменная A будет принимать значение то 254, то 255. Почему?

D

D1

D2

D3

D4

D5

D6

D7

2 0

2 1

2 2

2 3

2 4

2 5

2 6

2 7

1

2

4

8

16

32

64

128

1

1

1

1

1

1

1

1

255

1

1

1

1

1

1

1

254

Дело в том, что после перевода шин D0-D7 в режим приема данных, на них выставляется уровень логической единицы (желтый ряд).

При появлении на шине D0 уровня лог «0» (голубой ряд) — первый бит принимает значение нуля, значит 0+2 1 +2 2 +2 3 +2 4 +2 5 +2 6 +2 7 = 254.

Таким образом, мы можем отследить изменение сигнала на шине D0, ну а если мы посчитаем количество изменений за 1 секунду, то мы получим… правильно — цифровой частотомер. Зная количество пришедших импульсов в секунду можно сказать о частоте в Герцах.

Итак, программа частотомер. На форме должны быть 3 кнопки и Label. Кнопка 1 пуск частотомер, Кнопка 2 стоп, Кнопка 3 – выход, Label – индицирует частоту.

Для тех, кто использует inpout32.dll

Для тех, кто использует dlportio.dll

И все? Спросите ВЫ. Да и все. Вот и вся программа, которая почему-то работает.

Ø Как видите код практически один и тот же для разных библиотек, поэтому далее на примерах мы будем рассматривать код только с библиотекой dlportio.dll

Если внимательно проанализировать код программы частотомер, можно заметить, что к счетчику прибавляется 0.5,

cntr = cntr + 0.5,

а не 1. Дело в том, что данный код программы считает переход состояния порта как из 1 в 0, так и наоборот из 0 в 1, поэтому чтобы считать частоту надо или прибавлять 0.5 , а потом выводить

Label1.Caption = Int(cntr) & «Hz»

Или прибавлять 1

cntr = cntr + 1,

А потом выводить

Label1.Caption = Int(cntr/2) & «Hz»

Вот такая математика.

Кстати, а вы не пробовали посадить какой-нибудь датчик на вращающийся вал какого-нибудь двигателя. Наверное, с помощью этой программы у вас получится прекрасный тахометр J

Ну что, поехали дальше.

Берем тот же генератор импульсов и вместо резистора R2 или R1 впаиваем терморезистор (автор статьи сходил в автомагазин и за 30 руб. купил термодатчик от ВАЗ-2101). Этот термодатчик меняет свое сопротивление в зависимости от температуры (3200 Ом при температуре +14 0 С и 143 Ома при температуре +100 0 С.) Раз мы меняем сопротивление, то меняется и частота генератора, значит мы получаем преобразователь температура-частота, т.е. цифровой термометр. Хочу обратить ваше внимание на то, что изменение сопротивления в зависимости от температуры, происходит не линейно, что видно на следующем графике,


рис.5

поэтому «объяснить» компьютеру, что 100 импульсов это 20 градусов, а 110 импульсов – это 21 градус будет не очень просто, но тем не менее возможно. Вопрос только в размерах кода и алгоритме.

Если вместо резистора поставить датчик топлива от бензобака, то мы получим индикатор уровня жидкости. Отстраивать такой индикатор удобнее следующим образом:

1. Замеряем частоту импульсов при пустой емкости

2. Доливаем какой-то объем (в зависимости от того, какую градацию – точность вы хотите получить) и опять замеряем частоту

3. И так до самого верха вашей емкости.

А можно построить индикатор уровня жидкости по другому принципу, если собрать конструкцию на рисунке ниже.


Рис.6

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


Рис.7

Обрабатывать информацию с такого устройства можно по следующему алгоритму.

  1. Перевести шины по адресу &H378 в режим чтения.
  2. Пустой бак – 255
  3. Одно деление снизу – 254
  4. Два деления снизу – 252
  5. Три деления – 248
  6. Четыре деления – 240
  7. Пять делений – 224 и т.д.

Ø Некоторые могут мне возразить, что не обязательно переводить шины D0-D7 в режим чтения, и так все будет работать. На это могу ответить только следующее – кто хочет, пусть не переводит. Дискутировать на этот предмет – не буду. Если порт &H378 не стоит в режиме приема данных и на используемом контакте (в нашем случае 2 – D0 ) присутствует логическая «1», то генератор работать не будет. Выходной ток шины D0-D7 в режиме передачи данных больше, чем выходной ток КМОП микросхемы (561ЛА7), поэтому генерации не будет. Конечно, если закоротить пинцетом контакт на землю, то никакого тока не хватит. Но мне кажется, не трудно набрать лишнюю строчку кода и сделать так, как советуют разработчики компьютерного железа.

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


Рис.8

После подачи питания на генератор мы вдруг обнаружим, что генератор-то не работает. А будет он работать только тогда, когда на входе 2 элемента D1.1 появится уровень логической «1».

DlPortWritePortUchar &H378, 1

И все сразу заработало. Вот вам генератор, управляемый компьютером. Ну, генератор это все мелко, хотя надо отдать должное этому устройству – в очень многих электронных схемах за основу взят именно генератор импульсов. А не подключить ли нам что-нибудь посерьезнее к компьютеру.

Вот такая схема


Рис.9

Вход данного устройства подключаем к любому понравившемуся нам выходу, например к D3, вход GND соединяем с общим проводом разъема, а вот +12В придется взять от отдельного источника питания. Реле можно взять автомобильное. Вообще все параметры элементов могут быть совершенно другими (я брал то, что было под рукой)

DlPortWritePortUchar &H378, 8

DlPortWritePortUchar &H378, 9

DlPortWritePortUchar &H378, 10

Главное, чтобы на шине D3 была лог «1». Реле сработает, а вот что вы к нему подцепите – это уже ваше дело. Вообще при коммутации высоковольтных устройств необходимо (на всякий случай) предохраниться от короткого замыкания, от пробоя на корпус, в общем сделать так. Чтобы в случае аварии ваш чудесный LPT порт не сгорел. Поэтому для таких подключений удобно использовать гальваническую развязку порта и вашего устройства, например, через оптопару.


Рис.10

Если в вашем устройстве все «сгорит», то через свет – увы, ток не пройдет, не придумали еще такого.

На этом вторая часть заканчивается. Будет ли третья часть – думаю будет, а вот о чем в ней пойдет речь…

Статью прислал Клюшников Алексей, г.Иваново.

Другая жизнь lpt порта (часть 2)

С реальной скидкой знакомства Комендантский проспект на лучших условиях.

Размещение сквозной ссылки

Другая «жизнь» LPT порта (часть 1)

Не ожидал, что моя первая статья вызовет такой интерес среди программистов и электронщиков, т.к. я получил массу писем с вопросами и продолжаю их получать до сих пор, хотя прошло уже почти три года с момента написания статьи. Кроме того в первой статье был допущен ряд неточностей . Это все и побудило меня на написание более подробной статьи на эту тему, в которой я постараюсь ответить на большинство вопросов уважаемых читателей и исправить те неточности, которые были допущены в первой статье. Пусть не обижаются на меня читатели первой статьи, но мы снова рассмотрим подробно каждый контактик и битик нашего LPT порта. В первой части статьи будет рассмотрена теория, во второй и последующих (если они будут) мы будем рассматривать электронные устройства, которые можно «подцепить» к этому порту.

  • В тексте вы встретитесь с общепринятой аббревиатурой записывания чисел
  • Например, — двойка в нижнем индексе указывает, что число 5 представлено в двоичном исчислении
  • – десятка в нижнем индексе, говорит о том, что число 124 десятичное

Это так… на всякий случай

Как показала практика, все программы, правильно написанные и дополненные соответствующими библиотеками (vbio32.dll, inpout32.dll, dlportio.dll и т.д.) работают на большинстве компьютеров с операционными системами семейства Windows. Я проверял работу всех своих программ (Visual Basic5.0, 6.0) на Win95, 98, Me, 2000, XP HE, XP Prof и даже в DOS6.22 (QBasic) – все работает прекрасно. В DOS-е вообще никаких библиотек не надо, там все и так работает. Сразу оговорюсь, что vbio32.dll и inpout32.dll НЕ БУДУТ РАБОТАТЬ ПОД Win2000, но совершенно спокойно будут работать под Win95, 98, Me.
Кстати, взять любую из этих библиотек вы можете здесь . Мне захотелось попробовать dlportio.dll и в данный момент я работаю с этой библиотекой. Ну и последнее, перед написанием программ необходимо правильно объявить библиотеку, которую вы используете.

  • Для inpout32.dll
    Private Declare Function Inp Lib «inpout32.dll» Alias «Inp32» ( ByVal PortAddress As Integer ) As Integer
    Private Declare Sub Out Lib «inpout32.dll» Alias «Out32» ( ByVal PortAddress As Integer , ByVal Value As Integer )
  • Для dlportio.dll
    Private Declare Function DlPortReadPortUchar Lib «dlportio.dll» ( ByVal Port As Long ) As Byte
    Private Declare Sub DlPortWritePortUchar Lib «dlportio.dll» ( ByVal Port As Long , ByVal Value As Byte )

Чем отличается Private от Public я писать не буду.

Параллельный порт для связи с принтером (или другим устройством) имеет базовый адрес &H378 (LPT1), &H278 (LPT2), &H3BC (LPT3). В данной статье мы будем рассматривать только LPT1. Адресное пространство данного порта занимает диапазон &H378-&H37F.


    Адрес &H378 называется базовым и служит для записи (чтения, но об этом попозже) данных в порт, на линии D0-D7.

Адрес &H379 (базовый+1) предназначен для чтения битов состояния с устройства, подключенного к LPT-порту (принтер, сканер и т.д)

Адрес &H37A (базовый+2) служит для записи битов управления устройства, подключенного к LPT-порту (принтер, сканер и т.д.).

Контакты 18-25 – «земля» (общий, GND, GROUND и т.д.)

Рассмотрим программирование каждого из адресов

  • Базовый адрес &H378 (LPT1) позволяет записывать данные в порт на линии D0-D7 в диапазоне от 0 до 255
  • Записываем в порт число 69

Код следующий. Для тех, кто использует
inpout32.dll dlportio.dll DOS
Out &H378, 69 DlPortWritePortUchar &H378, 69 OUT &H378, 69

  • Адрес &H379 служит для чтения битов состояния
  • Читаем состояние порта по адресу &H379

    При чтении адреса &H379 необходимо помнить, что первые три бита – не используются и всегда имеют значение лог. «1», а 7-й бит – инверсный. В результате если все контакты 15, 13, 12, 10, 11 посадить на «землю», то при чтении информации вы получите на первых трех битах (которые не используются) 1+2+4 и на 7-м бите (контакт 11-инверсный, значит, при замыкании на землю будет лог. «1») +128 итого 135. Об этом не надо забывать. Во второй части статьи мы остановимся на этом более подробно.

    Код следующий. Для тех, кто использует
    inpout32.dll dlportio.dll DOS
    Dim A as Integer
    A = Inp(&H379)
    Dim A as Integer
    DlPortReadPortUchar(&H379)
    DEFINT A-Z
    A=INP(&H379)

  • Адрес &H37A служит для записи битов управления
  • Записываем сигнал -STROBE (бит управления 0)

    Код следующий. Для тех, кто использует
    inpout32.dll dlportio.dll DOS
    Out &H37A, 10 DlPortWritePortUchar &H37A, 10 OUT &H37A, 10

    Почему 10? Давайте посмотрим в табличку

    Сигналы STROBE, AUTO, SELECT IN – инверсные, значит, чтобы на выходе контактов разъема 1, 14, 17 получить логическую «1» надо подать на эти биты логический «0», т.е. подали одно – получили противоположное. Сигнал INIT прямой (не инверсный), поэтому логическая «1» на контакте 16 появится тогда, когда мы подадим на этот бит логическую «1», т.е. что подали, то и получили.
    Попытаемся получить на контактах 1,17 – низкий уровень сигнала «0», а на контактах 14 и 16 высокий уровень сигнала «1», т.е. на выходе контактов 1,14,16,17 будет присутствовать 0 1 1 0

    На нулевой бит (-STROBE) подаем «1» (на контакте 1 будет «0»), на первый бит (-AUTO) подаем «0» (на контакте 14 будет «1»), на второй бит (INIT) подаем «1» (на контакте 1 будет «1») и, наконец, на третий бит (-SELECT IN) подаем «1» (на контакте 17 будет «0»), т.е. мы записали по адресу &H37A число 10112,-это 1310. Значит, чтобы на выходе получить 6 надо подать 13.

    Для удобства привожу таблицу со всеми возможными комбинациями чисел от 0 до 15

    Ну и, наконец, последнее в этой части статьи. Если ваш компьютер поддерживает стандарт EPP, то четвертым битом по адресу &H37A вы сможете разрешить прерывание (для LPT1 это IRQ7) от принтера, только не спрашивайте меня что это такое, я все равно ничего не знаю про прерывания. А вот пятым битом , например, подав число , вы устанавливаете шину D0-D7 в режим ПРИЕМА данных. При этом все разряды (контакты 2-9) принимают значение логической «1». Чтобы подать на нужный контакт логический «0» надо замкнуть его через сопротивление 240 – 360 Ом на «землю». Таким образом, через LPT порт компьютера мы получаем в стандартном виде устройство с 12-ю выходными сигналами и 5-ю входными, а при переводе порта в режим EPP мы получаем 4 выходных сигнала и 13 входных сигналов.


    Конец первой части.
    Во второй части статьи мы будем подключать к порту различные электронные штучки

    LPT-port: особенности и принципы работы

    Еще на заре появления первых компьютеров перед создателями стояла задача возможности подключения к ним разнообразных устройств. Особенно это стало актуальным тогда, когда компьютеры перестали занимать целые комнаты, а начали помещаться на столе, то есть стали персональными. Ведь компьютер – это не только средство для выполнения вычислений, но и устройство, пользователь которого может выполнять множество различных функций: распечатать текст или фотографии, управлять различными устройствами, воспроизводить фильмы и музыку, связаться с другими пользователями со всех уголков мира с помощью компьютерной сети. Все это становится возможным при подключении к компьютеру внешних устройств, которые называют общим словом периферия, с помощью специальных унифицированных разъемов, называемых портами.

    Порты персонального компьютера

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

    • Внутренние – для подключения устройств внутри ПК (жесткие диски, видеокарты, платы расширения).
    • Внешние – для подключения внешней периферии (сканера, монитора, клавиатуры, фотоаппарата, флешки).

    В данной статье мы рассмотрим один из видов внешнего порта, а именно LPT-port, его принцип работы, подключаемые устройства и современное применение.

    Появление LPT-порта

    Изначально LPT-port (его еще называют параллельный порт) разрабатывался только для подключения к ПК принтеров, это отражено даже в его названии – Line Printer Terminal, построчный принтерный терминал. Но в дальнейшем этот интерфейс стал применяться и для подключения других устройств: сканеров, дисководов и даже компьютеров между собой.

    LPT-port был разработан компанией Centronics, занимавшейся в 70-х годах прошлого века производством матричных принтеров. Но уже через 10 лет его стала использовать фирма IBM для подключения своих скоростных устройств. Дело дошло до того, что было несколько вариантов данного интерфейса от разных производителей периферии.

    В первоначальной версии этот порт был однонаправленным, то есть мог передавать данные только в одном направлении: от компьютера к периферийному устройству. Но это ограничение вскоре перестало устраивать пользователей, так как на рынок массово начали выходить устройства с возможностью передачи данных в обоих направлениях. Для этого различные производители предлагали свои усовершенствования – двунаправленный, ECP, EPP и другие. Пока в 1994 году не был принят международный стандарт IEEE 1284.

    Схема LPT-порта

    LPT-порт называется параллельным потому, что передача данных с помощью него осуществляется по нескольким проводникам одновременно, то есть параллельно. Этот интерфейс имеет 8-битную шину для передачи данных, 5-битную шину передачи сигналов и 4-битную шину передачи состояния.

    Ниже представлена схема контактов LPT-порта.

    Принцип работы LPT-порта

    В простейшей конфигурации, чтобы реализовать принцип работы параллельного интерфейса, хватило бы только одиннадцати проводов, а именно: 1 провод на корпус (масса), 2 провода подтверждения и 8 проводов передачи данных. Но, по общепринятому стандарту IEEE 1284, каждый из восьми проводов передачи (2-9) данных имеет отдельное заземление.

    Во время передачи данных оба устройства должны сообщать друг другу сведения о своем состоянии. Это реализуется с помощью контактов 18 и 35, на которые подается напряжение 0 В либо 5 В.

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

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

    По контактам 12-14 передаются сигналы, сообщающие контрольные сигналы о состоянии принтера и конфликтах в его оборудовании.

    По проводнику 12 на ПК передается информация о том, что в принтере нет бумаги. Компьютер реагирует на это передачей сигналов по линиям SELECT и ERROR и останавливает печать.

    По проводнику 13 на компьютер передается информация о состоянии принтера — включен и готов или выключен и не готов.

    По контакту 14 принтеру передается сигнал об автоматическом переводе строки.

    По контакту 31 (16) передается сигнал о переводе принтера в начальное состояние и очищается буфер данных, т. е. все данные стираются из памяти принтера.

    По контакту 32 (15) передаются все сигналы об ошибках во время передачи данных. Сигналы, передаваемые по этой линии, влияют на все остальные контакты и могут остановить печать. Например, часто возникающая ошибка принтера – Time Out, возникающая, когда принтер занят однотипной работой с данными и не может передать на ПК через сигнал BUSY, что он не готов к получению новых данных. Через некоторое время по линии ERROR на компьютер передается ошибка Time Out и новые данные не передаются. Иначе, при отсутствии сигнала ERROR, происходила бы дальнейшая передача данных, что привело бы к зависанию всей системы.

    По контакту 36 (17) передается информация о готовности принтера к работе, например после устранения ошибки.

    Режимы работы LPT-порта

    Существует несколько режимов работы LPT-порта, которые позволяет использовать стандарт IEEE 1284:

    • SPP (Standard Parallel Port) — представляет собой однонаправленный порт, который отлично совмещается в работе с интерфейсом Centronics.
    • NibbleMode — использование этого порта является возможностью организации двунаправленного обмена данными в режиме SPP, при помощи использования управляющих линий (4 бит) для передачи данных от периферийного устройства к контроллеру.
    • Byte Mode— режим для двустороннего обмена данными, который используется довольно редко. Его применяли в некоторых старых контроллерах до принятия стандарта IEEE 1284.
    • EPP (Enhanced Parallel Port) — над разработкой этого порта работали сразу несколько известных компаний: Intel, Xircom и Zenith Data Systems. По своей работе это двунаправленный порт, который передает данные со скоростью до 2 Мбайт/сек.
    • ЕСР (Extended Capabilities Port) — этот вариант порта появился в результате работы двух компаний: HP и Microsoft. У него появились уже дополнительные возможности, например, возможность аппаратного сжатия данных, присутствие буфера и способность работать в режиме DMA. Также поддерживает работу двунаправленного обмена данными (симметричного), скорость которого может быть до 2,5 Мбайт/с.

    Настройка LPT-порта

    Настройка LPT-порта происходит в два этапа: предварительная настройка аппаратных средств порта и текущее переключение режимов порта прикладным ПО.

    Способ и возможности настройки LPT-порта зависят от его местоположения и вида исполнения. Порты, расположенные на картах расширения, обычно конфигурируются через перемычки на самих платах, а порты, размещенные напрямую на материнской плате компьютера, — через настройки BIOS.

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

    Виды реализаций LPT-порта

    Раньше большинство производителей материнских плат размещали контроллеры LPT-port на своей продукции либо на задней панели платы. Был еще один вариант расположения. В некоторых случаях было удобно помещать контроллер на самой плате — коннекторе для подключения внешней LPT-port планки. Но с момента появления более скоростных интерфейсов для передачи данных материнских плат с распаянными LPT-портами становилось все меньше и меньше. Сейчас даже не у каждого производителя в ассортименте выпускаемой продукции имеются такие платы. И тогда на помощь приходят карты расширения, подключаемые к более современным интерфейсам:

    • PCI – LPT-port. Переходник между LPT-портом и более современным разъемом PCI.
    • PCI2 — LPT-port (PCI-Ex. 2.0). Переходник между LPT-портом и разъемом PCI-Ex.2.0
    • USB – LPT-port. Переходник между LTP-портом и современной версией широко используемого USB-разъема.

    Современное применение LPT-порта

    Из-за способности параллельной передачи данных такого порта, в 70-х — 80-х годах он зарекомендовал себя одним из самых быстроработающих интерфейсов компьютера. Поэтому он использовался даже для соединения 2-х компьютеров между собой. Но эта же особенность накладывает и ограничение на максимальную длину кабеля из-за возникающих помех в соседних проводниках. Длина не может превышать 5 м, иначе искажения сигналов превышают допустимые для корректного распознавания данных.

    C появлением более скоростных интерфейсов актуальность LPT-порта сошла на нет. Второе дыхание ему придали радиолюбители, которые используют его для управления собранными схемами (освещение в доме, светомузыка и другие устройства).

    Другая жизнь lpt порта (часть 2)

    Параллельный порт – новое знакомство!

    Автор статьи: Копыльцов Михаил ( ELC )

    Данная серия статей посвящена работе с параллельным ( LPT ) портом компьютера. В статье будут рассмотрены общие принципы передачи сигналов, приведены примеры работы с портом с исходниками кода для Visual Basic 6.0.

    В первой части рассмотрены теоретические основы, разобраны режимы работы порта, в соответствии со стандартом IEEE 1284, приведены временные диаграммы, поясняющие принципы работы порта, рассмотрены вопросы физического и электрического интерфейса.

    Часть I .

    Первое знакомство…

    Исторически так сложилось, что параллельный интерфейс появился в первых компьютерах исключительно как интерфейс подключения принтера. Отсюда и его название LPT ( Line Printer ). Однако впоследствии параллельный порт стал использоваться также и для подключения других устройств – сканеров, дисководов типа ZIP и других устройств. Изначально параллельный интерфейс позволял передавать данные только в одном направлении – от ПК к принтеру. Естественно, в скором времени, потребовалось осуществлять двусторонний обмен данными, в результате чего был разработан стандарт двунаправленной передачи данных.

    Собственно адаптер параллельного интерфейса представляет собой регистры, располагающиеся в адресном пространстве ввода/вывода. Имеются три стандартных (обязательных) регистра, без которых порт не может работать. Это регистр данных, регистр состояния и регистр управления. Стандартный LPT порт имеет 8-битную шину данных, 5-битную шину состояния и 4-битную шину управляющих сигналов.

    При загрузки BIOS пытается обнаружить параллельный порт компьютера, причем делает это совершенно примитивным способом: по базовым адресам портов (а их как правило три — & H 378 ( LPT 1), & H 278 ( LPT 2), & H 3 BC ( LPT 3)) передается тестовый байт, состоящий из набора логических единиц (реже чередование нулей и единиц), а затем производится чтение по тем же адресам. Если прочитанный байт совпал с записанным, то считается, что LPT порт найден и он исправен. Именно по этой причине, после загрузки компьютера, на линии данных порта присутствуют логические единицы. Это надо учитывать при разработке устройств, подключаемых к порту.

    Стандарт IEEE 1284

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

    Стандарт определяет пять режимов передачи данных:

    1. Compatibility Mode (Режим Совместимости) – стандартный однонаправленный режим передачи данных от персонального компьютера к периферийному устройству, используя протокол и интерфейс “ Centronics ”. Иногда в литературе используется под термином SPP ( Standard Parallel Port ).

    2. Nibble Mode (Режим Тетрады) – ввод байта происходит за два цикла (по 4 бита), при этом используются линии состояния (регистры состояния). Иногда в литературе именуется как режим Hewlett Packard Bi — tronics (по имени компании предложивший к использованию данный режим). Используется только для приема информации.

    3. Byte Mode (Режим Байта) – ввод байта производится целиком, для этого используется линия приема данных. Этот режим работает только в портах, допускающих чтение выходных данных ( Bi — Directional или PS /2 Type 1).

    Port ) Mode (Расширенный Параллельный Порт) – поддерживает двунаправленный обмен данными, при котором управляющие сигналы интерфейса генерируются аппаратно во время цикла обращения к порту (чтения/записи). Применяется для работы с внешними устройствами памяти ( CD — ROM , ленточными накопителями, жесткими дисками), сетевыми адаптерами и т.д.

    Port ) Mode (Порт с Расширенными Способностями) – поддерживает двунаправленный обмен с возможностью аппаратного сжатия данных по методу RLE ( Run Length Encoding ). Управляющие сигналы интерфейса генерируются аппаратно. Применяется для принтеров и сканеров нового поколения.

    На сегодняшний день почти все производители материнских плат реализуют три основные режима передачи данных ( SPP , EPP и ECP ) с помощью специализированных чипов ввода-вывода (т.е. обработка данных происходит полностью на аппаратном уровне). В результате байт данных может быть передан периферии простой инструкцией OUT (для режимов EPP и ECP соответственно), что, несомненно, облегчает задачу разработки приложений для LPT порта. Один из режимов работы (или их комбинация) задается в BIOS Setup . Режим Compatibility Mode (или SPP ) часто установлен по умолчанию.

    Подробно о стандарте IEEE 1284 можно прочитать на сайте находящимся по адресу: http :// www . fapo . com /1284 int . htm , где размещена оригинальная версия данного стандарта. Остановимся более подробно на режимах EPP и ECP , как на более современных и простых в понимании режимах работы порта. Но начнем, все-таки, с режима Compatibility Mode , на базе которого реализуется Стандартный Параллельный Порт.

    Стандартный параллельный порт ( Standard Parallel Port) – SPP

    Стандартный Параллельный Порт является однонаправленным, на его базе программно реализуется протокол обмена Centronics . В таком режиме данные передаются на линии данных, состояние периферийного устройства не проверяется ни на какие ошибки и на занятость, затем программно формируется строб данных для тактирования подключенного устройства. Сигналы порта выводятся на стандартный разъем типа DB -25 S , который размещается непосредственно на материнской плате компьютера. Назначение сигналов и контактов разъема порта представлены в таблице 1.

    Электроника для всех

    Блог о электронике

    AVR. Учебный курс. Трактат о программаторах

    Программа для микроконтроллера пишется на любом удобном языке программирования, компилируется в бинарный файл (или файл формата intel HEX) и заливается в микроконтроллер посредством программатора.

    Итак, первым шагом в освоении микроконтроллера обычно становится программатор. Ведь без программатора невозможно загнать программу в микроконтроллер и он так и останется безжизненным куском кремния.

    Что же представляет из себя это устройство?
    В простейшем случае программатор это девайс который связывает микроконтроллер и компьютер, позволяя с компа залить файл прошивки в память контроллера. Также нужна прошивающая программа, которая по специальному протоколу загонит данные в микроконтроллер.

    Программаторы бывают разные под разные семейства контроллеров существуют свои программаторы. Впрочем, бывают и универсальные. Более того, даже ту же простейшую AVR’ку можно прошить несколькими способами:

    Внутрисхемное программирование (ISP)
    Самый популярный способ прошивать современные контроллеры. Внутрисхемным данный метод называется потому, что микроконтроллер в этот момент находится в схеме целевого устройства — он может быть даже наглухо туда впаян. Для нужд программатора в этом случае выделяется несколько выводов контроллера (обычно 3..5 в зависимости от контроллера).

    К этим выводам подключается прошивающий шнур программатора и происходит заливка прошивки. После чего шнур отключается и контроллер начинает работу.
    У AVR прошивка заливается по интерфейсу SPI и для работы программатора нужно четыре линии и питание (достаточно только земли, чтобы уравнять потенциалы земель программатора и устройства):

    • MISO — данные идущие от контроллера (Master-Input/Slave-Output)
    • MOSI — данные идущие в контроллер (Master-Output/Slave-Input)
    • SCK — тактовые импульсы интерфейса SPI
    • RESET — сигналом на RESET программатор вводит контроллер в режим программирования
    • GND — земля

    Сам же разъем внутрисхемного программирования представляет собой всего лишь несколько штырьков. Лишь бы на него было удобно надеть разъем. Конфигурация его может быть любой, как тебе удобней.
    Однако все же есть один популярный стандарт:

    Для внутрисхемной прошивки контроллеров AVR существует не один десяток разнообразных программаторов. Отличаются они в первую очередь по скорости работы и типу подключения к компьютеру (COM/LPT/USB). А также бывают безмозглыми или со своим управляющим контроллером.

    Безмозглые программаторы, как правило, дешевые, очень простые в изготовлении и наладке. Но при этом обычно работают исключительно через архаичные COM или LPT порты. Которые найти в современном компьютере целая проблема. А еще требуют прямого доступа к портам, что уже в Windows XP может быть проблемой. Плюс бывает зависимость от тактовой частоты процессора компьютера.

    Так что твой 3ГГЦ-овый десятиядерный монстр может пролететь, как фанера над Парижем.

    Идеальный компьютер для работы с такими программаторами это какой-нибудь PIII-800Mhz с Windows98…XP.
    Вот очень краткая подборка проверенных лично безмозглых программаторов:

    • Программатор Громова.
      Простейшая схема, работает через оболочку UniProf(удобнейшая вещь. ), но имеет ряд проблем. В частности тут COM порт используется нетрадиционно и на некоторых материнках может не заработать. А еще на быстрых компах часто не работает. Да, через адаптер USB-COM эта схема работать не будет. По причине извратности подхода 🙂
    • STK200
      Надежная и дубовая, как кувалда, схема. Работает через LPT порт. Поддерживается многими программами, например avrdude. Требует прямого доступа к порту со стороны операционной системы и наличие LPT порта.
    • FTBB-PROG.
      Очень надежный и быстрый программатор работающий через USB, причем безо всяких извратов. C драйверами под разные операционные системы. И мощной оболочкой avrdude. Недостаток один — содержит редкую и дорогую микросхему FTDI, да в таком мелком корпусе, что запаять ее без меткого глаза, твердой руки и большого опыта пайки весьма сложно. Шаг выводов около 0.3мм. Данный программатор встроен в демоплаты Pinboard

    Программаторы с управляющим контроллером лишены многих проблем безмозглых. Они без особых проблем работают через USB. А если собраны на COM порт, то без извращенских методик работы с данными — как честный COM порт. Так что адаптеры COM-USB работают на ура. И детали подобрать можно покрупней, чтобы легче было паять. Но у этих программаторов есть другая проблема — для того чтобы сделать такой программатор нужен другой программатор, чтобы прошить ему управляющий контроллер. Проблема курицы и яйца. Широко получили распространение такие программаторы как:

    • USBASP
    • AVRDOPER
    • AVR910 Protoss

    Внутрисхемное программирование, несмотря на все его удобства, имеет ряд ограничений.
    Микроконтроллер должен быть запущен, иначе он не сможет ответить на сигнал программатора. Поэтому если неправильно выставить биты конфигурации (FUSE), например, переключить на внешний кварцевый резонатор, а сам кварц не поставить. То контроллер не сможет запуститься и прошить его внутрисхемно будет уже нельзя. По крайней мере до тех пор пока МК не будет запущен.
    Также в битах конфигурации можно отключить режим внутрисхемной прошивки или преваратить вывод RESET в обычный порт ввода-вывода (это справедливо для малых МК, у которых RESET совмещен с портом). Такое действо тоже обрубает программирование по ISP.

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

    Параллельное программирование во много раз быстрей последовательного (ISP), но требует подачи на RESET напряжения в 12 вольт. А также для параллельной зашивки требуется уже не 3 линии данных, а восемь + линии управления. Для программирования в этом режиме микроконтроллер вставляется в панельку программатора, а после прошивки переставляется в целевое устройство.

    Для радиолюбительской практики он особо не нужен, т.к. ISP программатор решает 99% насущных задач, но тем не менее параллельный программатор может пригодиться. Например, если в результате ошибочных действий были неправильно выставлены FUSE биты и был отрублен режим ISP. Параллельному программатору на настройку FUSE плевать с высокой колокольни. Плюс некоторые старые модели микроконтроллеров могут прошиваться только высоковольтным программатором.
    Из параллельных программаторов для AVR на ум приходит только:

    • HVProg от ElmChan
    • Paraprog
    • DerHammer

    А также есть универсальные вроде TurboProg 6, BeeProg, ChipProg++, Fiton которые могут прошивать огромное количество разных микроконтроллеров, но и стоят неслабо. Тысяч по 10-15. Нужны в основном только ремонтникам, т.к. когда не знаешь что тебе завтра притащат на ремонт надо быть готовым ко всему.

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

    Компания AVR продает фирменный комплект JTAG ICEII для работы с микроконтроллерами по JTAG, но стоит он (как и любой профессиональный инструмент) недешево. Около 10-15тыр. Также есть первая модель JTAG ICE. Ее можно легко изготовить самому, а еще она встроена в мою демоплату Pinboard.

    Прошивка через Bootloader
    Многие микроконтроллеры AVR имеют режим самопрошивки. Т.е. в микроконтроллер изначально, любым указанным выше способом, зашивается спец программка — bootloader. Дальше для перешивки программатор не нужен. Достаточно выполнить сброс микроконтроллера и подать ему специальный сигнал. После чего он входит в режим программирования и через обычный последовательный интерфейс в него заливается прошивка. Подробней описано в статье посвященной бутлоадеру.
    Достоинство этого метода еще и в том, что работая через бутлоадер очень сложно закосячить микроконтроллер настолько, что он не будет отвечать вообще. Т.к. настройки FUSE для бутлоадера недоступны.

    Бутлоадер также прошит по умолчанию в главный контроллер демоплаты Pinboard чтобы облегчить и обезопасить первые шаги на пути освоения микроконтроллеров.

    Pinboard II
    Прошивка AVR с помощью демоплаты Pinboard II (для Pinboard 1.1 все похоже)

    Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!

    А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.

    89 thoughts on “AVR. Учебный курс. Трактат о программаторах”

    А что это делает в учебном курсе? чего не на главной странице?
    Здарова, Артем, вот я и зашел, чего то не мог зайти долго…

    Я постепенно правлю и переписываю старые статьи, чтобы привести их в более стройный и завершенный вид.

    Параллельный порт компьютера

    Одним из самых старых портов компьютера является LPT-порт или параллельный порт. И хотя LPT-порт сейчас можно увидеть далеко не на всякой материнской плате, тем не менее, читателям, возможно, интересно было бы узнать, что он из себя представляет.

    История

    Прежде всего, разберемся с названием порта. Возможно, далеко не все знают, что обозначает аббревиатура LPT. На самом деле, LPT – это сокращение от словосочетания Line Print Terminal (построчный принтерный терминал). Таким образом, становится понятным, что LPT-порт предназначался, прежде всего, для подключения принтеров. Именно поэтому порт LPT имеет и еще одно название – порт принтера. Хотя теоретически могут подключаться к LPT и другие устройства.

    LPT-порт имеет давнюю историю. Он был разработан фирмой Centronics (поэтому данный порт часто называют также портом Centronics), производившей матричные принтеры еще до начала эпохи персоналок, в начале 1970-х. А в начале 1980-х LPT-порт стал использоваться фирмой IBM в своих компьютерах и на какое-то время стал стандартным портом для подключения высокоскоростных (на то время) устройств.

    Интерфейс LPT существовал в нескольких редакциях. В оригинальной версии LPT-порт был однонаправленным, то есть мог передавать данные лишь в одном направлении – к периферийному устройству. Разумеется, такая ситуация не устраивала пользователей, поскольку существовали принтеры, которые требовали передачи данных в обоих направлениях. Поэтому впоследствии интерфейс LPT несколько раз был усовершенствован, пока не был разработан его международный стандарт IEEE 1284. В соответствии с этим стандартом интерфейс параллельного порта поддерживал несколько режимов работы и был также совместим со старыми стандартами. Кроме того, интерфейс в своей конечной редакции поддерживал относительно высокие скорости передачи данных – до 5 Мб/с.

    Принцип работы параллельного порта

    Порт LPT называется параллельным потому, что в подключаемом к нему кабеле данные передаются параллельно, то есть, одновременно по нескольким проводникам. Этим свойством параллельный порт отличается от другого порта компьютера –последовательного порта COM.

    Проводников, передающих сами данные, в кабеле Centronics насчитывается 8. Кроме того, в кабеле присутствует несколько линий, по которым передаются управляющие сигналы.

    Хотя параллельный порт большей частью используется для подключения принтеров, тем не менее, существовали и другие его применения. Во-первых, при помощи порта LPT можно напрямую соединить два компьютера – посредством специального кабеля Interlink. До широкого распространения сетевых карт Ethernet подобное соединение, хоть и не обеспечивавшее пользователю большую скорость передачи данных, зачастую было, тем не менее, единственным способом связать два компьютера. Существуют также электронные ключи, предназначенные для подключения к порту LPT.

    Как и в случае многих других устройств на материнской плате, режимы работы параллельного порта часто можно настроить через BIOS Setup. Как правило, для этого используются такие опции BIOS, как Parallel Port, Parallel Port IRQ, Parallel Port DMA и т.п.

    Разъем параллельного порта на материнской плате и кабель Centronics

    Разъем порта LPT обычно располагается непосредственно материнской плате, хотя до середины 1990-x гг. он обычно присутствовал на вставляемой в слот расширения так называемой мультикарте, на которой были также расположены другие порты компьютера. Выход порта представляет собой 25-контактный разъем типа «розетка», который называется разъемом DB25.

    Для подключения к принтеру используется специальный кабель ­­– кабель Centronics. Один конец (вилка) кабеля Centronics подключается к порту, другой (также вилка) – к специальному разъему принтера. Последний разъем имеет 36 контактов. Следовательно, особенностью кабеля Centronics является то, что он имеет разные разъемы с обеих сторон.

    Хотя часто разъем кабеля для материнской платы называется разъемом Centronics, тем не менее, строго говоря, разъемом Centronics называется лишь 36-контактный разъем для подключения к принтеру, а не к материнской плате. Разъем кабеля для подключения к порту называется разъемом Amphenolstacker, от названия разработавшей его американской фирмы Amphenol, производящей разъемы.

    Особенности работы параллельного порта

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

    Максимальное напряжение, использующееся в сигнальных линиях порта, составляет +5 В. Для простой передачи данных требуется всего лишь десять сигнальных линий – это 8 линий собственно данных, линия строб-сигнала, то есть, сигнала о готовности порта к передаче данных, и линия занятости. Остальные линии используются для совместимости со стандартом Centronics.

    Назначение выводов разъема параллельного порта DB25:

    • 1 – Data strobe (Строб-сигнал)
    • 2-9 – Данные, биты 0-7
    • 10 – Acknowledge (Подтверждение от принтера)
    • 11 – Busy (Занят)
    • 12 – Paper Out (Кончилась бумага)
    • 13 – Select (Принтер активен)
    • 14 – Auto Feed (Автоматическая подача)
    • 15 – Error (Ошибка)
    • 16 – Init (Инициализация принтера)
    • 17 – Select Input (Выбор устройства)
    • 18-25 – Земля

    Заключение

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