По ТЗ разрабатываемое устройство должно проводить динамическую индикацию с частотой 44Гц. И, в определенной ситуации, звуковую индикацию, с частотой последовательности импульсных сигналов 3730 Гц.
Для соблюдения поставленных в ТЗ условий нам потребуется выполнять процедуру динамической индикации через время tди=22727 мкс, а процедуру звуковой индикации через время tзи=268 мкс.
Нам известно что скорость выполнения одной команды, при использовании PIC16C72, тактируемого от кварца 4Мгц, занимает четыре такта (не считая goto и т.п.), т.е скорость выполнение среднестатистической команды равна 1 МГц. Значит наша процедура динамической индикации должна срабатывать каждые 22727 командных циклов микроконтроллера, а процедура звуковой индикации каждые 268 командных циклов.
Кроме того нам известно, что АЦ преобразование в выбранном нами микроконтроллере (PIC16C72) длиться не более 20 мкс.
Эти данные будут нужны при настройке таймеров и задержек в программе.
Разработка и отладка рабочей программы.
Возможно предложить следующие варианты решения поставленной задачи:
1. Написать программу которая в непрерывном цикле Производит АЦП преобразование, перевод результата в семисегментный код, и осуществляет динамическую индикацию.
Преимущества: легко написать программу (не сложный алгоритм)
Недостатки: труднее высчитывать задержки для обеспечения динамической и звуковой индикации с заданной частотой. Из-за не постоянного времени выполнения процедуры преобразования в семисегментный код, не получиться обеспечить точную частоту обновления.
2. Написать программу которая в непрерывном цикле Производит АЦП преобразование, перевод результата в семисегментный код. Складывает результаты в буффер. По прерываниям таймеров происходит динамическая и звуковая индикация.
Преимущества: данный подход обеспечит точную частоту звуковой и динамической индикации. Не нужно подбирать задержки для индикаций. Можно чаще снимать данные с АЦП и выводить их позднее, а это уменьшает вероятность того, что мы пропустим резкое изменение уровня входного сигнала.
Недостатки: разработка программы усложниться за счет использования таймеров и прерываний от них. Кроме того нужно каким-то образом организовать буфер для хранения результатов АЦП.
Учитывая все вышесказанное, мы выбираем 2 вариант, т.к. на наш взгляд он более приспособлен для решения поставленной задачи.
Блок-схемы алгоритмов и их описание
Структура программы
Микроконтроллер выполняет следующие функции:
- прием аналогового сигнала;
- АЦП преобразование;
- Преобразования результата АЦП в семисегментный код;
- принятие решения о выходе уровня входного сигнала за пороговые уровни.
- Вывод преобразованных значений на светодиодные индикаторы(осуществление динамической индикации с заданной частотой)
- выдача сигнальных сообщений на светодиоды и динамик.
Программа содержит следующие участки программы:
INIT – производит перевод всех портов и регистров устройства в исходное состояние;
MAIN – основная программа;
IRQTMR1 - подпрограмма обработки прерывания от таймера1 (для динамической индикации)
IRQTMR2 - подпрограмма обработки прерывания от таймера2
(для звуковой индикации)
INDICATION – подпрограмма обновления состояния индикатора;
BINTOSEVEN – подпрограмма перевода числа из двоичного кода в семисегментный код.
SOUNDINDICATION – подпрограмма звуковой индикации
Текст программы.
Текст программы приведен в приложении А.