Yury Magda
Последовательный порт ПК имеет сигнальные линии, которые можно использовать для считывания сигналов ТТЛ уровней в цифровых схемах. Для этого необходимо только преобразовать уровни ТТЛ (транзисторно-транзисторной логики) в уровни RS-232 и добавить мультиплексор для увеличения числа каналов, подключаемых к последовательному порту.
В схеме на Рис. 1 для трансляции уровней RS-232 в уровни ТТЛ используется микросхема MAX232 фирмы Maxim. Микросхема 74HC4051 от Texas Instruments служит в качестве селектора четырех цифровых входов для подключения их к последовательному порту. Представленное приведенным ниже исходным кодом приложение позволяет линиями RTS и DTR порта RS-232 выбирать входы для тестирования. Линия CTS используется для считывания сигнала в ПК.
Рисунок 1. Эта схема позволяет направлять до 4-х ТТЛ сигналов в порт RS-232
Четыре входных цифровых сигнала A0 … A3, идущие от тестируемого устройства, подключаются к первым четырем входам X0 … X3 мультиплексора. На выход X (выв. 3) всегда может проходить только один сигнал. Установкой соответствующего двоичного кода на линиях RTS и DTR, можно выбирать любой канал. (Таблица 1).
Таблица 1. Выбор входа
Сигнал на выводе X |
Бит RTS |
Бит DTR |
A0 |
0 |
0 |
A1 |
1 |
0 |
A2 |
0 |
1 |
A3 |
1 |
1 |
Запускаемое в ПК из Windows XP, приложение последовательно перебирает все двоичные комбинации на линиях порта RTS и DTR и считывает цифровые сигналы по линии CTS. При нажатии кнопки «Проверить статус» («Check-status») состояние тестируемых каналов отображается в главном окне приложения (Рис. 2). Исходный код написан на Microsoft C# 2008, но может исполняться и под версией 2005.
Рисунок 2. В главном окне приложения видно, что на входных линиях A0 ... A2
высокие логические уровни, а на линии A3 низкий.
Для создания приложения выберите «Windows Form Application» из шаблонов в мастере проекта. Разместите текстовое окно, метку и кнопку в главной форме проекта и присвойте им заголовки. В области проекта поместите компоненты последовательного порта. Затем установите надлежащие параметры для компонентов последовательного порта, включая номер порта, скорость обмена, биты данных , четности и стоп-биты.
Собирая схему соблюдайте меры предосторожности при обращении с микросхемами MAX232 и 74HC4051 и руководствуйтесь спецификациями изготовителей. Блокировочные конденсаторы располагайте как можно ближе к выводам питания и земли микросхем. Микросхему MAX232 можно заменить на MAX225 или MAX233.
Вот исходный код приложения:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Interfacing_74HC4051_to_the_Serial_Port
{
public partial class Form1 : Form
{
public bool OUT; // needs for checking the state of CTS signal
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (!serialPort1.IsOpen)
serialPort1.Open();
textBox1.Text = " ";
// CHANNEL X0 (RTS = 0, DTR = 0)
serialPort1.RtsEnable = true; //RTS = 0
serialPort1.DtrEnable = true ; // DTR = 0
WriteStatus();
// CHANNEL X1 (RTS = 1, DTR = 0)
serialPort1.RtsEnable = false; //RTS = 1
serialPort1.DtrEnable = true; // DTR = 0
WriteStatus();
// CHANNEL X2 (RTS = 0, DTR = 1)
serialPort1.RtsEnable = true; //RTS = 0
serialPort1.DtrEnable = false; // DTR = 1
WriteStatus();
// CHANNEL X3 (RTS = 1, DTR = 1)
serialPort1.RtsEnable = false; //RTS = 1
serialPort1.DtrEnable = false; // DTR = 1
WriteStatus(); serialPort1.Close(); } public void WriteStatus() { OUT = serialPort1.CtsHolding; if (!OUT) textBox1.Text = textBox1.Text + "1"; else textBox1.Text = textBox1.Text + "0"; } } } Исходный код незатейлив. Главная программа запускается обработчиком событий button1_Click (эта функция вызывается при нажатии кнопки «Проверить статус» («Check-status»). Вы без труда сможете усовершенствовать этот исходный код. К примеру, вы можете захотеть считывать код с линий A0 ... A3 периодически. Для этого в форму надо поместить компонент Таймер (Timer), установить соответствующий временной интервал и поместить исходный код функции WriteStatus внутри обработчика событий, который вы должны определить сами. |