2017-02-18 5 views
-1

Мне нужно контролировать, открыта ли дверь. У меня есть датчик, который продолжает генерировать + 5 В постоянного тока, пока дверь закрыта, но падает до 0 В после открытия двери.Отправка фиксированного напряжения в последовательный порт

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

Моя мысль заключается в том, что различные параметры серийного ввода, такие как скорость передачи данных и т. Д., Не имеют значения в моем случае. Для каждого байта, который я читаю, я ожидаю, что значение будет 255 (логическое 1s), когда дверь будет закрыта. В противном случае я буду считать, что дверь была открыта. Есть ли недостаток в этой логике?

Я прошел через Sending a voltage to RS232. Кажется, мне просто нужно подключить провод к контакту 2 (RX). Однако для последовательного порта для получения логического 1, кажется, напряжение должно быть между -3 В и -12 В. Поскольку напряжение, создаваемое моим датчиком, положительно, я думаю, что вместо этого подключу провод датчика к контакту 5 (GND) и подключите контакт 2 к земле. По сути, я перевернул напряжение. Будет ли это работать?

Если эта логика ошибочна, мне может потребоваться купить инвертор напряжения.

Наконец, мне сказали, что не нужно ничего подключать к контакту 5 на последовательном порту материнской платы. По-видимому, он твердо связан с шасси. Это правда? С уважением.

+0

Ваше сообщение, вероятно, вне темы для этого сайта, так как это не вопрос программирования. Вы также сделали множество ошибочных предположений и неправильно поняли, какое небольшое исследование вы сделали. По крайней мере, вам понадобится конвертер (логика для RS232), а не инвертор напряжения * *. – sawdust

+0

Благодарим вас за помощь. В этом вопросе есть две части. Во время программирования мне нужно беспокоиться о скорости передачи данных и т. Д. Или просто продолжать чтение байта после байта? Кроме того, для чего нужен конвертер, когда все, что у меня есть, является все-высоким или все-низким? – Peter

+0

RS-232 использует кадрирование (то есть бит запуска и остановки) для каждого символа. Постоянное напряжение никогда не обнаруживается как входные кадры/символы. Если вы можете генерировать правильные уровни напряжения и полярность, возможно, вы могли бы использовать режим простоя (состояние «Марка») или «Разрыв» («Пространство») на входе RxD. RS-232 использует как положительное, так и отрицательное напряжение для уровней сигнала (обычно +12 В и -12 В). Нулевой вольт не используется в качестве уровня сигнала. Это базовое знание RS-232. – sawdust

ответ

2

Как упоминалось в комментариях, постоянный максимум не выдавал бы 255 байт. Я бы осуществил это, подключив GND к GND и подключив +5 В постоянного тока к выходу CTS, который можно запросить для его состояния HIGH/LOW. Но это только взломать, вам действительно нужно использовать какой-то микроконтроллер.

+0

* «подключение +5 В пост. Тока к выходу CTS ... Но это только взломать ...» * - Это взломать, что не сработает. Постоянное напряжение (которое находится на нижней стороне диапазона RS-232) не передает никакой информации. – sawdust

+0

@sawdust CTS не является буфером данных, это штырь, который может быть запрошен только для его состояния HIGH/LOW (и обычно используется для управления потоком). – idanp

+0

Это именно то, что я искал. Большое спасибо за Вашу помощь. Ты помог мне взглянуть в правильном направлении. Оказывается, я могу использовать CTS или DSR-контакт. Простой вызов ioctl() может получить желаемый статус. С уважением. – Peter

Смежные вопросы