Файл: Самоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 3649

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

управления внешними устройствами.

После этого, сначала, составляется принципиальная схема базового блока (рисуется м/контроллер), а потом, к выводам микроконтроллера, определенным ранее, "подключаются" входы или выходы внешних устройств.

Если конструктор еще не определился с принципиальными схемами внешних устройств, то их можно изобразить в виде "квадратиков".

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

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

На этом, "грубый" этап работы заканчивается и начинается "точный".

Итак, принцип работы устройства (стратегия), в основном, продуман и понятен. Принципиальная схема в наличии.

Теперь можно начинать составление программы.

До этого предполагалось, что базовый блок работает "идеально" (без ошибок).

Теперь нужно, программными и аппаратными средствами ПИКа, обеспечить это на практике. Работа по составлению программы начинается с "шапки" программы, в которой нужно "прописать" все регистры специального и общего назначения, которые предполагается использовать в программе.

Если Вы что-то забудете "прописать", а это "что-то" задействуется в рабочей части программы, то ничего страшного, MPLAB Вам об этом обязательно напомнит.

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

Проблем в этом никаких нет. Они "прописываются" так же, как и ранее "прописанные" регистры и тут же "вводятся в бой".

Основные "сражения с непослушными нулями и единицами развернутся" в рабочей части программы.

Здесь будут "стрелять пушки, бить барабаны, свистеть пули и литься кровь".

Желаю Вам оказаться победителем в этом "сражении" и испытать радость победы над самим собой.

Обычно, рабочая часть программы начинается с подготовительных операций.

И в самом деле, принципиальная схема устройства в наличии, а значит можно осуществить "привязку" программы к внешним цепям и устройствам.

Например, если к выводу RB0 порта В подключен светодиод, а к выводу RA4 порта А подключен выход, например, формирователя импульсов, то в начале программы (в ПП Start), вывод RB0 необходимо переключить на работу "на выход", а вывод RA4 переключить на работу "на вход".

Таким образом, речь идет о начальной "настройке" битов каких-то из регистров специального назначения (в данном случае, TrisA и TrisB).

Очень часто требуется сбросить в ноль содержимое каких-то из регистров общего назначения (подготовить их к заполнению данными).

Или еще что-нибудь. Зависит от конкретной программы.

Чем сложнее программа, тем "массивнее" подготовительные операции.

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

Да и как можно описать все детали игры, например, в шахматы? Возможных комбинаций – миллионы. Жизни не хватит.

Тема неисчерпаемая.

Для людей творческих и ищущих настоящий "Клондайк", где можно развернуться "во всю ширь" и по максимуму реализовать свой творческий потенциал.

Естественно, что свою задачу я вижу не в том, чтобы "перелопачивать" всё многообразие различных решений, а в том, чтобы помочь Вам приобщиться к этому очень перспективному и увлекательному занятию, а заодно и помочь Вам стать "жизнеспособным организмом", склонным к самостоятельному развитию (самообразованию).

Если быть объективным, то заголовок этого раздела не в полной мере отражает суть того, чем мы будем далее заниматься.

73


Необходимо уточнить: мы будем заниматься конструированием устройств на ПИКах. Для того чтобы это сделать, нужен "симбиоз" электронщика и программиста. "Однобокость" типа "или электронщик, или программист" ни к чему хорошему не приведет (машина без колес или колеса без машины).

Учтите это.

Так как "Самоучитель..." рассчитан, в первую очередь, на начинающих, то устройства, программы под них или фрагменты программ, изначально, будут простыми.

В дальнейшем, их сложность будет постепенно нарастать.

Все файлы текстов программ или их частей, будут иметь расширение .ASM и их можно будет открыть в MPLAB.

Подробное описание процесса конструирования устройства на PIC16F84A.

Примечание: все, что будет описываться ниже, для меня уже пройденный этап и "логические цепочки" я, естественно, буду восстанавливать по памяти.

Постараюсь это сделать в удобной для восприятия форме. Примеры взяты из реальной жизни (моей).

Описываемые ниже устройства, работоспособны, выполняют свои функции и проверены в работе.

Пример

Вбольшинстве случаев (но не всегда), все начинается с того, что возникает некая необходимость.

Всвое время, я работал в системе МЧС Липецкой области и занимался вопросами технического обслуживания, ремонта средств радиосвязи и модернизации существующей системы радиосвязи.

Возникла необходимость в создании относительно дешевого, двунаправленного ретранслятора на импортных симплексных радиостанциях Vertex - 2000, а также в переводе однонаправленного ретранслятора Vertex - 7000 в двунаправленный режим.

Эти задачи были успешно решены при помощи простых (в схемотехническом отношении) устройств на PIC16F84A, которые обошлись очень дешево, но тем не менее, сэкономили "кругленькую сумму", время и нервы.

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

Начинаем "раскрутку". Суть проблемы:

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

Втаком положении, в режиме дежурного приема, радиостанция "не слышит" ничего, кроме строго определенного по частоте сигнала тонального вызова и "докричаться" до корреспондента, с уложенной трубкой, можно только послав ему сигнал тонального вызова. Радиостанция Vertex - 2000 имеет систему тонального вызова, но ни одно из значений частот тонального вызова, которые предлагаются разработчиками и которые можно установить при программировании радиостанции, не соответствует значению частоты тонального вызова, применяемой в системе "МЧС-радиосвязи" Липецкой области.

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

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

Впростейшем случае, управление работой этого устройства можно сделать ручным (при помощи кнопки выкл./выкл. тонального вызова), но это уже "прошлый век" и не совсем удобно для пользователя.

Кроме того, в этом случае, время "выдачи" в эфир сигнала тонального вызова нестабильно и существует вероятность "недодачи" (по времени) этого сигнала, при которой приемник тонального вызова корреспондента, из-за своей инерционности, просто "не успеет" сработать, да и "перебор" тоже не нужен.

Следовательно, при включении на передачу, необходимо организовать автоматический

74


режим "выдачи" в эфир сигнала тонального вызова в течение калиброванного интервала времени.

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

В итоге, к устройству формирования сигнала тонального вызова предъявляются следующие

основные требования:

1.Частота сигнала тонального вызова должна быть высокостабильной и равной

1450гц.

2.Сигнал тонального вызова должен формироваться при каждом нажатии тангенты микрофонной гарнитуры.

3.После нажатия на тангенту, сигнал тонального вызова должен "выдаваться" в эфир в течение калиброванного интервала времени (оптимально подобранного по длительности).

4.Режим тонального вызова должен включаться и отключаться вручную.

Примечание: естественно, что первые 3 пункта должны выполняться только при включенном режиме тонального вызова.

Итак, "глобальные" требования сформулированы в конкретной и однозначно понимаемой форме. Теперь начинаем "раскрутку" по пунктам.

Первый пункт

Если речь идет о высокостабильной частоте, то тактовый генератор ПИКа должен быть кварцевым (если не требуется высокой стабильности частоты, то его можно перевести в режим RC-генератора. В ПИКах и такое предусмотрено).

Вэтом отношении, "изобретать велосипед" не нужно. Будем использовать стандарт: стандартный кварцевый генератор (называется XT) с кварцем на 4 мГц.

Вэтом случае, один машинный цикл равен одной микросекунде, что очень удобно при расчетах и "прикидках".

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

Как говорится, "кашу маслом не испортишь". Будем считать это приятной неожиданностью.

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

"Не мудрствуя лукаво", задаем отношение длительности периода к длительности импульса = 2 (так называемый "меандр").

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

Multi.asm).

Вчасти касающейся 1-го пункта, всё, что возможно определить на предварительной стадии разработки устройства ("грубая прикидка"), определено.

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

Такая продуманность имеет наибольший, положительный эффект.

Второй и третий пункты

Так как требования 2-го и 3-го пунктов между собой связаны, то для их реализации, определение исходных данных лучше всего производить в комплексе.

Совершенно очевидно, что при нажатии на тангенту (включении на передачу), должен быть запущен какой-то механизм, формирующий сам сигнал тонального вызова и "дозирующий", по времени, его "выдачу" в эфир.

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

75


Часто такого рода "закольцовки" происходят в начале программы, а именно, в подпрограмме Start, но можно "закольцевать" программу (вернее, ее рабочую точку) и в другом "месте" программы.

Опять же, не будем "изобретать велосипед".

В такой простой программе, "особо не развыбираешься".

Итак, в режиме дежурного приема, рабочая точка программы "закольцовывается" в ПП Start и не выходит из нее до момента возникновения управляющего сигнала включения на передачу.

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

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

А теперь прикинем, а что же должно быть далее?

Естественно, должен начаться процесс формирования одного периода тонального сигнала, соответствующего частоте 1450гц.

Предположим, мы его сформировали, а дальше?

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

Если поставить время нахождения, в этой "закольцовке", в зависимость только от времени нажатия тангенты, то тональный сигнал будет "выдаваться" в эфир в течении всего времени нажатия тангенты, что неприемлемо (см. выше).

После нажатия тангенты, тональный сигнал должен "выдаваться" в эфир в течение 3-х сек. Примечание: давайте, для определенности, "привяжемся" к этому значению. Такое значение является оптимальным и нужно ориентироваться на него.

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

Таймер должен что-то считать.

Решение напрашивается само собой: считать нужно количество периодов сигнала тонального вызова.

Записывая в таймер различные значения констант, можно получить те или иные значения времени "выхода" в эфир сигнала тонального вызова, а следовательно, и "отрегулировать" это время.

Таким образом, можно сформировать следующий принцип работы программы:

Врежиме дежурного приема, в подпрограмме Start, рабочая точка программы должна "уйти в вечное кольцо" и "мотать в ней кольца" до момента переключения радиостанции с приема на передачу.

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

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

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

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

Дело в том (а это очень важно и сейчас, и при работе с другими программами), что константы, используемые в работе устройств, подобных упомянутому выше таймеру (устройств, которые что-то подсчитывают), должны "закладываться" (записываться) в эти устройства предварительно, то есть, до начала их работы.

Эта "закладка" должна происходить вне цикла работы этого таймера (счетчика), а иначе, значения констант будут обновляться каждый цикл и таймер никогда не сработает (никогда

76


не досчитает до нуля).

Внашем случае, "особо не развыбираешься", так как вне 3-х секундного "кольца" находится только подпрограмма Start.

Таким образом, задача сводится к определению "места", внутри ПП Start, в которое можно "врезать" команды записи констант.

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

Во избежание этого, лучше всего поместить группу команд записи констант в конце подпрограммы Start.

Да будет так.

Четвертый пункт

Для реализации этого пункта, нужен какой-то орган управления типа переключателя или кнопки.

Вданном случае, можно задействовать кнопку А (аксессуары) радиостанции Vertex - 2000, расположенную на передней панели радиостанции, что очень удобно.

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

Если использовать эту кнопку (фиксации нет), то в качестве элемента оперативной памяти, придется назначить дополнительный регистр общего назначения, работающий как триггер (элемент оперативной памяти), состояния которого зависят от состояния кнопки на момент опроса.

Кроме того, если речь идет о более-менее качественном устройстве, то необходимо будет принять меры по защите от дребезга контактов, а если речь идет об очень качественном устройстве, то необходимо будет задействовать энергонезависимую (EEPROM) память данных ПИКа (для энергонезависимого сохранения настроек) или после включения питания, по умолчанию, включать (или выключать) режим тонального вызова.

Все это сделать можно, но если разработчик поставлен перед такого рода выбором, то прежде всего, нужно повнимательнее изучить аппаратуру.

А вдруг в ней имеется то, что нужно?

Вданном случае, то что нужно, в наличии имеется, и поэтому просто нет смысла усложнять программу.

И в самом деле, в "Вертексе" имеется и кнопка, и светодиодный индикатор ее включения и выключения.

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

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

К сожалению, EEPROM память данных микропроцессора р/станции под эту кнопку не задействована, но с этим вполне можно мириться.

Для того чтобы "запустить в эксплуатацию" этот "подарок судьбы", нужно всего-лишь сделать отвод от того места пайки выводов светодиода, на котором наблюдается наиболее резкий перепад напряжения и в дальнейшем, "привязать" программу к логике этого перепада.

При этом, никаких преобразователей уровней (для согласования уровней) вводить в схему разрабатываемого устройства не нужно, так как Вертекс собран на пятивольтовых микросхемах.

Переходим к составлению принципиальной схемы.

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

Для того чтобы не использовать сетевой блок питания, можно запитаться от радиостанции. 5 вольт в ней имеется, но лучше излишне не перегружать 5-вольтовый стабилизатор напряжения р/станции и ввести в принципиальную схему устройства свой 5-вольтовый стабилизатор на м/схеме 142ЕН5А, для которой, в связи с малым энергопотреблением, радиатор не нужен.

Сигнальные цепи, по которым будет осуществляться обмен данными между ПИКом и радиостанцией, определены ранее.

77