Amateur Radio Station R9AL

      Параллельный порт - тип интерфейса, разработанный для подключения различных периферийных устройств к компьютеру. LPT расшифровывается как line print terminal, что в переводе на русский означает построчный терминал принтера. Параллельный порт - это уже довольно старая технология, но она используется до сих пор иногда используется для подключения принтеров к компьютеру. На новых современных материнских платах такой разъем можно уже не встретить. Тем не менее, не лишнийм будет знать как это работает и возможно использовать, например для подключения к ардуино старенького матричного принтера.

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



№ контакта
(25-контактный)
Обозначение Направление Бит регистра Инвертирование
1 Strobe In/Out Control-0 Да
2 Data0 Out Data-0 Нет
3 Data1 Out Data-1 Нет
4 Data2 Out Data-2 Нет
5 Data3 Out Data-3 Нет
6 Data4 Out Data-4 Нет
7 Data5 Out Data-5 Нет
8 Data6 Out Data-6 Нет
9 Data7 Out Data-7 Нет
10 Ack In Status-6 Нет
11 Busy In Status-7 Да
12 Paper-Out In Status-5 Нет
13 Select In Status-4 Нет
14 Linefeed In/Out Control-1 Да
15 Error In Status-3 Нет
16 Reset In/Out Control-2 Нет
17 Select-Printer In/Out Control-3 Да
18-25 Ground - - -

В инвертированных линиях низкий логический уровень имеет значение "истина", в неинвертированных, наоборот, истиной является высокий логический уровень.
Контакт 25 в разъёме DB-25 на современных компьютерах может быть не соединён с землёй.


По принципу действия LPT интерфейс называется параллельным не просто так. Физически он состоит из множества проводников, по которым информация передается одновременно и параллельно друг другу. Это основное свойство и отличие LPT-порта от последовательного COM-порта. LPT разъем включает в себя восемь проводников для передачи данных и несколько линий для отправки сигналов управления.

Мы реализуем самый простой вариант LPT порта, имеющего 8 линий данных и сигнал строб. Восемь линий данных позволяют за один цикл передать сразу восемь бит, что составляет 1 байт.

Для экспериментов используем готовый LPT-модуль:



Принципиальная схема



Теперь можно подключтить к Ардуино устройство, например матричный принтер и попробовать что-нибудь напечатать. Например напечатаем слово ARDUINO.

void setup() {
  pinMode(2, OUTPUT);  // str - сигнал строб.
  pinMode(3, OUTPUT);  // D0
  pinMode(4, OUTPUT);  // D1
  pinMode(5, OUTPUT);  // D2
  pinMode(6, OUTPUT);  // D3
  pinMode(7, OUTPUT);  // D4
  pinMode(8, OUTPUT);  // D5 
  pinMode(9, OUTPUT);  // D6
  pinMode(10, OUTPUT); // D7
}

void loop() {
  delay(500);

// отправляем код символа A (65h)
 
  digitalWrite(2, HIGH);  // строб в высокий уровне
  digitalWrite(3, HIGH);  //D0  1
  digitalWrite(4, LOW);   //D1  2
  digitalWrite(5, LOW);   //D2  4
  digitalWrite(6, LOW);   //D3  8
  digitalWrite(7, LOW);   //D4  16
  digitalWrite(8, LOW);   //D5  32
  digitalWrite(9, HIGH);  //D6  64 
  digitalWrite(10, LOW);  //D7  128
  
  delay(500);             // ждем 0,5 с
  digitalWrite(2, LOW);   // строб в низкий уровень 
  delay(500);             // ждем 0,5 с
  digitalWrite(2, HIGH);  // строб в высокий уровень

// отправляем код символа R (82h)
 
  digitalWrite(2, HIGH);  // строб в высокий уровень
  digitalWrite(3, LOW);   //D0  1
  digitalWrite(4, HIGH);  //D1  2
  digitalWrite(5, LOW);   //D2  4
  digitalWrite(6, LOW);   //D3  8
  digitalWrite(7, HIGH);  //D4  16
  digitalWrite(8, LOW);   //D5  32
  digitalWrite(9, HIGH);  //D6  64 
  digitalWrite(10, LOW);  //D7  128
  
  delay(500);             // ждем 0,5 с
  digitalWrite(2, LOW);   // строб в низкий уровень 
  delay(500);             // ждем 0,5 с
  digitalWrite(2, HIGH);  // строб в высокий уровень

// отправляем код символа D (68h)
 
  digitalWrite(2, HIGH);  // строб в высокий уровень
  digitalWrite(3, LOW);   //D0  1
  digitalWrite(4, LOW);   //D1  2
  digitalWrite(5, HIGH);  //D2  4
  digitalWrite(6, LOW);   //D3  8
  digitalWrite(7, LOW);   //D4  16
  digitalWrite(8, LOW);   //D5  32
  digitalWrite(9, HIGH);  //D6  64 
  digitalWrite(10, LOW);  //D7  128
  
  delay(500);             // ждем 0,5 с
  digitalWrite(2, LOW);   // строб в низкий уровень 
  delay(500);             // ждем 0,5 с
  digitalWrite(2, HIGH);  //строб в высокий уровень

// отправляем код символа U (85h)
 
  digitalWrite(2, HIGH);  // строб в высокий уровень
  digitalWrite(3, HIGH);  //D0  1
  digitalWrite(4, LOW);   //D1  2
  digitalWrite(5, HIGH);  //D2  4
  digitalWrite(6, LOW);   //D3  8
  digitalWrite(7, HIGH);  //D4  16
  digitalWrite(8, LOW);   //D5  32
  digitalWrite(9, HIGH);  //D6  64 
  digitalWrite(10, LOW);  //D7  128
  
  delay(500);             // ждем 0,5 с
  digitalWrite(2, LOW);   // строб в низкий уровень 
  delay(500);             // ждем 0,5 с
  digitalWrite(2, HIGH);  //строб в высокий уровень

// отправляем код символа I (73h)
 
  digitalWrite(2, HIGH);  // строб в высокий уровень
  digitalWrite(3, HIGH);  //D0  1
  digitalWrite(4, LOW);   //D1  2
  digitalWrite(5, LOW);   //D2  4
  digitalWrite(6, HIGH);  //D3  8
  digitalWrite(7, LOW);   //D4  16
  digitalWrite(8, LOW);   //D5  32
  digitalWrite(9, HIGH);  //D6  64 
  digitalWrite(10, LOW);  //D7  128
  
  delay(500);             // ждем 0,5 с
  digitalWrite(2, LOW);   // строб в низкий уровень 
  delay(500);             // ждем 0,5 с
  digitalWrite(2, HIGH);  //строб в высокий уровень

// отправляем код символа N (78h)
 
  digitalWrite(2, HIGH);  // строб в высокий уровень
  digitalWrite(3, LOW);   //D0  1
  digitalWrite(4, HIGH);  //D1  2
  digitalWrite(5, HIGH);  //D2  4
  digitalWrite(6, HIGH);  //D3  8
  digitalWrite(7, LOW);   //D4  16
  digitalWrite(8, LOW);   //D5  32
  digitalWrite(9, HIGH);  //D6  64 
  digitalWrite(10, LOW);  //D7  128
  
  delay(500);             // ждем 0,5 с
  digitalWrite(2, LOW);   // строб в низкий уровень 
  delay(500);             // ждем 0,5 с
  digitalWrite(2, HIGH);  //строб в высокий уровень

// отправляем код символа O (79h)
 
  digitalWrite(2, HIGH);  // строб в высокий уровень
  digitalWrite(3, HIGH);  //D0  1
  digitalWrite(4, HIGH);  //D1  2
  digitalWrite(5, HIGH);  //D2  4
  digitalWrite(6, HIGH);  //D3  8
  digitalWrite(7, LOW);   //D4  16
  digitalWrite(8, LOW);   //D5  32
  digitalWrite(9, HIGH);  //D6  64 
  digitalWrite(10, LOW);  //D7  128
  
  delay(500);             // ждем 0,5 с
  digitalWrite(2, LOW);   // строб в низкий уровень 
  delay(500);             // ждем 0,5 с
  digitalWrite(2, HIGH);  //строб в высокий уровень

// отправляем код 10h
 
  digitalWrite(3, LOW);   //D0  1
  digitalWrite(4, HIGH);  //D1  2
  digitalWrite(5, LOW);   //D2  4
  digitalWrite(6, HIGH);  //D3  8
  digitalWrite(7, LOW);   //D4  16
  digitalWrite(8, LOW);   //D5  32
  digitalWrite(9, LOW);   //D6  64 
  digitalWrite(10, LOW);  //D7  128
  
  delay(500);             // ждем 0,5 с
  digitalWrite(2, LOW);   // строб в низкий уровень 
  delay(500);             // ждем 0,5 с
  digitalWrite(2, HIGH);  //строб в высокий уровень

// отправляем 13h
 
  digitalWrite(3, HIGH);  //D0  1
  digitalWrite(4, LOW);   //D1  2
  digitalWrite(5, HIGH);  //D2  4
  digitalWrite(6, HIGH);  //D3  8
  digitalWrite(7, LOW);   //D4  16
  digitalWrite(8, LOW);   //D5  32
  digitalWrite(9, LOW);   //D6  64 
  digitalWrite(10, LOW);  //D7  128
  
  delay(500);             // ждем 0,5 с
  digitalWrite(2, LOW);   // строб в низкий уровень 
  delay(500);             // ждем 0,5 с
  digitalWrite(2, HIGH);  //строб в высокий уровень

}
Принцип работы программы очень простой, сначала выставляем на линии данных код символа (см. ASKI), затем отрицательным импульсом по линии /STROBE этот код передается устройству.

Отдельное внимание следует обратить на код 10h (LF - line feed - подача строки <ПС>), и код 13h (CR - carriage return - возврат каретки <ВК>)





Copyright © R9AL 2021 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования