Скачать .docx  

Реферат: Счетчик времени исходящих телефонных разговоров

МИНИСТЕРСТВО ОБРАЗОВАНИЯ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Курганский государственный университет

Кафедра автоматизации проиводственных процессов

Счетчик времени исходящих телефонных разговоров

КУРСОВОЙ ПРОЕКТ

расчетно-пояснительная записка

Дисциплина: Электроника

Студент группы М-3130 Скидин А.С. подпись ___________

Направление: 210200_______________________________________

Специальность: Автоматизация и управление__________________

Руководитель:

Доцент, к.т.н. _______________________________/ Кудряшов Б.П. /

Дата защиты: _________________

Оценка: ______________________

Курган 2003

СОДЕРЖАНИЕ

1. Введение______________________________________________3

2. Теоретический раздел___________________________________4

3. Заключение____________________________________________19

4. Список литературы______________________________________20

1. Введение

В условиях грядущего введения в действие системы повременной оплаты телефонных разговоров возникает потребность следить за временем, проведенным у телефонного аппарата. Для этой цели можно применять разного рода устройства, и с разной эффективностью. Однако в общем случае применяются специальные устройства.

Таким образом, поставленная задача заключается в том, чтобы спроектировать устройство, которое бы могло с достаточной точностью анализировать «проговоренное» время, работало бы в автономном режиме (или от телефонной сети), а также способное хранить информацию о времени разговоров в течение долгого времени.

По прецеденту повременной оплаты телефонных разговоров, как известно, берется плата только за исходящее соединение. Это означает, что если кто-либо звонит абоненту, аппарат которого снабжен счетчиком, то счет времени не должен происходить. В то же время, счет не должен начинаться и при поднятой трубке в случае, если соединение не прошло, а также во время ожидания ответа принимающей стороны.

В спроектированном устройстве учтено большинство нюансов, о которых речь шла выше. Основу устройства составляет микроконтроллер PIC16C55, задачей которого является хранение времени разговоров и обеспечение счета этого самого времени.

Питание устройства осуществляется от телефонной сети.

2. Теоретический раздел

2.1. Постановка задачи

Для учета времени телефонных разговоров применяют специальные счетчики. Предлагаемое устройство отличается от ранее описанных тем, что оно учитывает время разговоров более точно, так как анализирует сигналы в телефонной линии.

Принцип повременной оплаты внутригородских телефонных разговоров предполагает оплату времени только исходящих от абонента звонков. Естественно, что пользователям телефонной сети интересно и полезно знать свое «проговоренное» время, чтобы, например, вовремя перейти на режим «разговорной экономии» или оценить в конце месяца дополнительные затраты.

2.2. Описание функциональной схемы устройства

Алгоритм работы устройства поясняет функциональная схема (см. приложение 1). При наличии вызывного сигнала блок 5 формирует и выдает управляющее напряжение на узел запрета счета времени (блок 7), который в этом случае разрывает цепь прохождения импульсов счета. Индикатор времени (блок 9) отображает предыдущие показания без их изменения. При этом счет времени отсутствует независимо от того, поднял абонент трубку своего телефона или нет.

При поднятии трубки абонентом срабатывает устройство анализа наличия «своего» вызова (блок 2) и подготавливает цепь прохождения импульсов счета через узел разрешения счета времени (блок 3).

Необходимыми условиями прохождения импульсов счета с генератора (блок 8) через узел запрета (блок 7) являются отсутствие звонкового сигнала до поднятия трубки и окончание сигналов «не отвечает» после набора номера абонентом. Таким образом, счет происходит только при состоявшемся исходящем соединении. В случае появления сигнала «занято» счет также не начнется.

Текущее время разговора отображается на индикаторе времени (блок 9). Блок 4 работает в режиме накопления. Для его обнуления предусмотрена кнопка «Сброс». Питание всех элементов устройства осуществляется от источника питания, который, в свою очередь, питается от телефонной линии.

2.3. Описание принципиальной схемы устройства

Принципиальная схема устройства показана в приложении 1. Генератор импульсов счета собран на микросхеме DD2. Особенностью его построения является отсутствие, для упрощения, кварцевого резонатора, используемого в типовой схеме включения. На выходе 9 микросхемы DD2 (вывод 1) присутствуют импульсы счета с частотой 1 Гц, а на выходе K – импульсы с частотой 512 Гц, которые используются для работы жидкокристаллического индикатора HG1.

Устройство анализа наличия звонка работает следующим образом: сигнал вызова (переменное напряжение с частотой 25 Гц и амплитудой до 110 В) из линии через конденсатор C3 поступает на диодный ограничитель VD7 – VD10. Примененное включение диодов позволяет преобразовать синусоидальное напряжение звонка в почти прямоугольные импульсы с амплитудой 2,1 В, которые переключают триггер DD1.1 по входу C. Так как на входе D триггера DD1.1 в этот момент присутствует высокий уровень с выхода элемента DD4.1, на прямом выходе DD1.1 также появится высокий уровень. Этот сигнал запрещает прохождение импульсов счета через элемент DD3.1, которые поступают с микросхемы DD2. Если при этом абонент поднимет трубку телефона для разговора, счета времени не произойдет.

При снятии трубки абонентом происходит переключение триггера Шмитта на элементе DD4.1. На его вход поступает сигнал с делителя R2R3. В этом случае произойдет изменение уровня с высокого на низкий, но с некоторым запаздыванием, обусловленным наличием конденсатора C2. Конденсатор C2 необходим для отфильтровывания сигналов набора номера, звонка, а также помех, которые могли бы приводить к ложному срабатыванию триггера DD4.1. Низкий уровень с выхода DD4.1 поступает на вход D триггера DD1.1 (который теперь не будет изменять исходного нулевого состояния, независимо от любых сигналов на входе C, если до этого не было звонка) и вход элемента DD3.2, который разрешает счет времени.

С выхода DD3.2 импульсы счета поступают на элемент DD3.3, на второй вход которого (вывод 8) подается управляющий уровень с выхода устройства анализа наличия сигнала «не отвечает» (посылки синусоидальных импульсов с частотой заполнения 425 Гц, длительностью 1 с и паузой 4 с) или «занято» (аналогичные посылки с паузой 1 с). Импульсы выделяются на диодах VD7 – VD10, усиливаются транзисторами VT3, VT4 и заряжают конденсатор C5 почти до напряжения источника питания. Во время паузы конденсатор C5 разряжается через подстроечный резистор R9. Транзистор VT2 в это время закрыт. Резистором R9 устанавливают такую постоянную времени, чтобы в течение 4 с (паузы) не происходило переключение триггера Шмитта DD4.3, преобразующего экспоненциальные фронты на своем входе в крутые на выходе.

Таким образом, пока на конденсаторе C5 выделяется сигнал «не отвечает», триггер DD4.3 находится в единичном состоянии и своим выходным сигналом запрещает прохождение импульсов счета через элемент DD3.3 на разъем X3.1 и далее на вход счетчика времени «своих» разговоров. Одновременно эти импульсы поступают на вход C триггера DD1.2 и вход формирователя импульсов индикации счета (элемент DD4.2). Триггер DD1.2 переключается и открывает транзистор VT2, который шунтирует вход устройства анализа сигналов. Это необходимо для исключения зарядки конденсатора С5 речевыми сигналами и сигналами помех в линии.

Обнуление триггеров DD1.1 и DD1.2 происходит подачей импульса, формируемого дифференцирующей цепью C4R13, возникающего при опускании телефонной трубки на аппарат и переходе, вследствие этого, триггера DD4.1 в единичное состояние. В случае поступления вызывного сигнала в отсутствие абонента (трубка не будет поднята) триггеры DD1.1, DD1.2 переключаются так же, как в рабочем режиме, описанном выше, а их обнуление осуществляется импульсом с дифференцирующей цепи C9R13, возникающем в момент переключения триггера Шмитта DD4.3 в нулевое состояние после окончания звонковых сигналов.

Элемент DD4.4 предотвращает обнуление триггера DD1.1 в случае поступления звонка и поднятия трубки, так как в этом случае обнуляющий импульс с выхода DD4.4, возникающий при поднятии трубки, делится пополам на конденсаторах C4, C9 и его амплитуды становится недостаточно для переключения триггера DD1.1. Низкий уровень на входе D триггера DD1.1 (при поднятии трубки) позволяет триггеру оставаться в нулевом состоянии при воздействии по цепи C3R12 импульсов набора номера и импульсов помех в линии на его вход C.

Счет времени «своих» разговоров осуществляется с помощью PIC-контроллера (модель PIC16C55, 4 МГц). Максимальное время, которое может пройти до переполнения счетчика, составляет 99 часов 59 минут 59 секунд. Часы и минуты отображаются на жидкокристаллическом индикаторе HG1. Работа устройства в режиме счета определяется по мигающей с частотой 1 Гц средней децимальной точке (вывод 9 HG1). Обнуление таймера происходит при подаче импульса на вход RA2 микроконтроллера, формируемого дифференцирующей цепью C10R17 при нажатии кнопки SB1.

Питание устройства осуществляется от телефонной линии с использованием микромощного стабилитрона VD6, рабочий ток которого задает стабилизатор тока VT1. Диодный мост VD1 – VD4 обеспечивает независимость от полярности при подключении устройства к линии. Ток, потребляемый устройством в режиме ожидания, не превышает 100 мкА.

2.4. Описание процесса обработки импульсов счета

Требования, которым должна удовлетворять программа для PIC-контроллера, состоят в следующем. Прежде всего, она должна адекватно реагировать на каждый импульс счета, то есть ее основной задачей является обработка каждого импульса, но в то же время без его повторной обработки. Таким образом, для решения поставленной задачи нужно либо постоянно анализировать определенный вход PIC-контроллера с целью выявления прихода импульса счета, либо использовать внутренние возможности PIC. В первом случае возникает возможность двойной обработки одного и того же импульса, что требует дополнительной коррекции программы для микроконтроллера. В случае, когда используется внутренний таймер-счетчик PIC TMR0 (вывод T0CK1), нет нужды дополнительно вводить в программу проверку на то, был ли уже этот импульс обработан, или еще нет. Достаточно организовать главный цикл, который будет отслеживать состояние счетчика таймера и, как только дождется его изменения, можно будет однозначно сказать о приходе импульса счета. В этом случае нужно увеличить внутренние счетчики времени. В качестве счетчиков с программной точки зрения удобнее всего завести отдельно счетчики единиц минут, единиц часов, десятков минут, десятков часов. Альтернативой такому подходу может считаться счетчик большой разрядности, который будет считать не в формате часы:минуты:секунды, а просто количество импульсов, пришедших на PIC-контроллер с момента сброса. Недостаток такого подхода очевиден, ведь как бы ни велся счет времени внутри PIC-контроллера, устройство всегда обязано выводить результат на жидкокристаллический экран HG1. И в случае, когда часы, минуты и секунды «спрессованы» в одну единицу данных (как показывает расчет, для компактного представления данных о числе импульсов с тем же пределом необходимо 3 байта), необходимо провести обработку этого числа. Эта обработка сводится к делению по модулю 60 и к нахождению частного от этого деления. Как известно, PIC16C55 не содержит в своем наборе команд деления по модулю. поэтому программа должна была бы провести большую подготовительную работу перед такими операциями.

Все аппаратно-математические трудности исчезают, когда используется «нерациональный» способ хранения времени телефонных разговоров. В этом случае все, что требуется от обеспечивающей работу устройства программы, – это правильно изменять счетчики часов, минут и секунд. Для верного изменения элементов счета достаточно элементарных арифметических операций, поэтому такой подход к хранению наговоренного времени – через отдельные счетчики – представляется наиболее оправданным в условиях ограниченности набора команд контроллера PIC16C55.

Кроме того, в целях наиболее эффективного использования возможностей PIC, стоит предусмотреть «спящий» режим для контроллера. Для обоснования использования этого режима приведу выдержку из описания контроллера PIC [2], кое-где снабжая ее своими комментариями.

Для входа в режим пониженного энергопотребления используется команда SLEEP. По этой команде сторожевой таймер WDT (о нем ниже), если он был разрешен при программировании контроллера, сбрасывается и начинает отсчет времени заново. При пониженном энергопотреблении не происходит сброс контроллера, однако ток в режиме SLEEP не превышает нескольких микроампер.Для снижения тока, потребляемого в этом режиме, все разряды внешних портов кристалла должны находится либо на уровне Vss, либо на уровне Vdd. Все разряды портов, находящиеся в высокоимпедансном состоянии, должны быть соединены внешними резисторами с Vss или Vdd, чтобы избежать токов переключения, вызываемых плавающим потенциалом на высокоомных входах. Вывод MCLR должен иметь высокий логический уровень. Выйти из режима пониженного энергопотребления микроконтроллеры могут по одному из следующих событий:

1) Внешний сброс – импульс низкого уровня на MCLR;

2) Сброс при срабатывании сторожевого таймера WDT.

При этом независимо от причины сброса обнуляется сторожевой таймер WDT.

В нашем случае необходимость использования функции SLEEP обусловлена тем, что в общем-то при отсутствии импульсов счета в течение длительного времени оптимальным решением для PIC является его перевод в «спящий» режим. Схема перевода контроллера в режим пониженного энергопотребления состоит в следующем: работа программы осуществляется, пока на вход внутреннего таймера поступают импульсы счета времени (то есть до тех пор, пока идет телефонный разговор, инициированный нашим телефоном). Как только обрабатывается очередной импульс, начинается отсчет времени до прихода следующего импульса. В это время контроллер ничем не занят, а его сторожевой таймер включен. Как только время ожидания становится равным 2 секундам (с большой долей вероятности можно сказать, что если за 2 секунды не придет ни одного импульса, то телефонного разговора нет), происходит переход PIC-контроллера в режим пониженного энергопотребления. Согласно документации, каждые 18 мс тот же сторожевой таймер будет сбрасывать контроллер, и в это время будет выполняться небольшой участок программы, ответственный за проверку пришествия импульса счета на вход микросхемы. Эта проверка занимает несколько микросекунд, что, очевидно, не нивелирует разницу между работой с режимом пониженного энергопотребления и работой без такового режима. Задача у этой проверки предельно проста: получить значение внутреннего таймера-счетчика TMR0, сравнить его с предыдущим значением. В случае, когда результатом сравнения станет равенство значений, можно смело «засыпать» снова, поскольку новых импульсов не появилось. Если же результат сравнения есть «не равно», то необходимо обнулить сторожевой таймер и начать счет импульсов. Таким образом, при такой схеме работы контроллер основное время находится в «спящем» режиме, выходя из него только в случае поступления нового импульса счета или в случае «дежурного обхода», то есть при проверке входа таймера TMR0 с целью обнаружить новый импульс.

2.5. Особенности программной реализации алгоритма счета

Программа обработки импульсов счета (см. п.2.5.) получает управление сразу после включения разрабатываемого устройства в сеть и, вместе с ним, включения PIC-контроллера. Первые строки программы служат определению режима работы контроллера: если контроллер «просыпается», это отражено в бите 4 регистра STATUS. В этом случае программа разумно считает, что начальная инициализация не нужна, поскольку счет импульсов уже шел до этого, и проходит этот этап. Если же контроллер заработал по включению питания, то начинается настройка программы на ее дальнейшую работу. Поскольку в начальный момент времени состояние памяти изделия фирмы Microchip трудно прогнозируемо, первым делом в программе мы обнулим все регистры общего назначения, которые используются в работе (предварительно, следуя рекомендации разработчиков PIC, переключимся на нулевую страницу памяти). Следующим этапом инициализации является настройка счетчика WDT на 2 секунды. Для этого в программе для контроллера используется код, рекомендованный в литературе по PIC. Поскольку в PIC есть предварительный делитель для TMR0 и для WDT, то может возникнуть путаница при программировании делителя на заданное значение из-за неопределенности подсистемы (TMR0 или WDT), для которой программируется делитель. Фрагмент программы, ответственный за такую настройку, данную неопределенность устраняет: он сперва, выбрав внутренний сигнал для TMR0, назначает новое значение делителя TMR0 (выбор внутреннего сигнала необходим, поскольку в разрабатываемом устройстве используется внешний сигнал для тактирования TMR0). Затем код выбирает WDT и устанавливает нужное нам значение предварительного делителя.

После предварительной подготовки наступает выполнение основного цикла программы. Он заключается в непрерывном сканировании входа RB2, чтобы вовремя детектировать сигнал сброса счета, и в постоянной проверке содержимого TMR0. Для проверки последнего в программе заведено свое значение, соответствовавшее TMR0 на момент прихода последнего импульса. Для выяснения того, пришел новый импульс или нет, довольно выполнить исключающее ИЛИ с текущим значением TMR0 и значением программного счетчика. Если результат нулевой – импульса счета нет. Параллельно с этим циклом контроллер ведет свою канцелярию: изменяется счетчик сторожевого таймера WDT. Если данный цикл будет выполняться в течение двух и более секунд, это означает, что прохождение импульсов через цепь счета (блок 3 на структурной схеме) прервано по каким-либо причинам (скорее всего, просто-напросто нет исходящего от абонента разговора). В случае прерывания импульсов счета контроллер переходит в режим пониженного энергопотребления, периодически проверяя, не пришел ли еще какой-либо импульс (сброса или счета времени). Период такой проверки равен 2 секундам, отсюда видно, что максимальная погрешность подсчета телефонных разговоров также равна 2 секундам. Для ее уменьшения следует изменить значение предварительного делителя сторожевого таймера WDT, однако в данном случае несколько возрастет нагрузка на PIC, поскольку импульсы поступают не чаще, чем раз в секунду, а обнуление счетчика WDT происходит только по приходу импульса. Отсюда следует, что если установить малое значение делителя, то PIC будет часто попусту сбрасываться, что само по себе не очень хорошо. Если же установить время сброса на 2 секунды, то несложно увидеть, что в таких случаях пустых сбросов контроллера не будет совсем.

При подаче высокого уровня на вход RA2 должен по проекту последовать сброс счетчика на нуль. Реализация этого действия в программном варианте сводится к обнулению всех внутренних регистров и подача на жидкокристаллический экран соответствующих результатов.

Для самого счета импульсов в программе отдельно сделаны счетчики для каждой из цифр, которые будут отображаться на жидкокристаллическом экране.Это единицы и десятки часов, минут и секунд. В первоначальном варианте предполагалось выводить на жидкокристаллический экран лишь минуты и часы разговора, однако путем изменения модели индикатора и добавлением соответствующих строк в программу было сделано расширение отображаемого временного диапазона до секунд.Таким образом, при поступлении импульса счета происходит увеличение сперва единицы секунд (onesecond), затем, если необходимо, десятка секунд (decsecond), и так далее. Фраза «если необходимо» значит, что для каждой цифры времени есть свои пределы. Для единиц и десятков часов, а также для единиц минут и секунд цифры могут меняться от 0 до 9, для десятков минут и секунд от 0 до 5. Слежка за изменением состояния каждой цифры в программе реализована довольно традиционно, путем сравнения его с пределом диапазона.

После изменения счетчика времени происходит передача значений в RB0-RB7. Перед этим необходимо установить сигнал высокого уровня на RA3, что говорило бы жидкокристаллическому экрану о включении отображения символов (Enable).Передача данных происходит порциями по 8 бит, с небольшой временной задержкой. Поскольку выбранный мною индикатор позволяет выводить не только цифры, но и графику, то для более привычного представления будем выдавать на индикатор время в формате ЧЧ:ММ:СС, причем сперва выдаются часы, затем минуты, и уж наконец – секунды. После передачи идет возврат к главному циклу.

2.5. Текст программы

; Программа для микроконтроллера PIC16C55.

STATUS equ 03h

onemin equ 08h

decmin equ 09h

onehour equ 0Ah

dechour equ 0Bh

curtime equ 0Ch

onesecond equ 0Dh

decsecond equ 0Eh

org 00h

mainprog:

; Начальная инициализация

movf STATUS

btfss STATUS, 4

goto resume ; Если возвращаемся от сброса

bsf status

bsf fsr ; Установка нулевой страницы памяти

movlf 0h ; Обнуление всех данных программы

movwf TMR0

movwf onemin

movwf decmin

movwf onehour

movwf dechour

movwf curtime

movwf second

resume:

; Установим делитель WDT на 1 секунду

movlw 010000b

option

clrf TMR0

movlw ‘xxxxx1xxx’b

option

clrwdt

movlw 1110b

option

; Проверяем таймер

maincycle:

movf TMR0, 0

xorwf curtime, 0

btfss STATUS, 2

goto getnewtime ; Если появился необработанный сигнал -

; пойдем на getnewtime

btfss PORTA, 2 ; Есть запрос на сброс счета?

goto maincycle ; Если нет - на maincycle

; Обнуление всех счетчиков

movlf 0h

movwf onemin

movwf decmin

movwf onehour

movwf dechour

movwf second

goto dataout ; Выведем на индикатор нули

getnewtime:

; Обработка сигнала

; Установим делитель WDT на 1 секунду

movlw 010000b

option

clrf TMR0

movlw ‘xxxxx1xxx’b

option

clrwdt

movlw 1110b

option

movf TMR0, 0

movwf curtime ; Установим новое значение счетчика

incf onesecond, 1

movlf 10d

xorwf onesecond, 0

btfss STATUS, 2

goto dataout ; Если не натикало 10 секунд, к dataout

movlf 0h

movwf onesecond ; Обнулим счетчик секунд

incf decsecond, 1

movlf 06d

xorwf decsecond, 0

btfss STATUS, 2

goto dataout ; Если не натикало минуты, к dataout

; Считаем единицы минут

incf onemin, 1

movlf 10d

xorwf onemin, 0

btfss STATUS, 2

goto dataout ; Если десятка минут еще нет

movlf 0h

movwf onemin

; Десятки минут

incf decmin, 1

movlf 06d

xorwf decmin, 0

btfss STATUS, 2 ; Есть ли потребность изменить час?

goto dataout ; Нет - к dataout

movlf 0h

movwf decmin

; Единицы часов

incf onehour, 1

movlf 10d

xorwf onehour, 0

btfss STATUS, 2 ; Есть десять часов или нет?

goto dataout ; Нет - к dataout

movlf 0h

movwf onehour

; Десятки часов

incf dechour, 1

movlf 10d

xorwf dechour, 0

btfss STATUS, 2 ; Исчерпан лимит времени?

goto dataout ; Нет - к dataout

movlf 0h

movwf dechour

dataout:

; Выдача данных на индикатор

movlf 00h ; Настроим PORTB как выход

tris PORTB

movf dechour, 0

rlf W, 0

rlf W, 0

rlf W, 0

rlf W, 0

addwf onehour, 0

movwf PORTB ; Запишем информацию о часах

; Временная задержка перед отправлением следующего пакета данных

movwf 20d

new1: nop

decfsz w, 1

goto new1

; Запишем код разделителя на индикатор

movlf 2Eh

movwf PORTB

movf decmin, 0

rlf W, 0

rlf W, 0

rlf W, 0

rlf W, 0

addwf onemin, 0

movwf PORTB ; И о часах телефонного разговора

movlf 2Eh

movwf PORTB

movwf 20d

new2: nop

decfsz w, 1

goto new2

movf decsecond, 0

rlf W, 0

rlf W, 0

rlf W, 0

rlf W, 0

addwf onesecond, 0

movwf PORTB ; И о часах телефонного разговора

goto maincycle ; Вернемся к главному циклу

end ; Конец.

3. Заключение

В ходе работы было разработано устройство, служащее в качестве счетчика времени исходящих телефонных разговоров. Основным его преимуществом является низкое энергопотребление в сочетании с высокой точностью определения времени исходящих телефонных разговоров. Такая точность стала возможной из-за того, что устройство тесно связано с телефонной линией и анализирует сигналы в ней для определения момента начала исходящего соединения. Характеристики устройства в общем соответствуют тем задачам, которые ставились передо мной при формулировке темы курсового проекта.

4. Список литературы

1. КудряшовБ.П. и др. Электроника, Методические указания к выполнению курсового проекта.– Курган: КГУ, 1999.

2. Якубовский С.В., Барканов Н.А., Кудряшов Б.П. Аналоговые и цифровые интегральные схемы.– М.: Сов. радио, 1979.

3. Однокристалльные микроконтроллеры Microchip: PIC16C5X. /Пер. с англ.//Под ред. Владимирова А.Н.– Рига.: ORMIX, 1996.

4. Титце У., Шенк К. Полупроводниковая схемотехника, Справочное руководство.

5. Хоровиц П., Хилл У. Искусство схемотехники, в 3-х томах.– М.: Мир, 1992.