Главная страница
Навигация по странице:

  • 5 Стандартные интерфейсы обмена данными 5.1 Интерфейс RS-232. Программирование интерфейса RS-232

  • Program

  • СУХТП лекции. Курс лекций Разработчик Афонин Ю. Д. Екатеринбург, 2007 2 Содержание


    Скачать 2.79 Mb.
    НазваниеКурс лекций Разработчик Афонин Ю. Д. Екатеринбург, 2007 2 Содержание
    АнкорСУХТП лекции
    Дата08.04.2023
    Размер2.79 Mb.
    Формат файлаpdf
    Имя файлаKonspekt_lektsiy_po_SUKhTP.pdf
    ТипКурс лекций
    #1045979
    страница7 из 10
    1   2   3   4   5   6   7   8   9   10
    4.3 Плата АЦП 5710
    В составе семейства Micro PC большая номенклатура плат расширения.
    Это платы цифрового и аналогового ввода/вывода, коммуникационные платы, платы адаптеров различных устройств. Все платы расширения можно использовать и в обычном стандартном персональном компьютере. Для работы с платами расширения используется область адресов портов ввода/вывода с
    100Н по 17FH. Для каждой платы отводится 16 адресов, таким образом можно одновременно применять до 8 плат расширения.

    77
    Для примера рассмотрим плату аналогового ввода/вывода 5710 (рис.
    4.5).
    5710 - это высокоточный 16-канальный АЦП с разрешением 12 разрядов. Входы могут быть объединены попарно для образования 8-ми дифференциальных каналов для лучшего подавления помех. На входе АЦП стоит инструментальный усилитель с коэффициентом усиления 1, 10 или 100, устанавливаемым перемычками. Встроенный 32-разрядный таймер может быть использован для запуска преобразователя и генерации прерывания. Этот таймер может быть запрограммирован для генерации от 70000 преобразований в секунду до 3 преобразований в час. Также на плате 5710 имеется 19 дискретных линий ввода/вывода и 16-разрядный таймер/счетчик общего применения. Этот таймер/счетчик может быть использован для счета внешних импульсов или может быть подключен к встроенному генератору 4МГц для генерации прецизионной частоты или временного интервала.
    Рисунок 4.5 – Плата аналогового ввода/вывода 5710.

    78
    Кроме этого на плате есть 2х-канальный 12 разрядный цифро- аналоговый преобразователь (ЦАП). Входной диапазон АЦП ±5В; защита от перегрузки входов до ±16В; частота преобразования - 33000 измерений в секунду. Входное напряжение биполярное (как положительное, так и отрицательное). 12-разрядное разрешение позволяет считать значение входного сигнала в диапазоне от -5В до +5В как число от 0 до 4095 соответственно, с шагом 2,44мВ при коэффициенте усиления 1. Нулевое напряжение на входе эквивалентно значению 2048. Если вам необходимо измерять напряжение много меньшее ±5В, вы можете переключить коэффициент усиления инструментального усилителя на плате АЦП в положение х10 или х100 с помощью блока перемычек W2. Выбор коэффициента усиления х10 приведет к изменению входного диапазона до ±500мВ и разрешения до 244 мкВ. При коэффициенте усиления х100 входной диапазон ±50мВ, разрешение 24,4 мкВ.
    Плата 5710 имеет размеры 4.5"х4.9" и занимает одно посадочное место в корзине Micro PC.
    Базовый адрес выбирается перемычками и первоначально установлен
    100Н. Если у вас в системе есть другая плата с базовым адресом 100Н, вы должны изменить адрес АЦП (или другой платы ) с помощью блока перемычек
    W1.
    Карта портов АЦП 5710 относительно базового адреса
    Адрес порта
    Значение
    Функция
    Порты вывода
    +0BН
    80-99H
    Управляющее слово микросхемы 82С55
    +09Н
    0-15
    Номер канала аналогового входа
    +00Н
    FFH
    Запуск преобразователя АЦП
    +04Н
    >66
    Коэффициент деления счетчика/таймера
    СТС0 (канал 0)
    +05Н
    >2
    Коэффициент деления счетчика/таймера
    СТС1 (канал 1)
    +06Н
    Коэффициент деления счетчика/таймера
    СТС2 (канал 2)

    79
    Адрес порта
    Значение
    Функция
    +07Н
    Управление (режим) счетчиком/таймером
    +08Н
    0-FFH
    Цифровой ввод/вывод (порт А 82С55)
    +09Н
    40-FFH
    Цифровой ввод/вывод (порт B 82С55)
    +0AH
    0-FFH
    Цифровой ввод/вывод (порт C 82С55)
    +0СН
    8 старших разрядов
    Канал 0 аналогового вывода (ЦАП)
    +0DH
    4 младших разряда
    Канал 0 аналогового вывода (ЦАП)
    +0EH
    8 старших разрядов
    Канал 1 аналогового вывода (ЦАП)
    +0FH
    4 младших разряда
    Канал 1 аналогового вывода (ЦАП)
    Порты ввода
    +00Н младший бит =1
    Конец преобразования АЦП
    +02Н
    8 старших разрядов
    Старший байт данных АЦП
    +03Н
    4 младших разряда
    Младший байт данных АЦП
    Алгоритм преобразования:
    1. Инициализируйте 82С55 для настройки каналов порта В на вывод.
    Port[BASE_ADDRESS+$0В]:=$80;
    2. Выберите канал от 0 до 15
    Port[BASE_ADDRESS+$09]:= CHANNEL; (номер канала)
    3. Рекомендуется подождать 4 мкс (время установления мультиплексора).
    4. Запустите преобразование
    Port[BASE_ADDRESS]:=$FF;
    5. Проверяйте сигнал "конец преобразования"
    While Port[BASE_ADDRESS] and $01 = 0 do;
    (Проверка бита 0, если =1 - конец преобразования) или подождите 25 мкс или дольше.
    6. Считайте данные. Формат данных:
    Адрес
    D7
    D6
    D5 D4 D3 D2 D1 D0
    Base_Address+2 S11 S10
    S9
    S8
    S7
    S6
    S5
    S4
    Base_Address+3
    S3
    S2
    S1
    S0 0
    0 0
    0

    80
    A:=(Port[BASE_ADDRESS+2])*16+(Port[BASE_ADDRESS+3])/16;
    Writeln(A);
    Если вам требуются только 8 бит, считайте биты 4-11.
    Дождаться сигнала "конец преобразования" можно одним из трех способов:
    * возникновением прерывания;
    * ожиданием установки бита состояния;
    * ожиданием времени 25 мкс или дольше.
    Работу платы 5710 можно организовать в режиме автозапуска. Автозапуск
    - это метод запуска преобразования через регулярные интервалы времени. Бит 4 порта B 82С55 разрешает или запрещает работу платы в режиме автозапуска.
    Управляющая программа должна считать данные после преобразования и сменить номер канала, если необходимо. Для генерации необходимого временного интервала используются счетчики/таймеры СТС0 и СТС1.
    Минимальный временной интервал составляет 33 мкс. Счетчики/таймеры могут также использоваться для генерации импульсов или для подсчета внешних импульсов. Частота следования импульсов может быть от постоянного тока до
    10 МГц.
    Для работы с нагрузками до 3 А и напряжением до 260 В цифровые входы/выходы платы 5710 можно соединить с опторазвязками серии МРВ. Они управляют нагрузкой и обеспечивает гальваническую развязку до напряжения 4
    Кв.
    Дополнением к плате 5710 может служить аналоговый мультиплексор, входящий в состав семейства Micro PC. Он расширяет функции 5710 и других
    АЦП. Обеспечивает подключение до 256 каналов и защиту по входу до 120 В переменного тока.

    81
    5 Стандартные интерфейсы обмена данными
    5.1 Интерфейс RS-232. Программирование интерфейса RS-232
    Интерфейс RS-232 относится к интерфейсам с последовательной передачей данных. Рассмотрим общие закономерности таких интерфейсов.
    Универсальный асинхронный приемопередатчик (UART) можно разделить на приемник (Receiver) и передатчик (Transmitter). В состав UART входят: тактовый генератор связи (бодрейт - генератор), управляющие регистры, статусные регистры, буферы и сдвиговые регистры приемника и передатчика. Бодрейт - генератор задает тактовую частоту приемопередатчика для данной скорости связи. Управляющие регистры задают режим работы последовательного порта и его прерываний. В статусном регистре устанавливаются флаги по различным событиям. В буфер приемника попадает принятый символ, в буфер передатчика помещают передаваемый. Сдвиговый регистр передатчика - это обойма, из которой в последовательный порт выстреливаются биты передаваемого символа (кадра). Сдвиговый регистр приемника по биту накапливает принимаемые из порта биты. По различным событиям устанавливаются флаги и генерируются прерывания (завершение приема/отправки кадра, освобождение буфера, различные ошибки).
    UART - полнодуплексный интерфейс, то есть приемник и передатчик могут работать одновременно, независимо друг от друга. За каждым из них закреплен порт - одна ножка контроллера. Порт приемника обозначают RX, передатчика - TX. Последовательной установкой уровней на этих портах относительно общего провода ("земли") и передается информация. По умолчанию передатчик устанавливает на линии единичный уровень. Передача начинается посылкой бита с нулевым уровнем (старт-бита), затем идут биты данных младшим битом вперед, завершается посылка передачей одного или двух битов с единичным уровнем (стоп-битов).
    Электрический сигнал кадра посылки выглядит так (рис 5.1):

    82
    Рисунок 5.1 Формат кадра UART.
    Перед началом связи между двумя устройствами необходимо настроить их приемопередатчики на одинаковую скорость связи и формат кадра.
    Скорость связи или бодрейт (baudrate) измеряется в бодах - число передаваемых бит в секунду (включая старт и стоп-биты). Задается эта скорость в бодрейт - генераторе делением системной частоты на задаваемый коэффициент.
    Типичный диапазон скоростей: 2400 … 115200 бод.
    Формат кадра определяет число стоп-битов (1 1.5 или 2), число бит данных
    (7 или 8), вид четности. Все это зависит от типа контроллера.
    Приемник и передатчик тактируются, как правило, с 16-кратной частотой относительно бодрейта. Это нужно для сэмплирования сигнала. Приемник, поймав падающий фронт старт-бита, отсчитывает несколько тактов и следующие три такта считывает (семплирует) порт RX (рис.5.2). Это как раз середина старт-бита.
    Если большинство значений семплов - "0", старт-бит считается состоявшимся, иначе приемник принимает его за шум и ждет следующего падающего фронта.
    После удачного определения старт-бита, приемник точно также семплирует серединки битов данных и по большинству семплов считает бит "0" или "1", записывая их в сдвиговый регистр. Стоп-биты тоже семплируются, и если уровень стоп-бита не "1" - UART определяет ошибку кадра и устанавливает соответствующий флаг в управляющем регистре
    Старт бит
    Значащие семплы
    Рисунок 5.2 –
    Семплирование сигнала UART.

    83
    Поскольку бодрейт устанавливается делением системной частоты, при переносе программы на устройство с другим кварцевым резонатором, необходимо изменить соответствующие настройки UART.
    Последовательный интерфейс стандарта RS-232 является наиболее широко применяемым для синхронной и асинхронной связи периферийных устройств. Его отечественным аналогом является стык С2. Максимальная скорость передачи данных составляет 115 200 бод. Рекомендуемая максимальная длина передающей линии составляет примерно 17 м, при этом скорость передачи данных не превышает 20 Кбод.
    Уровни напряжений стандартного интерфейса RS-232 не соответствуют
    ТТЛ – логике. Напряжению в пределах от +5 до +15В соответствует логический
    «0». Логической «1» соответствует уровень напряжения от -5 до -15В (рис.5.3).
    +15
    В
    +5
    В
    -5
    В
    -15
    В
    Данные «0»
    Данные «1»
    Диапазон не чувствительности
    Диапазон не чувствительности
    +25
    В
    +3
    В
    -3В
    -25
    В
    Данные «0»
    Данные «1»
    Передатчик
    Приемник
    Рисунок 5.3 – Уровни напряжений интерфейса RS-232.
    Диапазон логических уровней у приемника шире, чем у передатчика, так как на передаваемый сигнал могут накладываться помехи.
    В состав IBM PC могут входить до четырех последовательных интерфейсов, работающих в стандарте RS-232 (отечественный аналог - стык
    С2) и именуемых СОМ1 - СОМ4. Им выделены следующие адреса в области портов ввода-вывода:
    СОМ1: 3F8h-3FFh COM3: 338h-33Fh
    COM2: 2F8h-2FFh COM4: 238h-23Fh

    84
    Каждый интерфейс связан с определенным уровнем контроллера прерываний:
    СОМ1 вызывает прерывание IRQ4 (Int 0Ch)
    COM2 вызывает прерывание IRQ3 (Int 0Bh)
    СОМ3 и СОМ4 не имеют стандартных векторов прерываний.
    Каждое из устройств RS-232 представляет собой контроллер, оснащенный 25- или 9- штырьковым разъемом на задней стенке корпуса
    ПЭВМ. Этот разъем может использоваться для подключения мыши, графопостроителя или организации связи между ПЭВМ.
    Контакты стыка RS-232 имеют следующие наименования (табл. 5.1):
    Таблица 5.1 – Сигналы и контакты интерфейса RS-232.
    Название сигнала
    Имя цепи С2
    Номер контакта
    Назначение
    Направление
    9-шт
    25- шт.
    DCD
    109 1
    8
    Связь модемов установлена
    В ПЭВМ
    RX
    104 2
    3
    Принимаемые данные
    В ПЭВМ
    TX
    103 3
    2
    Передаваемые данные
    Из ПЭВМ
    DTR
    108/2 4
    20
    Готовность ПЭВМ к работе
    Из ПЭВМ
    SG
    102 5
    7
    Сигнальная земля
    DSR
    107 6
    6
    Готовность модема к работе
    В ПЭВМ
    RTS
    105 7
    4
    Запрос на передачу
    Из ПЭВМ
    CTS
    106 8
    5
    Готовность модема к передаче
    В ПЭВМ
    RI
    125 9
    22
    Индикатор вызова
    В ПЭВМ
    FG
    101
    -
    1
    Защитная земля
    Контроллер стыка RS-232 является полностью программируемым устройством; вы можете задать следующие параметры обмена: количество битов данных и стоп-битов, вид четности и скорость обмена в бодах (бит/с).

    85
    Ниже описаны порты ввода-вывода для СОМ1, имеющего базовый адрес
    3F8h. Обратите внимание, что порты 3F8h и 3F9h имеют разное назначение в зависимости от бита 7 порта 3F8h (т. н. бит DLAB - Divisor Latch Access Bit).
    Порт
    Операция
    Описание
    3F8h
    Запись
    Регистр передатчика - сюда засылается байт для передачи
    Чтение
    Регистр приемника - отсюда извлекается принятый байт
    Запись
    Если DLAB=1, то сюда засылается младший байт скорости обмена (см. порт 3F9h)
    3F9h
    Запись
    Если DLAB=1, то сюда засылается старший байт делителя, равным 115200/V, где V - скорость в бодах. Например, для скорости 9600 бод делитель равен 115200/9600=12=0Ch, поэтому нужно вывести 0Ch в порт 3F8h и 0 в порт 3F9h.
    Запись
    Регистр управления прерываниями (1 = разрешить прерывание) (рис 5.4):
    0 1
    2 3
    4 5
    6 7
    0 0
    0 0
    0: прерывание по приему символа
    1: прерывание по завершению передачи символа
    2: прерывание по обрыву линии или ошибке в линии
    3: прерывание по изменению состояния модема (любой из линий CTS, DSR,
    RI и DCD)
    Рисунок 5.4 - Регистр управления прерываниями
    3FAh
    Чтение
    Регистр идентификации прерывания. Когда произошло прерывание, здесь содержится причина, вызвавшая его (рис 5.5):
    0 1
    2 3
    4 5
    6 7
    0 0
    0 0
    0: 0=есть отложенные прерывания.
    1-2: причина прерывания:
    11=ошибка или обрыв линии;
    сбрасывается чтением регистра состояния линии (порт 3FDh).
    10=принят символ; сбрасывается чтением приемника (порт 3F8h).
    01=передан символ; сбрасывается записью символа в регистр передатчика (порт 3F8h).
    00=изменение состояния модема
    (линий CTS, DSR, RI или DCD);
    сбрасывается чтением регистра состояния модема (порт 3FEh).
    0
    Рисунок 5.5 - Регистр идентификации прерывания.

    86 3FBh
    Чтение/
    Регистр управления линией (рис 5.6):
    Запись
    0 1
    2 3
    4 5
    6 7
    0-1: число битов данных:
    00=5, 01=6, 10=7, 11=8 2: число стоп-битов:
    0=1, 1=1.5 при 5 битах данных и 2 в противном случае
    3-4: тип четности:
    X0=нет, 01=нечетная, 11=четная
    5: постоянная четность:0=отмена постоянной четности, 1=постоянный бит четности, зависит от битов 3-4: биты 3-4=01 - бит четности всегда
    1, биты 3-4=11 - бит четности всегда 0, биты 3-
    4=X0 - без бита четности.
    6: 1=имитировать обрыв линии (посылка нулей).
    7: бит DLAB: 1=порты 3F8h и 3F9h для загрузки скорости обмена; 0=порты 3F8h и 3F9h в обычном режиме.
    Рисунок 5.6 - Регистр управления линией.
    3FCh
    Запись
    Регистр управления модемом (рис 5.7):
    0 1
    2 3
    4 5
    6 7
    0 0
    0 0: 1=установить выход DTR.
    1: 1=установить выход RTS.
    2: 1=установить OUT1 (не используется).
    3: 1=установить OUT2 (разрешить прерывания от RS-232).
    4: 1=диагностический режим (посылать выход на вход стыка).
    Рисунок 5.7 - Регистр управления модемом.
    3FDh
    Чтение
    Регистр состояния линии (рис. 5.8). Биты 1-4 вызывают прерывание по ошибке, если оно разрешено:

    87 0
    1 2
    3 4
    5 6
    7 0
    0:1=данные приняты. Сбрасывается чтением приемника.
    1:1=потеря предыдущего символа.
    2:1=ошибка четности.
    3:1=неверный стоп-бит.
    4:1=обнаружен обрыв линии.
    5:1=сдвиговый регистр передатчика пуст.
    Можно передавать след. символ.
    6:1=регистр передатчика пуст. Нет обрабатываемых данных.
    Рисунок 5.8 - Регистр состояния линии.
    3FEh
    Чтение
    Регистр состояния модема (рис. 5.9). Биты 0-3 вызывают прерываниe по изменению состояния модема, если оно разрешено:
    0 1
    2 3
    4 5
    6 7
    0:1=изменилось состояние линии CTS.
    1:1=изменилось состояние линии DSR.
    2:1=изменилось состояние линии RI.
    3:1=изменилось состояние линии DCD.
    4: состояние линии CTS.
    5: состояние линии DSR.
    6: состояние линии RI.
    7: состояние линии DCD.
    Рисунок 5.9 - Регистр состояния модема.
    "Изменилось состояние линии..." означает, что данная линия RS-232 изменила свое состояние по сравнению с последним чтением этого регистра.
    Ниже, в качестве примера программирования интерфейса RS-232, приведена программа, позволяющая работать с промышленным компьютером
    MicroPC в режиме терминала.
    Program MicroCom2; {программа приема/передачи данных по RS-232 (COM2)}
    uses Dos, Crt;
    var
    Int0BSave : Pointer; указательный тип buf, Save21, Out21 : byte;
    Key : char; символьный тип
    label
    N1; метка перехода

    88
    Procedure InitCom2; {процедура инициализации СОМ2}
    begin
    Port[$2FB] := $80;{Установить бит 7 в 1(режим задания скорости)}
    Port[$2F8] := $0C;{Скорость 9600 бот }
    Port[$2F9] := $0; { 115200/9600 = 12 = 0CH}
    Port[$2FB] := $03;{8 бит данных, 2 стоп, без проверки четности}
    Port[$2F9] := $01;{разрешить прерывание по приему байта}
    Port[$2FC] := $0B;{установить DTR, RTS, OUT2 }
    end;
    Procedure InpCom2; interrupt; {процедура обработки прерывания}
    begin
    buf := Port[$2F8]; {прием байта из СОМ2}
    Port[$20] := $63; {сигнал окончания обработки прерывания}
    write(chr(buf)); {вывод принятого символа}
    end;
    begin
    {main}
    asm
    cli
    {запретить прерывания}
    end;
    InitCom2; {Инициализация СОМ2}
    GetIntVec($0B, Int0BSave); {сохранить вектор прерывания 0Bh в
    Int0BSave}
    SetIntVec($0B, @InpCom2); {записать по адресу вектора 0Bh адрес процедуры обработки прерывания InpCom2}
    Save21 := Port[$21]; {чтение маски прерываний из порта 21}
    Out21:=(Save21 and $F7);{разрешение прерывания по СОМ2, бит 3=0 }
    Port[$21] := Out21; {вывод маски прерываний в порт 21 контроллера прерываний}
    1   2   3   4   5   6   7   8   9   10


    написать администратору сайта