Смекни!
smekni.com

Электронный секундомер (стр. 2 из 3)

С целью экономии энергии источника питания, для отображения измеряемого времени применим четырехразрядный цифробуквенный индикатора из семи сегментов в каждом разряде типа 7SEG-MPX4-СС, подключаемого по схеме с общим катодом. Сегменты индикаторов присоединяем непосредственно к выводам 6-12 микроконтроллера, через ограничительные резисторы R4-R10, каждый номиналом 220 Ом.

Структура индикатора представлена на рис.3.2, и назначение выводов описано таблицей 3.2.


Рис 3.2 Назначение выводов индикатора 7SEG-MPX4-СС.
Таблица 3.2
Цифра, знак Выводы
анод катод
0 1 2 3 4 5 6 7 8 9 точка 1,6,7,8,13,14 8,13 2,6,7,13,14 2,6,7,8,13,14 1,2,8,13 1,2,7,8,14 1,2,6,7,8,14 8,13,14 1,2,6,7,8,9,13,14 1,2,7,8,9,13,14 9 4, 12

На контроллер непосредственно подводится питание (+5В) на выводы: VDD – положительное напряжение, VSS – общий вывод. Для использования схемы внутреннего аппаратного сброса на вход сброса/напряжения прогроммирования (MCLR) через резистор сопротивлением 10 кОм подводится высокий уровень (VDD).

Входную тактовую частоту зададим при помощи внутреннего генератора в режиме ХТ малого энергопотребления, настроенного на частоту 4 МГц. Для этого используем резонатор с параллельным резонансом. Резистор RS использовать не будем, считаем что резонатор не будет самовозбуждаться. Конденсаторы С1 и С2 возьмем по 20 пФ (пределы 15..33пФ), т.к. более высокая емкость, увеличивая стабильность частоты генератора, увеличивает и время запуска, что не желательно. Схем подключения резонатора приведена на рис.3.3.

Рис.3.3 Схем подключения резонатора в режиме ХТ

Кнопку S1 «старт/стоп/сброс» подключаем непосредственно ко входу PIC контроллера. При помощи кнопки S2 подаем питание на микроконтроллер. Кнопка S1 подключена через резистор R1 = 10кОм, к порту RB7 (резистор задает уровень логической единицы на входе микроконтроллера).

Чтобы обеспечить хорошее питание схемы, применим сглаживающие фильтры С3=100мкФ, С4=1пФ, которые сглаживают пульсацию напряжения на входе микроконтроллера.

Звуковая индикация происходит при помощи динамика, подключаемого к порту RA4. Резистор R1=5кОм стабилизирует ток через динамик.

При подаче напряжения на микроконтроллер, начинает выполняться программа, записанная в микроконтроллере. Вначале производится инициализация всех портов микроконтроллера (порт RB7 настраивается на ввод, а остальные порты настраиваются на вывод), обнуление рабочих регистров, занесение необходимых констант в соответствующие регистры, а затем программа ожидает нажатия кнопки. Т.к. подсчет секунд не производился, то на индикаторы выводятся нули.

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

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

Электрическая принципиальная схема, спецификация элементов секундомера, приведены в приложении.


4.Разработка алгоритма работы управляющей программы

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

Схема алгоритма – одна из важнейших частей задачи, она состоит из отдельных операторов. Различают четыре вида операторов, каждый из которых имеет вход и выход рис.4.1 Стрелками обозначаются направление хода вычислений.


(1) (2) (3) (4) (5)

(1) – оператор описание процесса обработки;

(2) – оператор проверки условий;

(3) – оператор начала (конца);

(4) – оператор разрыва схемы;

(5) – оператор ввода/вывода данных.

Рис.4.1 Виды операторов

Применим в нашем случае разветвленный алгоритм (см. приложение A).

Работа нашей программы начинается с инициализации используемых регистров. Затем производится настройка портов, очистка ячеек памяти, задаются временные циклы, используемые для формирования требуемых величин задержек при работе. Происходит звуковая индикация, время задержки, в течении которой подается сигнал на динамик, равно 829мкс., т.е. с частотой около 1,2кГц, слышимой человеком. Подключаются подпрограммы INDIKATOR и KOD, необходимые для вывода подсчитанных секунд на семисегментные индикаторы.


5.Разработка управляющей программы

Программа, обеспечивающая работу нашего секундомера, написана на языке Assembler и построена в виде основной программы и подпрограмм.

Основная программа выполняет начальные установки режимов работы и регистров. Порты RA0-RA3 и RB0-RB6 настроены на вывод информации, порты RB0-RB6 отвечают за соответствующие сегменты индикатора. Порт RB7 считывает значение с кнопки. Порт RA4 производит вывод логической единицы, для звуковой индикации, которая осуществляется с помощью подпрограммы ZVUK, по первому нажатию кнопки. Подпрограммы INDIKATOR и KOD, необходимы для выработки сигналов, которые управляют семисегментными индикаторами. Подпрограмма DELAY формирует основную задержку на 0,1 с., задержка формируется одним внутренним и одним внешним циклами. Подпрограмма INCTIM меняем, в соответствии с отображаемыми цифрами, значения регистров temp0- temp3, для индикации.

Работа программы осуществляется по циклу. Вначале производится инициализация портов, очистка рабочих регистров. Запуск программы осуществляется нажатием кнопки “Пуск/Стоп/Сброс”. Внутри цикла осуществляется проверка на переполнение секундомера (если оно произошло, то происходит обнуление всех регистров и программа ожидает нажатия кнопки “Пуск/Стоп/Сброс”). При нажатии кнопки “Пуск/Стоп/Сброс” происходит остановка подсчета секунд, и программа ожидает обнуления. Текст программы приведен ниже.

LIST P=16F628

#include <P16F628.INC>

temp0 EQU H'20'

temp1 EQU H'21'

temp2 EQU H'22'

temp3 EQU H'23'

temp4 EQU H'24'

temp5 EQU H'25'

temp6 EQU H'26'

temp7 EQU H'27'

temp8 EQU H'28'

i EQU H'29'

t EQU H'30'

k EQU H'31'

N0 EQU H'32'

N1 EQU H'33'

org 0

goto Start

Start

clrf PORTA

bsf STATUS,RP0

movlw B'10000000'

movwf TRISB ;Настроить RB7 на ввод, RB0-RB6 на вывод