Набор с использованием компьютера |
Во введении к этой главе я объяснил, почему нет смысла самостоятельно изготавливать устройство автоматического набора номера. Но если у вас есть компьютер, его совсем нетрудно приспособить для автоматического набора. С его помощью можно осуществлять как импульсный, так и тональный набор номера. В любом случае вы воспользуетесь одним из выходных портов. Для импульсного набора можно использовать или последовательный выходной порт, или один разряд параллельного порта. Для тонального набора потребуется полный байт (восемь бит) параллельного выходного порта.
Компьютеризованный импульсный набор номера
Компьютер позволяет легко синтезировать сигнал импульсного набора телефонного номера. Последовательность наборных импульсов является таким же цифровым сигналом, как и сигналы выходного порта компьютера. Поскольку синтезируется только один сигнал, достаточно будет использовать один единственный разряд выходного (например, параллельного) порта компьютера. Остальные разряды выходного порта могут быть использованы для других целей или не использоваться вообще.
Синтез сигнала набора осуществляется программно. Управляющая программа составляется так, чтобы разряд выходного порта переключался соответствующим образом между высоким и низким уровнем. Затем выходной сигнал подается в телефонную линию. Оборудование телефонной станции не сможет отличить компьютерные импульсы от импульсов набора обычного телефона с вращающимся диском.
Непосредственно подключить выход компьютера к линии нельзя. Высокий уровень выходного сигнала компьютера — 5 В, а в телефонных сетях — около 48 В.
Решить эту задачу можно разными способами. Один из самых простых — использовать сигнал с выходного порта компьютера для управления 5-вольтовым реле (рис. 6.17). Можно заменить реле транзисторной переключательной схемой. Однако, мне кажется, что пощелкивание электромеханического реле имеет некоторое преимущество. Если вы слышите импульсы набора, это означает, что схема функционирует нормально.
Обратите внимание, что для разрыва и замыкания телефонной линии используются нормально замкнутые контакты реле. Резистор R1 служит для ограничения тока. Для уверенного срабатывания реле сопротивление этого резистора, возможно, придется подобрать. При подаче на реле сигнала высокого уровня его контакты размыкаются, разрывая соединение (как в обычном телефоне с импульсным набором номера).
Можно переключать реле низким уровнем выходного сигнала (что может несколько упростить программу), при этом к линии должны подключаться нормально разомкнутые контакты реле.
Переключатель S1 выполняет весьма важную функцию. Кроме него, не существует никакого способа отключить схему компьютерного набора, которая в вьгключенном состоянии шунтирует линию. Без него телефонная станция будет считать, что ваш телефон всегда находится в состоянии со снятой трубкой. Размыкание переключателя отсоединяет шунтирующую цепь. Если вы не хотите вручную включать и выключать устройство, можно автоматизировать этот процесс, используя еще один разряд выходного порта компьютера для управления вторым реле, которое будет выполнять функцию переключателя S1. При составлении программы необходимо будет учесть эту модификацию, поддерживая соответствующий выход порта в состоянии высокого уровня тогда, когда используется компьютерный набор, и низкого — все остальное время.
Программное обеспечение для этой конструкции зависит от конкретного компьютера, который используется для управления реле. Любая программа, написанная для этого устройства, должна постоянно поддерживать выбранный разряд выходного порта в состоянии низкого уровня, за исключением интервалов времени, когда генерируется очередной импульс набора. На это время выходной уровень должен стать высоким (для переключения реле и имитации разрыва цепи обычным механическим вращающимся диском). Количество импульсов должно соответствовать набираемой цифре. Например, чтобы набрать номер 935, компьютер должен послать в выходной порт последовательность из девяти импульсов, затем паузу (низкий уровень), затем три импульса, еще одну паузу, и, наконец, пять импульсов. Напомню, что в телефонных сетях цифра "О" представляется десятью импульсами.
Длительность выходных импульсов имеет важное значение. Программная задержка должна быть подобрана так, чтобы при генерации каждого импульса набора длительность фазы высокого уровня составляла около 60 мс, а низкого — около 40 мс. Впрочем, в большинстве телефонных систем допускаются некоторые отклонения этих параметров от номинальных значений.
Управляющая программа должна быть построена так, чтобы между сериями импульсов набора каждой цифры существовала некоторая задержка. Это единственный признак, по которому оборудование телефонной станции может различить отдельные цифры. Пауза между цифрами может достигать нескольких секунд, например, если человек, вручную набирающий номер, задумался, вспоминая следующую цифру. Но нас больше интересует минимальная длительность паузы. В зависимости от оборудования телефонной станции, к которой подключен ваш телефон, она может быть разной. Как правило, не возникает никаких проблем, если пауза между сериями импульсов имеет длительность от 250 до 500 мс. Если при наборе возникают ошибки, длительность паузы придется увеличить.
Телефонный номер состоит из семи цифр. Как долго компьютер будет набирать обычный семизначный номер? Это невозможно предсказать из-за друх неизвестных — длительности паузы между отдельными цифрами и конкретными цифрами, которые должны быть набраны. Период (сумма длительностей фаз высокого и низкого уровней) каждого импульса набора постоянен — около 100 мс, но количество импульсов изменяется в зависимости от набираемой цифры. Чтобы набрать цифру "1", нужен только один импульс, и на это потребуется 100 мс. При наборе цифры "5" генерируются пять импульсов, поэтому на передачу этой цифры уйдет 500 мс.
Можно вычислить максимальное время, которое потребуется для набора семизначного телефонного номера, если известна длительность паузы между цифрами. Предположим, что ваша компьютерная программа вставляет между соседними цифрами паузу в 400 мс. Самая длинная цифра — это "0", представляемая десятью наборными импульсами, поэтому телефонный номер 000-0000 будет набираться дольше любого другого семизначного номера. Правда, этот номер никогда не используется, поэтому очевидно, что все реальные телефонные номера будут набираться быстрее.
При наборе вышеупомянутого номера в линию будут посланы семь серий по десять импульсов в каждой. Дефис (символ "-") между третьей и четвертой цифрой используется в телефонном номере только для удобства восприятия. Он облегчает чтение и запоминание номера и не требует большей паузы при наборе.
Набор каждого "0", состоящий из десяти 100-миллисекундных импульсных циклов, длится 1 секунду. Вы затрачиваете по 1 секунде на каждую из семи цифр и по 0,4 секунды на каждую из шести пауз, поэтому общее время набора самого длинного номера составит
Т=(7х1)+(6х0,4)=7+2,4=9,4 секунд.
Вашей системе никогда не потребуется больше 9,4 секунд для набора любого семизначного телефонного номера. В среднем набор номера будет занимать от 6,5 до 8,6 секунд.
Это достаточно долго по компьютерным стандартам, но немного быстрее, чем вы сами сможете набрать номер. И компьютер может запомнить столько телефонных номеров, сколько вам нужно. Вы можете просто выбрать абонента, которому необходимо позвонить, и компьютер сам найдет и наберет для вас нужный номер.
Компьютеризованный тональный набор номера
Компьютер может использоваться и для тонального набора телефонного номера. В этом случае вы должны использовать одну из описанных ранее схем DTMF генератора (кодировщика), подключив вместо клавиатуры выходной параллельный порт компьютера.* Каждый разряд параллельного порта управляет одной тональной частотой. В стандартной DTMF системе используются семь тональных частот, поэтому для управления будут использоваться семь выходных разрядов. Стандартный параллельный выходной порт в большинстве компьютеров содержит 8 разрядов. Обозначим их латинскими буквами:
ABCD EFGH.
Будем считать, что старший разряд (А) постоянно имеет низкий уровень (логический ноль). Следующие три разряда (В, С и D) будут использоваться для трех столбцовых DTMF частот:
В — 1477 Гц (клавиши 3, 6, 9 и #); С — 1336 Гц (клавиши 2, 5, 8 и 0); D — 1209 Гц (клавиши 1, 4, 7 и *).
Четыре остальных разряда (Е, F, G и Н) используются для управления четырьмя строковыми частотами:
Е — 941 Гц (клавиши *, 0 и #); F — 852 Гц (клавиши 7, 8 и 9); G — 770 Гц (клавиши 4, 5 и 6); Н — 697 Гц (клавиши 1, 2 и 3).
Хорошей задачей для начинающего программиста было бы написание программы синтеза тональных частот DTFM сигнала. При этом дополнительный генератор вам не понадобится.
Переход каждого конкретного разряда в состояние высокого уровня (логической единицы) вызывает генерацию определенной тональной частоты. Низкий уровень данного разряда (логический ноль) выключает генерацию тональной частоты.
Теоретически возможны 128 возможных комбинаций частот при изменении состояния порта от 0000 0000 до 0111 1111 (разряд А всегда поддерживается в состоянии логического ноля). Но для телефонных DTMF систем большинство этих комбинаций недействительны. В каждый конкретный момент времени могут звучать две и только две тональные частоты. Более того, одна из этих тональных частот должна быть из верхней столбцовой группы (разряды В, С или D), а другая — из нижней строковой группы (разряды Е, F, G или Н). Например, разряды С и D никогда не должны одновременно принимать значение логической единицы. Это запрещенный DTMF код.
В данном случае имеют смысл только следующие выходные комбинации:
00000 — клавиша не нажата;
10001 — 1;
0010 0001 — 2;
0100 0001 — 3;
0001 0010 — 4;
0010 0010 — 5;
0100 0010 — 6;
0001 0100 — 7;
0010 0100 — 8;
0100 0100 — 9;
0001 1000 — *;
0010 1000 — 0;
0100 1000 — #.
Все другие комбинации выходных битов недействительны и должны запрещаться управляющей программой.
Несмотря на то, что для каждой клавиши существует определенный код, пользователь может не следить за ним при вводе телефонного номера. Эту работу может выполнить сам компьютер. Когда пользователь набирает цифру "3" на клавиатуре компьютера, программа автоматически преобразует ее в соответствующий выходной код (0100 0001).
Чтобы было легче программировать, можно использовать десятичные эквиваленты для каждого допустимого двоичного кода, который вы хотите послать на параллельный выходной порт компьютера. Компьютер преобразует эти эквиваленты в двоичное представление. В таблице 6.6 приведены десятичные эквиваленты двоичных кодов.
Не забывайте о том, что в нерабочем состоянии на параллельный порт должен выдаваться нулевой байт 0000 0000 (соответствующий целому числу 0). При тональном наборе между соседними цифрами номера тоже должна быть пауза, но она может быть очень короткой. Каждая пара частот (соответствующая определенной цифре) должна передаваться не менее 50 мс. Пауза между соседними цифрами тоже может быть равна 50 мс, хотя ее можно сделать немного короче.
Длительность тонального набора всех цифр телефонного номера одинакова, в отличие от метода импульсного набора, описанного выше. Следовательно, все семизначные телефонные номера имеют одинаковое время передачи.
Предположим, что для большей надежности каждая пара частот передается в течении 60 мс с паузой между соседними цифрами тоже 60 мс. Поскольку длительности обоих интервалов времени одинаковы, в программе может использоваться одна и та же процедура задержки. Заметим, что эти 60 мс были выбраны совершенно произвольно. Вы можете использовать другие интервалы времени, достаточные для надежного распознавания цифр телефонной станцией. Пауза между цифрами и тональный сигнал цифры не обязательно должны иметь равную длительность, хотя мне кажется, что это удобнее.
В нашем примере (с 60 -миллисекундными цифрами и паузами) набор семизначного телефонного номера займет
Т=(7х60)+(бх60)=420+360=780 мс=0,78 секунд.
Таким образом, полный номер может быть набран компьютером быстрее, чем за одну секунду. Сравните с это с временем, необходимым при использовании импульсного набора.
Количество телефонных номеров, которое может храниться в памяти компьютера ограничено только ее емкостью. Если в вашем компьютере установлен жесткий диск, вы можете считать ее практически неограниченной.
Для расширения возможностей системы вы, возможно, захотите написать программу так, чтобы можно было вызывать нужный телефонный номер по имени. Полезно предусмотреть использование нескольких вариантов выбора. Например, если у вас записан телефонный номер автора этой книги, вы можете написать программное обеспечение так, чтобы этот номер можно было вызвать, набрав "Делтон Хорн", "Делтон" или "Хорн". Вы можете предусмотреть поиск номера по какому-нибудь общему признаку, например, "Авторы книг по электронике". Вы можете также включить мой телефонный номер в подзаголовок "Издательство TAB Books". Огромное расширение возможностей — самое большое преимущество, которое компьютеризованная система имеет перед любыми устройствами автоматического набора телефонных номеров, продающимися в магазинах.
|
|