Объявление

Свернуть
Пока нет объявлений.

Имитируем работу клавиатуры

Свернуть
X
Свернуть

  • Имитируем работу клавиатуры

    Вступление

    Заняться устройством подобного рода меня побудил тот факт, что большая часть простых для повторения геймортовских устройств не позволяла реализовать достаточное количество кнопок управления. Игровой порт PC изначально вообще расчитан максимум на четыре кнопки. Всевозможные расширения также не обладают желаемой гибкостью. К примеру, популярное среди самодельщиков расширение CH Flightstick Pro позволяет реализовать до 14-ти кнопок, но при этом одновременно нельзя использовать две любые кнопки - о полетах на таких устройствах в играх, в которых приходится постоянно "крутить головой" - в тех же птичках, можно забыть. Некоторые расширения используют исключительно цифровой интерфейс - данные о нажатых кнопках и отклонении ручки передаются по цифровым линиям геймпорта, которые изначально предназначались для передачи данных о четырех "стандартных" кнопках. Я даже считаю такие расширения в чем-то избыточными. Да и преобразование аналоговых данных в цифровые усложняет конструкцию джойстика. Кроме того, не всякая игра захочет понять что за монстр к ней "присосался". А клава - вот она, во всей своей 102-х клавишной красе! Кроме того, масла в огонь подливали подписчики RU.GAME.FLIGHT, время от времени вопрошавшие "а как бы мне клаву приручить и с джоем скрестить?" и уходившие ни с чем.
    Короче говоря, задача устройства - "сидеть" на шине между клавиатурой и PC и имитировать нажатие клавиш на клавиатуре, в соответствии с нажатыми кнопками устройства.
    Итак, я засел за разработку. До этого у меня был опыт работы с различными микропроцессорами и микроконтроллерами. В общем - пальцы от уха до уха. И я наивно полагал, что вот, сейчас я возьму доки, сделаю RTFM и через неделю буду на белом коне. Вся загвоздка оказалась в том, что документации о протоколе передачи данных между клавиатурой и контроллером я не смог найти ни в Интернете, ни в соответствующих конференциях Фидо. Пришлось брать осцилограф и несколько недель заниматься разбором времянок и попытками их повторить. Поэтому большая часть изложенной ниже информации является результатом моих умозаключений и не подтверждена документально. Если я в чем-то заблуждаюсь - буду рад выслушать комментарии по адресу rashpil@ukr.net
    Основные принципы передачи данных

    Все нижеследующее справедливо для PS/2 и AT-клавиатур, которые отличаются только исполнением разъема (могут подключаться через переходник).
    Между клавиатурой и контроллером, расположенным на материнской плате компьютера (далее - просто "контроллером"), осуществляется двусторонний обмен данными. Контроллер передает различные команды (например - изменение состояния светодиодов или скорости автоповтора). Клавиатура передает скан-коды нажатых клавиш (скан-код - условное обозначение клавиши, не стоит путать с ASCII-кодами).
    Скан-коды

    Клавиша Скан-код Клавиша Скан-код Клавиша Скан-код Клавиша Скан-код
    1 16 2 1E 3 26 4 25
    5 2E 6 36 7 3D 8 3E
    9 46 0 45 - 4E + 55
    Backspace 66 Tab 0D Q 15 W 1D
    E 24 R 2D T 2C Y 35
    U 3C I 43 O 44 P 4d
    [ 54 ] 5B Enter 5A Ctrl(L) 14
    A 1C S 1B D 23 F 2B
    G 34 H 33 J 3B K 42
    L 4B ; 4C ' 52 ` 0E
    Shift(L) 12 61 Z 1A X 22
    C 21 V 2A B 32 N 31
    M 3A , 41 . 49 / 4A
    Shift(R) 59 Alt(L) 11 Space 29 Caps Lock 58
    Esc 76 F1 05 F2 06 F3 04
    F4 0C F5 03 F6 0B F7 83
    F8 0A F9 01 F10 09 F11 78
    F12 07 Scroll Lock 7E *[numpad] 7C Num Lock 77
    7[numpad] 6C 8[numpad] 75 9[numpad] 7D -[numpad] 7B
    4[numpad] 6B 5[numpad] 73 6[numpad] 74 +[numpad] 5A
    1[numpad] 69 2[numpad] 72 3[numpad] 7A 0[numpad] 70
    .[numpad] 71 Alr(R) E0-11 Ctrl(R) E0-14 Print Screen E0-12-E0-7C
    Insert E0-70 Delete E0-71 Left E0-6B Home E0-6C
    End E0-69 Up E0-75 Down E0-72 PageUp E0-7D
    PageDown E0-7A Right E0-74 Enter[numpad] E0-5A /[numpad] E0-4A
    Примечание: на самом деле AT-клавиатура имеет три различных набора сканкодов. Я привел только значения для набора #2 - дефолтного.
    При нажатии на клавишу клавиатура передает контроллеру скан-код этой клавиши. При отпускании - сначала префикс 0F0h, а потом скан-код отпущенной клавиши.
    Комбинации клавиш с Shift, Alt и Ctrl передаются как последовательность двух скан-кодов. С точки зрения контроллера эти клавиши ничем не отличаются от всех остальных. Точно так же на аппаратном уровне не различаются режими Num Lock и Caps Lock - они различаются на программном уровне программой, которая обслуживает прерывания от клавиатуры.
    Коротко хочу остановиться на реализации режима автоповтора. Как правило функции автоповтора возлагаются на саму клавиатуру - через определенное время, если клавиша не отпущена, то клавиатура посылает еще один точно такой же скан-код. Если в это время нажать еще одну клавишу, то к контроллеру "полетит" уже другой скан-код и будет считаться, что нажата только одна клавиша. В играх эта проблема решена элементарно - клавиша считается нажатой, пока не прийдет соответствующий скан-код с префиксом 0F0h. Поэтому я не стал реализовывать функции автоповтора в принципе.
    Кроме приведенных выше скан-кодов, клавиатура может возвращать некоторые служебные команды. Но эти команды, равно как и команды, выдаваемые контроллером, не представляют в данном случае практической ценности. Поэтому на них останавливаться не буду.
    Описание протокола обмена

    Обмен данными между клавиатурой и контроллером осуществляется асинхронно по последовательному протоколу. Суть асинхронной передачи состоит в том, что данные передаются только тогда, когда есть что передавать - нажата/отпущена клавиша на клавиатуре и нужно выдать соответствующий скан-код или контроллеру нужно выдать команду клавиатуре.
    Для обмена данными служат две линии - KBData и KBSync. При передаче скан-кодов клавиатура выставляет очередной разряд данных на линии KBData и подтверждает передачу переводом из "1" в "0" сигнала на линии KBSync. При приеме данных от контроллера клавиатура считывает разряд данных с линии KBData и выдает подтверждение приема переводом из "1" в "0" сигнала на линии KBSync. Контроллер может сигнализировать о своей неготовности передавать/принимать данные низким уровнем на линии KBSync. Все остальное время, когда нет данных для передачи, обе линии имеют высокий уровень сигнала. Частота следования импульсов линии KBSync составляет около 10-25КГц.
    Данные передаются в таком порядке: один стартовый бит - "0", восемь бит данных, бит четности (сумма всех разрядов +1), один стоповый бит - "1". После приема каждого байта данных контроллер выставляет низкий уровень на линии KBSync, сигнализируя тем самым, что занят обработкой принятых данных и не готов принимать следующие. Это можно считать подтверждением приема. Клавиатура подтверждает каждый байт принимаемой команды выдачей кода 0FAh. При возникновении ошибки при передаче, контроллер может потребовать повторить передачу последнего байта, выдачей команды 0FEh. Клавиатура же ведет себя по-другому - просто игнорирует ошибки. Я не вижу в этом ничего фатального - если ваша система дает частые сбои, то ей не место на рабочем столе.
    Скорее всего, мои объяснения были слишком запутаны, поэтому постараюсь проиллюстрировать их несколькими временными диаграммами.
    Нажмите на изображение для увеличения. 

Название:	diag1.gif 
Просмотров:	1 
Размер:	3.2 Кб 
ID:	1387 alt="" />
    Общий вид передачи данных от клавиатуры (S1 - стартовый бит; S2 - стоповый бит; D0-D7 - данные; P - бит четности; W - обработка принятых данных)
    Нажмите на изображение для увеличения. 

Название:	diag2.gif 
Просмотров:	1 
Размер:	1.9 Кб 
ID:	1388 alt="" />
    Пример передачи байта 1Ch - клавиша "A"
    Нажмите на изображение для увеличения. 

Название:	diag3.gif 
Просмотров:	1 
Размер:	2.1 Кб 
ID:	1389 alt="" />
    Пример передачи байта 74h - клавиша "6" на нумпаде. В этом примере при инициации передачи клавиатурой контроллер сигнализирует о своей неготовности принимать данные и клавиатура ожидает освобождения линии KBSync.
    Аппаратная реализация

    Теперь я перейду непосредственно к описанию реализации устройства в "железе".
    Устройство включается в разрыв сигналов KBSync и KBData и пропускает через себя сигналы от/к клавиатуре, опрашивает состояние четырех кнопок и выдает соответствующие скан-коды, имитируя тем самым работу клавиатуры.
    Основу устройства составляет однокристальный микроконтроллер AT89C2051. Микроконтроллер AT89C2051 фирмы Atmel принадлежит к семейству MCS-51 (отечественный аналог - МК-51). Основное отличие AT89C2051 от i8051 - пониженное энергопотреблениее, сокращенное до 15-ти количество линий ввода-вывода, отсутствие возможности использовать внешнюю память. Более подробную информацию по AT89C2051 и i8051 можно найти на http://www.atmel.com и http://www.intel.com. Вместо AT89C2051 можно использовать AT89C51, i8051 (КР1816ВЕ51) или i8031 (КР1816ВЕ31) с внешним ПЗУ. Но два последних варианта из-за своего повышеного энергопотребления могут привести к перегоранию предохранителя контроллера клавиатуры.
    На микроконтроллерах фирмы Atmel после основного обозначения указывается максимальная частота тактового генератора в мегагерцах. Я советую ставить микроконтроллер расчитанный на частоту 24МГц и кварц с частотой повыше - 16-20МГц.
    Нажмите на изображение для увеличения. 

Название:	sch1.gif 
Просмотров:	1 
Размер:	6.0 Кб 
ID:	1390 alt="" />
    Принципиальная схема. (R1-R4 - 47K; R5 - 10K; C1, C2 - 18пФ; C3 - 1мкФ; D1 - AT89C2051; BQ1 - кварц 12-24МГц)
    Линия P1.4 используется как выход разрешения опроса кнопок. Это - задел для будущих расширений, - линии P1.4-P1.7 будут использованы для выдачи адреса строки для опроса нажатых кнопок (до 16-ти строк по 4-ре кнопки). "0" на линии P1.0-P1.3 означает, что нажата соответствующая кнопка.
    Элементы C3 и R5 реализовывают схему генерации сигнала сброса при подаче питания.
    Линии KBData со стороны клавиатуры и контроллера подаются на входы P3.2 (INT0) и P3.3 (INT1). Таким образом попытка инициировать передачу данных со стороны клавиатуры или контроллера вызывает соответствующее прерывание. Подпрограммы обслуживания этих прерываний просто транслируют сигналы, соответствующие передаче одного байта, через микроконтроллер. В то время, когда микроконтроллер не занят передачей данных, происходит опрос линий P1.0-P1.4, обработка полученых данных и выдача соответствующих скан-кодов контроллеру. В данной версии приоритет отдается данным, передаваемым самим устройством. Поэтому данные от клавиатуры иногда могут теряться.
    Завершая этот раздел, приведу распиновку разъемов AT- и PS/2-клавиатуры.
    Нажмите на изображение для увеличения. 

Название:	con1.gif 
Просмотров:	1 
Размер:	463 байт 
ID:	1391 alt="" /> Нажмите на изображение для увеличения. 

Название:	con2.gif 
Просмотров:	1 
Размер:	382 байт 
ID:	1392 alt="" />
    AT, "папа" PS/2, "папа"
    Сигнал AT PS/2
    KBSync
    KBData
    -KBReset
    GND
    +5V
    1
    2
    3
    4
    5
    5
    1
    -
    3
    4
    Сигнал -KBReset - необязательный сигнал. Некоторые контроллеры могут использовать его для сброса клавиатуры.
    Текст микропрограммы

    Я привожу исходный текст микропрограммы для микроконтроллера AT89C2051 в надежде на то, что пытливый читатель сможет меня поправить или адаптировать программу для работы с другим типом микроконтроллера.


    org 0
    sjmp start
    org 3
    jmp from_keyboard ; INT0
    org 13h
    jmp to_keyboard ; INT1
    start
    mov a,#5 ; установка типа прерываний
    mov tcon,a ; INT0 и INT1 по фронту -
    mov a,#0 ; переход из "1" в "0"
    mov ip,a
    mov a,#85h
    mov ie,a
    mov a,#0ffh ; по адресу 06h хранится последний
    mov 6,a ; обработанный код
    clr p1.4 ; разрешение опроса
    loop
    mov a,p1 ; считывается состояние кнопок
    anl a,#15 ; - младшие четыре разряда порта P1
    ; D0 - вверх
    ; D1 - вправо
    ; D2 - вниз
    ; D3 - влево
    mov dptr,#hat_table ; считанные данные о четырех кнопках
    movc a,@a+dptr ; расширяются до восьми направлений
    ; D0 - вверх
    ; D1 - вправо
    ; D2 - вниз
    ; D3 - влево
    ; D4 - вправо-вверх
    ; D5 - вправо-вниз
    ; D6 - влево-вниз
    ; D7 - влево-вверх
    mov r2,a ; сохранение данных
    mov r0,a
    xrl a,6 ; если новые данные не отличаются от
    jz loop ; полученных в предыдущем цикле - повторяем опрос
    mov r1,#8 ; цикл для восьми разрядов
    loop3
    jnb acc.7,loop2 ; "1" - было изменение
    push acc
    mov a,r1
    mov dptr,#key_table-1 ; извлекаем соответствующий скан-код
    movc a,@a+dptr
    push acc
    mov a,r0 ; ресистр R0 - признак нажатия/отпускания
    rlc a ; эмулируемой клавиши
    mov r0,a ; "1" - "клавиша" была отпущена
    pop acc
    mov acc.7,c ; если D7=1 - скан-коду будет предшествовать 0f0h
    acall send_key ; выдача скан-кода
    pop acc
    sjmp loop2a
    loop2
    push acc
    mov a,r0
    rlc a
    mov r0,a
    pop acc
    loop2a
    rl a
    djnz 1,loop3
    mov 6,r2
    sjmp loop
    send_key
    mov ie,#80h ; прерывания запрещены
    acall send2comp ; посылка скан-кода
    mov ie,#85h ; прерывания разрешены
    ret
    send2comp
    jnb acc.7,send ; при необходимости первым выдается 0f0h
    push acc
    mov a,#0f0h
    acall send
    pop acc
    clr acc.7
    mov b,#200
    l9
    nop
    djnz b,l9
    send
    push 1
    push 0
    clr p3.3 ; P3.3 - KBData
    mov b,#6 ; выдача стартового бита
    l10
    nop
    djnz b,l10
    clr p3.5
    mov b,#15
    l2
    nop
    djnz b,l2
    setb p3.5
    mov b,#6
    l3
    nop
    djnz b,l3
    mov r0,#8 ; выдача восьми бит данных и подсчет четности
    mov r1,#1
    byte_loop
    xrl 1h,a
    rrc a
    mov p3.3,c
    mov b,#6
    l6
    nop
    djnz b,l6
    clr p3.5
    mov b,#15
    l4
    nop
    djnz b,l4
    setb p3.5
    mov b,#6
    l5
    nop
    djnz b,l5
    djnz r0,byte_loop
    mov a,r1
    mov c,acc.0
    mov p3.3,c ; выдача разряда четности
    mov b,#6
    l8
    nop
    djnz b,l8
    clr p3.5
    mov b,#15
    l12
    nop
    djnz b,l12
    setb p3.5
    mov b,#6
    l13
    nop
    djnz b,l13
    setb p3.3 ; выдача стопового бита
    mov b,#6
    l7
    nop
    djnz b,l7
    clr p3.5
    mov b,#15
    l11
    nop
    djnz b,l11
    setb p3.5
    mov b,#200
    l14
    nop
    djnz b,l14
    setb p3.5
    pop 0
    pop 1
    ret
    from_keyboard ; передача одного байта к контроллеру
    mov ie,#80h
    push psw
    push acc
    push b
    mov b,#2
    in6
    jnb p3.4,in8
    djnz b,in6
    sjmp in7
    in8
    mov b,#10
    in1
    mov a,p3
    rl a
    orl a,#11010111b
    mov p3,a
    jnb p3.4,in1
    in2
    mov a,p3
    rl a
    orl a,#11010111b
    mov p3,a
    jb p3.4,in2
    djnz b,in1
    in3
    mov a,p3
    rl a
    orl a,#11010111b
    mov p3,a
    jnb p3.4,in3
    mov p3,#0ffh
    in4
    jb p3.5,in4
    in5
    jnb p3.3,in7
    clr p3.4
    jnb p3.5,in5
    in7
    mov p3,#0ffh
    pop b
    pop acc
    pop psw
    mov tcon,#5
    mov ie,#85h
    reti
    to_keyboard ; передача одного байта к клавиатуре
    mov ie,#80h
    push psw
    push acc
    push b
    mov b,#5
    out61
    jb p3.5,out7
    djnz b,out61
    setb p3.4
    setb p3.2
    out62
    jnb p3.5,out62
    out6
    mov c,p3.4
    mov p3.5,c
    mov c,p3.3
    mov p3.2,c
    jb p3.4,out6
    out8
    mov b,#10
    out1
    mov c,p3.4
    mov p3.5,c
    mov c,p3.3
    mov p3.2,c
    jnb p3.4,out1
    out2
    mov c,p3.4
    mov p3.5,c
    mov c,p3.3
    mov p3.2,c
    jb p3.4,out2
    djnz b,out1
    out3
    mov c,p3.4
    mov p3.5,c
    mov c,p3.2
    mov p3.3,c
    jnb p3.2,out3
    out7
    mov p3,#0ffh
    pop b
    pop acc
    pop psw
    mov tcon,#5
    mov ie,#85h
    reti
    hat_table ; таблица для расширения данных считанных с порта P1
    ; индекс в таблице - четырехразрядный двоичный код
    ; данные - состояние восьми эмулируемых клавиш
    ; "0" - клавиша нажата
    db 0ffh ; влево+вправо+вверх+вниз=запрещенная комбинация
    db 0ffh ; влево+вправо+вниз=запрещенная комбинация
    db 0ffh ; влево+вверх+вниз=запрещенная комбинация
    db 0bfh ; влево+вниз=влево-вниз
    db 0ffh ; влево+вправо+вверх=запрещенная комбинация
    db 0ffh ; влево+вправо=запрещенная комбинация
    db 07fh ; влево+вверх=влево-вверх
    db 0f7h ; влево
    db 0ffh ; вправо+вверх+вниз=запрещенная комбинация
    db 0dfh ; вниз+вправо=вниз-вправо
    db 0ffh ; вверх+вниз=запрещенная комбинация
    db 0fbh ; вниз
    db 0efh ; вправо+вверх=вправо-вверх
    db 0fdh ; вправо
    db 0feh ; вверх
    db 0ffh ; нет нажатых кнопок
    key_table ; таблица скан-кодов
    db 75h ; numpad 8
    db 74h ; numpad 6
    db 72h ; numpad 2
    db 6bh ; numpad 4
    db 7dh ; numpad 9
    db 7ah ; numpad 3
    db 69h ; numpad 1
    db 6ch ; numpad 7
    Сборка и устранение неполадок

    Собрать устройство по приведенной выше схеме можно на макетнице, плате вытравленной в домашних условиях или изготовленной промышленным способом. Под микроконтроллер следует поставить панельку. Лучше всего оставить место на плате под 2-3 16-выводных DIP-корпуса - они будут добавлены в последующих версиях.
    Собрав полностью устройство, подключаем его к клавиатуре и компьютеру. Три... Два... Один... Поехали!.. Правильно собранное из заведомо исправных компонентов устройство должно заработать сразу. Если нет - проверьте правильность монтажа, наличие питания на микроконтроллере. Осцилографом проверьте, запустился ли тактовый генератор и приходит ли импульс высокого уровня на вход RST при включении питания. При нажатии клавиш на клавиатуре импульсы на линиях P3.3 и P3.5 должны повторять с некоторой задержкой импульсы на линиях P3.2 и P3.4 соответственно. При нажатии/отпускании кнопок устройства на линиях P3.3 и P3.5 должны также появляться ипульсы. Если это не поможет - напишите мне багрепорт, указав модель и тип (AT, PS/2) своей клавиатуры, материнской платы/мультикарты, использованого микроконтроллера и частоту использованого кварцевого резонатора. Я постарался протестировать устройство с максимальным числом доступных мне материнских плат и клавиатур - неполадок выявлено не было. В моем случае использован кварц 14.2МГц.
    Known bugs

    Текущая версия микропрограммы содержит такие недоработки:
    • Не отслеживаются двухбайтовые скан-коды. Это приводит к тому, что иногда, при использовании одновременно хатки и клавиатуры, клавиши клавиатуры "зависают" в нажатом состоянии или воспринимаются неверно;
    • Иногда неверно передаются данные от контроллера к клавиатуре. Это может выражаться, например, в том, что не меняют свое состояние светодиоды, при нажатии клавиш Num Lock, Caps Lock, Scroll Lock;
    • Дребезг контактов кнопок хатки. Пока что это не стало фатальным для меня в играх.
    Планы на будущее

    Вот краткий список того, что я хотел бы реализовать в последующих версиях:
    • Мелкие багфиксы - более корректная обработка сигналов; отслеживание двухбайтовых скан-кодов
    • Подключение матрицы 16x4 - поддержка до 64-х кнопок или двух хаток и до 56-ти кнопок
    • Поддержка до 16-ти различных раскладок скан-кодов, сохраненных в ПЗУ микроконтроллера
    • Подключение микросхемы NVRAM с возможностью сохранения и перепрограммирования "на лету" до 32-х раскладок скан-кодов.
    Заключение

    Я постарался изложить все данные, необходимые для понимания принципа функционирования моего устройства. Это описание не претендует на стопроцентную техническую точность. Если я в чем-то заблуждаюсь - пожалуйста изложите мне свою версию событий. Если вы сможете внести в мою схему и/или микропрограмму улучшения и дополнения, если у вас есть идеи относительно дальнейшего развития схемы - также сообщите мне об этом. Кроме того, жду информации от умельцев, которые смогли повторить или адаптировать это устройство под другие типы микроконтроллеров.
    Адрес для связи со мной: rashpil@ukr.net

      Возможность размещать комментарии к сообщениям отключена.

    Метки статей

    Свернуть

    Меток пока нет.

    Новые статьи

    Свернуть

    • Стандартный параллельный интерфейс на PC
      admin
      Основным назначением интерфейса Centronics (аналог-ИРПР-М) является подключение к компьютеру принтеров различных типов. Поэтому распределение контактов разъема, назначение сигналов, программные средства управления интерфейсом ориентированы именно на это использование. Вто же время с помощью данного интерфейса можно подключать к компьютеру и другие внешние устройства, имеющие разъем Centronics, а также специально разработанные УС.

      Основным достоинством использования Centronics для подключения УС по сравнению с ISA является значительно меньший риск вывести компьютер из строя. Главный недостаток этого подхода - значительно меньшая скорость обмена. Назначение 36 контактов разъема Centronics приведено в таблице 1.

      Таблица 1. Назначение контактов разъемов Centronics

      1 /STROBE Out Strobe (Строб)
      2 D0 Out Data Bit 0
      3 D1 Out Data Bit 1
      4 D2 Out Data Bit 2
      5 D3 Out Data Bit 3
      6 D4 Out Data Bit 4
      7 D5 Out Data Bit 5
      8 D6 Out Data Bit 6
      9 D7 Out Data Bit 7
      10 /ACK In Acknowledge (Подтверждение)
      ...
      08.02.2017, 22:45
    • Современные микросхемы драйверов RS-485 фирмы MAXIM
      admin
      Журнал «Схемотехника» №10 2002 г.
      Олег Николайчук
      Целью настоящей статьи является ознакомление читателей с современными микросхемами драйверов сети RS485 фирмы MAXIM, их основными параметрами и особенностями.
      Интерфейс RS485 наиболее часто используется при создании современных локальных сетей различного назначения, как в промышленных изделиях, так и в любительской практике. Основными преимуществами интерфейса являются:
      • Относительно низкая себестоимость микросхем драйверов, что снижает стоимость аппаратной реализации сетевых диспетчеров, т.е. узлов связи между сетевой средой (линиями связи) и ядром станции (узла) сети, т.е. микроконтроллерной или микропроцессорной системой;
      • Использование в сетях на базе интерфейса RS485 всего трех проводов (третий, общий, не всегда является обязательным), что значительно снижает себестоимость всей системы, поскольку известно, что себестоимость сетевой среды современных локальных сетей практически всегда составляет более 60% от стоимости всей системы;
      • Микросхемы драйверов имеют малые габаритные размеры. Наиболее часто используются микросхемы, выполненные в корпусе DIP8 со стандартным расположением выводов, ставшим , промышленным стандартом. Микросхемы драйверов используют всего несколько дискретных элементов для цепей защиты, использование которых не является обязательным. Малые габаритные размеры микросхем драйверов и минимальное количество обвязки экономит площадь печатной платы, что также положительно сказывается на стоимости системы;
      • Современные микросхемы имеют достаточно низкое энергопотребление, многие из них при отсутствии активности в сети автоматически переходят в режим экономии, что снижает энергопотребление системы;
      • Современные микросхемы драйверов имеют повышенную нагрузочную способность. Если раннее большинство микросхем было насчитано на работу с 32 станциями, то современные модели обеспечивают нормальное функционирование до 256 станций;
      • В настоящее время выпускаются микросхемы в высокой предельной скоростью передачи. Это позволяет создавать высокоскоростные сети, и снижает количество ошибок в сети за счет улучшения формы передаваемого сигнала;
      • Драйверы интерфейса RS485 имеют достаточно простое управление. Особенности организации сетей, их схемотехника, способы управления доступом к каналу и примеры программирования достаточно описаны [1-11].
      • Микросхемы интерфейса RS485 выпускают многие фирмы мира [12]. Однако несомненным лидером в разработке и выпуске новых микросхем драйверов является известная фирма MAXIM [13]. В настоящее время фирма выпускает более 80 типов микросхем драйверов интерфейса RS485/422.
      Все микросхемы драйверов можно условно разделить на 4 группы: микросхемы с питанием +5 В, микросхемы с расширенным диапазоном питания от 3 до 5.5 В, низковольтные микросхемы с питанием 3.3 В и микросхемы со встроенной оптической изоляцией. Основные технические характеристики этих групп микросхем приведены в таблицах 1 — 4 соответственно.
      В приведенных таблицах приняты следующие обозначения:
      В колонке «Разрешение RxD»: P — обозначает, что управляющий вход приемника переключает его либо в открытое состояние, либо переводит его в режим энергосбережения, O — означает, что управляющий вход тоько включает/выключает приемник.
      В колонке «Режим»: H — означает полудуплексный режим, т.е. интерфейс RS485, F — обозначает полный дуплексный режим, т.е. интерфейс RS422.
      Прежде чем приступить к анализу таблиц, определим критерии отбора микросхем для последующего рассмотрения. Мы ставим своей целью ознакомление читателя с широко используемыми микросхемами интерфейса RS485 (но не RS422), т.е. с микросхемами, работающими в полудуплексном режиме, которые в колонке «Режим» имеют символ «H». У этих микросхем входы приемника объединены с выходами передатчика и образуют две линии приема/передачи, «A» и «B». Мы не будем рассматривать ряд микросхем, содержащих только приемники или только передатчики, поскольку их применение также весьма ограничено. И наконец, мы будем рассматривать только микросхемы, выпускаемые в корпусе с восемью выводами (кроме микросхем со встроенной оптической изоляцией и микросхем в корпусе 6/5/SO), как наиболее распространенные и используемые.
      Таблица 1. Микросхемы драйверов интерфейса RS485/422 с питанием +5 В
      ТИП Нали чие TxD Нали чие RxD Разре шение TxD Разре шение RxD Состо яние RxD Режим Быстро действие, Mbps Кол-во стан ций Защ ита ESD Пит ание, V Ток потре бления, mA Ток эко номии, чA Корпус
      MAX1481 1 1 NC F 0.25 256 - 5 0.3 0.1 10/µMAX
      MAX1482 1 1 O F 0.25 256 - 5 0.02 0.1 14/PDIP.300
      14/SO.150
      MAX1483 1 1 O H 0.25 256 - 5 0.02 0.1 8/µMAX
      8/PDIP.300
      8/SO.150
      MAX1484 1 1 NC F 12 256 - 5 0.3 - 10/µMAX
      MAX1485 1 1 - NC H- F 0.25 256 - 5 0.3 - 10/µMAX
      MAX1486 1 1 - NC H- F 12 256 - 5 0.3 - 10/µMAX
      MAX1487 MAX1487E 1 1 O H 2.5 128 -
      ±15kV
      5 0.23 - 8/µMAX
      8/PDIP.300
      8/SO.150
      MAX3040 4 0 - - - 0.25 - ±10kV 5 1 0.002 16/SO.150
      16/SO.300
      16/TSSOP
      MAX3041 4 0 - - - 2.5 - ±10 kV 5 1 0.002 16/SO.150
      16/SO.300
      16/TSSOP
      MAX3042B 4 0 - - - 20 - ±10 kV 5 1 0.002 16/SO.150
      16/SO.300
      16/TSSOP
      MAX3043 4 0 - - - 0.250 - ±10 kV 5 1 0.002 16/SO.150
      16/SO.300
      16/TSSOP
      ...
      08.02.2017, 22:45
    • Системный контроллер ввода-вывода для сопряжения шин PCI и ISA
      admin
      Журнал «Chip News» №6 2001 г.
      Ракович Н. Н.
      Мы уже беседовали на страницах журнала о продукции компании Winbond [Л.1], выпускающей широкую гамму разнообразных микросхем, начиная с памяти и микроконтроллеров и заканчивая приборами для мобильных средств связи и распознавания речи. Примерно в середине этого списка находятся ИС для компьютеров. В данной статье рассмотрим контроллеры ввода-вывода W83С553F и W83С554F, которые выполняет функции моста между шинами PCI и ISA. Тема эта должна быть интересна хотя бы уже потому, что смена поколений компьютеров требует от разработчиков встроенных плат с интерфейсом ISA стремительной модернизации оборудования, с тем, чтобы не потерять своих заказчиков.

      Терминология (более чем кратко)....
      08.02.2017, 22:45
    • Реализация последовательной асинхронной передачи данных в микроконтроллерах PIC
      admin
      Введение.
      Серия PIC16Cxx от Microchip Technology, Inc. - это второе поколение высокопроизводительных восьмиразрядных микроконтроллеров на базе EPROM. Некоторые микроконтроллеры из этой серии (например PIC16C71 и PIC16C84) не имеют встроенного последовательного асинхронного порта. Эта статья содержит описание последовательного асинхронного интерфейса ( полудуплексное RS-232 соединение ) с программной обработкой прерывания для микроконтроллеров PIC16Cxx. Эти микроконтроллеры могут работать на очень большой скорости, с минимальной длительностью такта 250нс ( при частоте 16МГц ). Для тестирования RS-232 режима предлагается использовать простой цифровой вольтметр / систему опроса данных ( Digital Volt Meter / Analog Data Acquisition Systems ) выполненный на PIC16C71, Этот прибор принимает команды от ПК и передает обратно восмибитные значения с выбранного АЦП канала.

      Реализация.
      Ниже приведено подробное описание реализации полудуплексного RS-232 интерфейса с программной обработкой прерывания для PIC16C71. В программе примера в качестве передающего выхода используется RB7, а для приема – RTCC/RA4. Конечно, и вход и выход соединяются через соответствующий преобразователь уровней сигнала RS-232 / ТТЛ. Описание преобразователя уровней напряжения дано в разделе Аппаратная часть.

      Режим передачи. Передающий режим в программе напрямую связан с и...
      08.02.2017, 22:45
    • Простой конвертер RS-232-TTL
      admin

      Журнал «Схемотехника» №1 2000 г.
      Александр Нечаев
      При разработке различного рода электронных устройств с использованием микроконтроллеров очень часто оказывается полезной возможность подключения их к персональному компьютеру через последовательный порт. Однако напрямую это сделать невозможно, поскольку по стандарту...
      08.02.2017, 22:45
    • Программирование портов ввода/вывода LPT и ISA
      admin
      Данный материал основан на моём (его) личном опыте работы с материнской платой неизвестного (нет, не солдата) производителя. Чипсет - SIS. Если вдруг в Вашем случае дело будет обстоять другим образом, напишите мне. Также хочу сразу предупредить - я не профессиональный программист!!! Поэтому не ругайте меня за отсутствие проф. терминов, может быть кривых объяснений или ещё каких недочётов,...
      08.02.2017, 22:45
    Обработка...
    X