Схема. Кабельный пробник на PIC-контроллерах
Описываемое устройство состоит из передатчика и приемника. На стороне первого концы проводов вставляют в пронумерованные зажимы, а на стороне второго щупом прикасаются к их другим концам. На цифровом табло приемника высвечивается номер зажима, к которому подключен тот или иной провод. Для определения номеров жил необходимо выявить одну из них и подключить ее к общему проводу приемника и передатчика.
Передатчик работает в режиме распределителя импульсов по десяти выводам микроконтроллера (МК). Каждый из них имеет свою константу, к которой прибавляются десятки в момент смены их кода. Для того чтобы все 80 циклов распределения импульсов производились за одно и то же время, каждый из них выполняется за время от одного прерывания до другого. Прерывания происходят по переполнению таймера TMR0. Он имеет предварительную установку коэффициента деления, выбранную таким образом, чтобы в промежуток между прерываниями поместились 80 выходных импульсов.
Рассмотрим алгоритм работы программы передатчика (рис. 1). После пуска программы и инициализации регистров обнуляется регистр десятков. Его значение переписывается в порт А для коммутации мультиплексоров. Далее разрешаются прерывания, и по двоичному числу десятков находится его десятичное значение, которое прибавляется к константе первого выхода. Константа (К) выхода определяется его номером: у первого она равна 1, у второго — 2, у десятого — 10. При нулевом значении десятков на каждом выходе появляется число импульсов, равное номеру выхода.
Далее программа проверяет регистр К на наличие нуля. Если его нет, из регистра вычитается единица, что сопровождается переключением выхода в единичное состояние. Затем выдерживается пауза продолжительностью 24 мкс, и выход переводится в нулевое состояние, которое длится 30 мкс (т. е. период колебаний равен 54 мкс). После этого программа проверяет регистр на ноль. Если регистр пустой, она переходит в режим ожидания прерывания, а если его значение не равно нулю, весь цикл формирования импульса на выходе повторяется. Таким образом, на выходе формируется число импульсов, которое было записано в регистр К.
После инициализации регистров включаются предделитель с коэффициентом деления 32 и таймер с коэффициентом деления, равным 137 (256 — 119). При частоте кварцевого резонатора 4 МГц прерывание по переполнению таймера должно происходить примерно через 4,38 мс (32-137 = 4384 мкс), но возврат из прерывания выполняется командой без разрешения прерывания. К этому времени прибавляется время циклов до разрешения прерывания и, собственно, время на само выполнение прерывания (общая средняя продолжительность этого времени равна 16 циклам). Кроме этого, предделитель обнуляется при каждой установке таймера, поэтому пауза между прерываниями составляет 4,4 мс. Как не трудно подсчитать, 80 периодов колебаний будут длиться 4,32 мс (54 мкс х 80 = 4320 мкс), т. е. это время укладывается в промежуток между прерываниями.
После переполнения таймера выполняется обычная процедура сохранения значений регистров при прерывании и прибавляется (возможно и вычитание) единица в счетчик прерываний. Значения этого счетчика не используются программой, а сам счетчик необходим для выполнения прерывания. Но его удобно использовать при отладке программы. После восстановления значений регистров разрешается прерывание для формирования импульсов со следующего выхода.
После того как сформированы импульсы на десятом выходе, регистр десятков увеличивается на единицу и весь цикл повторяется с команды записи двоичного кода десятков в порт А. В новом цикле число сформированных импульсов на каждом выходе увеличивается на десять. Когда значение десятков станет равно восьми, цикл формирования импульсов начнется с обнуления регистра десятков. Таким образом, максимальное значение десятков равно семи, а максимальное число импульсов будет на десятом выходе (10 + 70 = 80). Все 80 циклов прерываний длятся 0,352 с (4,4 мс х 80). Это время определяет гарантированную длительность паузы между выдачей импульсов на каждом выходе. Для одиночного импульса на первом выходе длительность паузы будет увеличена почти на время, равное времени между прерываниями, а для 80 импульсов на десятом выходе пауза между импульсами будет равна 0,352 с. Это необходимо отметить, чтобы лучше понять работу приемной части пробника.
Принципиальная схема передатчика кабельного пробника изображена на рис. 2. Все разряды порта В МК DD1 настроены на вывод и имеют коэффициенты от одного до восьми. Разряды RA0—RA2 используются для вывода значений регистра десятков в двоичном коде, RA3 и RA4 — как выходы с коэффициентами 9 и 10 соответственно. Поскольку выход RA4 имеет открытый сток, он нагружен резистором R1. Входы Y (вывод 3) мультиплексоров DD2—DD11 подключены к разрядам порта В, адресные входы (А, В, С) соединены параллельно и подключены к выходам десятков МК.
Таким образом, при нулевом значении регистра десятков на всех мультиплексорах будет выбран нулевой адрес, а на их выходах Х0 (вывод 13) будет появляться число импульсов, равное коэффициенту выхода МК, который подключен к входу Y мультиплексора. На выходе Х0 микросхемы DD2 будет постоянно присутствовать только один импульс, а на одноименном выходе DD11—10 импульсов. При увеличении адреса мультиплексора на единицу включится его следующий выход (Х1), а число импульсов на нем увеличится на десять. Таким образом, на каждом выходе мультиплексоров последовательно будет появляться только свое число импульсов. Нижний (по схеме) выход передатчика (Общ.) подключают, как отмечалось, к одному известному проводу, который будет общим для передатчика и приемника.
Приемник кабельного пробника работает по принципу двухразрядного счетчика. Алгоритм работы его программы показан на рис. 3, а принципиальная схема приемника кабельного пробника — на рис. 4. После пуска и инициализации программа переходит к выполнению динамической индикации двух светодиодных цифровых индикаторов с общим катодом. Время на индикацию одного индикатора равно 5 мс, т. е. весь цикл индикации повторяется с частотой 100 Гц.
В приемнике используются два вида прерываний: по переполнению таймера TMR0 и от изменения сигнала на входе RB0. При поступлении импульса на этот вход сохраняются значения текущих регистров. Далее программа проверяет источник прерывания. Если оно произошло не по переполнению таймера, то инкрементируется счетчик импульсов, переустанавливается таймер (256 — 120 = 136) и сбрасывается счетчик предделителя. Программа восстанавливает значения регистров, и продолжается работа по индикации. Таким образом, при поступлении импульсов с входа RB0 таймер постоянно переустанавливается, поэтому прерывание от переполнения таймера невозможно до тех пор, пока на этом входе присутствуют импульсы.
Если же на входе длительное время импульсы отсутствуют, происходит прерывание от переполнения таймера. Для надежности работы приемника время между прерываниями немного уменьшено по сравнению с передатчиком и равно 4,38 мс. Прерывания от переполнения таймера подсчитываются счетчиком прерываний. Пауза между импульсами на каждом выходе передатчика равна 80 прерываниям, поэтому счетчик прерываний в приемнике может считать до 80. Если за это время не было входных импульсов, программа переписывает значения регистров счетчиков импульсов в регистры индикации и показания обновляются. Происходит это каждые 0,35 с.
Коды «прошивок» МК передатчика и приемника приведены в табл. 1 и 2 соответственно.
Выходы RB1—RB7 МК DD1 коммутируют элементы (сегменты) светодиодных индикаторов HG1, HG2, выходы RA0, RA1 — их катоды. Импульсы со щупа поступают на вход RB0. Зажим Х1 подключают к известной жиле кабеля, которая служит общим проводом для приемника и передатчика. Если выход мультиплексора передатчика не выбран адресом, на нем будет присутствовать неопределенный уровень и при появлении импульсов на счетчике приемника будет одно ложное срабатывание (независимо от установленного перепада срабатывания счетчика: это может быть как перепад из нуля в единицу, так и из единицы в ноль). Чтобы не было ложных импульсов, вход зашунтирован резистором R1.
Питаются приемник и передатчик от батарей, составленных их трех элементов АА или ААА каждая. Если предполагается длительная работа с приемником, желательно использовать батарею типа 3R12Х.
В приемнике и передатчике применены кварцевые резонаторы на частоту 4 МГц. Без каких-либо изменений в схемах и программах можно использовать резонаторы с более низкой частотой, вплоть до 1 МГц. При этом соответственно уменьшится частота обновления показаний индикаторов, но она останется на приемлемом для глаз значении — до 25 Гц.
Передатчик монтируют на двух печатных платах, каждая из которых рассчитана на 40 выходов (вторая отличается от первой тем, что на ней отсутствует микросхема DD1 и предусмотрено место для установки резистора R1). Платы располагают одну под другой, соединяют с помощью винтов и резьбовых стоек, а между платами устанавливают пенал для трех элементов батареи питания (в зоне нахождения микросхемы DD1). Чертеж платы с микросхемой DD1 желающие найдут на сайте kabelprob.zip
Зажимы для подключения проводов на плате передатчика самодельные (рис. 5). Состоят они из двух одинаковых скоб 2, согнутых в виде буквы «Л» из полосок листовой бронзы или хорошо пружинящей латуни толщиной 0,4…0,5 и шириной 2,5 мм. Один из концов заготовок опиливают до ширины примерно 1 мм (на длине 1,5…2 мм в зависимости от толщины материала плат 1), в другом — сверлят отверстие диаметром 1,2 мм, после чего концы отгибают.
Опиленные части скоб впаивают в платы, как показано на рис. 5. Для подсоединения провода 3 нижний и верхний (по рисунку) концы скоб сжимают до совпадения отверстий. После монтажа зажимы нумеруют таким образом, чтобы, повернув передатчик (когда низ становится верхом, и наоборот), были видны их номера.