Текст
                    Файл взят с сайта
www.kodges.ru,
на котором есть еще
много интересной
литературы

В. С. Яценков Микроконтроллеры Microchip rfPIC" со всцоенным маломощным радиопервдатчмком Москва Горячая линия - Телеком 2006 СКАН - ГРУППА PICBOOK
УДК 681.325.5 ББК 32.84 Я 92 Яценков В. С. Я 92 Микроконтроллеры Microchip® rfPIC™ со встроенным маломощным радиопередатчиком. - М.: Горячая линия-Телеком, 2006 . - 344 с. ISBN 5*93517*286*0. Рассмотрены микроконтроллеры rfPIC со встроенным миниатюрным радиопередатчиком и миниатюрные радиоприемные модули rfRXD, кото- рые при совместном использовании позволяют создавать простые и недо- рогие устройства для беспроводного сбора и передачи данных и дистанци- онного управления по радиоканалу. Приведены подробные описания мик- роконтроллеров rfPIC12C509, rfPIC12F675 и приемников rfRXD0420(0920), примеры схем и программ, а также описание отладочного комплекта раз- работчика, включая чертежи печатных плат для самостоятельного изготов- ления. Для специалистов, разрабатывающих электронное оборудование на основе микроконтроллеров, может быть полезна студентам радиотехниче- ских специальностей и радиолюбителям. ББК 32.84 Справочное издание Яценков Валерий Станиславович Микроконтроллеры Microchip® rfPIC™ со встроенным маломощным радиопередатчиком Редактор А. Ю. Петкин Корректор А. К. Степанова Верстка Ю Н. Рыськова Обложка художника В Н. Мятникова ЕКАН - ГРУППА PICBOOK Подписано в печать 15 11 2005 Формат 60x88/16 Бумага офс Гарнитура Таймс Усл печ л 21 Тираж 2000 экз Изд №286 ISBN 5*93517*286*0 © Яценков В. С , 2006 © Оформление издательства «Горячая линия-Телеком», 2006
ПРЕДИСЛОВИЕ Появившись на массовом рынке относительно недавно, микро- контроллеры Microchip со встроенным микромощным радиопере- датчиком предоставляют большие возможности для разработки оригинальных и недорогих устройств. Приобретение микросхем для российского потребителя сейчас не составляет труда. Значительно больше труда и времени требуется для самостоятельного освоения нового электронного компонента. Автор поставил перед собой за- дачу подготовить материал, позволяющий максимально легко и бы- стро приступить к практической работе, но при этом получить необ- ходимый объем справочной информации из одной книги. Наличие учебных примеров программ и схем существенно об- легчает получение практических навыков при изучении нового уст- ройства. Учебные примеры могут быть использованы для разра- ботки реальных законченных устройств. Благодаря тому, что микро- контроллеры rfPIC12C509 и rfPIC12F675 построены на основе ши- роко известных PIC12C509 и PIC12F675, читатель, имеющий опыт работы с базовым прибором, сможет начать работу с серией rfPIC в первый день знакомства с книгой. Подробное описание фирменной интегрированной среды разра- ботки программ MPLAB IDE и ассемблера MPASM, а также общих принципов устройства микроконтроллеров Microchip было опубли- ковано в [7]. Чтобы избежать неоправданного дублирования ин- формации, в данной книге это описание не приводится. Отдельная глава книги посвящена описанию отладочного набо- ра «rfPIC Development Kit 1». Этот набор разработчика скомплекто- ван на основе популярного отладочного комплекта «PICkit 1 FLASH Starter Kit» и включает в себя программатор, отладочную плату и сменные модули передатчиков и приемников на два диапазона час- тот. Для российских разработчиков заказ набора за рубежом может оказаться затруднительным. Поэтому в книге помещены схемы и чертежи печатных плат сменных модулей, что позволяет изготовить отладочный набор самостоятельно. Разработку собственных программ-прошивок для передачи и приема данных по радиоканалу целесообразно начинать с изучения готовых примеров. В гл. 5 приведены листинги трех учебных про- 3
грамм, предлагаемых компанией Microchip для обучения и исполь- зования в своих разработках. Для большей наглядности тексты программ несколько упрощены и снабжены комментариями на рус- ском языке, но их функциональность полностью сохранена. После незначительной доработки эти программы можно использовать для большинства прикладных проектов, требующих применения микро- схем серий rfPIC и rfRXD. Тексты программ, прошивки и схемы можно скачать на сайте www.picman.ru . БЛАГОДАРНОСТИ Автор чрезвычайно признателен фирме «Фитон» (www.phvton.ru) и лично Шоте Кобахидзе за дружеское внимание, поддержку и по- мощь в приобретении оборудования, необходимого для написания этой книги. С особой душевной теплотой упоминаю маму, жену, дочку, моих друзей и коллег, искренне желающих мне успеха в литературном труде и терпеливо сносящих все неудобства, с этим трудом связанные. 4
ВВЕДЕНИЕ Начиная с 2001 года, компания Microchip наладила серийное производство микроконтроллеров серии rfPIC со встроенным мик- ромощным УКВ передатчиком и 10-разрядным АЦП. Их применение позволяет создавать простые и недорогие устройства передачи данных и дистанционного управления по одностороннему радиока- налу в диапазонах 310...440 и 800...930 МГц. Для организации за- вершенного радиоканала выпускаются соответствующие микросхе- мы приемников. Несмотря на наличие выпускаемых серийно интегрированных модулей для двусторонней передачи данных по радиоканалу в стандартах Bluetooth и 801.2 (Wi-Fi), микроконтроллеры серии rfPIC являются востребованным техническим решением. Выбирая элементную базу для построения радиоканала переда- чи данных, необходимо учитывать реальные требования к системе и понимать, что реализация протоколов Bluetooth и 801.2 требует наличия достаточно сложной управляющей программы и, соответ- ственно, вычислительных ресурсов. Обладая возможностью дву- сторонней передачи данных при относительно большей скорости, модули Bluetooth и Wi-Fi требуют наличия отдельного микропроцес- сора. Соответственно, стоимость готового изделия возрастает на 30-70%, с чем в условиях серийного производства нельзя не счи- таться. Кроме того, устройства Bluetooth, даже миниатюрные, обла- дают на порядок большим энергопотреблением, чем устройства на основе rfPIC, способные месяцами работать от одной батарейки- таблетки» напряжением 3 вольта. Вторым важным фактором является простота разработки уст- ройств на базе rfPIC. Процессорное ядро этих микросхем пред- ставляет собой в двух различных модификациях широко известные разработчикам и давно выпускаемые микроконтроллеры PIC12C509 и PIC12F675. Следовательно, разработчик, имеющий опыт работы с упомянутыми кристаллами, без труда может присту- пить к написанию прошивок для rfPIC. Некоторые затруднения при разработке устройства может дос- тавить радиочастотная часть. Для облегчения задачи компания Mi- crochip предлагает готовые типовые решения, которые могут быть 5
без ограничений применены в пользовательских разработках. Принципиальная схема передатчика предельно проста, стабильна в работе и имеет хорошую повторяемость. Методика подбора ком- понентов и отладки передатчика подробно описана как в докумен- тации Microchip, так и в данной книге. Конструкция приемника более сложна и критична к применяе- мым компонентам. Но для построения радиоканала не обязательно применять фирменные микросхемы серии rfRXD. Можно восполь- зоваться готовыми настроенными микроприемниками производства Telecontrolli или RFM. Сигнал, поступающий с выхода приемника, может быть обработан при помощи второго микроконтроллера PIC, примеры типовых программ приведены на сайте Microchip и в Главе 5 этой книги. И, наконец, существенным аргументом в пользу серии rfPIC яв- ляется наличие у микросхем всех аппаратных достоинств базовых кристаллов PIC. Это простота набора команд, универсальность портов ввода-вывода, встроенные таймеры, режим пониженного энергопотребления. Кроме того, rfPICF675 имеет встроенный четы- рехканальный АЦП и компаратор. Таким образом, на одном кри- сталле можно построить законченный модуль сбора и передачи данных. 6
Глава 1. Микроконтроллеры-передатчики rfPIC12C509xx Микроконтроллеры rfPIC12C509xx представляют собой комби- нированные электронные приборы, состоящие из экономичного 8-разрядного CMOS-контроллера на основе архитектуры RISC и встроенного миниатюрного микромощного УКВ передатчика. Моди- фикация микроконтроллера зависит от вида используемой модуля- ции: амплитудной манипуляции (ASK) или частотной манипуляции (FSK). Передатчик, встроенный в rfPIC12C509AG, поддерживает только модуляцию ASK; передатчик микроконтроллера rfPIC12C509AF поддерживает два вида модуляции - ASK и FSK. Контроллер и передатчик не имеют внутренних электриче- ских соединений, имеют раздельные кварцевые генераторы и могут работать независимо друг от друга. Применение RISC-архитектуры (Гарвардской архитектуры) про- цессора позволило использовать всего 33 однословных 12-битных инструкции ассемблера, которые имеют интуитивно понятную мне- монику и легко запоминаются. Особенностью RISC-архитектуры является разделение памяти программ и памяти данных. При этом разрядность слова команд и слова данных может быть разной. Все инструкции, кроме переходов, выполняются за один цикл. Перехо- ды выполняются за два цикла. Используется конвейерная выборка, когда одновременной с выполнением текущей команды в буфер команд загружается код следующей команды. Система команд высокосимметричная, то есть позволяет вы- полнять любую операцию над любым регистром с применением любого способа адресации. Такая система команд значительно уп- рощает процесс программирования, сокращает объем программы и увеличивает производительность. Типы корпусов и система обозначений Производитель выпускает несколько технологических вариантов, отличающихся типом корпуса и способом программирования. Версия кристалла с ультрафиолетовым стиранием (UV Erasable) производится в керамическом паяном корпусе с окном. Использует- ся для отладки программ и разработки прототипов устройств. 7
Микроконтроллеры Microchip® rfPIC™ 18-выв. CERDIP с окном —ч хххххххх с Г хххххххх YYWWNNN 18-выв. SOIC Пример: ч rfPIC } С Г 12C509AG/JW ' 9901СВА Пример: rfPIC 12C509AG/SO О ф 9918CDK ХХХХХХХХХХХХ хххххххххххх ХХХХХХХХХХХХ о Ф YYWWNNN 20-выв. CERDIP с окном Пример: С хххххххх хххххххх YYWWNNN О rfPIC 12C509AF/JW 9901СВА 20-ВЫВ. SSOP ххххххххххх ххххххххххх ф YYWWNNN О Пример: rfPIC 12C509AF/SS ф 9951 СВР О Рис. 1.1. Система обозначений на корпусах После стирания контроллер может быть вновь настроен на лю- бую доступную конфигурацию. Эта версия самая дорогая. Следует помнить, что при стирании кристалла также стираются предварительно установленные внутренние калибровочные кон- станты для коррекции частоты встроенного тактового генератора. Значения калибровочных констант должны быть сохранены перед стиранием. Однократно программируемые кристаллы (ОТР) выпускаются в пластиковом корпусе и позволяют однократно записать программу и биты конфигурации. Предназначены для мелкосерийного произ- водства, мелких опытных партий и индивидуально настраиваемых устройств. Кристаллы в быстро исполняемых товарных партиях (QTP): компания Microchip® предоставляет сервис по быстрому програм- мированию товарных партий промышленного масштаба. Этот сер- вис предназначен для тех заказчиков, которые не хотят приобре- 8
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx тать средние или большие товарные партии за один раз, но делают регулярные заказы и имеют один стабильный программный код, который не изменяется длительное время. На фабрике Microchip® хранится код программы и данные о настройках. По заказу клиента партия контроллеров программируется прямо на фабрике, перед отправкой производится верификация для большей надежности. QTP с сериализацией (SQTP) - то же самое, что и предыдущий вариант, но каждому кристаллу присваивается уникальный серийный номер, который предоставляется заказчику вместе с кристаллами. Микроконтроллеры rfPIC12C509AG выпускаются в 18-выводном корпусе типа SOIC, a rfPIC12C509AF в 20-выводном корпусе SSOP. Кроме того, для отладочных целей выпускаются rfPIC12C509AG в 18- выводном керамическом корпусе типа CERDIP с прозрачным окном, a rfPIC12C509AF соответственно в 20-выводном CERDIP. На рис. 1.1 показана система обозначений на корпусах, на рис. 1.2... 1.4 изобра- жены внешний вид и геометрические размеры корпусов. Используется следующая расшифровка обозначений на корпусе: XX...X - информация, определяемая пользователем. Если изго- тавливается заказная партия кристаллов типа QTP или SQTP, то на этом месте наносится текст, нужный заказчику (за отдельную плату). Рис. 1.2. Внешний вид и габаритные размеры 18-выводного CERDIP 9
Микроконтроллеры Microchip9 rfPIC™ Рис. 1.3. Внешний вид и габаритные размеры 18-выводного SOIC Рис. 1.4. Внешний вид и габаритные размеры 20-выводного SSOP 10
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx По умолчанию, или на товарных партиях широкого применения на- носится наименование кристалла по спецификации компании Mi- crochip. YY - последние две цифры календарного года. WW - номер недели в году (первой считается неделя, вклю- чающая 1 января). NNN - цифробуквенный код партии. Основные электрические параметры Так как процессорная и радиочастотная части микроконтролле- ров rfPIC12C509xx электрически независимы друг от друга, их па- раметры приводятся ниже в двух отдельных таблицах: Процессорная часть Параметр Значение Примечание Рабочая температура Та, °C -40...+ 85 — Напряжение питания, В 3 ... 5,5 — Максимальная тактовая часто- та Fosc, МГц 4 — Потребляемый ток в стандарт- ном режиме Idd, < 2 мА 15 мкА Fosc=4 МГц, Vdd=5,0 V Fosc=32 кГц, VDD=3,0 V Потребляемый ток в режиме SLEEP lpD, рА < 1 - Максимальный втекающий ток для любого вывода, мА 25 Управление светодио- дами без дополнитель- ного буфера (но с рези- стором!) Максимальный вытекающий ток для любого вывода, мА 25 Управление светодио- дами без дополнитель- ного буфера (но с рези- стором!) Радиопередающая часть Обозна- чение Параметр мин. тип. макс. Примечание Vddrf Напряжение питания,В 2,2 — 5,5 — 11
Микроконтроллеры Microchip9 rfPIC™ Обозна- чение Параметр мин. тип. макс. Примечание IPDRF Ток, потреб- ляемый при отключенном излучении, мкА - 0,05 0,1 RFen = 0 Iddrf Ток, потреб- ляемый при включенном излучении, мА 4,8 - 11,5 Зависит от мощности Ро V|LRF Входной низ- кий уровень, В -о,з — 0,3VsSRF Для вывода RFen VlHRF Входной вы- сокий уро- вень, В 0,7Vssrf - Vssrf+0,3 Для вывода RFen IlLRF Ток в цепи модуляции, мкА -1 — 1 - fxtal Рабочая час- тота кварца, МГц 9,69 - 15 - ^transmit Частота пе- редачи, МГц 310 — 440 Фиксиро- ванная, зависит от fxtal fdKOUT Частота на выходе CLKOUT, МГц 2,42 - 3,75 Фиксиро- ванная, зависит от fxtal Po Выходная мощность передатчика, дБм -12 - +2 Регулируе- мая fASK Частота сле- дования мо- дулирующих импульсов данных при ASK, кГц — — 40 - 12
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Обозна- чение Параметр мин. тип. макс. Примечание fFSK Частота сле- дования мо- дулирующих импульсов данных при FSK, кГц - - 20 — Pharm Гармониче- ская состав- ляющая, дБм — -40 - — Poff Мощность внеполосного излучения, дБм — -60 - Vps<0.1V PN Фазовый шум, дБс/Гц — -87 - ftransmit±500 кГц Kvco Усиление по VCO, МГц/В — 100 — - Icp Ток в цепи переноса заряда, мкА - ±260 - — VcLKOUT Амплитуда CLKOUT, VPp — 2 — С|оас1=5пФ ton Время «хо- лодно- го» старта кварцевого генератора и петли ФАПЧ, мс - 0,9 — — Расположение и назначение выводов 20-выводный микроконтроллер rfPIC12C509AF отличается от 18- выводного rfPIC12C509AG наличием дополнительных выводов DATAfsk и FSKout, а также раскладкой некоторых выводов. Распо- ложение и обозначение выводов показано на рис. 1.5. 13
Микроконтроллеры Microchip9 rfPIC™ SOIC Vdd GP5/OSC1/CLKIN GP4/OSC2 GP3/MCLR/VPP RFENin CLKOUT PS/DATAask Vddrf ANT2 E d 2 3 4 5 6 7 8 9 E E E E E Vss 16 □ GP1 15 0 GP2/T0CKI 14 0 ----XTAL 13 ► LF 12 0-----NC 11 0 ----Vssrf 10 J----► ANTI % > 0 18 □ SSOP Vdd---►E GP5/OSC1/CLKIN < GP4/QSC2Г GP3/MCLRA/PP XTAL RFENin CLKOUT PS/DATAask Vddrf ANT2 E E E E E E •1 2 3 4 5 6 7 8 9 10 20 3 19 18 17 16 15 14 13 12 11 Vss □ ► GPO □ GP1 1 ► GP2/T0CKI □ ► FSKout J ----DATAfsk U-*— LF 0--NC □ Vssrf □ ► ANTI % О Рис. 1.5. Расположение и обозначение выводов Таблица 1.1. Назначение и нумерация выводов rfPlC12C509xx Название Номер SOIC CER- DIP Но- мер SSOP Тип Буфер Описание GP0 17 19 I/O TTL/ST Двунаправленный порт или вход данных для последовательного программирования. Имеет программно под- ключаемый подтяги- вающий резистор и программно задавае- мый выход из режима SLEEP при изменении входного уровня. В ре- жиме программирова- ния вход подключается через внутренний триг- гер Шмитта 14
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Название Номер SOIC CER- DIP Но- мер SSOP Тип Буфер Описание GP1 16 18 I/O TTL/ST Двунаправленный порт или вход тактовых им- пульсов для последо- вательного программи- рования. Имеет про- граммно подключае- мый подтягивающий резистор и программно задаваемый выход из режима SLEEP при из- менении входного уровня. В режиме про- граммирования вход подключается через внутренний триггер Шмитта GP2/T0CKI 15 17 I/O ST Двунаправленный порт. Может быть сконфигу- рирован, как вход так- товых импульсов T0CKI для таймера TMR0 GP3/MCLR Л/рр 4 4 I TTL/ST Входной порт, вход напряжения програм- мирования. В обычном режиме напряжение на выводе не должно пре- вышать питающее. Мо- жет быть настроен, как вход сброса MCLR, при этом всегда подключа- ется внутренний вытя- гивающий резистор и триггер Шмитта. Сброс производится низким уровнем на входе. Мо- жет быть программно подключен вытягиваю- щий резистор и уста- новлен режим выхода из SLEEP при измене- нии уровня на входе 15
Микроконтроллеры Microchip® rfPIC”" Название Номер SOIC CER- DIP Но- мер SSOP Тип Буфер Описание GP4/OSC2 3 3 I/O TTL Двунаправленный порт; в режиме работы с внешним резонатором (XT или LP) использу- ется как выход для ис- ключения к кристаллу GP5/OSC1 / CLKIN 2 2 I/O TTL/ST Двунаправленный порт, в режиме работы от независимого внешнего тактового генератора используется как вход тактовых импульсов, при этом подключается триггер Шмитта. При работе с внешним ре- зонатором использует- ся как вывод для под- ключения резонатора Vdd 1 1 P — Положительный вывод питания процессора Vpp 18 20 P — Общий провод (земля) процессора RFENin 5 6 I TTL Вывод включения пе- редатчика и CLKOUT. Снабжен внутренним подтягивающим рези- стором CLKOUT 6 7 О — Выход опорной частоты передатчика PS/ DATAask 7 8 I - Управление мощно- стью и вход данных для модуляции типа ASK Vddrf 8 9 p - Питание передатчика ANT2 9 10 0 - Выход дифференци- ального антенного уси- лителя с открытым коллектором 16
Глава 1. Микроконтроллеры-передатчики rfPIC12C509xx Название Номер SOIC CER- DIP Но- мер SSOP Тип Буфер Описание ANT1 10 11 О - Выход дифференци- ального антенного уси- лителя с открытым коллектором VsSRF 11 12 р — Общий провод цепи питания передатчика LF 13 14 — AN Вывод для подключе- ния фильтра ФАПЧ. Общая точка подклю- чения выхода генера- тора тока подкачки и входа настройки VCO XTAL 14 5 I — Вывод для подключе- ния кварца передатчи- ка в генераторе по схе- ме емкостной трехточки DATAfsk - 15 I TTL Вход данных для моду- ляции по типу FSK (только для rfPIC 12C509AF) FSKqut — 16 О — Выход «затягивания» колебаний генератора при модуляции по типу FSK (только для rfPIC 12C509AF) Сокращения: I = вход, О = выход, I/O = вход/выход, Р = питание, - = не используется, TTL = вход с уровнями TTL, ST = вход с триггером Шмитта, AN = аналоговый. Процессорная часть Процессорная часть, как это отражено в обозначении прибора, базируется на широко известном микроконтроллере PIC12C509A, поэтому читатели, имеющие достаточный опыт работы с базовым микроконтроллером, могут пропустить текст, касающийся описания вычислительной части контроллера и сосредоточиться на изучении радиочастотной части. 17
Микроконтроллеры Microchip9 rfPIC™ Коротко перечислим основные опции процессорной части мик- роконтроллера: • 33 процессорных команды; • тактовая частота до 4 Мгц; • при тактовой частоте 4 Мгц длительность командного цикла со- ставляет 1 мкс, исключая команды перехода, исполняемые за 2 такта и длящиеся 2 мкс; • объем памяти программ -1024 х 12 разрядов; • количество пользовательских ячеек памяти - 41 х 8 разрядов; • семь специальных аппаратных регистров; • двухуровневый стек; • прямая, косвенная и относительная адресация для данных и команд; • встроенный тактовый RC-генератор на 4 МГц (не зависит от кварцевого генератора передатчика); • внутрисхемное последовательное программирование (ICSP™); • 8-битный таймер/счетчик с 8-битным программируемым пред- делителем; • сброс по питанию; • встроенный таймер сброса (для задержки на время «разгона» кварцевого генератора); • бит защиты кода программы от считывания; • энергосберегающий режим SLEEP; • пробуждение из режима SLEEP при изменении внешнего уров- ня на одном из выводов портов; • встроенные подтягивающие резисторы на выводах портов и выводе сброса; • четыре типа тактового генератора: внутренний RC генератор, внешний RC генератор, внешний кварцевый генератор, энергосбе- регающий низкочастотный генератор (обычно на керамическом ре- зонаторе). Организация памяти Память rfPIC12C509xx организована в виде двух независимых блоков: память программ и память данных. Поскольку в рассматри- ваемых кристаллах имеется более 512 байт программной памяти, применяется разбиение памяти на страницы. Выбор страниц осу- ществляется при помощи одного бита регистра STATUS. Память данных превышает 32 бита, поэтому применяется разбиение на банки данных, которые переключаются при помощи регистра выбо- ра ячеек FSR (File Select Register). 18
Глава 1. Микроконтроллеры-передатчики rfPIC12C509xx Память программ Программный счетчик контроллеров rfPIC12C509xx имеет раз- рядность 12 бит и позволяет адресовать до 2К х 12 адресного про- странства. Но физически доступны только первые 1К х 12 адресов. При попытке обратиться за пределы этих адресов старшие биты ад- ресного регистра игнорируются, и реально происходит обращение к соответствующим адресам доступного адресного поля (рис. 1.6). Вектор сброса находится по адресу OOOOh, а в самой последней ад- ресуемой ячейке программной памяти, по адресу 03FFh хранится ка- либровочная константа для внутреннего RC-генератора. Эта константа не должна подвергаться изменению. Напомним, что в варианте корпу- са с ультрафиолетовым стиранием значение константы также стирает- ся, поэтому его необходимо предварительно считать и сохранить. Рис. 1.6. Организация программной памяти и стека в rfPIC12C509xx 19
Микроконтроллеры Microchip9 rfPIC™ Память данных Как и в других микроконтроллерах PIC, память данных делится на регистры специального назначения и регистры общего применения. Как наглядно показано на рис. 1.7, контроллеры rfPIC12С509хх имеют 7 регистров специального назначения по адресам 00h - 06h. Обращение к адресам диапазона 20h - 2Fh дает зеркальный доступ к адресам 00h - OFh. Например, обращения по адресам 03h и 23h одинаково адресуют регистр специального назначения STATUS, а обращения по адресам 09h и 29h адресуют один и тот же регистр общего применения. Но далее в адресном пространстве по адре- сам 10h - 1 Fh и 30h - 3Fh расположены разные банки, Банк 1 и Банк 0. Адресация к регистрам общего применения в этих банках происходит при участии специального регистра FSR. Если биты 6 и 5 Рис. 1.7. Распределение регистров в rfPIC12C509xx. INDF не является физическим регистром 20
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx FSR имеют значения 00, то адресуется Банк 0, если 01, то адресуется Банк 1. Таким образом, количество ячеек, доступных для хранения пользовательских данных, увеличивается. Но при обращении к регист- рам общего применения необходимо учитывать состояние регистра FSR. Специальные регистры Специальные регистры представляют собой статическое ОЗУ, в котором некоторые биты устанавливаются по умолчанию при сбро- се (см. табл. 1.2). Таблица 1.2 Специальные регистры микроконтроллеров rfPIC12C5xx Ад- рес Название регистра Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Значе- ние при сбросе по пи- танию Значе- ние при других видах сброса2 N/A TRIS — — - -11 1111 - -11 1111 N/A OPTION Содержит контрольные биты для конфигурирования таймеров, дели- телей, подтягивающих резисторов 1111 1111 1111 1111 00h INDF Использует содержимое FSR для обращения к памяти данных (не является физическим регистром) хххх хххх UUUU UUUU 01 h TMR0 8-битный таймер/счетчик реального времени хххх хххх UUUU UUUU 02h1 PCL Младшие 8 бит программного счет- чика 1111 1111 1111 1111 03h STATUS GP WU F — РА 0 то PD Z DC с 0001 1ххх qOOq quuu3 04h FSR Указатель адреса косвенного доступа 110х хххх 11 uu UUUU 05h OSCCAL СА L5 СА L4 СА L3 СА L2 СА L1 СА L0 -- — 1000 00-- UUUU uu - - 06h GPIO -- — GP 5 GP 4 GP 3 GP 2 GP 1 GP 0 - - XX хххх - - uu UUUU 21
Микроконтроллеры Microchip9 rfPIC™ ' Старшие байты программного счетчика недоступны для прямого об- ращения. 2 Другие (не по питанию) варианты сброса, включая сброс через MCLR, сторожевой таймер и выход из SLEEP по изменению уровня на входе. 3 Если сброс вызван изменением уровня на выводе, то бит 7=1. Во всех других случаях бит 7=0. Обозначения: и = не изменяется, х = произвольное, - = недоступно, чи- тается как «О», q = значение зависит от условий. Регистр STATUS (03h) Регистр STATUS хранит арифметические флаги АЛУ, информа- цию о сбросе и бит выбора страницы программной памяти, если она превышает 512 слов. Как и большинство регистров, STATUS может являться регистром назначения для любой операции. Но если над регистром STATUS выполняют операцию, которая может изменить состояние битов Z, DC и С, то запись в эти три бита бло- кируется. Их состояние изменяется только аппаратно, в зависимо- сти от состояния АПУ. Более того, биты ТО и PD также недоступны для записи. Следовательно, результат операции с регистром STATUS в ка- честве приемника может оказаться совсем не таким, как ожидалось. Например, команда CLRF STATUS (очистить полностью регистр STATUS) на самом деле очистит только три старших бита и устано- вит в 1 бит Z. Следовательно, к регистру STATUS следует применять только команды BCF, BSF и MOVWF, потому что они не изменя- ют никакие биты состояния. Рассмотрим подробно назначение битов регистра STATUS: bit7 GPWUF - бит сброса регистра GPIO 1 = сброс по выходу из SLEEP при изменении уровня на выводе 0 = после включения питания или по любому другому сбросу bit6 Не используется bit5 РАО - бит выбора страницы программной памяти 1 = страница 1 (200h -3FFh) - PIC12C(R)509(A), PIC12CE519 0 = страница 0 (000h - 1 FFh) - PIC12C5XX bit4 TO - бит тайм-аута сторожевого таймера 1 = после выполнения сброса по включению питания, ко- манд CLRWDT или SLEEP. 22
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx О = означает, что произошло переполнение сторожевого таймера bits PD - бит включения питания 1 = после включения питания или команд CLRWDT и SLEEP О = после команды SLEEP bit2 Z - бит нулевого результата 1 = результат арифметической или логической операции равен О О = результат арифметической или логической операции не равен О bit1 DC - бит десятичного переноса/заема (для ADDWF и SUBWF) после применения команды ADDWF 1 = был перенос из младшего полубайта результата О = не было переноса из младшего полубайта результата после применения команды SUBWF 1 = не было заема из младшего полубайта результата О = был заем из младшего полубайта результата bitO С - бит переноса/заема (для ADDWF, SUBWF, RRF и RLF) после применения команды ADDWF 1 = был перенос О = не было переноса после применения команды SUBWF 1 = не было заема О = был заем после применения команд RRF и RLF в бит С загружается соответственно младший или старший бит регистра-источника. Регистр OPTION Регистр OPTION является 8-битным регистром, предназначен- ным только для записи, и содержит различные управляющие биты для конфигурирования предделителя и таймера. Этот регистр не отображается в адресном пространстве, данные в этот регистр за- носятся при помощи специальной команды OPTION, пересылаю- щей байт из аккумулятора W. 23
Микроконтроллеры Microchip9 rfPIC™ bit7 GPWU - разрешение выхода из режима SLEEP при измене- нии уровня на выводах GPO, GP1, GP3. 1 = выход запрещен О = выход разрешен bit6 GPPU - включение встроенных подтягивающих резисторов на входы GPO, GP1, GP3. 1 = отключены О = подключены Примечание: если бит регистра TRIS установлен в «О» и соот- ветствующая линия порта настроена на вывод, то под- тягивающий резистор и функция выхода из SLEEP ддя этого вывода отключены, т.е. значение регистра TRIS имеет более высокий приоритет. bit5 TOCS - бит выбора источника тактового сигнала для TMR0 1 = тактовый сигнал со входа T0CKI О = тактирование синхронно с машинными циклами (F0Sc/4) Примечание: если T0CS=1, то линия GP2 работает на ввод, не- зависимо от состояния бита 2 регистра TRIS. bit4 TOSE - выбор активного фронта для TMR0 на выводе T0CKI 1 = инкремент по спаду О = инкремент по нарастанию bit3 PSA - бит, управляющий подключением предделителя 1 = предделитель подключен к WDT О = предделитель подключен к TMR0 bit2-0 PS2:PS0 - установка коэффициента деления предделителя в зависимости от подключения Биты для TMR0 для WDT ООО 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 24
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Регистр OSCCAL (05h) Регистр калибровки генератора OSCCAL предназначен для ка- либровки частоты встроенного генератора 4МГц. Увеличение зна- чения в регистре увеличивает тактовую частоту. Более подробно об этом сказано в описании внутреннего генератора. Для калибровки rfPIC12C509xx задействовано 6 старших бит, с 7 по 2. Незадействованные биты читаются как «О». Программный счетчик Когда выполняется команда программы, программный счетчик уже содержит адрес команды, которая будет выполняться следую- щей. Таким образом реализован конвейер команд, позволяющий значительно увеличить быстродействие. В каждом машинном цикле значение программного счетчика увеличивается на единицу. Ис- ключение составляют команды, модифицирующие значение про- граммного счетчика. Когда выполняется переход по команде GOTO, в биты 0...8 пе- реносится значение операнда из командного слова, а в бит 9 запи- сывается значение бита выбора страницы из регистра STATUS. Когда выполняется команда CALL или любая команда, исполь- зующая программный счетчик в качестве получателя, в биты 0...7 записывается значение из командного слова, в бит 8 записывается ноль, а в бит 9 значение бита выбора страницы из регистра STATUS. К командам, которые используют программный счетчик в качестве получателя значения, относятся MOVWF PC, ADDWF PC, BSF PC, 5. Так как бит 8 всегда устанавливается в ноль при вызове под- программ или модификации счетчика, все команды вызова под- программ или вычисляемые переходы выполняются только в пределах первых 256 адресов любой страницы. При программировании перехода или вызове подпрограммы следует быть уверенным, что в регистре STATUS, бит РАО, за- ранее указана нужная страница. Можно воспользоваться дирек- тивами ассемблера для автоматической вставки кода выбора страницы в момент компоновки. Действия при сбросе После сброса микроконтроллера программный счетчик устанав- ливается на последнюю ячейку памяти программ на последней 25
Микроконтроллеры Microchip® rfPIC™ странице и считывает находящуюся там команду MOVLW хх, где хх - калибровочная константа встроенного RC генератора. После вы- полнения команды программный счетчик переходит на адрес OOOOh, а значение калибровочной константы оказывается в аккуму- ляторе W. Пользователь может переписать калибровочную кон- станту в регистр OSCCAL или проигнорировать ее. Стек Контроллеры rfPIC12C509xx имеют 12-битный стек типа LIFO (последнее записанное значение вызывается первым). При выпол- нении команды CALL значение из первой ячейки стека смещается во вторую, а в первую ячейку записывается адрес возврата из те- кущей подпрограммы. Если подпрограммы вызывались более двух раз подряд, то сохраняются только последние два адреса возврата. Микроконтроллеры rfPIC12C509xx не имеют бит-флага, сообщаю- щего о переполнении стека или его избыточной выгрузке, поэтому про- граммист должен самостоятельно следить за корректностью своей программы и не допускать более одного вложения подпрограмм. Для rfPIC12C509xx не существует специальных команд PUSH или POP. При необходимости сохранения значения аккумулятора, программист должен записывать значение W в регистр общего применения перед вызовом подпрограммы и извлекать обратно после возвращения из нее. При выполнении команды RETLW содержимое первой ячейки стека загружается в командный счетчик, а значение из второй ячейки пере- ходит в первую. Если выполнено более двух команд RETLW, то стек заполняется значением из второй ячейки. После сброса содержимое стека не изменяется, но программный счетчик всегда обнуляется. При выполнении команды RETLW в аккумулятор записывается значение константы, которая является операндом команды. Это очень удобно при реализации табличной перекодировки данных. Косвенная адресация: регистры INDF И FSR Регистр INDF не является физическим регистром. При обраще- нии к этому регистру на самом деле адресуется регистр, адрес ко- торого указан в регистре FSR (т.е. FSR является указателем). Такая адресация является косвенной. Регистр FSR имеет разрядность 5 бит и при помощи битов 0...4 позволяет адресовать память данных в диапазоне 00h - 1 Fh. Бит 5 используется для указания банка, би- ты 6...7 не используются и всегда читаются как «1». 26
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Пример косвенной адресации - регистр общего назначения по адресу 07h содержит значение 01 h - регистр общего назначения по адресу 08h содержит значение B5h -загружаем в регистр FSR значение 07h -читаем значение из регистра INDF и получаем значение 01 h - инкрементируем на единицу значение FSR (FSR=08h) - читаем значение из регистра INDF и получаем значение B5h При попытке прочитать косвенным образом значение самого ре- гистра INDF (FSR=0) всегда возвращается значение 00h. Попытка косвенной записи в INDF исполняется как пустая операция (не- смотря на то, что биты регистра STATUS могут измениться). Приведенный далее фрагмент программы, используя косвенную адресацию, очищает регистры общего назначения (RAM), располо- женные по адресам 10h-1 Fh: MOVLW MOVWF NEXT CLRF INCF BTFSS GOTO 0x10 устанавливаем указатель FSR ;на стартовый адрес RAM INDF ;очищаем регистр INDF FSR, F ;инкрементируем указатель FSR, 4 закончили очистку? NEXT ;нет, очистить следующую ячейку ;если да, продолжить программу Порты ввода-вывода Как и у для всех остальных регистров, значение регистра вво- да/вывода может быть программно прочитано или записано. Инст- рукции чтения данных из регистра портов (например, MOVF GPIO, W) всегда считывают с выводов реально присутствующие уровни, независимо от того настроена ли линия порта на ввод или вывод. Если, например, линия настроена на вывод и высокий выходной уровень, но внешнее воздействие удерживает низкий уровень, то с этой линии будет читаться «0». По сбросу все линии порта на- страиваются на ввод и имеют высокоимпедансное состояние. Регистр GPIO GPIO - это восьмиразрядный регистр ввода/вывода. Использу- ются только младшие 6 бит GP0...GP5. Биты 6 и 7 недоступны и всегда читаются как «0». Не забывайте, что линия GP3 (4) рабо- 27
Микроконтроллеры Microchip9 rfPIC™ тает только на ввод. Слово конфигурации может присвоить лини- ям различные функции независимо друг от друга. Если выводы ис- полняют альтернативные функции, не относящиеся к вводу-выводу, то при чтении значений с этих выводов всегда возвращается зна- чение «О». Выводы GPO, GP1 и GP3 могут быть настроены на под- ключение внутренних подтягивающих резисторов и на вывод из ре- жима SLEEP по изменению входного уровня. Имейте в виду, что функция выхода из SLEEP по изменению уровня не различает эти три вывода между собой. Если вывод (4) сконфигурирован, как вход сброса MCLR, то к этому выводу всегда подключен подтягивающий резистор и выход из режима SLEEP по изменению уровня для этого вывода не задействован (что, впрочем, неудивительно ©). Регистр TRIS Регистр TRIS управляет режимом ввода/вывода каждой линии порта. Управляющие биты записывают в регистр TRIS из аккумуля- тора W командой TRIS f. Установка бита в «1» настраивает соот- ветствующую линию на ввод, а «О» на вывод. Исключение состав- ляют линия GP3, работающая только на ввод, и GP2, которая мо- жет управляться регистром OPTION. Прочтите примечания, приве- денные в описании регистра OPTION. Обмен данными с портом ввода-вывода Эквивалентная схема порта ввода-вывода приведена на рис. 1.8. Все выводы порта, исключая GP3, могут быть использованы как для ввода, так и для вывода. На схеме не показаны защитные дио- ды, подключенные от вывода порта к Vcc и Vdd. Входные значения на выводах нигде не защелкиваются. Значе- ние должно непрерывно присутствовать на выводе, пока выполня- ется команда чтения, например, MOVF GPIO, W. Выходные значе- ния защелкиваются в триггере и сохраняются до тех пор, пока не будут изменены следующей командой. Еще раз подчеркнем, что при выполнении операции чтения счи- тываются только реальные уровни на выводах. Например, если порт настроен на вывод высокого уровня, но внешняя цепь «тянет» его в низкий уровень, то по этой линии будет считываться логический «О». Эта замечательная способность микроконтроллеров PIC очень часто помогает разрабатывать простые и оригинальные схемы. Все операции записи в порт внутренне исполняются как чтение- модификация-запись. Например, когда исполняется команда BSF 28
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Шина Чтение порта Рис. 1.8. Эквивалентная схема порта для отдельной линии или BCF, то со всех линий порта считываются реальные значения, присутствующие на выводах в этот момент, модифицируется ука- занный бит и все полученные значения записываются в выходную защелку. Таким образом, некоторые биты выходной защелки могут иметь непредсказуемые значения. Если в процессе исполнения программы линии порта после чтения будут перенастроены на вы- вод, на некоторых из них будут выставлены непредсказуемые уров- ни, что может привести к неожиданным результатам в работе уст- ройства. В процессе написания программы, перед изменением на- стройки линий порта, рекомендуется явно задавать значения в выходной защелке для критичных линий. Рассмотрим пример ошибки при написании программы. Кстати, в фирменной документации к PIC12Cxxx (DS40139E стр. 22), в при- мере этой программы допущена опечатка, которая тиражируется в российской справочной литературе. В описании rfPIC12C509xx эта опечатка исправлена. 29
Микроконтроллеры Microchip9 rfPIC™ начальные настройки порт ввода/вывода: линии 5...3 на ввод линии 2...О на вывод Защелка GPIO Выводы GPIO BCF GPIO, 5 ; -01 -ppp "11 pppp BCF GPIO, 4 ;-10-ppp "11 pppp MOVLW 007h TRIS GPIO ; --Ю-ppp -10 pppp Обратите внимание: пользователь ожидал, что получит выход- ные значения -00 рррр. Но вторая команда BCF считала высокий уровень на входе GP5 и перенесла его в выходную защелку. Когда командой TRIS GPIO мы настроили линию GP5 на выход, на ней появился высокий уровень, считанный раньше. Паразитный «сквоз- ной бит» выделен жирным шрифтом. Ошибки, подобные этой, страшны тем, что могут проявляться только при определенном сте- чении обстоятельств, иногда очень редко. Также следует учитывать инерционность внешних цепей при из- менении сигнала на линиях порта. Например, одна из линий порта была настроена на вывод, и на ней присутствовал уровень логиче- ского ноля. Затем эту линию перенастроили на ввод, и, в соответ- ствии со схемой устройства, извне на линию поступает сигнал вы- сокого уровня от резистора, подключенного к питающей шине. Из-за паразитной емкости монтажа и собственных емкостей других ком- понентов высокий уровень на линии будет выставлен с некоторой задержкой, и при чтении может быть получено непредсказуемое значение. Выходные драйверы порта также обладают некоторой инерционностью. Поэтому нежелательно, чтобы команда чтения порта шла сразу за командой перенастройки порта с вывода на ввод. Рекомендуется пропустить несколько командных циклов для установления уровней. Можно использовать команду NOP. Модуль TIMER0 и регистр TMR0 Модуль TimerO имеет следующие характеристики: • 8-разрядный, доступный для чтения и записи регистр TMR0; • 8-разрядный программно настраиваемый предделитель; • выбор источника тактирования; • выбор активного фронта при внешнем тактировании. На рис. 1.9 показана структурная схема модуля TimerO. 30
со TOCS Рис. 1.9. Структурная схема модуля TimerO лава 1. Микроконтроллеры-передатчики rfPIC12C509xx
Микроконтроллеры Microchip9 rfPIC “ Режим таймера включается обнулением бита TOCS регистра OPTION. Когда включен режим таймера, регистр TMRO инкремен- тируется с каждым машинным циклом (без предделителя). Если в регистр TMRO записано новое значение, то следующие два машин- ных цикла инкремент запрещен. При проведении точных измерений временных интервалов пользователь должен учитывать этот факт и соответственно корректировать записываемое начальное значение. Режим работы от внешнего тактового сигнала, называемый так- же режимом счетчика, выбирается установкой в «1» бита TOCS. В этом режиме инкремент происходит по каждому нарастанию или спаду входного сигнала на входе TOCKI. Активный фронт сигнала выбирают битом TOSE регистра OPTION. Предделитель может быть подключен либо к модулю таймера, либо к сторожевому таймеру WDT, но никогда к обоим одновре- менно. Подключение предделителя задается битом PSA регистра OPTION. Биты PS2...PS0 устанавливают коэффициент деления. Внешнее тактирование таймера Когда используется внешнее тактирование таймера, следует помнить, что из-за необходимости синхронизации внешнего сигна- ла с внутренними тактовыми импульсами TOsc к входному сигналу предъявляются некоторые особые требования и существует за- держка между появлением активного фронта и фактическим инкре- ментом TMRO. Если TMRO настроен на работу от внешнего источ- ника тактовой частоты, то линия GP2 работает на ввод независимо от значения бита 2 регистра TRIS. Синхронизация с внешним сигналом Когда предделитель не используется, входной тактовый сигнал поступает прямо на вход синхронизатора. Распознавание перепа- дов входных тактовых импульсов осложняется тем, что состояние на входе синхронизатора опрашивается только дважды за машин- ный цикл, во время тактов Q2 и Q4. Поэтому длительность надежно распознаваемого высокого или низкого уровня входного сигнала не может быть меньше 2TOsc+20 нс, с учетом небольшой паразитной задержки в RC цепях, а полный такт соответственно не менее 4TOSc+40 нс. Когда используется предделитель, внешние тактовые импульсы делятся ассиметричным счетчиком и на выходе предделителя по- лучается меандр. Длительность высокого или низкого уровня им- пульса не должна быть меньше 10 нс из-за небольшой инерцион- 32
Глава 1. Микроконтроллеры-передатчики rfPIC12C509xx ности входных цепей. Суммарная длительность такта внешней час- тоты на входе T0CKI должна быть не менее (4TOSc+40 нс)/К, где К - коэффициент деления предделителя. Задержка инкремента Поскольку выход предделителя синхронизируется с внутренней тактовой частотой, существует небольшая задержка между моментом появления активного фронта на входе предделителя и моментом ин- кремента регистра TMRO. Задержка может составлять от ЗТозс ДО 7TOsc- Таким образом, максимальная погрешность измерения времен- ных интервалов между внешними событиями составляет ± 4Tosc- Предделитель 8-разрядный счетчик используется, как предделитель для тай- мера TimerO и постделитель для сторожевого таймера WDT, но для простоты мы будем называть его в этом описании предделителем. Еще раз напомним, что предделитель не может быть подключен одновременно к сторожевому таймеру и таймеру/счетчику. По сбро- су предделитель подключается к WDT и имеет максимальный ко- эффициент деления. Когда предделитель подключен к TMRO, любая команда записи в этот регистр будет обнулять предделитель. Когда предделитель подключен к сторожевому таймеру, команда CLRWDT будет очи- щать предделитель вместе со сторожевым таймером. Преддели- тель недоступен для программного чтения или записи. При сбросе предделитель сбрасывается в «О». Переключение предделителя Подключение предделителя полностью управляется программ- но, его можно переключить «на лету», во время исполнения про- граммы. Для предотвращения неожиданного сброса процессора при переключении предделителя с TMRO на WDT обязательно сле- дует выполнять специальную последовательность команд: CLRWDT CLRF TMRO MOVLW '00хх1111 'b OPTION CLRWDT MOVLW 'OOxxIxxx'b OPTION ; Очистка WDT ; Очистка TMRO и предделителя ; Следующие три линии (курсив) ; вставляются только при необходимости ; задать значения PS2...PS0 = ООО или 001 ; Установка требуемого значения ;предделителя 33
Микроконтроллеры Microchip9 rfPIC™ Для переключения с WDT на TMRO следует выполнить другую последовательность команд. Эти команды должны быть выполне- ны, даже если сторожевой таймер отключен. CLRWDT ; Очистка WDT и предделителя. MOVLW 'ххххОххх'Ь ; Выбор TMRO, нового коэффициента OPTION ; предделителя и источника тактирования. Слово конфигурации Слово конфигурации расположено по адресу FFFh. Этот адрес находится за пределами пользовательской памяти программ и дос- тупен только для программатора во время программирования или считывания. Слово конфигурации содержит 12 бит, из которых ис- пользуются только первые пять. bit5-bit11 Не используются bit 4 MCLRE - бит включения входа сброса MCLR 1 = вывод 4 используется, как вход MCLR О = MCLR внутренне подключен к выводу питания VDD bit 3 СР - бит защиты кода 1 = защита отключена О = защита включена bit 2 WDTE - бит включения сторожевого таймера 1 = сторожевой таймер включен О = сторожевой таймер выключен bit 1 -О FOSC1-FOSCO - бит выбора режима тактового ге- нератора 11 = EXTRC - внешний RC-генератор 10 = INTRC - внутренний RC-резонатор 4МГц 01 = XT резонатор 00 = LP резонатор Обозначения резонаторов в данном случае следующие: XT - стандартный кварцевый или керамический резонатор 4МГц, LP - низкочастотный (обычно часовой, 32768Гц) резонатор для эконо- мичных приложений. 34
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Защита кода программы Если бит защиты кода не установлен, программа может быть считана из программной памяти микроконтроллера для верифика- ции. Если бит защиты установлен, то могут быть прочитаны только первые 64 ячейки и последняя ячейка. Это позволяет проверить, запрограммирован ли кристалл и при необходимости идентифици- ровать, какой код в него записан. Но компания Microchip официаль- но предупреждает, что не дает никаких гарантий относительно со- хранности кода, если к кристаллу будут применены специальные технические меры по считыванию кода. Идентификаторы Четыре специальные ячейки памяти предназначаются для хра- нения идентификационного номера или контрольной суммы. Эти ячейки доступны для чтения и записи только при помощи програм- матора. Используйте только 4 младших бита каждой ячейки, ос- тальные 8 бит каждой ячейки следует программировать значением «О». Источники тактовой частоты Процессорную часть микроконтроллеров rfPIC12C509xx можно тактировать от генератора на кварцевом резонаторе, независимого внешнего генератора, внешнего генератора на RC-цепочке и внут- реннего RC-генератора. Потребляемый процессорной частью ток непосредственно зави- сит от значения тактовой частоты и составляет примерно 250 мА на 1 МГц. Генератор, построенный на основе кварцевого или керамическо- го резонатора, требует некоторого времени на установление коле- баний. Во время установления режима генератора процессор не должен работать. Для этой цели имеется встроенный таймер за- пуска (DRT), который после появления уровня логической единицы на выводе MCLR и истечения задержки таймера включения питания в течение 1024 тактов внешнего генератора удерживает процессор в состоянии сброса. Этой задержки достаточно для стабилизации тактового генератора. Задержка запуска не генерируется для режи- ма RC-цепочки. Для нормальной работы генератора требуется кварц, работаю- щий на частоте параллельного резонанса. Попытка использовать кварц, работающий на частоте последовательного резонанса мо- 35
Микроконтроллеры Microchip9 rfPIC " жет привести к тому, что генератор будет работать на частоте, ко- торая отличается от заявленной производителем кварца. Схема подключения показана на рис. 1.10. Рис. 1.10. Схема подключения кварцевого резонатора: номиналы конденсаторов С1 и С2 указаны в таблице; последовательный резистор RS может понадобиться при использовании кристалла со срезом типа АТ; внутреннее сопротивление RF приблизительно равно 10 Мом Значения емкостей С1 и С2 для керамических резонаторов: Режим Частота С1,С2 XT 455 кГц 2,0 МГц 4,0 МГц 68 ...100 пФ 15...33 пФ 10...22 пФ Значения емкостей С1 и С2 для кварцевых резонаторов: Режим Частота С1,С2 LP 32 кГц 15 пФ XT 200 КГц 1,0 МГц 4,0 МГц 47...68 пФ 15 пФ 15 пФ Резистор Rs может понадобиться в режиме XT при использова- нии кристалла со срезом типа АТ. Конденсаторы С1 и С2 увеличи- вают стабильность работы кварцевого генератора, но при этом не- сколько увеличивают время его запуска. Для керамических резона- торов применение этих конденсаторов обязательно, а кварцевые 36
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx резонаторы в большинстве своем надежно работают и без них, особенно при комнатной температуре и стандартном питающем напряжении. Но если предполагается эксплуатировать устройство при отрицательных температурах или пониженном напряжении пи- тания, конденсаторы С1 и С2 обязательно следует установить. При напряжении питания больше 4,5 V изготовитель рекоменду- ет применять конденсаторы со значениями С1 = С2 = 30 пФ. Значе- ния емкостей приведены приблизительно. Они могут быть измене- ны в соответствии с рекомендациями производителей кварцевых или керамических резонаторов. При использовании независимого внешнего генератора, его схема может быть любой. Выход генератора подключается к выво- ду OSC1, как показано на рис. 1.11, вывод OSC2 обязательно дол- жен остаться свободным, в противном случае контроллер может выйти из строя. Контроллер в этом случае настраивается в режим XT или LP. Примеры схем простейших тактовых генераторов приведены на рис. 1.12 и рис. 1.13. (В случае использования внешнего генерато- ра, кварц может работать в том числе и на частоте последователь- ного резонанса, так как это определяется устройством только внешней схемы.) Если приложение некритично к величине и стабильности такто- вой частоты, можно применить недорогой RC-генератор. Резистор и конденсатор являются внешними элементами и подключаются, как показано на рис. 1.14. Рекомендуемый номинал резистора Rext лежит в пределах от 3 кОм до 100 кОм. При использовании резистора менее 2,2 кОм генерация может быть нестабильной или вообще не возникнет. При слишком большом номинале, порядка 1 МОм и выше, на работу генератора начинают влиять внешние наводки и собственные шу- мы схемы, а также монтажная емкость и влажность платы. Рис. 1.11. Схема подключения внешнего генератора 37
Микроконтроллеры Microchip® rfPIC™ Рис. 1.12. Схема внешнего генератора, работающего на частоте параллельного резонанса кварца Несмотря на то, что генератор может работать вообще без внешнего конденсатора, рекомендуется применять конденсатор Cext с емкостью порядка 20 пФ для увеличения стабильности и по- мехоустойчивости генератора. Рис. 1.13. Схема внешнего генератора, работающего на частоте последо- вательного резонанса кварца 38
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Рис. 1.14. Схема внешнего RC-генератора Частота тактового генератора зависит от питающего напряже- ния, номиналов резистора и конденсатора и варьируется от кри- сталла к кристаллу. Встроенный RC-генератор 4МГц Встроенный RC-генератор обходится вообще без внешних эле- ментов и позволяет дополнительно снизить стоимость готового устройства. Он генерирует тактовые импульсы с частотой 4МГц при напряжении питания VDD = 5 В и температуре кристалла 25°С. Как уже было ранее упомянуто, в самом конце программной памяти располагается инструкция считывания калибровочной константы для внутреннего генератора. Эта ячейка никогда не защищается от считывания, независимо от того, установлен ли бит защиты про- граммного кода. После сброса микроконтроллера программный счетчик устанав- ливается на последнюю ячейку памяти программ на последней странице и считывает находящуюся там команду MOVLW хх, где хх - калибровочная константа встроенного RC генератора. После вы- полнения команды программный счетчик переходит на адрес OOOOh, а значение калибровочной константы оказывается в аккуму- ляторе W. Следующим шагом, уже в коде своей программы, поль- зователь может переписать калибровочную константу в регистр 39
Микроконтроллеры Microchip® rfPIC™ OSCCAL, или может проигнорировать ее. Это зависит от того, какой тип генератора используется в схеме. Организация сброса Микроконтроллеры rfPIC12С509хх поддерживают несколько ва- риантов сброса. • Сброс по включению питания. • По входу MCLR во время нормальной работы. • Сброс по входу MCLR в режиме SLEEP. • Сброс по переполнению сторожевого таймера в нормальном режиме. • Сброс по переполнению сторожевого таймера в режиме SLEEP. • Выход из режима SLEEP по изменению уровня на выводе. Некоторые регистры контроллера не сбрасываются произволь- ным способом; они имеют неопределенное значение при сбросе по питанию и не изменяются при других вариантах сброса. Большин- ство остальных регистров устанавливаются в фиксированное со- стояние при включении питания, сбросу по MCLR, переполнению WDT или выходу из SLEEP по изменению входного уровня в режи- ме обычной работы. Эти регистры не изменяются, когда происходит переполнение WDT или сброс по MCLR в режиме SLEEP, поскольку такие варианты сброса рассматриваются, как продолжение нор- мальной работы. Исключение составляют биты ТО, PD и GPWUF. Они устанавливаются и сбрасываются по-разному в зависимости от ситуации. В табл. 1.3 показаны состояния регистров при разных вариантах сброса. Таблица 1.3 Состояние служебных регистров после сброса Регистр Адрес Сброс no включению питания Сброс по другим событиям W — qqqq qqxx1 qqqq qquu1 INDF OOh xxxx xxxx uuuu uuuu TMRO 01 h xxxx xxxx uuuu uuuu PC 02h 11111111 11111111 STATUS 03h 0001 1xxx qOOq quuu 2,3 40
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Регистр Адрес Сброс no включению питания Сброс по другим событиям FSR 04h 110XXXXX 11uu uuuu OSCCAL 05h 1000 00 -- uuuu uu - - GPIO 06h - - xxxxxx - -uu uuuu OPTION - 11111111 11111111 TRIS - --111111 --111111 1 Биты 7...2 регистра W содержат калибровочную константу после вы- полнения команды MOVLW хх в старшей ячейке памяти. 2 См. таблицу в разделе «Определение источника сброса» 3 Если сброс вызван изменением уровня на выводе, то бит 7=1. Во всех других случаях бит 7=0. Обозначения: и = не изменяется, х = произвольное, -- = недоступно, чи- тается как «0», q = значение зависит от условий. Сброс по питанию Микроконтроллеры rfPIC12C509xx снабжены встроенной систе- мой сброса, позволяющей сформировать внутренний сигнал сброса в большинстве случаев включения питания. Схема сброса по пита- нию удерживает кристалл в состоянии сброса до тех пор, пока пи- тающее напряжение не достигнет величины, достаточной для нор- мальной работы. Если вывод GP3/MCLR/VPP используется, как ли- ния порта, то внутренняя линия MCLR подключается к плюсовому питающему проводу через встроенный подтягивающий резистор. Это позволяет в большинстве случаев организовать сброс по вклю- чению питания вообще без навесных элементов. Время нарастания питающего напряжения не должно превышать 0,05В/с. К моменту, когда устройство переходит в режим нормальной ра- боты, все основные внешние параметры (напряжение питания, так- товая частота, температура и т.п.) должны гарантированно иметь установившиеся нормальные значения. В противном случае уст- ройство должно удерживаться в состоянии сброса до момента, пока внешние параметры не установятся. При включении питания тре- буется некоторое время, чтобы установился стабильный режим ра- боты тактового генератора, во время установления режима процес- сор контроллера должен быть в состоянии сброса. Встроенный в кристалл таймер сброса DRT тесно связан со схемой сброса по питанию. Таймер сброса устройства работает от 41
Микроконтроллеры Microchip9 rfPIC™ встроенного RC-генератора. При включении питания устройство переходит в состояние сброса и DRT также сбрасывается. Когда напряжение на внутренней линии MCLR достигает высокого уровня, таймер сброса отсчитывает типовой интервал 18 миллисекунд и снимает сигнал сброса процессора. Этого защитного интервала достаточно для установления режима тактового генератора. На ве- личину задержки может незначительно влиять питающее напряже- ние и температура. DRT также переключается при сбросе по пере- полнению сторожевого таймера. Этот факт особенно важен для приложений, использующих переполнение сторожевого таймера для автоматического выхода из режима SLEEP. Если есть риск того, что питающее напряжение будет нарастать слишком медленно, необходимо установить на внешний вывод MCLR дополнительную времязадающую цепочку из резистора и конденсатора, чтобы обеспечить надежный сброс по включению питания. В этом случае понадобится внешняя цепь сброса, пока- занная на рис. 1.15. Если возможна ситуация когда питающее напряжение плавно снижается ниже рабочего уровня, но не достигает ноля, а затем восстанавливается, для надежного формирования уровня сброса необходимо применить другую схему. На рис. 1.16 показана схема со стабилитроном. Сброс формируется, когда питающее напряже- ние снижается до уровня Vd + 0,7, где Vd - напряжение стабилиза- ции стабилитрона. На рис. 1.17 приведена аналогичная схема, но без стабилитрона, обладающая меньшей точностью реакции на снижение питающего напряжения. Транзистор закрывается, когда напряжение питания Vdd снижается до уровня, вычисляемого по 42
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx формуле Vdd R1/(R1 + R2) = 0,7. Можно применить также специ- альную микросхему - супервайзер питания, формирующую импульс сброса при снижении напряжения питания. Microchip выпускает собственные супервайзеры питания серии МСХХХ. Пример приме- нения микросхемы МСР809 показан на рис. 1.18. Сторожевой таймер Назначением сторожевого таймера является борьба с аппарат- ными сбоями устройства, в результате которых может возникнуть Vdd Рис. 1.16. Схема формирования сигнала «сброс» при снижении напряже- ния питания, с применением стабилитрона Vdd MCLR rfPIC12C509AG/ 509AF Vdd Рис. 1.17. Схема формирования сигнала «сброс» при снижении напряже- ния питания, без стабилитрона 43
Микроконтроллеры Microchip9 rfPIC™ Рис. 1.18. Применение микросхемы МСР809 для защиты от аварийного снижения напряжения питания «зависание» программы. Если сторожевой таймер включен, то нормально работающая программа должна периодически обнулять счетчик сторожевого таймера, не допуская сброса процессора. Ко- гда происходит сбой, сторожевой таймер перестает программно обнуляться, после его переполнения происходит сброс процессора и повторная инициализация устройства. Для достижения макси- мальной защищенности от сбоев рекомендуется выполнять сле- дующие условия: - выбирать возможно меньший интервал сторожевого таймера и сбрасывать его в разных местах программы; - внешняя аппаратная часть устройства должна полностью ини- циализироваться при любом сбросе микроконтроллера, а не только при включении питания или нажатии кнопки «RESET». Сторожевой таймер работает от полностью автономного внут- реннего RC-генератора. Это позволяет сторожевому таймеру про- должать работать в режиме SLEEP, когда внутренний тактовый ге- нератор процессора остановлен, и периодически выводить кон- троллер в нормальный режим. Когда происходит переполнение счетчика сторожевого таймера, он генерирует либо сигнал сброса, либо сигнал сброса для выхода из режима SLEEP. Когда срабатыва- ет сторожевой таймер, обнуляется бит ТО регистра STATUS. Сторо- жевой таймер может быть полностью отключен установкой в «О» би- та WDTE слова состояния только при помощи программатора. Когда срабатывает сторожевой таймер, он не переводит вывод MCLR в низкий уровень. Сброс осуществляется только по внутрен- ним цепям микроконтроллера. Номинальный период срабатывания сторожевого таймера со- 44
Гпава 1. Микроконтроллеры-передатчики rfPICl2C509xx ставляет 18 миллисекунд. Применяя предделитель с коэффициен- том деления до 1:128 можно реализовать интервал величиной до 2,3 сек. Это интервал незначительно изменяется от кристалла к кристаллу и зависит от температуры и напряжения питания. В исключительных ситуациях, когда присутствует минимально возможное питающее напряжение и высокая температура, период срабатывания сторожевого таймера с предделителем может дости- гать трех и более секунд. Команда CLRWDT очищает сторожевой таймер и предделитель, если он подключен к WDT и предотвращает сброс устройства. Коман- да SLEEP также очищает сторожевой таймер и предделитель, если он подключен к WDT, что позволяет достичь максимального пребывания в режиме SLEEP до момента пробуждения по сбросу от WDT. Определение источника сброса Тестируя биты ТО. PD и GPWUF регистра STATUS можно опре- делить, каким событием был вызван сброс: GPWUF ТО PD Причина, вызвавшая сброс 0 0 0 Переполнение WDT в режиме SLEEP 0 0 u Переполнение WDT в обычном режиме 0 1 0 Сброс по MCLR в режиме SLEEP 0 1 1 Включение питания 0 и u Сброс по MCLR в обычном режиме 1 1 0 Выход из SLEEP по изменению уровня на вы- воде Примечание: биты ТО, PD и GPWUF сохраняют свое состояние, пока не произойдет сброс. Низкий уровень на входе MCLR не изме- няет значения этих битов; и - значение не изменилось Энергосберегающий режим SLEEP Микроконтроллер переводится в режим SLEEP при выполнении специальной команды SLEEP. Если сторожевой таймер включен, то он обнуляется и начинает отсчет задержки заново. В регистре STATUS сбрасывается бит PD и устанавливается бит ТО. Внутрен- ний тактовый генератор отключается. Выводы портов сохраняют состояние, которое было непосредственно перед исполнением ко- манды SLEEP. 45
Микроконтроллеры Microchip® rfPIC" Чтобы потребляемый в этом режиме ток был минимальным, можно соединить вывод Т0СК1 с VDD или VSs- Другие выводы, имеющие в режиме SLEEP высокоимпедансное состояние (входы), через резисторы порядка 10кОм можно соединить с плюсовой ши- ной питания. На выводе MCLR должен быть высокий уровень, если вывод настроен, как вход внешнего сигнала сброса. Выход из режима SLEEP Устройство выходит из режима SLEEP по одной из следующих причин. • Внешний сброс по входу MCLR, если он соответственно скон- фигурирован. • Переполнение WDT, если он включен. • Изменение уровня на одном из входов GPO, GP1 или GP3/MCLR, если режим пробуждения при изменении уровня включен. Все перечисленные события вызывают сброс устройства. При- чина сброса определяется, как было описано выше. Сторожевой таймер всегда обнуляется при выходе из SLEEP. Перед вхождением в режим SLEEP обязательно следует про- читать состояние входов. Выход из SLEEP по изменению уровня происходит, когда уровень на одном из входов изменяется по от- ношению к результатам последнего считывания. Если произош- ло пробуждение из режима SLEEP по изменению входного уровня, но перед повторным входом в SLEEP порты не были прочитаны, то сохранится активное состояние внутренней защелки- индикатора и контроллер выйдет из режима SLEEP сразу после вхождения в этот режим. Внутрисхемное программирование Микроконтроллеры rfPIC12C509xx могут быть запрограммирова- ны непосредственно на плате, после окончания монтажа. Для про- граммирования используются всего две линии: данных и тактовой частоты. Еще три провода необходимы для подключения питающе- го напряжения, общего провода и напряжения программирования. Микроконтроллер переходит в режим программирования при удержании в низком уровне выводов GP1 и GP0 во время измене- ния напряжения на выводе сброса от низкого уровня V)L до высоко- го уровня V|hh- Затем вывод GP1 используется для тактирования, а вывод GP0 для последовательной передачи данных. В режиме про- граммирования эти выводы работают через триггеры Шмитта. 46
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Рис. 1.19. Схема подключения для внутрисхемного программирования Непосредственно после сброса в микроконтроллер необходимо передать 6-разрядную команду, от которой зависит направление передачи данных. Содержимое программной памяти может быть записано в память программ или считано для верификации. Как правило, разработчики используют готовые программаторы для записи программ в кристалл. При необходимости разработать соб- ственный программатор следует обратиться к фирменной докумен- тации микроконтроллеров PIC12C5XX. Схема подключения для внутрисхемного последовательного программирования показана на рис. 1.19. Система команд Каждая команда контроллера rfPIC12C509xx представляет со- бой 12-битное слово, состоящее из кода команды (OPCODE) и од- ного или нескольких операндов. При описании команд использова- ны следующие обозначения полей команды, обычно применяемые изготовителем: Поле Расшифровка обозначения Адрес специального регистра или регистра пользователя. f Диапазон значений от 0x00 до 0x7F. Фирменный ассемб- лер допускает применять вместо цифровых значений не- посредственно имена регистров, определенные ранее 47
Микроконтроллеры Microchip® rfPIC™ Поле Расшифровка обозначения W Рабочий регистр (аккумулятор) ь Битовый адрес, используемый с 8-битным регистром, и указывающий внутри регистра на бит, с которым выполня- ется битовая операция. В ассемблерном тексте обознача- ет константу, представленную в двоичном счислении к Литерал, константа или метка d Указатель приемника результата операции. Если d=0, ре- зультат сохраняется в W, если d=1, результат сохраняется в регистре, объявленном в команде. По умолчанию d=1. Никакой другой регистр, кроме используемого в операции, не может быть назначен приемником. Фирменный ассемб- лер для большей наглядности допускает применять вместо значений 0 и 1 соответственно символы w и f label Имя метки TOS Top Of Stack - вершина стека PC Программный счетчик WDT WatchDog Timer - сторожевой таймер TO Флаг-бит переполнения таймера PD Флаг-бит режима пониженного энергопотребления SLEEP dest Приемник. Регистр W или иной, указанный в команде, ре- гистр [] Допустимые значения 0 Содержимое Передача значения < > Порядковый номер бита в 8-битном регистре, от 0 до 7 6 «Включает в себя значения...» курсив Значения или условия, определяемые пользователем Весь перечень команд контроллера включает в себя байтовые, битовые, литеральные команды и команды перехода. Байтовые команды включают в себя код команды, адресный указатель на ре- гистр-источник «f» и указатель приемника «d»: 48
Глава 1. Микроконтроллеры-передатчики rfPIC12C509xx 11 6540 OPCODE d f (адрес регистра) Например, MYREG EQU 0x1 D ADDWF MYREG, f В данном случае, регистр пользователя MYREG, определенный по адресу 1D, прибавляется к содержимому аккумулятора, и ре- зультат помещается в регистр MYREG. Битовые команды изменяют или проверяют значение конкретно заданного бита в регистре. При помощи трех битов «Ь» в команде указывают один из восьми битов регистра «1», а команда описывает действие, совершаемое с этим выбранным битом: 11 87540 OPCODE b f (адрес регистра) Например, MYREG EQU 0x1 D CLRF MYREG BSF MYREG, 5 В этом примере регистр пользователя MYREG сначала очища- ется (все биты устанавливаются в 0) командой CLRF, затем пятый бит этого регистра устанавливается в 1 командой BSF. Литеральные команды и команды перехода включают в себя код команды и 8- или 9-битную константу «к»: 11870 OPCODE к Например, 49
Микроконтроллеры Microchip9 rfPIC™ MOVLW OxBFh Команда MOVLW (MOV Literal to W) загружает шестнадцатерич- ное значение BFh в аккумулятор. Для команды GOTO используется иной формат команды: 11980 OPCODE к В этом случае к обозначает 9-битное значение программного адреса, которое загружается в программный счетчик при исполне- нии команды. В ассемблерном тексте адрес перехода обозначается меткой, и значение к вычисляется ассемблером. Большинство команд исполняется за один машинный цикл, ис- ключая команды перехода и вызова подпрограммы, требующие из- менения значения программного счетчика. Эти команды выполня- ются за два машинных цикла. Один машинный цикл по длительно- сти равен четырем периодам колебаний тактового генератора. Так, например, при стандартной частоте кварцевого резонатора 4 МГц длительность машинного цикла составляет 1 мкс. Команды перехо- да исполняются за 2 мкс. При вычислении времени исполнения отдельных участков про- граммы, особенно критичных по времени, следует помнить, что ко- манды перехода по условию могут исполняться за один или два цикла, в зависимости от того, выполняется ли условие. Например, в следующем фрагменте BTFSC DECF ADDWF MYREG, 5 MYREG MYREG, f команда BTFSC (Bit Test F, Skip if Clear) проверяет значение пя- того бита регистра MYREG и, если бит равен 1, сразу за этой ко- мандой исполняется следующая, DECF MYREG. Команда тестиро- вания бита исполнена за один машинный цикл. Если же пятый бит регистра MYREG очищен, происходит перескакивание через одну команду, на команду ADDWF MYREG. В этом случае команда тес- тирования бита исполняется за два машинных цикла. Если про- граммы тестирования многократно исполняются в цикле, то при разных условиях могут накапливаться значительные по- 50
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx грешности в вычислении ожидаемого времени исполнения фраг- мента программы. Таблица 1.4 Набор команд rfPIC12C509xx Мнемоника, операнды Расшифровка мнемоники Кол- во цик- лов Изме- няемые регист- ры При- меча ние Байтовые операции с регистрами ADDWF f, d Add W and F 1 C,DC,Z 1,2 ANDWF f, d AND W with F 1 Z 1,2 CLRFf Clear F 1 z 2 CLRW Clear W 1 z COMF f, d Complement F 1 z 1,2 DECF f, d Decrement F 1 z 1,2 DECFSZf, d Decrement F, Skip if Zero 1(2) 1,2,3 INCF f, d Increment F 1 z 1,2 INCFSZ f,d Increment F, Skip if Zero 1(2) 1,2,3 IORWF f, d Inclusive OR W with F 1 z 1,2 MOVF f, d Move F 1 z 1,2 MOVWF f Move W to F 1 NOP No Operation 1 RLF f, d Rotate Left F through carry 1 c 1,2 RRF f, d Rotate Right through carry 1 c 1,2 SUBWF f, d Subtract W from F 1 C,DC,Z 1,2 SWAPF f, d Swap nibbles in F 1 1,2 XORWF f, d Exclusive OR W with F 1 z 1,2 Битовые операции с регистрами BCF f, b Bit Clear F 1 1,2 BSF f, b Bit Set F 1 1,2 BTFSC f, b Bit Test F, Skip if Clear 1 (2) 3 BTFSS f, b Bit Test F, Skip if Set 1 (2) 3 Операции с литерами и переходы ADDLW k Add Literal and W 1 C.DC.Z ANDLW k AND Literal with W 1 z CALLk Call subroutine 2 51
Микроконтроллеры Microchip® rfPIC™ CLRWDT Clear Watchdog Timer 1 TO,PD GOTO к Go To address 2 IORLW к Inclusive OR Literal with W 1 Z MOVLW к Move Literal to W 1 RETFIE Return From Interrupt 2 RETLW к Return with Literal in W 2 RETURN Return from subroutine 2 SLEEP Sleep into standby mode 1 TO,PD SUBLW к Subtract W from Literal 1 C,DC,Z XORLW к Exclusive OR Literal with W 1 z Примечания: 1) Когда происходит чтение-модификация-запись портов ввода- вывода, то всегда считывается реальные значения напряжений на выво- дах, независимо от того, как настроены линии порта и что записано в триг- гер-защелку. Операция производится над считанным реальным значением и результат записывается в защелку. 2) Когда эта инструкция выполняется над регистром TMRO и d=1, пред- делитель сбрасывается, если подключен к модулю TimerO. 3) Если программный счетчик модифицируется или проверка на усло- вие возвращает истинный результат, инструкция требует два машинных цикла. Второй цикл исполняется процессором как NOP. Описание инструкций ADDWF Add W and F Синтаксис [label] ADDWF f, d Операнды 0<f<31 de [0,1] Действие Влияет на флаги: (W) + (f) (dest) C, DC, Z Содержимое регистра W суммируется с содержи- мым регистра f и результат помещается в регистр Описание f если d=1 и в аккумулятор W если d=0. Вместо значений 0 и 1 можно применять, соответственно, символы W и f. Пример ADDWF MY.REG, 0 52
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx ANDLW AND Literal with W Синтаксис Операнды Действие Влияет на флаги: [label] ANDLW k 0<k<255 (W) .AND. (k) (W) Z Между содержимым регистра W и 8-битной кон- Описание стантой к выполняется операция «логическое И». Результат помещается в регистр W. Пример ANDLW ОхЗА ANDWF AND W with F Синтаксис [label] ANDWF f, d Операнды 0<f<31 dG[0,1] Действие Влияет на флаги: (W) .AND. (f) (dest) Z Между содержимыми регистров W и f выполняется операция «логическое И». Результат помещается Описание в регистр f, если d=1 и в регистр W, если d=0. Вместо значений 0 и 1 можно применять, соответ- ственно, символы W и f. Пример ANDWF MY_REG, 1 BCF Bit Clear F Синтаксис [label] BCF f, b Операнды 0<f<31 0<b<7 Действие Влияет на флаги: 0 (f<b>) Нет Описание Устанавливает в «0» бит номер b в регистре f. BCF MY_REG, 3 установить в 0 бит 3 регистра MY_REG Пример BCF PORTA, 4 установить в 0 линию RA4 порта А 53
Микроконтроллеры Microchip® rfP/C™ BSF Bit Set F Синтаксис [label] BSF f, d Операнды 0<f<31 0<b<7 Действие 1 -> (f<b>) Влияет на флаги: Нет Описание Устанавливает в «1» бит номер b в регистре f. BSF MY_REG, 3 установить в 1 бит 3 регистра MY_REG Пример BSF PORTA, 4 установить в 1 линию RA4 порта А BTFSC Bit Test F Skip if Clear Синтаксис [label] BTFSC f, b Операнды 0<f<31 0<b<7 Действие skip next command if (f<b>)=0 Влияет на флаги: Нет Описание Если бит b регистра f равен 1, выполняется сле- дующая по порядку команда. Если бит b регистра f равен 0, следующая команда пропускается, про- граммный счетчик инкрементируется. В этом слу- чае выполнение занимает 2 машинных цикла. BTFSC MY_REG, 2 -.тестируем бит 2 регистра MY.REG Пример GOTO LABEL_ONE ;если 1, переход на метку LABEL_ONE ADDWF MYREG ;если 0, выполняется сложение с W BTFSS Bit Test F Skip if Set Синтаксис [label] BTFSS f, d Операнды 0<f<31 0<b<7 Действие skip next command if (f<b>)=1 Влияет на флаги: Нет 54
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Если бит b регистра f равен 0, выполняется сле- дующая по порядку команда. Если бит b регистра f Описание равен 1, следующая команда пропускается, про- граммный счетчик инкрементируется. В этом слу- чае выполнение занимает 2 машинных цикла. BTFSC MY_REG, 2 тестируем бит 2 регистра MY_REG Пример GOTO LABEL_ONE ;если 0, переход на метку LABEL-ONE ADDWF MYREG ;если 1, выполняется сложение с W CALL Call subroutine Синтаксис Операнды [label] CALL k 0<k<255 (PC) + 1 TOS Действие k PC<7:0> (STATUS<6:5>) (PC<10:9>) 0 PC<8> Влияет на флаги: Нет Адрес следующей команды загружается в стек в качестве адреса возврата. Происходит переход на Описание адрес подпрограммы, указанный в константе к. В ассемблере вместо константы используется тек- стовая метка. CALL LOADER ... ;текст основной программы Пример LOADER ... ;текст подпрограммы RETURN CLRF Clear F Синтаксис Операнды [label] CLRF f 0<fS31 Действие OOh -> (f) 1 -»Z 55
Микроконтроллеры Microchip9 rfPIC “ Влияет на флаги: Z Описание Содержимое регистра f полностью очищается, устанавливается флаг Z регистра STATUS. Пример CLRF MY.REG CLRW Clear W Синтаксис Операнды [label] CLRW Нет Действие OOh (W) 1 ^Z Влияет на флаги: Z Описание Содержимое регистра W полностью очищается, устанавливается флагг регистра STATUS. Пример CLRW CLRWDT Clear WatchDog Timer Синтаксис Операнды [label] CLRWDT Нет OOh WDT Действие 0 -> (предделитель WDT) 1 TO 1 PD Влияет на флаги: IQ, PD Описание Сбрасывает сторожевой таймер и очищает пред- делитель, если он подключен к сторожевому тай- меру. Пример CLRWDT COMF Complement F Синтаксис [label] COMF f, d Операнды 0<f<31 de[0,1] Действие Влияет на флаги: (dest) Z 56
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Описание Пример Инверсия содержимого регистра f. Если d=0, ре- зультат сохраняется в W, если d=1, результат со- храняется в регистре f. Вместо значений 0 и 1 можно применять, соответственно, символы W и f. COMF MY_REG, W ;инверсия MY.REG, результат в W DECF Decrement F Синтаксис Операнды [label] DECF f, d 0<f<31 dG[0, 1] Действие (f) - 1 -> (dest) Влияет на флаги: z Из содержимого регистра f вычитается единица. Если d=0, результат сохраняется в W, если d=1, Описание результат сохраняется в регистре f. Вместо значе- ний 0 и 1 можно применять, соответственно, сим- волы W и f. Пример DECF MY_REG DECFSZ Decrement F, Skip if Zero Синтаксис Операнды [label] DECFSZ f, d 0<f<31 dG[0,1] Действие (f) - 1 (dest) skip if result = 0 Влияет на флаги: Нет Из содержимого регистра f вычитается единица. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значе- ний 0 и 1 можно применять, соответственно, сим- Описание волы W и f. Если результат не равен 0, выполня- ется следующая по порядку команда. Если ре- зультат равен 0, следующая команда пропускает- ся, программный счетчик инкрементируется. В этом случае выполнение занимает 2 машинных цикла. Пример DECFSZ MY_REG, 0 57
Микроконтроллеры Microchip9 rfPIC”' GOTO GOTO RES.ZERO ;перейти если 0 RES.ZERO ... Goto label (unconditional branch) Синтаксис Операнды [label] GOTO k 0SkS511 Действие k -» (PC<8:0>) (STATUS<6:5>) (PC<10:9>) Влияет на флаги: Нет Описание Безусловный переход на адрес к. В ассемблере вместо константы используется текстовая метка. GOTO NEW.ADDR Пример NEW.ADDR ... INCF Increment F Синтаксис [label] INCF f, d Операнды 0SfS31 de[0,1] Действие Влияет на флаги: (f) + 1 -» (dest) Z Описание К содержимому регистра f прибавляется 1. Если d=0, результат сохраняется в W, если d=1, резуль- тат сохраняется в регистре f. Вместо значений 0 и 1 можно применять, соответственно, символы W и f. Пример INCF MY-REG, 0 INCFSZ Increment F, Skip if Zero Синтаксис [label] INCFSZ f, d Операнды 0<f<=31 dG[0, 1] 58
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Действие (f) + 1 (dest) skip if result = 0 Влияет на флаги: Нет К содержимому регистра f прибавляется единица. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значе- ний 0 и 1 можно применять, соответственно, сим- Описание волы W и f. Если результат не равен 0, выполня- ется следующая по порядку команда. Если ре- зультат равен 0, следующая команда пропускает- ся, программный счетчик инкрементируется. В этом случае выполнение занимает 2 машинных цикла. INCFSZ MY_REG, 0 GOTO RES_ZERO ;перейти если 0 Пример RES.ZERO ... IORLW Inclusive OR Literal with W Синтаксис Операнды Действие Влияет на флаги: [label] IORLW k 0<k<255 (W) .OR. k (W) Z Выполняется операция «логическое ИЛИ» между Описание содержимым регистра W и восьмибитной констан- той к. Результат помещается в регистр W. Пример IORLW 0x15 IORWF Inclusive OR W with F Синтаксис [label] IORWF f, d Операнды 0<f<31 de[0, 1] Действие Влияет на флаги: (W) .OR. (f) (dest) Z 59
Микроконтроллеры Microchip® rfPIC™ Выполняется операция «логическое ИЛИ» между содержимым регистра W и содержимым регистра Описание f. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значе- ний 0 и 1 можно применять, соответственно, сим- волы W и f. Пример IORWF MY_REG, 0 MOVLW Mov Literal to W Синтаксис Операнды Действие Влияет на флаги: [label] MOVLW k 0<k<;255 k-> (W) Нет Восьмибитная константа k помещается в регистр Описание W. Если значение к не указано, оно ассемблиру- ется как 0. Пример MOVLW 0x15 MOVF Move F Синтаксис [label] MOVF f, d Операнды 0<f<31 de[0, 1] Действие Влияет на флаги: (f) (dest) Z Значение из регистра f переносится в приемник, определяемый значением d. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно приме- Описание нять, соответственно, символы W и f. Значение d=1 используется для тестирования на ноль со- держимого регистра f, поскольку в этом случае содержимое регистра не изменяется, но флаг Z выставляется в соответствии со значением реги- стра. MOVF MY_REG, 0 ;перенос содержимого MY_REG Пример в W. MOVF MY_REG, 1 тестирование содержимого MY.REG. 60
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx MOVWF Move W to F Синтаксис Операнды Действие Влияет на флаги: [label] MOVWF f 0<f<31 (W) -> (f) Нет Описание Пример Содержимое регистра W переносится в регистр F MOVWF MY_REG NOP No Operation Синтаксис Операнды Действие Влияет на флаги: [label] NOP Нет Нет Нет Арифметико-логическое устройство процессора не Описание выполняет никакую операцию. Через четыре такта тактовой частоты (один машинный цикл) процес- сор переходит к исполнению следующей команды. Пример NOP OPTION Load Option Register Синтаксис Операнды Действие Влияет на флаги: [label] OPTION Нет (W) -» OPTION register Нет Описание Содержимое регистра W загружается в регистр OPTION. Пример OPTION RETLW Return with Literal in W Синтаксис Операнды [label] RETLW k 0<k<255 Действие k-> (W) (TOS) -» (PC) 61
Микроконтроллеры Microchip9 rfPIC™ Влияет на флаги: Нет Возврат из подпрограммы с константой в аккуму- Описание ляторе. В регистр W загружается восьмибитный литерал к. В программный счетчик загружается адрес возврата из стека. Пример RETLW OxFE RLF Rotate Left F through carry Синтаксис [label] RLF f, d Операнды 0<f<31 de[0,1] Действие <— (C) <- (register) <— X >T Влияет на флаги: c Содержимое регистра f побитно сдвигается влево через флаг переноса С. Если d=0, результат со- Описание храняется в W, если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно приме- нять, соответственно, символы W и f. Пример RLF MY_REG, 0 RRF Rotate Right F through carry Синтаксис [label] RRF f, d Операнды 0<f<31 de[0, 1] Действие -»(C) -^(register) -> ?< i Влияет на флаги: C Содержимое регистра f побитно сдвигается впра- во через флаг переноса С. Если d=0, результат Описание сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно приме- нять, соответственно, символы W и f. Пример RRF MY_REG, 0 62
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx SLEEP SLEEP into standby mode Синтаксис Операнды [label] SLEEP Нет OOh -» (WDT) Действие 0 -» (WDT prescaler) 1 -»TO 0-> PD Влияет на флаги: TO, PD Описание Переводит процессор в энергосберегающий ре- жим SLEEP и останавливает тактовый генератор. Пример SLEEP SUBWF Subtract W from F Синтаксис [label] SUBWF f, d Операнды 0<f<31 de[0, 1] Действие Влияет на флаги: (f) - (W) -» (dest) C, DC, Z Значение регистра W вычитается из значения в Описание регистре f. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно применять, соответ- ственно, символы W и f. SUBWF MY.REG, 1 Пример 1 До выполнения MY_REG=3, W=2, С=?, Z=? После выполнения MY_REG=1, W=2, С=1, Z=0 Результат положительный. Пример 2 Примеры До выполнения MY_REG=2, W=2, С=?, Z=? После выполнения MY_REG=0, W=2, С=1, Z=1 Результат равен нулю. Пример 3 До выполнения MY_REG=1, W=2, С=?, Z=? После выполнения MY_REG=OxFF, W=2, С=0, Z=0 Результат отрицательный 63
Микроконтроллеры Microchip9 rfPIC”" SWAPF Swap nibbles in F Спитаке [label] SWAPF f, d Операнды 0<f<31 de[0,1] Действие (f<3:0>) -» (dest<7:4>) (f<7:4>) -» (dest<3:0>) Влияет на флаги: Нет Старший и младший полубайты значения в реги- стре f меняются местами. Результат помещается в Описание приемник, определяемый значением d. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно применять, соответственно, символы W и f. Пример SWAPF MY_REG, 1 TRIS Load TRIS Register Синтаксис Операнды Действие Влияет на флаги: [label] TRIS f f=6 (W)-> TRIS register f Нет Описание Содержимое аккумулятора загружается в регистр TRIS f (f=6) Пример Примечание TRIS GPIO f=6 только для rfPIC12C509xx XORLW Exclusive OR Literal with W Синтаксис Операнды Действие Влияет на флаги: [label] XORLW k 0<k<255 (W) .XOR. k -» (W) Z Описание Между содержимым регистра W и восьмибитной константой к выполняется логическая операция «исключающее ИЛИ». Результат помещается в регистр W. Пример XORLW ОхСВ 64
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx XORWF Exclusive OR W with F Синтаксис [label] XORWF f, d Операнды 0<f<31 de [0,1] Действие Влияет на флаги: (W) .XOR. (f) -» (dest) Z Между содержимым регистра W и регистра f вы- полняется логическая операция «исключающее Описание ИЛИ». Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно применять, соответственно, символы W и f. Пример XORWF MY.REG, 0 Радиочастотная часть Структурная схема передатчика Структурная схема передатчика приведена на рис. 1.20. Он со- стоит из кварцевого генератора, петли фазовой автоподстройки частоты (ФАПЧ), выходного усилителя мощности с дифференци- альным выходом по схеме с открытым коллектором и схемы управ- ления режимом передачи. Количество внешних компонентов све- дено к минимуму. В число внешних компонентов входят: кварцевый резонатор, разделительный конденсатор и фильтр петли ФАПЧ, состоящий из одного резистора и двух конденсаторов. Микроконтроллер rfPIC12C509AG поддерживает модуляцию ти- па ASK (Amplitude Shift Keying - амплитудная манипуляция). При этом типе модуляции происходит включение и выключение усили- теля мощности в соответствии с логическими уровнями 0 и 1 моду- лирующей последовательности. Микроконтроллер rfPIC12C509AF кроме ASK поддерживает мо- дуляцию FSK (Frequency Shift Keying - частотная манипуляция). В случае частотной манипуляции при помощи внутреннего ключа к кварцевому генератору периодически, в соответствии с модули- рующей последовательностью, подключается дополнительный на- грузочный конденсатор, сдвигающий частоту. Передатчик и процессорная часть электрически полностью раз- вязаны. Это обеспечивает максимальную конструктивную гибкость. 65
Микроконтроллеры Microchip® rfPIC™ Совершенно не обязательно модулировать передатчик при помощи встроенного микроконтроллера. Они могут работать независимо друг от друга. Поскольку передатчик является радиочастотным устройством, работающим в диапазоне УВЧ, к дизайну печатной платы предъяв- ляются особые требования, традиционные для подобного класса устройств. Мы подробно рассмотрим эти требования на примере печатной платы передающего модуля в гл. 4. ANT2 ANT1 Рис. 1.20. Структурная схема встроенного передатчика 66
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Кварцевый генератор Кварцевый генератор передатчика выполнен по схеме емкост- ной трехточки (генератор Колпитта) и является источником опорной частоты для системы ФАПЧ. Выходная частота передатчика явля- ется постоянной и вычисляется на основе параллельной резонанс- ной частоты кварца, как ftransmit = fxiai х 32. Резонансная частота внут- ри допустимого диапазона значений может быть произвольной. До- пускается применение кварцев, изготовленных по специальному заказу. В любом случае, резонатор должен иметь основные пара- метры, соответствующие перечисленным в табл.1.5. Таблица 1.5 Основные параметры кварцевого резонатора Параметр Мин. Макс. fxtal Резонансная частота, МГц 9,69 15,0 CL Последовательная емкость, пФ 10 15 Со Параллельная (паразитная) емкость, пФ — 7 ESR Эквивалентное последовательное сопротивление, Ом - 60 Кварцевый генератор в режиме ASK На рис. 1.21 показана схема включения кварцевого резонатора для использования в режиме амплитудной манипуляции. Конденса- тор С1 уменьшает собственную емкость кварца для лучшего согла- сования с входными цепями генератора и незначительно смещает рабочую частоту. Это позволяет, используя один номинал кварца, изготавливать устройства, работающие на разных частотных кана- лах. Таблица 1.6 Пример зависимости частоты передачи от номинала С1 С1, пФ Опорная частота, МГц Частота передачи, МГц 22 13,551438 433,646 39 13,550563 433,618 100 13,549844 433,595 67
Микроконтроллеры Microchip9 rfPIC™ С1, пФ Опорная частота, МГц Частота передачи, МГц 150 13,549672 433,5895 470 13,549548 433,5856 1000 13,549344 433,579 Примечание: значения даны для стандартных условий, когда Vddrf = 3 в, fxtai = 13,55 МГц, RFen = 1, Та = 25”С. Рис. 1.21. Схема включения опорного кварца в режиме ASK Кварцевый генератор в режиме FSK Кварцевый генератор микроконтроллера rfPIC12C509AF может быть сконфигурирован для работы в режиме частотной манипуля- ции, как показано на рис. 1.22. Частотная манипуляция достигается комбинированием подключения конденсаторов С1 и С2. Если на входе DATAfsk присутствует высокий логический уро- вень (DATAfsk = 1). то выход FSKOUT переходит в высокоимпе- дансное состояние, к схеме кварцевого генератора подключен только конденсатор С1 и передатчик излучает на частоте fmax. В случае DATAfsk = 0 к схеме опорного генератора подключается конденсатор С2, опорная частота смещается и передатчик излучает на частоте fmin. 68
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Рис. 1.22. Схема включения опорного кварца в режиме FSK Путем подбора номинала конденсаторов С1 и С2 устанавливают центральную частоту и девиацию частоты. Конденсатор С1 опреде- ляет частоту fmax, а параллельно включенные конденсаторы С1 и С2 - частоту fmin. Схематически это изображено на рис. 1.23. Центральная частота рассчитывается, как среднее арифметиче- ское между fmin И fтах:. fc = (fmin + fmax)/2. Девиация частоты рассчитывается, как Af = (fmin - fmax)/2. Таблица 1.7. Примеры значений центральной частоты и девиации С1, пФ С2 = 1000 пФ С2 = 100 пФ С2 = 47 пФ Частота МГц/ девиация кГц Частота МГц/ девиация кГц Частота МГц/ девиация кГц 22 433,612/34 433,619/27 433,625/21 33 433,604 / 25 433,610/19 433,614/14 39 433,598/20 433,604/14 433,608/10 47 433,596/17 433,601 / 11,5 433,604 / 8 68 433,593/13 433,598 / 9 433,600 / 5,5 100 433,587 / 8 - - Примечание: значения даны для стандартных условий, когда Vddrf = 3 В, fxtai = 13,55 МГц, RFen = 1, ТА = 25‘С. 69
Микроконтроллеры Microchip9 rfPIC™ Выход CLKOUT На выходе CLKOUT присутствуют импульсы с частотой, равной поделенной на четыре частотой кварцевого генератора передатчи- ка. Эти колебания могут быть использованы во внешней схеме, как источник стабильной опорной частоты (тактовых импульсов). Возникает естественное желание использовать эти колебания для тактирования процессорной части и таким образом сэкономить один кварцевый резонатор. Но делать этого нельзя, потому что по- ка не начал работать процессор, он не может включить кварцевый генератор передатчика через вывод RFEN, т.е. подобная схема не сможет «запустить сама себя». Запустить подобную схему тактиро- вания можно, если принудительно задать высокий уровень на вы- воде RFEN. Но в этом случае передатчик нельзя отключать (иначе пропадет тактирование микроконтроллера) и энергия питающей батареи будет расходоваться на непрерывное излучение сигнала в эфир. В любом случае, колебания с выхода CLKOUT можно подавать на вход GP2/T0CKI для точного измерения интервалов времени или иных применений, требующих наличия стабильной опорной частоты. Для того, чтобы минимизировать паразитные выбросы, фронты сигнала CLKOUT имеют ограниченную скорость нарастания. Раз- 70
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx мах сигнала (VClkout) определяется емкостной нагрузкой (Cload) приложенной к выводу CLKOUT и при Cload = 5 пФ составляет 2VPP. Фазовая автоподстройка частоты (ФАПЧ) Система фазовой автоматической подстройки частоты (ФАПЧ) является важнейшим узлом передатчика. Почему? Рассмотрим эту тему подробнее. Как вы уже знаете, несущая частота передатчика в 32 раза больше, чем частота резонанса внешнего кварцевого резонатора. Применение низкочастотного кварца объясняется несколькими факторами. Во-первых, такие кварцы значительно дешевле высо- кочастотных. Во-вторых, высокочастотные кварцы бывают очень требовательными к параметрам схемы, в которую включены. При несоблюдении этих требований генерация может не возникнуть во- все или возникнет на частоте субгармоники. В-третьих, такая схема будет весьма чувствительна к влиянию внешних факторов (емкость окружающих предметов, влажность и т.п.) Кроме того, в портативном устройстве невозможно реализовать схему прямого умножения частоты, поскольку она достаточно слож- на, энергоемка, требует настройки и большого количества дискрет- ных элементов, таких как катушки индуктивности и конденсаторы. Поэтому в передатчике микроконтроллеров серии rfPIC колебания несущей частоты вырабатываются внутренним генератором, не со- держащим кварцевого резонатора. А генератор на внешнем кварце- вом резонаторе используется в качестве источника опорной частоты, которая ровно в 32 раза меньше частоты излучения. Система ФАПЧ в данном случае связывает внутренний генератор с опорным внеш- ним. Строго говоря, внутренний генератор входит в состав петли ФАПЧ и сам по себе не обладает высокой стабильностью. Внутренний генератор построен по схеме генератора, управляе- мого напряжением (ГУН). Как только частота этого генератора на- чинает уходить от значения, задаваемого опорным генератором, ФАПЧ вырабатывает сигнал ошибки, поступающий на ГУН. Под влиянием этого сигнала частота колебаний ГУН смещается обрат- но, до нужного значения. Система ФАПЧ, применяемая в rfPIC, построена по схеме с ис- точником тока или, как принято называть в зарубежной литературе, с подкачкой заряда (charge-pump). Второй вариант названия более точно отражает физическую сущность этой модификации ФАПЧ. Схемы с подкачкой заряда получили распространение относительно недавно, когда была разработана исчерпывающая математическая модель этого устройства (кстати, достаточно сложная). 71
Микроконтроллеры Microchip9 rfPIC”" Рис. 1.24. Обобщенная структурная схема ФАПЧ Сейчас узлы ФАПЧ с подкачкой заряда широко применяются в различной портативной радиочастотной аппаратуре, включая мо- бильные телефоны, пейджеры и т.п. Поэтому не будет лишним кратко рассмотреть принцип действия этой модификации ФАПЧ. Обобщенная схема ФАПЧ, безотносительно к модификации, пока- зана на рис. 1.24. Это классическая схема с отрицательной обратной связью. Она состоит из фазочастотного детектора ФЧД, который срав- нивает частоту и фазу двух сигналов - опорного Fon и выходного Евых, цепи с коэффициентом прямой передачи G(s) и цепи обратной связи с коэффициентом H(s). Конкретизируем эту схему применительно к на- шему случаю (рис. 1.25). Добавим ГУН, с выхода которого будем сни- мать сигнал обратной связи. Поскольку частота ГУН в 32 раза выше, чем частота опорного сигнала, в цепь обратной связи включим дели- тель на 32. Аналогичный фрагмент можно найти на рис. 1.20. Особенностью ФАПЧ с подкачкой заряда является то, что она может работать с двоичными импульсами и поэтому легко может быть встроена в интегральные микросхемы. Обратимся к рис. 1.26. На нем изображена структурная схема ФАПЧ с подкачкой заряда. Она состоит из тристабильного фазочастотного детектора, который меняет свое состояние по спадам входных импульсов, источника тока подкачки ИТП, который управляется выходными уровнями ФЧД, интегрирующего фильтра и ГУН. Источник тока подкачки преобразует выходные импульсы ФЧД в определенные количества электрических зарядов, которые либо Рис. 1.25. Уточненная структурная схема ФАПЧ 72
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx Fbwx Рис. 1.26. Структурная схема ФАПЧ с подкачкой заряда и 1 о о D 0 0 1 «подкачиваются» в интегрирующий фильтр, либо «откачиваются» из него, в зависимости от знака ошибки рассогласования между опорными колебаниями и колебаниями, которые генерирует ГУН. Движение зарядов порождает ток Ip. На интегрирующем фильтре образуется напряжение Vc, которое поступает на ГУН и влияет на его частоту. Более подробно принцип действия ФАПЧ с подкачкой заряда проиллюстрирован на рис. 1.27. Генератор тока подкачки состоит из двух источников тока и двух ключей, замыкающихся при высоком уровне на соответствующем входе. В зависимости от того, какой ключ закрыт, заряд или подка- чивается в емкость фильтра, или откачивается из нее. Состояние, когда закрыты оба ключа, является запрещенным. Эквивалентная схема фильтра состоит из сопротивления и емкости. В реальной схеме на основе rfPIC применяется фильтр второго порядка, который состоит из двух конденсаторов и одного резисто- ра, рис. 1.28. Столь малое количество внешних элементов позво- ляет создавать недорогие малогабаритные устройства. ФЧД LU... ./ Su фильтр ФАПЧ Ip ГУН : Л—>/ So Ri. С Vc Рис. 1.27. Структурная схема источника тока подкачки и фильтра 73
Микроконтроллеры Microchip9 rfPIC™ Рис. 1.28. Типовая схема фильтра второго порядка петли ФАПЧ От постоянной времени фильтра зависят многие параметры ФАПЧ, основной из которых - время захвата частоты. Это время, которое требуется, чтобы петля ФАПЧ вошла в установившийся режим слежения, когда частота на выходе ГУН соответствует за- данной. Кроме того, разработчик должен учитывать время установ- ления колебаний на кварцевом резонаторе, которое составляет около 1 мкс. Следовательно, данные нельзя передавать немедлен- но после включения питания, нужно выдержать защитный интер- вал, больший чем сумма времени установления кварца и постоян- ной времени ФАПЧ. Характерной особенностью систем с ФАПЧ является «перенос» опорной частоты на выход передатчика, т.е. появление в излучае- мом спектре частот со значениями FBblx + Fon и FBb)X - Fon. Сокраще- ние времени захвата ФАПЧ приводит к увеличению уровня пара- зитных излучений, и наоборот. Разработчик должен выбирать ком- промиссные параметры фильтра ФАПЧ. Характеристическими и взаимно обратными параметрами при этом являются полоса про- пускания и постоянная времени петли ФАПЧ. К другим важным параметрам ФАПЧ относятся запас по фазе и коэффициент затухания. Запас по фазе характеризует стабиль- ность системы. Если выбрать слишком маленький запас по фазе, то система будет нестабильной. Выбор слишком большого запаса по фазе уменьшает время захвата, но увеличивает «перенос» опорной частоты. Обычно стараются выбрать параметры фильтра ФАПЧ так, чтобы запас по фазе был в пределах от 30 до 70 градусов. Для разработчика подбор параметров фильтра сводится к поис- ку компромисса между наименьшим временем захвата и наиболь- шим допустимым уровнем паразитных составляющих FBb)X + Fon и Г вых ~ Fоп- Коэффициент затухания определяет форму экспоненты, по ко- торой затухают собственные колебания петли ФАПЧ. Дело в том, 74
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx что установление заданной частоты может происходить по принци- пу маятника. В упрощенном изложении это выглядит так. На выходе фильтра вырабатывается сигнал ошибки, чуть больший, чем нужно. Частота ГУН смещается в нужную сторону, но чуть сильнее, чем следует. Вырабатывается сигнал ошибки с противоположным зна- ком, но меньшей амплитуды. Процесс повторяется несколько раз, пока не установится заданная частота. При этом на входе ГУН мы можем наблюдать затухающие колебания управляющего напряже- ния. Их частоту называют собственной частотой ФАПЧ. Величина коэффициента затухания зависит от типа модуляции. Для частотной манипуляции (FSK) желательно иметь коэффициент затухания, близкий к единице. Для амплитудной манипуляции ко- эффициент затухания принимают равным 0,707. В табл. 1.8 приведены примеры номиналов элементов фильтра ФАПЧ для опорной частоты 13,56 МГц (частота передачи 433,92 МГц), напряжения питания 3 В, температура корпуса микросхемы 25'С. Таблица 1.8 Примеры номиналов элементов фильтра ФАПЧ С1 С2 R1 Поло- са за- хвата ФАПЧ Собст- венная частота ФАПЧ, кГц За- пас по фазе Ко- эфф, зату- хания вто- рого по- рядка Рас- чет- ное вре- мя за- хва- та, мкс 0,01 мкФ 390 пФ 680 165 кГц 64 65е 1,37 51 3900 пФ 100 пФ 1,5 кОм 360 кГц 103 63е 1,89 16 1500 пФ 47 пФ 2,7 кОм 610 кГц 166 55е 2,10 10 1000 пФ 18 пФ 4,7 кОм 1,05 МГц 203 50е 3,0 8 Выходной усилитель мощности С выхода ГУН колебания высокой частоты поступают на усили- тель мощности сигнала. Выходной каскад усилителя мощности по- строен по дифференциальной схеме с открытым коллектором, поэтому питание на него должно поступать отдельно, через цепь нагрузки. 75
Микроконтроллеры Microchip9 rfPIC * VPS rfPIC12C509AG R1 Данные ф 20мА К схеме регулировки мощности I Рис. 1.29. Типовая схема цепи регулировки мощности в режиме ASK К выводам ANTI, ANT2 можно подключить как петлевую антенну (симметричная нагрузка), так и штыревую антенну (несимметричная нагрузка). Штыревая антенна должна подключаться через симмет- рирующую согласующую цепь. Применение петлевой антенны тре- бует минимального количества внешних элементов, поэтому на практике чаще всего применяется именно этот тип антенны. Кроме того, петлевую антенну проще всего реализовать в виде замкнутого проводника на печатной плате. Импеданс нагрузки, приведенной к выходу усилителя должен со- ставлять 1 кОм. Рассогласование импедансов приводит к резкому увеличению уровня гармоник в излучаемом сигнале. Выходная мощность передатчика может регулироваться в диапазо- не от +2 дБм до -12 дБм путем изменения внешнего напряжения Vps на выводе PS/DATAask- На рис. 1.29 показан пример типовой схемы регулировки мощности при амплитудной манипуляции. Схема на рис. 1.30 предназначена для случая частотной манипуляции (FSK). При частотной манипуляции вывод PS/DATAask используется только для регулировки выходной мощности. Внутри микросхемы расположен источник стабильного тока 20 мкА. Часть этого тока протекает через внешний резистор R2, а другая часть - через внут- реннюю схему управления мощностью. Чем меньше сопротивление внешнего резистора, тем большая часть тока от источника протекает через него и тем меньше напряжение VPS. (Поскольку источник тока Vps I Л PS/DATAask х rfPIC 12C509AF (|)20мА К схеме регулировки мощности Рис. 1.30. Типовая схема цепи регулировки мощности в режиме FSK 76
Гпава 1. Микроконтроллеры-передатчики rfPIC12C509xx стабильный, то увеличение доли тока, протекающего через рези- стор R2 приводит к уменьшению напряжения на выходе источника.) При амплитудной манипуляции резисторы R1 и R2 образуют де- литель напряжения, от которого зависит мощность, излучаемая при высоком логическом уровне на входе «Данные» (табл. 1.9). Если требуется максимальная излучаемая мощность при передаче высо- кого уровня, то модулирующий выход контроллера можно подклю- чить напрямую к выводу PS/DATAask. Управление режимом ожидания Передатчик может находиться в режиме ожидания, когда его энергопотребление минимально. Для перехода в режим ожидания нужно подать низкий уровень на вывод RFENiN. В этом режиме от- сутствует выходное высокочастотное излучение и колебания на вы- ходе CLKOUT. Кварцевый генератор работает, но ФАПЧ отключена. Таблица 1.9 Значения основных параметров при выборе мощности Выходная мощность, дБм Ток, потреб- ляемый передатчи- ком, мкА Напряжение на выводе Vps, В ASK FSK R1, кОм R2, кОм R2, кОм +2 11,5 >2,0 2,4 4,7 >75 -1 8,6 1,2 6,8 4,7 56 —4 7,3 0,9 11 4,7 47 -7 6,2 0,7 15 4,7 39 -10 5,3 0,5 24 4,7 27 -12 4,8 0,3 43 4,7 15 -60 <4,8 <0,1 Нет 4,7 4,7 После подачи на вывод RFENin высокого логического уровня требуется несколько микросекунд для стабилизации частоты излу- чаемого сигнала. По этой причине вывод RFENin нельзя использо- вать для модуляции. Вывод управления режимом имеет внутренний подтягивающий резистор. 77
00 Типовая схема включения в режиме ASK Vdd Vdd 4 $ Примечания: * Частота излучения в 32 раза больше частоты кварца * * 15...470 пФ, смещает несущую частоту * ** Опциональные резисторы цепи управления мощностью Микроконтроллеры Microchip9 rfPIC' 2 Рис. 1.31. Пример типовой схемы передатчика с амплитудной манипуляцией
Файл взят с сайта www.kodges.ru, на котором есть еще много интересной литературы
Типовая схема включения в режиме FSK v« NC PS/DATAASK VddRF ANT2 СВ 1,7.3 Примечания: * Частота излучения в 32 раза больше частоты кварца * * Внешний нагрузочный конденсатор для модуляции FSK Резистор цепи управления мощностью Рис. 1.32. Пример типовой схемы передатчика с частотной манипуляцией co
Глава 2. Микроконтроллер-передатчик rfPIC12F675 Микроконтроллер rfPIC12F675 представляет собой комбиниро- ванный электронный прибор, состоящий из экономичного 8-разрядного CMOS-контроллера на основе архитектуры RISC и встроенного миниатюрного микромощного УКВ передатчика. Пере- датчик, встроенный в rfPIC12F675, поддерживает два вида модуля- ции - ASK и FSK. Выпускаются три варианта микроконтроллеров rfPIC12F675, отличающихся рабочим диапазоном передатчика. Контроллер и передатчик не имеют внутренних электриче- ских соединений, имеют раздельные кварцевые генераторы и могут работать независимо друг от друга. Применение RISC-архитектуры (Гарвардской архитектуры) про- цессора позволило использовать всего 35 однословных 14-битных инструкций ассемблера, которые имеют интуитивно понятную мне- монику и легко запоминаются. Особенностью RISC-архитектуры является разделение памяти программ и памяти данных. При этом разрядность слова команд и слова данных может быть разной. Все инструкции, кроме переходов, выполняются за один цикл. Перехо- ды выполняются за два цикла. Используется конвейерная выборка, когда одновременной с выполнением текущей команды в буфер команд загружается код следующей команды. Система команд высокосимметричная, то есть позволяет вы- полнять любую операцию над любым регистром с применением любого способа адресации. Такая система команд значительно уп- рощает процесс программирования, сокращает объем программы и увеличивает производительность. Микроконтроллер имеет несколько специальных внутрисхемных решений, которые значительно облегчают его применение в гото- вых изделиях, сокращают количество внешних компонентов и уве- личивают стабильность работы. К таким решениям относятся. • Возможность выбора тактового генератора. • Сервисные опции сброса: - сброс по включению питания; - таймер сброса по питанию; - таймер запуска тактового генератора; - обнаружение спада питающего напряжения. 80
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 • Прерывания. • Сторожевой таймер. • Режим SLEEP. • Защита программного кода от считывания. • Индивидуальный серийный номер. • Программирование на готовой плате. Микроконтроллер оснащен несколькими независимыми встро- енными RC-генераторами. Один из них используется для работы сторожевого таймера. Еще два таймера применяются для форми- рования необходимых задержек при сбросе. Первый, таймер запус- ка тактового генератора, удерживает процессор в состоянии сброса на время, необходимое для «раскачки» тактового генератора. Вто- рой влияет на микроконтроллер в целом и удерживает его в со- стоянии сброса в течение фиксированного интервала 72 мс для того, чтобы успело установиться питающее напряжение. Кроме это- го, при снижении питающего напряжения ниже допустимого преде- ла, срабатывает схема защиты от спада питающего напряжения, которая генерирует сигнал сброса длительностью не менее 72 мс. Благодаря этим трем встроенным схемам большинство приложе- ний не требует внешних цепей сброса. Режим SLEEP предназначен для перевода процессора в режим ожидания, в котором он потребляет чрезвычайно малый ток. Вы- вести процессор из режима ожидания можно тремя способами. • Внешний сброс. • По сигналу от сторожевого таймера. • По прерыванию. Различные варианты тактового генератора позволяют подобрать нужный вариант для любого приложения. Встроенный тактовый ге- нератор INTOSC минимизирует стоимость изделия, тогда как вари- ант LP с пониженной тактовой частотой минимизирует потребляе- мый ток. Существует набор конфигурационных битов, позволяющих вы- бирать различные опции микроконтроллера. Мы рассмотрим их в разделе «Слово конфигурации» этой главы. Типы корпусов и система обозначений На момент подготовки книги микроконтроллеры rfPIC12F675 выпускались только в 20-выводном корпусе типа SSOP. Система обозначений показана на рис. 2.1, а внешний вид корпуса на рис. 2.2. 81
Микроконтроллеры Microchip9 rfPIC" 20-выв SSOP ххххххххххх ххххххххххх ф YYWWNNN О Пример rfPIC™ 12F675H ф 0314СВР О Рис. 2.1. Система обозначений на корпусе Используется следующая расшифровка обозначений на корпусе: ХХ...Х- информация, определяемая пользователем. Если изготав- ливается заказная партия кристаллов типа QTP или SQTP, то на этом месте наносится текст, нужный заказчику (за отдельную плату). По умолчанию, или на товарных партиях широкого применения наносится наименование кристалла по спецификации компании Microchip. YY - последние две цифры календарного года. WW - номер недели в году (первой считается неделя, вклю- чающая 1 января). NNN - цифробуквенный код партии. Последняя буква в обозначении микроконтроллера соответствует рабочему диапазону частот радиопередатчика, как показано ниже: Обозначение Диапазон rfPIC12F675K 290 ...350 МГц rfPIC12F675F 380 ... 450 МГц rfPIC12F675H 850 ... 930 МГц Рис. 2.2. Внешний вид и габаритные размеры 20-выводного SSOP 82
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Основные электрические параметры Микроконтроллер rfPIC12F675 дополнительно к процессорной и радиочастотной части содержит компаратор и четыре канала АЦП. Поэтому его электрические параметры представлены ниже в не- скольких таблицах. Мы перечислим только основные параметры, которых будет достаточно для ознакомления с микросхемой и раз- работки простых устройств (табл. 2.1 - 2.3), а подробный перечень специфических параметров можно получить из фирменного доку- мента DS70091A. Таблица 2.1. Питающие напряжения rfPIC12F675 Обо- зна- чения Параметра Значение Примечание мин. тип. макс. Vdd Напряжение питания,В 2,0 2,2 2,5 3,0 4,5 - 5,5 5,5 5,5 5,5 5,5 Fosc - 4 МГц: A/D off A/D on, О...+125°С A/D on,-4О...+125°С 4 < Fosc <10 МГц Fosc >10 МГц Vdr Минимальное напряжение для сохранности данных в ячей- ках RAM, В 1,5 - — В режиме SLEEP Vddrf Напряжение питания радио- передающей части, В 2,0 3,0 4,0 5,0 - 5,5 5,5 5,5 5,5 Ро = 4 дБм Ро = 7,5 дБм Ро = 8,5 дБм Ро = 9 дБм Vlvd Минимальное питающее на- пряжение, при котором отклю- чается передат- чик, В 1,8 1,8 5 1,9 Та = +23°С, RFEN = Vddrf 83
Микроконтроллеры Microchip19 rfPIC™ Таблица 2.2 Ток, потребляемый процессорной частью rfPIC12F675 Обоз- на- чение Пара- метр Значение Ед. изм. Условия мин. тип. макс. Vdd Примечание Idd Потреб- ляемый ток - 9 16 мкА 2,0 Fosc = 32 кГц LP Mode — 18 28 мкА 3,0 — 34 54 мкА 5,0 — 110 150 мкА 2,0 Fosc = 1 МГ ц XT Mode - 190 280 мкА 3,0 — 330 450 мкА 5,0 — 220 280 мкА 2,0 Fosc = 4 МГц XT Mode - 370 650 мкА 3,0 - 0,6 1,4 мА 5,0 — 70 110 мкА 2,0 Fosc = 1 МГ ц ЕС Mode — 140 250 мкА 3,0 - 260 390 мкА 5,0 - 180 250 мкА 2,0 Fosc = 4 МГц ЕС Mode - 320 470 мкА 3,0 - 580 850 мкА 5,0 - 340 450 мкА 2,0 Fosc = 4 МГц INTOSC Mode - 500 700 мкА 3,0 — 0,8 1,1 мА 5,0 - 180 250 мкА 2,0 Fosc = 4 МГц EXTRC Mode - 320 450 мкА 3,0 - 580 800 мкА 5,0 - 2,1 2,95 мА 4,5 Fosc = 20 МГц HS Mode - 2,4 3,0 мА 5,0 84
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Таблица 2.3 Ток потребляемый радиопередающей частью rfPIC12F675 Обоз- на- чение Параметр Значение Условия мин. тип. макс. Vdd Примечание Iddrf Потреб- ляемый ток, мА 2,0 2,7 5,0 3,0 Power Step = 0, RFEN=DATAask=1 2,9 3,5 7,0 3,0 Power Step = 1, RFEN=DATAask=1 3,2 4,7 7,9 3,0 Power Step = 2, RFEN=DATAask=1 4,5 6,5 11 3,0 Power Step = 3, RFEN=DATAask=1 7,0 10,7 16 3,0 Power Step = 4, RFEN=DATAask=1 Расположение и назначение выводов Расположение и обозначение выводов rfPIC12F675 показано на рис. 2.3. Назначение выводов описано в табл. 2.4. Назначение мно- гих выводов зависит от того, как сконфигурирован микроконтроллер. SSOP Vdd---► GP5/T1CKI/QSC1/CLKIN-*-► GP4/T1G/OSC2/CLKOUT^—► GP3/MCLR/VPP RFXTAL----► RFEN----► REFCLK-*--- PS----► Vddrf---► Vssrf----► •1 2 3 4 5 e e E e E 6 e _ e E E 7 8 9 10 СЛ 5 20 ZH-----Vss 19 ► GPO/CIN+/ICSPDAT 18 —► GP1/CIN-/ICSPCLK □ —► GP2/TOCKI/INT7COUT J----►FSKOUT ----DATAfsk О -----DATAask 17 16 15 14 13 12 11 Vssrf ANT N> □ □ Рис. 2.3. Расположение и обозначение выводов 85
Микроконтроллеры Microchip9 rfPIC™ Таблица 2.4 Назначение и нумерация выводов rfPIC12F675 Номер вывода и его функции Тип буфера Описание вход выход 1 Vdd - - Положительный вывод питания процес- сорной части 2 GP5 TTL CMOS Порт ввода/вывода общего назначения. Имеет программно подключаемый подтя- гивающий резистор и может служить ис- точником прерывания при изменении входного уровня T1CKI ST — Вход внешних импульсов для тактирова- ния таймера Timerl OSC1 Xtal - Вывод для подключения кварцевого ре- зонатора CLKIN ST - Внешняя RC-цепочка или вход внешних тактовых импульсов 3 GP4 TTL CMOS Порт ввода/вывода общего назначения. Имеет программно подключаемый подтя- гивающий резистор и может служить ис- точником прерывания при изменении входного уровня T1G ST - Стробирующий вход модуля TIMER1 AN3 A - Вход 3-го канала АЦП OSC2 - Xtal Вывод для подключения кварцевого ре- зонатора CLKOUT - CMOS Выход импульсов с частотой следования Tosc/4 4 GP3 TTL — Входной порт общего назначения. Может служить источником прерывания при из- менении входного уровня MCLR ST - Вход сброса низким уровнем. Имеет соб- ственный подтягивающий резистор VPP HV — Напряжение программирования 5 RFXTAL Xtal Xtal Вывод для подключения кварцевого ре- зонатора передатчика 6 RFEN TTL - Вывод включения передатчика. Снабжен внутренним подтягивающим резистором 86
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Номер вывода и его функции Тип буфера Описание вход выход 7 REFCLK - CMOS Выход опорной частоты ВЧ/4 (для rfPIC12F675K/F) Выход опорной частоты ВЧ/8 (для rfPIC12F675H) 8 PS A — Управление мощностью передатчика 9 VDDRF - - Напряжение питания передатчика 10 VSSRF - - Общий провод (земля) передатчика 11 ANT — OD Антенный выход усилителя мощности ВЧ 12 VSSRF — - Общий провод (земля) передатчика 13 LF A A Вывод для подключения фильтра петли ФАПЧ 14 DATAASK TTL - Вход данных при модуляции ASK 15 DATAFSK TTL — Вход данных при модуляции FSK 16 FSKouT - OD Выход для управления опорным кварце- вым генератором при модуляции FSK. 17 GP2 ST CMOS Порт ввода/вывода общего назначения. Имеет программно подключаемый подтя- гивающий резистор и может служить ис- точником прерывания при изменении входного уровня. AN2 A — Вход 2-го канала АЦП GOUT - CMOS Выход компаратора TOCKI ST - Вход внешних импульсов для тактирова- ния таймера TimerO I NT ST - Вход внешнего прерывания 18 GP1 TTL CMOS Порт ввода/вывода общего назначения. Имеет программно подключаемый подтя- гивающий резистор и может служить ис- точником прерывания при изменении входного уровня AN1 A - Вход 1-го канала АЦП CIN- A - Отрицательный вход компаратора VREF A - Внешнее опорное напряжение ICSPCLK ST - Вход тактирования при последователь- ном программировании 87
Микроконтроллеры Microchip9 rfPIC™ Номер вывода и его функции Тип буфера Описание вход выход 19 GP0 TTL CMOS Порт ввода/вывода общего назначения. Имеет программно подключаемый подтя- гивающий резистор и может служить ис- точником прерывания при изменении входного уровня AN0 А — Вход 0-го канала АЦП CIN+ А — Положительный вход компаратора ICSPDAT TTL CMOS Вход/выход данных при последователь- ном программировании 20 Vss — - Общий провод (земля) процессорной части Процессорная часть и периферийные модули Для микроконтроллера rfPIC12F675 (рис. 2.4) базовым является микроконтроллер PIC12F675. Кроме того, аналогичная процессор- ная часть используется и в микроконтроллере PIC12F629, но он не имеет четырех 10-разрядных каналов АЦП, которыми оснащены микроконтроллеры PIC12F675 и rfPICl2F675. Читатели, знакомые с микроконтроллерами PIC12F629 и PIC12F675, могут приступить к работе после краткого ознакомления с материалом этой главы, об- ратив внимание лишь на основные отличия. Набор команд процессора состоит из 35 инструкций, все они, кроме инструкций ветвления, выполняются за один тактовый цикл. Поддерживается аппаратный стек глубиной в 8 уровней, внешние прерывания, прямая, косвенная и относительная адресация памяти данных и команд. Разработчик может использовать различные источники тактовой частоты: - высокоточный внутренний тактовый генератор с частотой 4 МГц, калибруемый на заводе с точностью ±1%; - собственный генератор с частотой до 20 МГц, на основе внеш- него кварцевого резонатора или керамического резонатора; - тактирование от независимого генератора с частотой до 20 МГц; - собственный внешний RC-генератор с частотой до 4 МГц; - собственный генератор на основе экономичного кварцевого резонатора 4 МГц; 88
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Рис. 2.4. Внутренняя структура rfPIC12F675 - независимый внешний тактовый генератор. Основные параметры встроенной памяти следующие: FLASH-память команд - 1024 слов разрядностью 14 бит; EEPROM-128 байт; SRAM (Special RAM, специальные регистры и ячейки ОЗУ для пользовательских переменных) - 64 байта; Количество циклов перезаписи FLASH - не менее 100 000; Количество циклов перезаписи EEPROM - не менее 1 000 000. Время хранения данных EEPROM, FLASH - более 40 лет. Микроконтроллер имеет 6 линий ввода-вывода, для каждой из которых направление передачи настраивается индивидуально. Эти выводы снабжены встроенными подтягивающими резисторами, по 89
Микроконтроллеры Microchip® rfPIC™ изменению состояния любого из выводов может быть сформирова- но внешнее прерывание. Мощность выходных каскадов позволяет подключать светодиоды напрямую, без промежуточных буферов. В состав периферии входит аналоговый компаратор, для которо- го при помощи внешних цепей можно задавать 16 различных опор- ных напряжений. Кроме компаратора, как уже говорилось выше, имеются четыре канала АЦП разрядностью 10 бит. Временные интервалы и/или подсчет импульсов осуществляют- ся при помощи двух таймеров. Таймер TimerO имеет разрядность 8 бит и может подключаться через программируемый предделитель разрядностью также 8 бит. Таймер Timed имеет разрядность 16 бит, но его предделитель имеет разрядность 3 бита. Время выхода из режима SLEEP уменьшено и составляет 5 мкс при типовом напряжении питания 3 В. Организация памяти Микроконтроллер rfPIC12F675 имеет 13-разрядный счетчик па- мяти программ, позволяющий адресовать до 8К 14-разрядных ко- манд. Но физически доступны только первые 1К команд (адреса OOOOh - 03FFh). При обращении к адресам, лежащим вне этого адресного про- странства, старшие разряды адреса игнорируются и происходит обращение к первым 1К действительного адресного пространства. Вектор сброса имеет адрес OOOOh, вектор прерывания - 0004h. Карта памяти команд показана на рис. 2.5. Память данных разделена на два банка, в каждом из которых содержатся регистры общего назначения (иначе говоря, ячейки памяти ОЗУ) и специальные функциональные регистры. Специ- альные регистры занимают первые 32 адреса в каждом банке. Адреса в диапазоне 20h - 5Fh отведены под ячейки ОЗУ и зер- кально доступны из любого банка. Например, обращение к ячейке с адресом AOh, расположенной в Банке 1, полностью эквивалент- но обращению к ячейке 20h из Банка 0. Ячейки, лежащие вне раз- решенного пространства, не существуют. При чтении из несуще- ствующих ячеек всегда возвращается значение «0». Карта памяти данных показана на рис. 2.6. Выбор нужного банка осуществляется при помощи пятого бита RP0 специального регистра STATUS: RP0=0, выбран Банк 0, RP0=1, выбран Банк 1. 90
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Рис. 2.5. Карта памяти команд и стек rfPIC12F675 Как предупреждает изготовитель, биты 6 (RP1) и 7 (IRP) заре- зервированы и их всегда следует оставлять в состоянии «О». Регистры общего назначения представляют собой статическое ОЗУ в виде 64 восьмиразрядных ячеек. Каждый регистр доступен непосредственно или косвенно, с применением специального реги- стра FSR. Использование этого регистра будет описано несколько позже. Специальные регистры также представляют собой статическое ОЗУ и предназначены для прямого управления процессором и пе- риферией. Поэтому специальные регистры можно условно разде- лить на два набора: «ядро» и «периферия». Сначала мы рассмот- рим регистры, управляющие процессором. Регистры, управляющие периферийными модулями, будут описаны при рассмотрении соот- ветствующих модулей. 91
Микроконтроллеры Microchip9 rfPIC™ Адрес ячейки Адрес ячейки Коев адрес!1) 00h Коев адрес!1) 80h TMRO 01h OPTION_REG 81 h PCL 02h PCL 82h STATUS 03h STATUS 83h FSR 04h FSR 84h GPIO 05h TRISIO 85h 06h 86h 07h 87h 08h 88h 09h 89h PCLATH OAh PCLATH 8Ah INTCON OBh INTCON 8Bh PIR1 OCh PIE1 8Ch ODh 8Dh TMR1L OEh PCON 8Eh TMR1H OFh 8Fh T1CON 10h OSCCAL 90h 11h 91 h 12h 92h 13h 93h 14h 94h 15h WPU 95h 16h IOC 96h 17h 97h 18h 98h CMCON 19h VRCON 99h 1Ah EEDATA 9Ah 1Bh EEADR 9Bh 1Ch EECON1 9Ch 1Dh EECON2<1> 9Dh ADRESH 1Eh ADRESL 9Eh ADCONO 1Fh ANSEL 9Fh 20h AOh Регистры Зеркально (ячейки) адресам общего 20h - 5Fh применения 64 байта 5Fh DFh 60h EOh 7Fh FFh Банк 0 Банк 1 В Недоступная область памяти, читается, как "О" 1* Не является физическим регистром. Рис. 2.6. Карта памяти данных rfPIC12F675 92
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Служебная область (область идентификаторов) Четыре ячейки памяти по адресам 2000h-2003h предназначены для хранения пользователем служебных данных, таких как кон- трольная сумма программного кода, уникальный серийный номер, номер товарной партии и т.п. Эти ячейки недоступны в штатном режиме, при исполнении программы. Получить доступ к ним можно только при помощи программатора. Пользователю доступны только младшие /разрядов каждой ячейки. Специальные регистры Специальные регистры представляют собой статическое ОЗУ, в котором некоторые биты устанавливаются по умолчанию при сбро- се (табл. 2.5). Описание некоторых регистров мы будем давать в сочетании с описанием периферийных модулей, которыми эти ре- гистры управляют. Регистр STATUS Регистр STATUS хранит арифметические флаги АЛУ, информа- цию о сбросе и бит выбора банка памяти данных. Как и большинст- во регистров, STATUS может являться регистром назначения для любой операции. Но если над регистром STATUS выполняют опе- рацию, которая может изменить состояние битов Z, DC и С, то за- пись в эти три бита блокируется. Их состояние изменяется только аппаратно, в зависимости от состояния АЛУ. Более того, биты ТО и PD также недоступны для записи. Следовательно, результат опе- рации с регистром STATUS в качестве приемника может оказаться совсем не таким, как ожидалось. Например, команда CLRF STATUS (очистить полностью регистр STATUS) на самом деле очистит только три старших бита и установит в 1 бит Z. Следовательно, к регистру STATUS без каких-либо опасений можно применять толь- ко команды BCF, BSF, SWAPF и MOVWF, потому что они не изме- няют никакие биты состояния. Рассмотрим подробно назначение битов регистра STATUS: bit7 IRP - зарезервирован и всегда должен быть установлен в «О» bit6 RP1 - зарезервирован и всегда должен быть установлен в «О» bit5 RPO - бит выбора банка памяти данных (при прямой адре- сации) 93
co Таблица 2.5. Специальные регистры Адрес Обозначе- ние Bit7 Bit6 Bit 5 Bit 4 виз Bit 2 Bit 1 BitO Значение при сбро- се по пи- танию Банк 0 00h INDF Использует содержимое FSR для обращения к памяти данных (не является физическим регистром) 0000 0000 01h TMRO Регистр модуля TMRO хххх хххх 02h PCL Младшие 8 бит программного счетчика 0000 0000 03h STATUS IRP<1) RP1<1) RPO TO PD Z DC C 0001 1ххх 04h FSR Указатель адреса косвенного доступа ХХХХ хххх 05h GPIO - - GPIO5 GPIO4 GPIO3 GPIO2 GPIO1 GPIOO - - XX хххх 06h - Не используется - 07h - Не используется — 08h - Не используется - 09h - Не используется — OAh PCLATH - - - Буфер записи для старших 5 бит программного счетчика ---0 0000 OBh INTCON GIE PEIE TOIE INTE GPIE TOIF INTF GPIF 0000 0000 Микроконтроллеры Microchip9 rfPIC'
Адрес Обозначе- ние Bit7 Bit6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 BitO Значение при сбро- се по пи- танию OCh PIR1 EEIF ADIF - - CMIF - - TMR1IF 00- 0-0 ODh - He используется - OEh TMR1L Временный регистр для младших разрядов 16-разрядного Timerl xxxx xxxx OFh TMR1H Временный регистр для старших разрядов 16-разрядного Timerl xxxx xxxx 10h T1CON - TMR1GE T1CKPS 1 T1CKPS 0 T1OSCE N T1SYNC TMR1CS TMR1O N -ООО 0000 11h — Не используется - 12h - Не используется - 13h - Не используется — 14h - Не используется - 15h - Не используется - 16h - Не используется - 17h - Не используется - 18h - Не используется - 19h CMCON - COUT - CINV CIS СМ2 CM1 CMO -0-0 0000 1Ah - Не используется - Гпава 2. Микроконтроллер-передатчик rfPIC12F67
Адрес Обозначе- ние Bit7 Bit6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 BitO Значение при сбро- се по пи- танию 1Bh — He используется - 1Ch — He используется - 1Dh - He используется - 1Eh ADRESH Старшие 8 бит сдвинутого влево результата АЦП или 2 бита после сдвига вправо хххх хххх 1Fh ADCONO ADFM VCFG - — CHS1 CHSO GO/DON E ADON 00- 0000 Адрес Обозначе- ние Bit7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 BitO Значение при сбро- се по пи- танию Банк 1 80h INDF Использует содержимое FSR для обращения к памяти данных (не является физическим регистром) 0000 0000 81h OP- TION_REG GPPU INTEDG TOCS TOSE PSA PS2 PS1 PSO 1111 1111 82h PCL Младшие значащие разряды счетчика команд 0000 0000 83h STATUS IRP(1) RP1<1) RPO TO PD z DC C 0001 1ххх 84h FSR Указатель адреса косвенного доступа ХХХХ хххх Микроконтроллеры Microchip9 rfPIC'
Адрес Обозначе- ние Bit7 Bit6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 BitO Значение при сбро- се по пи- танию 85h TRISIO — - TRISIO5 TRISIO4 TRISIO3 TRISIO2 TRISIO1 TRISIOO -11 1111 86h — He используется - 87h — He используется - 88h - He используется - 89h - He используется - 8Ah PCLATH - - — Буфер записи для старших 5 бит программного счетчика ---0 0000 8Bh INTCON GIE PEIE TOIE INTE GPIE TOIF INTF GPIF 0000 0000 8Ch PIE1 EEIE ADIE - - CMIE - - TMR1IE 00- 0-0 8Dh - He используется - 8Eh PCON - — - - - - POR BOD Ох 8Fh — He используется - 90h OSCCAL CAL5 CAL4 CAL3 CAL2 CAL1 CALO - - 1000 00- 91h - He используется - 92h — He используется — 93h - He используется — 'лава 2. Микроконтроллер-передатчик rfPIC12F67
Адрес Обозначе- ние Bit7 Bit6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 BitO Значение при сбро- се по пи- танию 94h - He используется — 95h WPU - - WPU5 WPU4 - WPU2 WPU1 WPUO -11 -111 96h IOC - - IOC5 IOC4 IOC3 IOC2 IOC1 IOCO -00 0000 97h - He используется — 98h - He используется - 99h VRCON VREN - VRR - VR3 VR2 VR1 VRO 0-0- 0000 9 Ah EEDATA Рабочий регистр хранения данных для записи в EEPROM 0000 0000 9Bh EEADR - Регистр адреса для записи в EEPROM -ООО 0000 9Ch EECON1 - - - - WRERR WREN WR RD —-хООО 9Dh EECON2 Регистр управления EEPROM. Не является физическим регистром 9Eh ADRESL Старшие 2 бита сдвинутого влево результата АЦП или 8 бит после сдвига вправо хххх хххх 9Fh ANSEL - ADSC2 ADSC1 ADSCO ANS3 ANS2 ANSI ANSO -ООО 1111 Микроконтроллеры Microchip® rfPIC' Обозначения: «-» - не используется, всегда читается, как "О"; «х» - произвольное, заранее не известно; (1) - биты зарезервированы, всегда читаются, как "О".
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 1 = Банк 1 (80h - FFh) О = Банк О (OOh - 7Fh) bit4 ТО - бит тайм-аута сторожевого таймера 1 = после выполнения сброса по включению питания, команд CLRWDT или SLEEP О = означает, что произошло переполнение сторожевого таймера bit3 PD - бит включения питания 1 = после включения питания или команд CLRWDT и SLEEP О = после команды SLEEP bit2 Z - бит нулевого результата 1 = результат арифметической или логической операции равен О О = результат арифметической или логической операции не равен О bit1 DC - бит десятичного пеоеноса/заема (команды ADDWF, ADDLW, SUBLW, SUBWF) Для заема полярность обратная 1 = был перенос из 4-го бита младшего полубайта результата О = переноса не было bitO С - бит пеоеноса/заема (для ADDWF, ADDLW, SUBLW, SUBWF) 1 = был перенос из старшего значащего разряда результата О = не было переноса после применения команд циклического сдвига RRF и RLF в бит С загружается соответственно младший или старший бит регистра-источника. Регистр OPTION_REG В отличие от микроконтроллера rfPICI 20509, в микроконтрол- лере rfPIC12F675 регистр OPTION_REG доступен не только для записи, но и для чтения, и отображается в адресном пространстве как и другие регистры. Регистр содержит управляющие биты для настройки преддели- теля таймера TMRO и сторожевого таймера; выбора активного фронта для прерывания по выводу GP2/INT и счетчика TMRO; 99
Микроконтроллеры Microchip® rfPIC™ включения внутренних подтягивающих резисторов. bit7 GPPU - включение встроенных подтягивающих резисторов на выводах портов 1 = выключены О = включены в соответствии со значениями в индивиду- альных защелках bit6 INTEDG - бит выбора активного фронта сигнала внешнего прерывания 1 = прерывание по нарастанию сигнала О = прерывание по спаду сигнала bit5 TOCS - бит выбора источника тактового сигнала для TMRO 1 = тактовый сигнал со входа GP2/T0CKI О = тактирование по источнику внутренних машинных тактов bit4 TOSE - выбор активного фронта для TMRO на выводе GP2/T0CKI 1 = инкремент по спаду О = инкремент по нарастанию bit3 PSA - бит, управляющий подключением предделителя 1 = предделитель подключен к WDT О = предделитель подключен к модулю TIMERO bit2-0 PS2:PS0 - установка коэффициента деления предделителя в зависимости от подключения Биты для TMR0 для WDT ООО 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 Чтобы получить коэффициент деления 1:1 для TMRO, подклю- чите предделитель к WDT путем установки бита PSA в «1». 100
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Регистр INTCON Регистр INTCON доступен для чтения и записи и содержит раз- личные управляющие биты и флаги, отражающие переполнение счетчика TMRO, изменение уровня на одном из портов или преры- вание по выводу GP2/INT. bit7 GIE - бит глобального запрета прерываний 1 = разрешены все немаскируемые прерывания О = запрещены все прерывания bit6 PEIE - бит разрешения периферийных прерываний 1 = разрешены все немаскированные периферийные прерывания О = запрещены все периферийные прерывания bit5 Т01Е - бит разрешения прерывания по переполнению TMRO 1 = прерывание разрешено 2 = прерывание запрещено bit4 INTE - бит разрешения внешнего прерывания по выводу GP2/INT 1 = прерывание разрешено О = прерывание запрещено bit3 GPIE1 - бит разрешения прерывания по изменению состоя- ния порта 1 = прерывание разрешено О = прерывание запрещено bit2 T0IF2 - флаг-бит события прерывания по переполнению TMRO 1 = регистр TMRO был переполнен (бит обнуляется про- граммно) О = регистр TMRO не переполнялся bit1 INTF - флаг-бит события внешнего прерывания по входу GP2/INT 1 = было прерывание по входу GP2/INT (бит обнуляется программно) О = прерывания по входу GP2/INT не было bitO GPIF - флаг-бит события прерывания по изменению со- 101
Микроконтроллеры Microchip® rfPIC™ стояния порта 1 = было прерывание по изменению состояния на одном из выводов GP5...GP0 (бит обнуляется программно) О = прерывания по изменению состояния портов не было Примечания: 1 Для разрешения прерывания по изменению состояния порта регистр ЮС также должен быть включен. 2 Бит TOIF устанавливается, когда переполняется TIMERO. Поскольку TIMERO не изменяется по сбросу, он должен быть инициализирован перед тем, как будет сброшен бит TOIF. Регистр PIE1 Регистр PIE1 содержит биты, разрешающие прерывания от пе- риферийных модулей. Чтобы прерывание от какого-либо перифе- рийного устройства было возможно, необходимо сначала устано- вить в «1» бит PEIE (INTCON<6>). bit7 EEIE - бит разрешения прерывания по записи в EEPROM 1 = прерывание разрешено О = прерывание запрещено bit6 ADIE - бит разрешения прерывание по завершению работы АЦП 1 = прерывание разрешено О = прерывание запрещено bit5-4 Не применяются, читаются как «О» bit3 CMIE - бит разрешения прерывания по изменению на входе компаратора 1 = прерывание разрешено О = прерывание запрещено bit2-1 Не применяются, читаются как «О» bitO TMR1IE - бит разрешения прерывания по переполнению TMR1 1 = прерывание разрешено О = прерывание запрещено 102
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Регистр PIR1 Регистр PIR1 содержит флаг-биты, информирующие о прерыва- ниях от внутренних периферийных модулей: EEPROM, таймера TMR1, компаратора и АЦП. Внимание! Флаг-биты выставляются при возникновении соот- ветствующего события независимо от того, разрешены ли преры- вания глобальным битом разрешения прерываний GIE (INTCON<7>). Поэтому все флаг-биты должны быть программно обнулены непосредственно перед включением прерываний гло- бальным битом GIE. В противном случае процессор может уйти в непредсказуемое прерывание сразу после установки GIE. bit7 EEIF - флаг-бит события прерывания по событию записи в EEPROM 1 = операция записи завершена (бит обнуляется программно) О = операция не завершена или не начиналась bit6 ADIF - флаг-бит события прерывания по преобразованию в АЦП 1 = операция преобразования завершена (бит обнуляется программно) О = аналого-цифровое преобразование не завершено bit5-4 Не применяются, читаются как «О» bit3 CMIF - флаг-бит по событию изменения состояния компа- ратора 1 = уровень на входе компаратора изменился (бит обнуляется программно) О = уровень на входе компаратора не менялся bit2-1 Не применяются, читаются как «О» bitO TMR1IF - флаг-бит события прерывания по переполнению таймера TMR1 1 = TMR1 был переполнен (бит обнуляется программно) О = переполнения TMR1 не было Регистр PCON Регистр PCON содержит флаг-биты, указывающие, сброс какого типа произошел. Является вспомогательным регистром для распо- 103
Микроконтроллеры Microchip19 rfPIC™ знавания всех возможных вариантов сброса. - Сброс по включению питания (POR). - Сброс по аварийному снижению питающего напряжения (BOD). - Сброс по переполнению сторожевого таймера (WDT). - Внешний сброс через вывод MCLR. bit7-2 Не применяются, читаются как «О» bit11 POR - бит сброса по включению питания («холодный старт») 1 = сброса по включению питания не было О = был сброс по включению питания bitO2 BOD - бит сброса по аварийному снижению питающего напряжения 1 = аварийного снижения питающего напряжения не было О = был сброс по причине снижения питающего напряжения Примечания: 1 Бит должен быть программно установлен в «1» после того, как произошел сброс по включению питания. 2 Бит должен быть программно установлен в «1» после того, как произошел сброс по причине аварийного снижения напряжения пи- тания. Регистр OSCCAL Регистр OSCCAL применяется для калибровки внутреннего ге- нератора с частотой 4 МГц. Он содержит 6 разрядов, применяемых для точной подстройки частоты к значению 4 МГц. bit7-2 CAL5:CAL0 - разряды, влияющие на частоту гене- ратора 111111 = максимальная частота 100000 = средняя частота 000000 = минимальная частота bit1 -0 Не применяются, читаются как «0» Регистры PCL И PCLATH Счетчик команд процессора (PC) имеет разрядность 13 бит. Ис- точником младшего байта является регистр PCL, доступный для чтения и записи. Над ним можно выполнять арифметические опе- 104
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 рации. Старшие разряды недоступны для прямой записи или чте- ния и берутся из PCLATH. Счетчик команд обнуляется при любом варианте сброса. На рис. 2.7 показаны две возможных ситуации формирования значения счетчика команд. Верхний пример показы- вает, как значение счетчика команд формируется из значений PCLATH и результата арифметической операции над регистром PCL. На нижнем примере показано, как формируется значение PC при выполнении команд CALL или GOTO. Таким образом, имеется возможность выполнять не только без- условный переход по жестко заданному адресу, но и вычисляемый переход как результат операции ADDWF PCL. Вычисляемый пере- ход обычно применяется в подпрограммах табличной перекодиров- ки. Этот метод требует определенной аккуратности при программи- ровании, так как таблица должна целиком помещаться внутри одно- го 256-байтного блока программной памяти. PCH PCL 12 pc |2Z Команда, где —.PCL является __I приемником 8 7 PCLATH<4:0> PCLATH Результат вычислений ALU PCH 12 11 10 PC I I , PCLATH<4: PCL 11 GOTO, CALL PCLATH Разряды команды <10:0> 8 7 О Рис. 2.7. Способы загрузки значений счетчика команд Стек Микроконтроллер rfPIC12F675 имеет 13-разрядный аппаратный стек глубиной 8 уровней. Пространство, в котором хранятся значе- ния стека не относятся ни к памяти данных, ни к памяти команд. Указатель стека недоступен для чтения или записи. Значение счет- чика команд PC заносится в стек только в случаях, когда выполня- ется команда вызова подпрограммы CALL или происходит преры- 105
Микроконтроллеры Microchip® rfPIC™ вание. Значение из стека обратно в PC восстанавливается, когда выполняется одна из команд RETURN, RETLW или RETFIE. Стек работает, как циклический буфер. Это значит, что когда значение PC перенесено в стек восемь раз и все восемь уровней заняты, то девятая запись перепишет первый уровень стека, деся- тая второй уровень и т.д. Внимание] Не существует какого-либо флаг-бита, отражающего факт перегрузки или перевыгрузки стека. Разработчик программы должен самостоятельно позаботиться о корректности использова- ния стека. Кроме того, не существует команд PUSH или POP для работы со стеком. Любое изменение состояния стека является следствием прерывания или выполнения команд CALL, RETURN, RETLW или RETFIE. Регистры INDF И FSR Регистр INDF не является физическим регистром и предназна- чен для косвенного обращения к ячейкам памяти данных (рис. 2.8). В общем случае, к ячейке памяти данных микроконтроллера (реги- стры общего применения) можно обратиться двумя способами: ли- бо напрямую указать в команде адрес этой ячейки, либо сослаться в команде на регистр INDF. Прямая адресация Косвенная адресация RP1<1> RP0 6 О IRP(1) 7 О Ш I I Г I Г I I I □ I П Г! П П Распределение памяти показано на рис 2*6 (1) Биты RP1 и IRP зарезервированы, всегда оставляйте их обнуленными Рис. 2.8. Прямое и косвенное обращение к ячейкам памяти данных 106
Глава 2. Микроконтроллер-передатчик rfPIC12F675 Во втором случае регистр INDF является универсальным «псевдо- нимом» для любой ячейки памяти, а адрес нужной ячейки записывает- ся в физический регистр FSR. Попытка прочитать регистр INDF всегда возвратит «О», а попытка записи в него не будет иметь никакого ре- зультата, но некоторые биты регистра STATUS могут измениться. Физический адрес ячейки, к которой происходит обращение, формируется слиянием разрядов FSR<7:0> и бита IRP (STATUS<7>). В данное время бит IRP зарезервирован под буду- щие применения и его всегда нужно оставлять обнуленным. В дальнейшем он будет применяться для обращения ко второму бан- ку памяти, если объем памяти будет увеличен. Рассмотрим пример простейшего программного кода, назначе- ние которого - обнуление ячеек памяти общего назначения по ад- ресам 20h-2Fh с применением косвенного обращения. movlw 0x20 ;настройка указателя на на- чальный адрес movwf FSR NEXT clrf INDF ;очистка регистра под псев- донимом INDF incf FSR ;инкремент значения указа- теля btfss FSR,4 ;очистка закончена? goto NEXT ;нет, перейти на метку NEXT CONTINUE... ;да, закончена, продолжаем программу В этом примере сначала в указатель FSR записывают началь- ный адрес 20h. Далее дают команду очистки регистра clrf, но вме- сто имени регистра указывают псевдоним INDF. В результате обну- ляется тот регистр общего назначения, адрес которого хранится в FSR. Затем происходит увеличение значения FSR на единицу и проверка, превышен ли заданный предел диапазона адресов. Если нет, то обнуляется следующая ячейка. Порт ввода-вывода GPIO Шесть выводов микроконтроллера доступны для использования в качестве линий ввода/вывода. В зависимости от того, какие пе- риферийные модули включены, в качестве двунаправленных пор- тов общего назначения могут использоваться лишь некоторые из выводов, либо все шесть. Как правило, если периферийный модуль 107
Микроконтроллеры Microchip9 rfPIC™ включен, то ассоциированный с ним вывод уже не может приме- няться в качестве двунаправленного порта общего назначения. Регистры GPIO И TRISIO Регистр GPIO проецируется на 6-разрядный двунаправленный порт, т.е. чтение из этого регистра фактически означает считывание логических уровней на выводах портов, а запись в этот регистр оз- начает запись двоичных значений в выходные защелки портов. На- правление передачи данных определяется содержимым регистра TRISIO. Установка бита регистра TRISIO в «1» настраивает соот- ветствующий вывод GPIO на.ввод, переводя выходной каскад в вы- сокоимпедансное состояние. Сброс бита TRISIO в «О» переводит соответствующий порт GPIO в режим вывода. Исключение состав- ляет порт GP3, который всегда настроен на ввод, а его ассоцииро- ванный бит регистра TRISIO всегда читается, как «1». Ниже приво- дится пример инициализации регистра GPIO. bcf STATUS, RPO ;включен банк 0 clrf GPIO ;обнуление GPIO movlw 07h ;настройка портов GP<2:0> movwf CMCON ;на цифровой ввод-вывод bsf STATUS, RPO ,включен банк 1 clrf ANSEL ;настройка на цифровой ;ввод-вывод movlw OCh •.настраиваем GP<3:2> ;как входы movwf TRISIO ;и GP<5:4,1:0> как выходы Здесь необходимо пояснить, что в данном примере регистры ANSEL и CMCON, которые мы рассмотрим позднее, должны быть настроены таким образом, чтобы сконфигурировать аналого- цифровые линии именно как цифровые входы. В режиме аналого- вых входов чтение этих линий всегда будет возвращать «О». Все операции записи в порт выполняются по схеме чтение- модификация-запись. Иначе говоря, при записи в порт сначала про- исходит считывание данных с выводов, затем их модификация и запись результата в выходную защелку. Почему это происходит именно так, зачем нужно сначала считывать уровни? Такой алго- ритм позволяет выполнять арифметические операции над выстав- ленными ранее значениями без необходимости хранить данные в ячейке памяти. Следовательно, экономится как минимум две ко- 108
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 манды программного кода и ячейка памяти. Для скромных возмож- ностей микроконтроллера это очень важно. Например, может по- требоваться инвертировать третий разряд регистра GPIO. Благо- даря алгоритму «чтение-модификация-запись» эта операция будет выполнена одной командой, где регистр GPIO является приемни- ком. Разумеется, если происходит запись константы в регистр, то модификация является пустой операцией. Регистр TRISIO определяет направление передачи данных че- рез вывод микроконтроллера даже если этот вывод включен в аналоговый режим. Разработчик должен быть уверен, что все раз- ряды регистра TRISIO установлены правильно, когда он использует выводы в качестве аналоговых входов. Дополнительные функции выводов Каждый вывод порта в rfPIC12F675 может генерировать преры- вание по изменению входного уровня и каждый вывод порта, кроме GP3, снабжен встроенным подтягивающим резистором. Подтяги- вающий резистор для каждого вывода включается/выключается индивидуально, что определяется состоянием регистра WPU. Рас- пределение разрядов регистра WPU показано ниже: bit7-6 Не применяются, читаются как «О» bit5-4 WPU<5:4> - включение подтягивающих резисторов 1 = резистор подключен О = резистор отключен bit3 Не применяется, читается как «О» bit2-0 WPU<2:0> - включение подтягивающих резисторов 1 = резистор подключен О = резистор отключен Регистр ЮС Каждый вывод, ассоциированный с регистром GPIO, может быть индивидуально настроен в режим генерации прерывания в случае изменения логического уровня на выводе. Управляющие биты реги- стра ЮС включают или выключают функцию прерывания для каж- дого вывода. При сбросе по включению питания функция прерыва- ния отключается. Для обнаружения изменения уровня на выводе текущее значе- 109
Микроконтроллеры Microchip® rfPIC " ние при каждом новом машинном такте сравнивается с предыду- щим, сохраненным в специальной внутренней защелке. При несов- падении значений в регистре INTCON выставляется флаг-бит GPIF. Это прерывание может пробудить микроконтроллер из режима SLEEP. Пользователь может очистить прерывание в подпрограмме об- работки прерывания двумя способами: а) любое чтение или запись в GPIO аннулирует несовпадение значений; б) программный сброс флаг-бита. Если изменение уровня на выводе произошло в момент, когда считывается значение GPIO (начало машинного цикла Q2), то прерывание может и не возникнуть. По этой причине, если гене- рация прерывания по изменению уровня является критически важ- ной, то разработчик должен обеспечить минимальное количество или отсутствие операций чтения/записи в GPIO в режиме ожидания. bit7-6 Не применяются, читаются как «О» bit5-0 10С<5:0> Биты управления разрешением прерыва- ния 1 = прерывание по изменению разрешено О = прерывание изменению запрещено Нельзя забывать, что глобальный бит разрешения прерываний GIE должен быть установлен в «1», чтобы прерывания по измене- нию уровня стали возможны. Описание и структура многофункциональных линий порта ввода-вывода Теперь, когда мы в общих чертах рассмотрели структуру порта- ввода вывода и связанных с ним регистров, опишем подробнее на- значение выводов микроконтроллера, подключенных к порту. Каж- дый вывод GPIO может выполнять несколько различных функций. Здесь мы их только перечислим, а подробное описание соответст- вующих модулей, таких как АЦП, компаратор и т.д. дадим далее в соответствующих разделах. GPO/ANO/CIN+ Структурная схема этого порта изображена на рис. 2.9. 110
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Рис. 2.9. Структурная схема портов ввода-вывода GP0 и GP1 111
Микроконтроллеры Microchip9 rfPIC™ Вывод GPO конфигурируется для одной из следующих функций: - порт ввода/вывода общего назначения; - аналоговый вход для АЦП; - аналоговый вход компаратора. GP1/AN1/CIN-/Vref Структурная схема этого порта изображена на рис. 2.9. Вывод GP1 конфигурируется для одной из следующих функций: - порт ввода/вывода общего назначения; - аналоговый вход для АЦП; - аналоговый вход компаратора; - вход опорного напряжения для АЦП. GP2/AN2/TOCKI/INT/COUT Структурная схема этого порта изображена на рис. 2.10. Вывод GP2 конфигурируется для одной из следующих функций: - порт ввода/вывода общего назначения; - аналоговый вход для АЦП; - вход импульсов для TMR0; - внешнее прерывание по фронту импульса; - цифровой выход компаратора. GP3/MCLR/Vpp Структурная схема этого порта изображена на рис. 2.11. Вывод GP3 конфигурируется для одной из следующих функций: - порт ввода/вывода общего назначения; - вывод сигнала общего сброса. GP4/AN3/T1G/OSC2/CLKOUT Структурная схема этого порта изображена на рис. 2.12. Вывод GP4 конфигурируется для одной из следующих функций: - порт ввода/вывода общего назначения; - аналоговый вход для АЦП; - вход TMR1 Gate; - подключение кварца или керамического резонатора; - выход тактовой частоты. GP5/T1CKI/OSC1/CLKIN Структурная схема этого порта изображена на рис. 2.13. Выво/ GP5 конфигурируется для одной из следующих функций: - порт ввода/вывода общего назначения; - вход импульсов для TMR1; - подключение кварца или керамического резонатора; - вход внешней тактовой частоты. 112
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Шина Режим Рис. 2.10. Структурная схема порта ввода-вывода GP2 113
Микроконтроллеры Microchip9 rfPIC™ Рис. 2.11. Структурная схема порта ввода-вывода GP3 Завершая рассмотрение портов ввода-вывода, сведем в табл. 2.6 перечень регистров, ассоциированных с модулем портов. Таблица 2.6 Перечень регистров, ассоциированных с портами ввода-вывода Адрес Название bit7 bit6 bit5 bit4 05h GPIO —. GP5 GP4 0Bh/8Bh INTCON GIE PEIE TOIE INTE 19h CMCON — COUT — CINV 81 h OPTION.REG GPPU INTEDG TOCS TOSE 85h TRISIO — TRISIO5 TRISIO4 95h WPU — — , WPU5 WPU4 96h IOC — — IOC5 IOC4 9Fh ANSEL — ADCS2 ADCSI ADCSQ 114
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Режим (1) Режимы CLK XT HS. LP, LPTMR1 и “CLKOUT включен" (2) Совместно с опцией CLKOUT Рис. 2.12. Структурная схема порта ввода-вывода GP4 115
Микроконтроллеры Microchip® rfPIC™ (1) Генератор типа LP для Timerl включен (2) Если используется Timerl с генератором типа LP. то триггер Шмитта обходится Рис. 2.13. Структурная схема порта ввода-вывода GP5 116
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Продолжение таблицы 2.6 bit3 bit2 bit1 bitO Значение при сбро- се по питанию Значение при дру- гих вари- антах сброса GP3 GP2 GP1 GPO -хх хххх —UU UUUU GPIE TOIF INTF GPIF 0000 0000 0000 0000 CIS СМ2 CM1 CMO -0-0 0000 -0-0 0000 PSA su: PS2 PS1 PSO 1111 1111 1111 1111 TRISIO3 TRISIO2 TRISIO1 TRISIOO -11 1111 -11 1111 — WPU2 WPU1 WPUO -11 1111 -11 1111 IOC3 IOC2 IOC1 ЮС0 -00 0000 -00 0000 ANS3 ANS2 ANSI ANSO -000 1111 -000 1111 Обозначения: х = неопределенное, и = не изменяется, - = не применяется, читается как «О». Выделенные заливкой биты не влияют на работу портов. Модуль TIMERO Таймер/счетчик TIMERO имеет следующие функциональные параметры: - 8-разрядный счетчик; - доступен для чтения и записи; - 8-разрядный программно настраиваемый предделитель; - выбор внешнего или внутреннего тактирования; - генерация прерывания при переполнении с FFh в 00h; - выбор фронта внешних тактирующих импульсов. Структурная схема модуля TIMERO совместно с предделителем и сторожевым таймером показана на рис. 2.14. Модуль TIMERO может работать как в режиме таймера, так и в режиме счетчика. Режим таймера устанавливается путем сброса бита TOCS (OPTION_REG<5>). В этом режиме значение регистра TMRO инкрементируется с каждым машинным циклом (без учета предделителя). Если, в соответствии с кодом программы, происхо- дит запись начального значения в TMRO, то инкремент значения запрещается для двух последующих тактовых циклов. Записывая заранее подобранные значения в TMRO, можно точно задать ин- тервал от момента записи, до момента, когда возникнет прерыва- ние по переполнению TMRO. Таким способом решаются самые 117
Микроконтроллеры Microchip9 rfPIC™ Примечание: TOSE, TOCS, PSA, PS0-PS2 являются битами регистра OPTION_REG Рис. 2.14. Структурная схема модуля TIMER0 разнообразные задачи взаимодействия микроконтроллера с внеш- ними устройствами или событиями. Режим счетчика включается установкой в «1» бита TOCS (OPTION_REG<5>). В этом режиме значение TMRO инкрементиру- ется по каждому нарастанию или спаду внешних импульсов на вы- воде (без учета предделителя). Рабочий фронт, по которому проис- ходит инкремент, определяется контрольным битом T0SE (OPTION_REG<4>). Сброс этого бита включает режим инкремента по нарастанию. Прерывание, генерируемое модулем TIMER0 Прерывание генерируется в момент, когда счетчик модуля, про- граммно доступный, как регистр TMRO, переполняется и происхо- дит смена значения с FFh на 00h. При этом устанавливается флаг- бит TOIF (INTCON<2>). Прерывание можно маскировать (запре- тить), обнулив бит TOIE (INTCON<5>). Бит T0IF должен быть про- граммно сброшен до того, как прерывания вновь будут разрешены. В противном случае сразу после разрешения прерывания процес- сор вновь уйдет в прерывание, что может привести к зацикливанию и переполнению стека. Прерывание от TIMERO не может вывести микроконтроллер из режима SLEEP, так как в этом режиме модуль отключен. 118
Глава 2. Микроконтроллер-передатчик rfPIC12F675 Предварительный делитель В состав периферийных модулей входит 8-разрядный програм- мируемый счетчик. Он может быть подключен в качестве предвари- тельного делителя частоты либо ко входу модуля TIMER0, либо ко входу сторожевого таймера WDT. Подключение предделителя определяется программно при по- мощи управляющего разряда PSA (OPTION_REG<3>). Сброс бита PSA подключает предделитель ко входу модуля TIMER0. Направ- ление подключения может быть изменено программно, «на лету». Внимание! Для предотвращения самопроизвольного сброса процессора при смене направления подключения необходимо вы- полнять строго заданную последовательность команд, рекомен- дованную изготовителем. Последовательность команд при переключении предделителя с TIMER0 на WDT: bcf STATUS, RPO включение Банка 0 clrwdt ;очистка WDT clrf TMRO ;очистка TMRO и предделителя bsf STATUS, RPO включение Банка 1 movlw Ь'ООЮИИ' ;эти три команды необходимы, если movwf OPTION_REG ;желаемыми значениями разрядов clrwdt ;PS2:PS0 является ООО или 001 movlw b'00101xxx‘ установка желаемого коэффициента movwf OPTION_REG ;деления «ххх» предделителя bcf STATUS, RPO включение Банка 0 Последовательность команд при переключении предделителя с WDT на TIMER0: clrwdt ;очистка WDT и предделителя bsf STATUS, RPO •.включение Банка 1 movlw b'xxxxOxxx' ;выбор TIMER0, задание коэффи- циента movwf OPTION_REG ;деления и источника тактирования bcf STATUS, RPO •.включение Банка 0 Внимание! Эту последовательность команд необходимо вы- полнять всегда, даже если сторожевой таймер отключен. Коэффициент деления задают программно при помощи управляю- щих разрядов PS2:PS0 (OPTION_REG<2:0>). Таблица соответствия коэффициента деления значению разрядов PS2:PS0 приведена в опи- 119
Микроконтроллеры Microchip9 rfPIC™ сании регистра OPTION_REG. Предделитель недоступен для чтения или записи. Когда предделитель подключен к модулю TIMER0, то все операции записи в регистр TMRO обнуляют счетчик предделителя (ра- зумеется, коэффициент деления не сбрасывается). Когда преддели- тель подключен к сторожевому таймеру, то он обнуляется одновре- менно со сбросом сторожевого таймера по команде CLRWDT. Если предделитель не используется, это означает, что входные импульсы проходят напрямую со входа предделителя на его выход, и далее на вход модуля TIMER0. Синхронизация по фазе между входными импульсами и внутренними тактовыми импульсами дос- тигается путем определения уровня входного импульса по тактам Q2 и Q4 внутренних тактовых импульсов. Таким образом, необхо- димо, чтобы входные импульсы имели длительность высокого, а также низкого уровня не менее 2TOsc плюс 20 нс задержки во внут- ренних RC цепях. Более подробно этот вопрос рассмотрен в [7, 8]. Ниже приведена сводная табл. 2.7, в которой приведен перечень регистров, ассоциированных с модулем TIMER0. Таблица 2.7 Перечень регистров, ассоциированных с модулем TIMER0 Адрес Название bit7 | | bite I | bits I bit4 01h TMRO Регистр модуля TIMERO 0Bh/8Bh INTCON GIE PEIE TOIE INTE 81h OPTION_REG GPPU IMTEDG TOCS TOSE bit3 bit2 bit1 bitO Значение при сбро- се по питанию Значение при дру- гих вари- антах сброса Регистр модуля TIME RO хххх хххх uuuu uuuu GPIE TOIF INTF GPIF 0000 0000 0000 0000 PSA PS2 PS1 PSO 1111 1111 1111 1111 Обозначения: х = неопределенное, и = не изменяется, - = не применя- ется, читается как «0». Выделенные заливкой биты не влияют на работу портов. Модуль TIMER1 В состав периферийных модулей rfPIC12F675 входит 16- разрядный таймер-счетчик TIMER1. На рис. 2.15 показана его структурная схема, включающая изображение дополнительных мо- 120
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 дулей, имеющих отношение к работе TIMER1. Модуль имеет сле- дующие опции: - 16-разрядный счетчик (TMR1H:TMR1L); - доступен для записи; - выбор внутреннего или внешнего тактирования; - синхронная или асинхронная работа; - прерывание по переполнению с FFFFh на OOOOh; - выход из SLEEP по переполнению (в асинхронном режиме); - опциональный внешний вход разрешения T1G; - опциональный LP-генератор; Рис. 2.15. Структурная схема модуля TIMER1 Работой модуля управляет специальный регистр T1CON, кото- рый включает/выключает модуль и определяет его параметры. Регистр T1CON bit7 Не применяется, читается как «О» bit6 TMR1GE - бит разрешения строба если TMR1ON = 0: этот бит игнорируется если TMR1ON = 1: 1 = модуль включен, только если на T1G низкий уровень 0 = модуль включен всегда 121
Микроконтроллеры Microchip® rfPIC*" bit5-4 T1CKPS1:T1CKPS0-биты выбора коэффициента входного делителя 11= коэффициент деления 1:8 10 = коэффициент деления 1:4 01 = коэффициент деления 1:2 00 = коэффициент деления 1:1 bit3 T1OSCEN - бит включения экономичного (LP) генератора если активен режим «INTOSC без CLKQUT» : 1 = экономичный генератор включен для тактирования TIMER1 0 = экономичный генератор выключен в иных случаях этот бит игнорируется bit2 Т1 SYNC - управляющий бит синхронизации внешних импульсов если TMR1CS = 1: 1 = вход внешних импульсов не синхронизируется 0 = вход внешних импульсов синхронизируется если TMR1CS = 0: бит игнорируется, TIMER1 использует внутреннее тактирование bit1 TMR1CS - бит выбора источника тактовых импульсов 1 = внешние импульсы с выводов T1OSO/T1CKI (по нарастанию) 0 = Внутреннее тактирование (FOsc/4) bitO TWIR1ON - бит включения модуля 1 = включение TIMER1 0 = останов TIMER1 Модуль TIMER1 может работать в одном из трех режимов: 16-разрядный таймер с предделителем; 16-разрядный синхронный счетчик; 16-разрядный асинхронный счетчик. В режиме таймера TIMER1 инкрементируется с каждым команд- ным циклом (без учета предделителя). В режиме счетчика TIMER1 122
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 инкрементируется по нарастающему фронту внешних импульсов, поступающих на вывод T1CKI (рис. 2.16). Кроме того, внешние им- пульсы счетчика могут быть синхронизированы с внутренними так- товыми импульсами микроконтроллера или поступать асинхронно. Как в режиме таймера, так и в режиме счетчика поступление импульсов на счетчик может запрещаться/разрешаться при помощи входа T1G. Если используется внешний источник тактовой частоты (и мик- роконтроллер использует INTOSC отдельно, без CLKOUT), то TIMER1 может использовать экономичный генератор LP в качестве источника тактовых импульсов. T1CKI = 1 TMR1 включен Т1СК1 = 0 TMR1 включен t f I t Примечания 1 Стрелки показывают момент инкремента счетчика 2 В режиме счетчика, для начала счета по нарастанию, перед первым нарастающим фронтом должен быть сначала зафиксирован слад уровня Рис. 2.16. Фронты, по которым происходит инкремент TIMER1 Прерывание от TIMER1 Пара регистров TMR1Н и TMR1L, ассоциированных с модулем TIMER1, после отсчета до значения FFFFh по следующему импуль- су переполняется и переходит в состояние OOOOh. В этот момент устанавливается флаг-бит прерывания PIR1<0>. Чтобы разрешить прерывание по переполнению, необходимо установить в «1» сле- дующие биты: - бит разрешения прерывания от TIMER1 PIE1 <0>; - бит PEIE (INTCON<6>); - бит GIE (INTCON<7>). Внимание! В подпрограмме обработки прерывания необходи- мо не только сбросить флаг TMR1 IF, но и обнулить пару реги- стров TMR1H:TMR1L до того, как произойдет выход из подпро- граммы. В противном случае возможно зацикливание по сигналу прерывания и переполнение стека. 123
Микроконтроллеры Microchip9 rfPIC™ Предделитель модуля TIMER1 Применяемый в модуле TIMER1 предделитель имеет четыре значения коэффициента деления 1, 2, 4 и 8 для входных импуль- сов. Биты регистра Т1 CON<5:4> управляют счетчиком предделите- ля, как указано выше в описании регистра T1CON. Счетчик предде- лителя недоступен для прямой записи или чтения, однако обнуля- ется при записи в регистр TMR1Н или TMR1L. TIMER1 в режиме асинхронного счетчика Входные тактовые импульсы не будут синхронизироваться с внутренними если установлен управляющий бит T1SYNC (T1CON<2>). Таймер будет продолжать отсчет в режиме SLEEP и может сгенерировать прерывание по переполнению, выводящее процессор из режима SLEEP. Однако к программным фрагментам чтения/записи регистров таймера предъявляются некоторые специальные требования. Считывая данные из регистров TMR1H и TMR1L, пользователь может пребывать в уверенности, что получит правильные данные. Ведь, казалось бы, происходит обращение к простейшим аппарат- ным ресурсам и никаких неоднозначностей не может быть. На са- мом деле, старший и младший регистры считываются по отдельно- сти. В промежутке между считываниями может произойти перепол- нение регистров и их обнуление или перенос из TMR1L в TMR1H. Специалисты компании Microchip в общем руководстве по при- менению [8] приводят примеры того, как следует осуществлять чте- ние и запись содержимого регистров TIMER1 при работе в асин- хронном режиме. Чтение в асинхронном режиме ; Предварительно запрещаем все прерывания movf TMR1H, W ; Читаем старший байт movwf TMPH ; Сохраняем в ячейке памяти movf TMR1L, W ; Читаем младший байт movwf TMPL ; Сохраняем в ячейке памяти movf TMR1H, W ; Снова читаем старший байт subwf TMPH, W ; Вычитаем первое значение ; из второго btfsc STATUS,Z ; Результат = 0? goto NEXT ; Да, TMR1Н прочитан ;правильно,переход 124
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 ; к выполнению программы ; пользователя ; Если результат не равен 0, значит было переполнение в момент ;чтения. ; Снова читаем младший и старший байты, теперь мы получим ; правильное значение. movf TMR1H, W ; Читаем старший байт movwf ТМРН ; Сохраняем в ячейке памяти movf TMR1L, W ; Читаем младший байт movwf TMPL ; Сохраняем в ячейке памяти ; Далее разрешаем прерывания (если необходимо) NEXT .... ; Продолжение программы ; пользователя Анализируя пример, нетрудно заметить, что корректность ре- зультата считывания достигается простым способом. Сначала счи- тываются старший и младший байты. Затем старший байт считы- вается снова и его значение сравнивается с результатом предыду- щего считывания. Если они совпали, то в момент считывания пере- полнение счетчика или перенос из младшего байта (TMR1L) не происходили. В противном случае данные из младшего и старшего регистров незамедлительно считываются снова и считаются заве- домо корректными, потому что после переполнения, за время про- верки, регистр заведомо не успел бы переполниться вновь. Запись в асинхронном режиме ; Предварительно запрещаем все прерывания clrf TMR1L ; Очищаем младший регистр movlw HLBYTE ; чтобы избежать переноса в TMR1Н ; в процессе записи ; Готовим значение для записи в movwf TMR1H, F ;TMR1H ; Записываем значение movlw LO_BYTE ; Готовим значение для записи в movwf TMR1H, F ;TMR1L ; Записываем значение ; Далее разрешаем прерывания (если необходимо) NEXT .... ; Продолжение программы пользо- ; вателя 125
Микроконтроллеры Microchip9 rfPIC7" Запись в асинхронном режиме осуществляется проще, без ка- ких-либо проверок. Особенность процесса состоит в том, что пред- варительно обнуляется младший регистр TMR1L. Это необходимо для того, чтобы в процессе записи из него не произошел перенос в старший регистр TMR1H и не «испортил» значение в старшем ре- гистре. Тактовый генератор модуля TIMER1 Внешний кварцевый резонатор подключается между выводами OSC1 (вход) и OSC2 (выход). Кварцевый генератор включается ус- тановкой управляющего бита T1OSCEN (T1CON<3>). Этот генера- тор имеет пониженное энергопотребление и рабочую частоту до 37 кГц. Он продолжает работать в режиме SLEEP. В качестве резона- тора чаще всего применяется стандартный часовой кварц. Описы- ваемый генератор одновременно является экономичным (LP) гене- ратором процессора. Поэтому модуль TIMER1 может использовать этот генератор только тогда, когда процессор тактируется от внут- реннего тактового генератора. Пользователь должен учитывать, что LP-генератор после подачи питания требует время для «разгона», т.е. выхода в рабочий режим. Прежде чем начинать использование таймера TIMER1, необходимо давать небольшую программную за- держку от момента установки бита T1OSCEN. Работа модуля TIMER1 в режиме SLEEP TIMER1 может работать в режиме SLEEP только если установ- лен режим асинхронного счетчика. В этом режиме для инкременти- рования счетчика может использоваться собственный кварцевый генератор или независимый внешний источник импульсов. Чтобы использовать TIMER1 для вывода процессора из режима SLEEP, необходимо проделать следующие операции: - включить TIMER1 (T1CON<0>); - установить бит TMR1 IE (PIE1 <0>); - установить бит PEIE (INTCON<6>). Процессор будет выведен из SLEEP по переполнению счетчика. Если кроме вышеперечисленных битов будет установлен бит GIE (INTCON<7>), то процессор выйдет из SLEEP и сразу уйдет в пре- рывание по переполнению. Перечень регистров, ассоциированных с модулем TIMER1 при- веден в табл. 2.8. 126
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Таблица 2.8 Перечень регистров, ассоциированных с модулем TIMER1 Адрес Название bit7 bite bit5 bit4 0Bh/8Bh INTCON GIE PEIE TO I E INTE OCh PIRI EEIF ADIF OEh TMR1L Младший значащий байт таймера/счетчика OFh TMR1H Старший значащий байт таймера/счетчика 10h T1CON г - TMR1GE T1CKPS1 T1CKPS0 8Ch PIE1 'ЕЕ1Е'Г; ADIE -‘'.А - -Т bit3 bit2 bit1 bitO Значение при сбро- се по питанию Значение при дру- гих вари- антах сброса GPIE. toiF INTF ; ; gpif :: 0000 0000 0000 0000 CMIF — .. - . TMR1IF 00-0 -00 00-0 -00 Младший значащий байт таймера/счетчика хххх хххх uuuu uuuu Старший значащий байт таймера/счетчика хххх хххх uuuu uuuu T1OSCEN T1SYNC TMR1CS TMR10N -000 0000 -uuu uuuu — г, -J * ( 7“ ~ ‘ TMR1E 00-0 -0 00-0 -0 Обозначения: х = неопределенное, и = не изменяется, - = не применяется, читается как «О». Выделенные заливкой биты не влияют на работу портов. Модуль компаратора Микроконтроллеры rfPIC12F675 имеют один встроенный анало- говый компаратор. Вход компаратора может быть подключен либо к выводу GP0, либо к выводу GP1. Также ко входу компаратора мо- жет быть приложено внутреннее опорное напряжение. Вывод GP2 может быть сконфигурирован, как выход компаратора. Работой компаратора управляет специальный регистр CMCON. Ниже пока- зано назначение его разрядов. 127
Микроконтроллеры Microchip9 rfPIC”“ Регистр управления компаратором CMCON bit7 Не применяется, читается как «О» bit6 COUT - выходное значение компаратора если CINV = 0: 1 = V|N+ > V|N- 0 = V|N+ < V)N_ если CINV = 1: 1 = V|N+ < V|N- 0 = V|N+ > V|N- bit5 He применяется, читается как «0» bit4 CINV - бит включения инверсии компаратора 1 = выход инвертируется 0 = выход не инвертируется bit3 CIS - бит переключения входа компаратора когда СМ2:СМ0 = 110 или 101: 1 = V|N_ подключен к CIN+ 0 = VtN_ подключен к CIN- bit2-0 СМ2:СМ0 - биты управления режимом компаратора использование этих разрядов проиллюстрировано рис. 2.18 Встроенный компаратор работает по обычному принципу, оди- наковому для всех простейших компараторов. Схематически это проиллюстрировано на рис. 2.17. Если напряжение на аналоговом входе V|N+ меньше, чем на аналоговом входе VIN_, то на выходе компаратора присутствует уровень логического нуля. И наоборот, если VtN+ > V|N_, то на выходе компаратора присутствует уровень логической единицы. Полярность выхода компаратора может быть инвертирована ус- тановкой бита CINV (CMCON<4>). Сброс этого бита отменяет ин- версию. Перед использованием CIN+ и CIN- в качестве аналоговых вхо- дов предварительно должны быть настроены соответствующие би- ты регистра CMCON. В табл. 2.9 приведены все возможные сочетания входных и вы- ходных уровней на выводах компаратора. 128
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Примечание, бит CINV (CMCON<4>) сброшен Рис. 2.17. Принцип работы встроенного компаратора Таблица 2.9 Зависимость выходных и входных уровней компаратора Уровни на входах CINV GOUT V|N- > V|N+ 0 0 V|N- < V|N+ 0 1 V|N- > V|N+ 1 1 V|N- < V|N+ 1 0 Закрашенные области на диаграмме выходного сигнала компа- ратора обозначают неоднозначность (или «дрожание») фронтов, которая может быть вызвана неоднозначностью скорости нараста- ния входного сигнала и ненормированной составляющей скорости срабатывания самого компаратора. Существует восемь вариантов конфигурации компаратора. Для выбора нужного варианта используются биты СМ2:СМ0 регистра CMCON. На рис. 2.18 показана зависимость режима компаратора от состояния этих битов. Выводы портов GP0:GP2 должны быть сконфигурированы соответствующим образом: GP0 и GP1 - как аналоговые входы, GP2 - как выход компаратора. 129
Микроконтроллеры Microchip9 rfPIC™ Сброс компаратора (низкий ток потребления) СМ2 СМ0= ООО Компаратор отключен (наименьшее потребление) СМ2.СМ0 = ill GP1/CIN- А Откл (читается 0) GP0/CIN+ А GP2/COUT D GP1/CIN- GP0/CIN+ GP2/COUT Выход компаратора не подключен к внешнему выводу СМ2.СМ0 = 010 Компаратор без подключения к внешнему выводу, с внутренним источником опорного напряжения СМ2 СМ0= юо GP1/CIN- GP0/CIN+ GP2/COUT COUT GP1/CIN- GP0/CIN+ GP2/COUT Выход подключен к внешнему выводу, внутренний источник опорного напряжения Переключаемый источник входного сигнала, выход подключен к внешнему выводу СМ2 СМ0= он СМ2 СМ0 = Ю1 GP1/CIN- А GP0/CIN+ D GP2/COUT D GP1/CIN- GP0/CIN+ GP2/COUT Выход подключен к внешнему выводу СМ2-СМ0 = 001 Переключаемый источник входного сигнала, выход не подключен к внешнему выводу СМ2 СМ0 = но GP1/CIN- GP0/CIN+ GP2/COUT GP1/CIN- А GP0/CIN+ А GP2/COUT D А - аналоговый вход, программно этот порт всегда читается, как "0” D - цифровой выход CIS - бит, переключающий входы компаратора (CMCON<3>) Рис. 2.18. Варианты конфигурации встроенного компаратора Внимание! 1. Если режим компаратора изменен, то некоторое время, порядка 2-х машинных циклов, на его выходе может присут- ствовать недостоверное значение. 2. Прерывание от компарато- ра должно быть запрещено на время изменения его режима и ус- тановления достоверного значения на выходе. В противном слу- чае существует вероятность генерации ложного прерывания. Аналоговые входные цепи компаратора Упрощенная схема аналогового входа показана на рис. 2.19. По- скольку в микроконтроллере аналоговые выводы совмещены с 130
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 цифровым выходом, они имеют обратносмещенные диоды, под- ключенные к VDD и VSs- Следовательно, входное напряжение (отно- сительно общего провода) должно находиться в этих пределах. Ес- ли входное напряжение выходит из допустимого диапазона более, чем на 0,6В в любом направлении, то один из диодов оказывается смещенным в прямом направлении и может либо блокировать вы- вод, либо быть пробит. Что касается внешнего источника аналогового сигнала, то реко- мендуется чтобы он имел импеданс не более 10 кОм. Какие-либо внешние компоненты, подключенные к аналоговым входам, такие, как конденсатор или защитный стабилитрон, должны иметь мини- мально возможный ток утечки. VT = Пороговое напряжение Leakage = Ток утечки с вывода в различные цепи Ric = Сопротивление соединительных цепей Rs = Импеданс источника VA = Аналоговое напряжение Рис. 2.19. Упрощенная схема аналогового входа Выходные цепи компаратора Значение на выходе компаратора, COUT, читается через регистр CMCON. Этот бит доступен только для чтения. Если необходимо ис- пользовать выход компаратора во внешних цепях, то он может быть подключен к выводу GP2 в трех из восьми возможных режимов, как показано на рис. 2.18. Выход работает асинхронно по отношению к тактовой частоте, т.е. момент смены состояния выхода зависит только от входного сигнала и никак не синхронизирован с тактовыми импуль- сами. Упрощенная схема выходных цепей показана на рис. 2.20. Когда компаратор находится в режиме соединения с внешним выводом, то бит TRISIO<2> работает для включения/выключения выхода линии GP2. 131
Микроконтроллеры Microchip® rfPIC™ Рис. 2.20. Упрощенная схема выходных цепей компаратора Внимание! 1. При чтении регистра GPIO все выводы, сконфигурирован- ные в режим аналогового ввода, будут читаться как «0». Выво- ды, сконфигурированные в режим цифрового ввода, будут кон- вертировать входные аналоговые уровни в стандартные уровни TTL-логики. 2. Аналоговые уровни, приложенные к выводам, сконфигуриро- ванным на цифровой ввод, могут привести к порче входных бу- феров из-за превышения допустимого втекающего тока. Источник опорного напряжения компаратора Модуль компаратора имеет встроенный источник опорного на- пряжения, который может быть подключен к любому из входов ком- паратора. Внутреннее опорное напряжение применяется в четырех из восьми возможных режимов компаратора. Величину опорного напряжения можно изменять программно при помощи разрядов VR3:VR0 регистра VRCON. Упрощенная схема управляемого ис- точника опорного напряжения показана на рис. 2.21. В общей сложности можно использовать 32 различных опорных напряжения: 16 из верхнего диапазона и 16 из нижнего диапазона. Опорное напряжение рассчитывается по следующим формулам: VRR=1 (нижний диапазон) CVREF = (VR3:VR0/24) х VDD) VRR=0 (нижний диапазон) CVREF = (VDo/4)+(VR3:VR0xVDo/32). В силу конструктивных особенностей модуля невозможно реали- зовать полный диапазон напряжений от Vss до VDD. Кроме того, при флуктуации питающего напряжения, опорное напряжение также будет флуктуировать, хотя и в меньшей степени. 132
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 16 ступеней Рис. 2.21. Упрощенная схема источника опорного напряжения компаратора Важным параметром компаратора является время отклика. Под этим определением понимают время, прошедшее с момента смены опорного напряжения или напряжения сигнала на входе компаратора и до момента достижения на выходе компаратора достоверного ло- гического уровня. Причем при смене опорного напряжения необхо- димо учитывать еще и время установления опорного напряжения, которое будет суммироваться с задержкой в самом компараторе. Регистр управления опорным напряжением VRCON bit7 VREN - бит включения опорного напряжения CVREF 1 = опорное напряжение включено О = опорное напряжение выключено bit6 Не используется. Читается, как «О» bit5 VRR - бит выбора диапазона опорного напряжения 1 = нижний диапазон О = верхний диапазон bit4 Не используется. Читается, как «О» bit3-0 VR3:VR0 - значение 0SVR[3:0]^15, определяющее вели- чину CVREF Если VRR=1: CVREF = (VR3:VR0/24) х VDD Если VRR=0: CVREF = (VDD/4)+(VR3:VR0xVDD/32). Работа компаратора в режиме SLEEP Если компаратор и источник опорного напряжения были включе- ны до вхождения в режим SLEEP, то после вхождения в этот режим 133
Микроконтроллеры Microchip® rfPIC™ они продолжат работать. В результате потребляемый ток будет больше, чем указано в спецификации. Дополнительный ток по- требления складывается из тока, потребляемого компаратором и тока, потребляемого источником опорного напряжения. Для минимизации потребляемого тока в режиме SLEEP реко- мендуется перед вхождением в SLEEP выключать компаратор и источник, устанавливая разряды СМ2:СМ0 = 111 и VRCON<7> = 0. Компаратор следует оставлять включенным, только если требуется возможность выхода из SLEEP по прерыванию от компаратора. По- сле выхода из SLEEP содержимое регистров, управляющих рабо- той компаратора, не изменяется. Состояние компаратора после сброса по RESET и включению питания После сброса по RESET регистры CMCON и VRCON переходят в соответствующие состояния: СМ2:СМ0 = ООО, источник опорного напряжения выключен. Это означает, что соответствующие порты по сбросу включены в режим аналогового входа, источник опорного напряжения отключен и компаратор работает в режиме минималь- ного потребления. Прерывание компаратора Флаг прерывания компаратора CMIF (PIR1 <3>) устанавливается в случае любого изменения логического уровня на выходе компа- ратора. Пользователь должен программно считывать бит состояния выхода компаратора CMCON<6> и сохранять значение в буферной ячейке памяти, чтобы иметь возможность определить, какого рода переход уровня вызвал прерывание. Внимание! 1. В процессе обработки прерывания флаг-бит CMIF должен быть программно сброшен, в противном случае сразу после вы- хода из подпрограммы прерывания будет сгенерировано новое прерывание. 2. Бит CMIF доступен для записи! Если случайно записать в него «1», будет сгенерировано ложное прерывание. Для разрешения прерывания компаратора должны быть уста- новлены биты CMIE (Р1Е1<3>) и PEIE (INTCON<6>). Кроме того, должен быть установлен бит GIE глобального разрешения преры- ваний. В противном случае прерывание от компаратора не про- изойдет. 134
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Прерывание можно сбросить двумя способами: - записью или чтением регистра CMCON; - сбросом флага CMIF. Но нужно иметь в виду, что если состояние компаратора, вы- звавшее прерывание, сохраняется, то после сброса флага CM IF он снова будет выставлен. Чтение регистра CMCON отменяет со- стояние прерывания и позволяет гарантированно сбросить флаг CMIF. Если изменение регистра CMCON и состояния выхода COUT произойдет в момент выполнения операции чтения (начало цикла Q2), то флаг прерывания CMIF может быть не установлен. Перечень регистров, ассоциированных с модулем компаратора приведен в табл. 2.10. Таблица 2.10 Перечень регистров, ассоциированных с модулем компаратора Адрес Название bit7 bit6 bit5 bit4 0Bh/8Bh INTCON GIE PEIE ^/TQie;-> OCh PIR1 • -EEIF^ PjAPIF^' 19h CMCON COUT „ ~ 1 “ ~~ •- CINV 8h PIE1 EE1E • ». «ч-г v Л ' 85h TR1SIO * J TRISIO5 TRISIO4 99h VRCON VREN — VRR — bit3 bit2 bit1 bitO Значение при сбро- се по пи- танию Значение при дру- гих вари- антах сброса GPIE INTF \ 0000 0000 0000 000и CMIF , - 7 — 1 pTtyRiF 00-0 -0 00—0 -0 CIS СМ2 CM1 CMO -0-0 0000 -0-0 0000 CMIE — — TMR1IE 00-0-0 00-0-0 TWSIO3 TRISIO2 TRISIO1 TRISIOO -111111 -11 1111 VR3 VR2 VR1 VRO 0-0-0000 0-0-0000 Обозначения: - = не применяется, читается как «0». Выделенные за- ливкой биты не влияют на работу портов. 135
Микроконтроллеры Microchip® rfPIC™ Модуль АЦП Встроенный аналого-цифровой преобразователь конвертирует аналоговый входной сигнал в 10-разрядное двоичное представле- ние. Микроконтроллер rfPIC12F675 имеет четыре аналоговых вход- ных канала, мультиплексируемых в один АЦП. Результат преобра- зования сохраняется в 10-разрядном выходном регистре ADRES (сокращение от Analog-to-Digital RESult). Структурная схема АЦП приведена на рис. 2.22. GPO/ANO GP1/AN1/VREF GP2/AN2 GP4/AN3 Vdd Рис. 2.22. Структурная схема модуля АЦП Работой модуля АЦП управляют два регистра: ADCONO и ANSEL. Рассмотрим их состав. Регистр управления модулем АЦП ADCONO bit7 ADFM - форматирование результата АЦП (см. рис. 2.23) 1 = смещен вправо О = смещен влево bit6 VCFG - бит выбора источника опорного напряжения 1 = вывод VREF 0 = VDD bit5-4 Не используются. Читаются, как «0». 136
Глава 2. Микроконтроллер-передатчик rfPIC12F675 bit3-2 CHS1 :CHSO - биты выбора аналогового канала 00 = канал AN0 01 = канал AN1 10 = канал AN2 11= канал AN3 bit1 GO/DONE - состояние процесса конвертации 1 = конвертация в процессе исполнения. Установка этого бита начинает процесс конвертации. Бит автоматически сбрасыва- ется, когда конвертация завершена. 0 = конвертация завершена или не начиналась. bitO ADON - бит состояния модуля АЦП 1 = модуль АЦП включен 0 = модуль АЦП отключен и не потребляет ток. Регистр управления аналоговыми каналами ANSEL bit7 Не используется. Читается, как «0» bit6-4 ADCS<2:0> - биты выбора тактовой частоты преобразова- ния 000 = Fosc/2 001 = Fqsc/8 010 = FOSC/32 х11 = Frc (импульсы поступают со специального внутренне- го генератора, частота не более 500 кГц) 100 = FOsc/4 101 =FOSC/16 110 = FOSc/64 bit3-0 ANS3:ANS0 - биты выбора режима входов 1 = вывод работает, как аналоговый вход<1) 0 = вывод работает, как цифровой вход/выход, т.е. подклю- чен к порту или имеет специальное назначение. Примечание!. Настройка вывода в качестве аналогового входа автоматически отключает цифровые входные цепи, подтягивающие рези- сторы и прерывание по изменению состояния. Соответствующий бит TRISIO должен быть установлен в режим «вход» для того, чтобы допус- тить изменение напряжения на выводе под влиянием внешних цепей. Биты ANS3:ANS0 совместно с битами TRISIO определяют ре- жим работы соответствующих выводов микроконтроллера. Уста- 137
Микроконтроллеры Microchip9 rfPIC™ новка битов TRISIO переводит выходные цифровые цепи в высоко- импедансное состояние. Аналогично, установка битов ANS отклю- чает входные цифровые буферы. Внимание! Если на любой вывод, настроенный в качестве цифрового входа, по ошибке будет подан аналоговый сигнал, это может привести к порче входного буфера из-за превышения до- пустимого входного тока. Для работы АЦП требуется задать опорное напряжение. Встро- енный модуль АЦП допускает два варианта опорного напряжения: внутреннее подключение к VDd или внешнее опорное напряжение, подаваемое на вход VREf- Разумеется, в случае использования внешнего опорного напряжения остается только три аналоговых входа. Частота дискретизации АЦП Преобразование аналогового значения в цифровое осуществля- ется под воздействием импульсов дискретизации TAD. Для полного цикла преобразования требуется 11 TAD. Источник импульсов дис- кретизации и его частота зависят от значения битов ADCS2:ADCS0 регистра ANSEL. Внимание! Для корректной работы АЦП необходимо, чтобы период TAD составлял не менее 1,6 мкс. В табл. 2.11 приведен пример расчета нескольких значений TAD для определенных частот. Таблица 2.11 Примеры значений Tad для различных тактовых частот Источник импульсов Тактовая частота микроконтроллера Вариант ADCS2: ADCSO 20 МГц 5 МГц 4 МГц 1,25 МГц 2 Tosc 000 100 нс2 400 нс2 500 нс2 1,6 мкс 4 Tosc 100 200 нс2 800 нс2 1,0 мкс2 3,2 мкс 8 Tosc 001 400 нс2 1,6 мкс 2,0 мкс 6,4 мкс 16 Tosc 101 800 нс2 3,2 мкс 4,0 мкс 12,8 мкс3 32 Tosc 010 1,6 мкс 6,4 мкс 8,0 мкс3 25,6 мкс3 64 Tosc 110 3,2 мкс 12,8 мкс3 16,0 мкс3 51,2 мкс3 собств. RC x11 2-6 мкс1,4 2-6 мкс1,4 2-6 мкс1,4 2-6 мкс1'4 138
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 1 - для собственного RC-генератора типовое значение Tad составляет около 4мкс при напряжении питания Vdd>3 В. 2 - это значение меньше допустимого для периода Tad. 3 - для ускорения преобразования рекомендуется выбрать другой ва- риант частоты тактовых импульсов. 4 - если преобразование должно происходить в режиме SLEEP и так- товая частота микроконтроллера больше 1 МГц, то настоятельно реко- мендуется использовать только встроенный RC-генератор. Начало процесса преобразования Процесс аналого-цифрового преобразования начинается с мо- мента программной установки бита GO/DONE (ADCONO<1 >). Когда преобразование завершено, модуль АЦП выполняет следующие операции: - сбрасывает бит GO/DONE: - устанавливает флаг ADIF (PIR1 <6>); - генерирует прерывание (если необходимо). Если преобразование необходимо прервать, то бит GO/DONE можно сбросить программно. В этом случае значения выходных регистров ADRESH:ADRESL не будут изменены, и в них будет со- держаться результат предыдущей конвертации. После отмены пре- образования необходимо выдержать паузу не менее 2TAd прежде чем начинать новое преобразование. Внимание! В связи с наличием задержки на установление ра- бочего режима бит GO/DONE нельзя устанавливать той же са- мой командой, которая включает модуль АЦП. Необходимы два раздельных обращения к регистру ADCONO с паузой не менее 2TAD между ними. Вывод результата преобразования Результат преобразования может быть представлен в двух ва- риантах: сдвинутый вправо или сдвинутый влево, что схематически показано на рис. 2.23. Формат вывода определяется битом ADFM (ADCONO<7>). Требования к источнику сигнала Аналого-цифровой преобразователь построен по схеме, когда во время преобразования происходит зарядка накопительной емко- сти Chold- 139
Микроконтроллеры Microchip® rfPIC™ ADRESH ADRESL (ADFM = 0) lMSBl I I I LJ LJ I Li^J I I I I I I Bit 7 Bit 0 Bit 7 Bit 0 10-битный результат Читаются, как “0” (ADFM= 1) I I I I I I W~l I I I I I I I lLSBl Bit 7 BitO Bit 7 BitO Читаются, как “0” 10-битный результат Рис. 2.23. Варианты формата вывода результата преобразования Время, необходимое для зарядки накопительного конденсатора, называется временем захвата.Для обеспечения заданной точности преобразования необходимо, чтобы конденсатор Chold имел воз- можность зарядиться до напряжения, равного входному. Условная модель аналогового входа показана на рис. 2.24. Импеданс источ- ника сигнала Rs и импеданс внутреннего дискретизатора Rss непо- средственно влияют на скорость зарядки. Импеданс дискретизато- ра зависит от питающего напряжения. Зависимость также показана на рис. 2.24. Рекомендуется, чтобы импеданс аналогового источника сиг- нала не превышал 10 кОм. Уменьшение импеданса позволяет со- кратить время захвата. После того, как аналоговый вход выбран (сменен), необходимо за- вершить захват/накопление перед началом процесса преобразования. VDD rs'< zf Vt = 0,6B Дискретизатор RIC<1K‘SS Rss- VA) Cpin _L 5 ' Vt = 0,6 В I LEAKAGE '± 500 нА Chold емкость накопителя/ дискретизатора VSS Cpin = входная емкость ут = падение напряжения I LEAKAGE = ток утечки С ВЫВОДЭ НЭ различные внешние цепи RiC = сопротивление соед цепей SS = дискретизатор Chold = емкость накопителя/дискретизатора Vdd. В -----1 I I I I I I 5 6 7 891011 Дискретизатор, кОм Рис. 2.24. Условная модель аналогового входа АЦП 140
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Для расчета минимального времени захвата TACq можно исполь- зовать приведенные ниже равенства. Taco = Тдмр + Тс + TcOFF. где Тдмр= 2 мкс, Тс = Chold (Ric + Rss + Rs) In (1/2047) = 120 пф (1 кОм + + 7 кОм + 10 кОм) ln(0,0004885) = 16,47 мкс, Tcoff = (температура -25’С)(0,05мкс/°С) = = (50°С -25°С)(0,05 мкс/°С) = 1,25 мкс. Таким образом Тдсо = 2 мкс + 16,47 мкс + 1,25 мкс = 19,72 мкс. Опорное напряжение VREF не влияет на время захвата. Конден- сатор Chold не разряжается полностью в промежутках между пре- образованиями. Работа модуля АЦП в режиме SLEEP АЦП может продолжать работу в режиме SLEEP. Для этого тре- буется, чтобы источником импульсов дискретизации был внутрен- ний RC-генератор. Если подключен внутренний RC-генератор, то АЦП выдерживает паузу в один командный цикл перед началом преобразования. Это позволяет процессору успеть уйти в режим SLEEP, устраняя большинство шумов переключения в процессе преобразования. Когда преобразование завершено, бит GO/DONE сбрасывается, а результат преобразования записывается в регист- ры ADRESH:ADRESL. Если разрешено прерывание от АЦП, то про- цессор выходит из режима SLEEP. Если же прерывание запреще- но, то АЦП отключается, однако бит ADON остается установлен- ным. Если источник импульсов дискретизации иной, чем внутренний RC-генератор, то выполнение команды SLEEP приводит к прекра- щению процесса преобразования и отключению модуля АЦП. Но бит ADON остается установленным. Влияние сброса на АЦП Сброс микроконтроллера устанавливает все регистры в соот- ветствующие состояния (см. табл. 2.12). Модуль АЦП отключается и начатый процесс преобразования прекращается. Но содержимое регистров ADRESH:ADRESL после сброса не изменяется. 141
Микроконтроллеры Microchip® rfPIC™ Таблица 2.12. Перечень регистров, ассоциированных с модулем АЦП Адрес Название bit7 bit6 bit5 bit4 05h GPIO — — GPIO5 GPIO4 0Bh/8Bh INTCON GIE PEIE TOIE INTE OCh PIR1 EEIF ADIF — — 1 Eh ADRESH Старшие 8 бит или 2 бита 1Fh ADCONO ADFM VCFG — — 85h TRISIO — — TRISIO5 TRISIO4 8Ch PIE1 EEIE ADIE — — 9Eh ADRESL Младшие 2 бита сдвинутого вправо 9Fh ANSEL - ADCS2 ADCS1 ADCS0 bit3 bit2 bit1 bitO Значение при сбро- се по пи- танию Значение при дру- гих вари- антах сброса GPIO3 GPIO2 GPIO1 GPIOO -XX хххх -uu uuuu GPIE TOIF INTF GPIF 0000 0000 0000 000u CMIF - - TMR1IF 00-0-0 00-0-0 сдвинутого вправо результата хххх хххх uuuu uuuu CHS1 SHSO GO ADON 00- 0000 00- 0000 TRISIO3 TRISIO2 TRISIO1 TRISIOO -11 1111 -11 1111 CMIE - - TMR1IE 00-0-0 00-0-0 или 8 бит сдвинутого влево результата хххх хххх uuuu uuuu ANS3 ANS2 ANSI ANSO -0000 1111 -000 1111 Обозначения: х = неопределенное, и = не изменяется, - = не применя- ется, читается как «О». 142
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Работа с EEPROM В отличие от регистров общего применения, которые применя- ются в качестве ОЗУ для хранения временных пользовательских данных и теряют информацию при выключении питания, память данных EEPROM является энергонезависимой. У микроконтролле- ров ранних модификаций количество циклов чтения/записи EEPROM было ограниченным, поэтому не рекомендовалось приме- нять EEPROM для хранения часто изменяемых переменных. В микроконтроллерах rfPIC12F675 гарантируется не менее 1 миллио- на циклов записи/чтения EEPROM и она может использоваться в качестве пользовательского ОЗУ. Более того, рекомендуется пе- риодически обновлять содержимое ячеек EEPROM, поэтому изго- товитель советует неизменяемые значения (индивидуальные но- мера устройств, калибровочные константы и т.п.) по возможности хранить в виде констант программного кода, записанных во FLASH- память программ. Однако это не критичное ограничение, и соблю- дать его не обязательно. Во всяком случае, изготовитель гаранти- рует хранение данных в EEPROM в течение 40 лет при отсутствии внештатных воздействий на кристалл (перегрев, статические раз- ряды, мощные СВЧ поля и т.д.). Память данных EEPROM доступна для чтения и записи в про- цессе обычной работы микроконтроллера, в полном диапазоне обычных питающих напряжений. Но эта память не проецируется напрямую на адресное пространство данных. Напротив, она адре- суется только косвенно, при помощи специальных функциональных регистров. В общей сложности таких регистров четыре: EECON1 EECON2 (не является физически доступным регистром) EEDATA EEADR В регистре EEDATA хранятся 8-битные данные приготовленные для записи или полученные при чтении ячейки EEPROM. Регистр EEADR содержит адрес ячейки в независимом адресном простран- стве EEPROM. Микроконтроллеры rfPIC12F675 имеют 128 байт па- мяти данных EEPROM, расположенных в диапазоне от Oh до 7Fh. Внимание! Регистр EEADR 7-разрядный. Восьмой разряд иг- норируется, однако доступен для записи. Для обеспечения со- вместимости с будущими новыми версиями микроконтроллеров при написании прикладных программ необходимо следить, чтобы 143
Микроконтроллеры Microchip9 rfPIC™ в этот разряд всегда записывалось нулевое значение. При записи в ячейку EEPROM новых данных, старые данные предварительно стираются. Время записи контролируется специ- альным встроенным таймером и зависит от напряжения питания и температуры. Данные могут быть записаны в EEPROM при помощи програм- матора, во время записи в микроконтроллер кода программы. Если по окончании программирования будет установлен бит защиты про- граммного кода, то доступ к данным EEPROM «извне» будет пере- крыт. Но процессор не потеряет возможность программного досту- па к данным «изнутри». Регистры EECON1И EECON2 Регистр EECON1 предназначен для управления памятью EEPROM. В нем используются только четыре младших разряда. Рассмотрим назначение разрядов регистра EECON1. bit7-4 Не используются. Читаются как «О». bit3 WRERR - флаг ошибки записи в EEPROM 1 = операция записи досрочно прервана О = операция записи завершена bit2 WREN - бит разрешения записи в EEPROM 1 = запись разрешена О = запись запрещена bitl WR - управляющий бит начала записи 1 = старт записи О = цикл записи завершен или не начинался bitO RD - управляющий бит начала чтения 1 = старт чтения (чтение длится один машинный цикл) О = чтение не начиналось или завершено Управляющие биты RD и WR управляют инициацией чтения и записи соответственно. Программно их можно только установить, но нельзя очистить. Обнуление этих разрядов происходит аппарат- но, после завершения цикла чтения или записи. Недоступность би- та WR для программного сброса предотвращает преждевременное прерывание цикла записи. 144
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Бит WREN, будучи установленным, разрешает операцию записи. После включения питания этот бит обнулен. Бит WRERR сигнализирует о наличии ошибки записи. Он уста- навливается, если запись была прервана сбросом по выводу MCLR или по переполнению WDT. Пользователь имеет возможность по- сле сброса заметить, что был прерван цикл записи, очистить бит WRERR и повторить запись ячейки. Но, поскольку содержимое ре- гистров EEDATA и EEADR при любом сбросе теряется, перед началом записи содержимое этих регистров необходимо восста- новить. Флаг прерывания EEIF регистра PIR1 устанавливается, когда за- пись завершена. Этот флаг должен быть сброшен программно. Регистр EECON2 не является физическим регистром и всегда читается, как «О». Он используется исключительно в цикле записи данных. Чтение данных из памяти EEPROM Для чтения данных пользователь должен записать адрес ячейки в регистр EEADR и затем установить управляющий бит RD (EECON1<0>), как показано в приведенном ниже примере. Букваль- но в следующем цикле данные окажутся в регистре EEDATA. Соот- ветственно, они могут быть прочитаны следующей командой. Дан- ные хранятся в регистре EEDATA неопределенно долго, до тех пор, пока не будет прочитана следующая ячейка памяти или пока в ре- гистр не будут помещены данные для записи в EEPROM. Пример текста программы для чтения данных из EEPROM: bsf STATUS, RPO movlw 1Ah movwf EEADR bsf EECON1.RD movf EEDATA, W ; включили Банк 1 ; загрузили в W адрес ячейки 1 Ah ; установили адрес 1 Ah для чтения ; дали команду на чтение ; перенесли данные в аккумулятор W Запись данных в EEPROM Для записи в ячейку памяти EEPROM пользователь должен по- местить адрес в регистр EEADR, затем данные в регистр EEDATA и выполнить обязательную последовательность команд для под- готовки ячейки к записи, как показано в примере: bsf STATUS, RPO ; включили Банк 1 145
Микроконтроллеры Microchip® rfPIC" bsf EEC0N1.WREN ; разрешили запись bcf INTCON, GIE ; запретили все прерывания ; начало обязательной последовательности movlw 55h movwf EECON2 movlw AAh movwf EECON2 bsf EECON1.WR ; старт записи ; конец обязательной последовательности bsf INTCON, GIE ; разрешили прерывания Запись не произойдет, если перед записью каждого байта не будет выполнена обязательная последовательность (запись 55h в EECON2, запись AAh в EECON2, установка бита WR). Внимание! Настоятельно рекомендуется запрещать все пре- рывания на момент выполнения обязательной последовательно- сти. Во время ее выполнения запускается специальный таймер, отсчитывающий цикл стирания/записи ячейки. Если какая-либо иная команда прервет цикл, то запись данных в ячейку EEPROM не произойдет. Кроме того, непосредственно перед записью необходимо уста- новить бит WREN (EECON<2>) чтобы разрешить запись. Бит WR не может быть установлен, пока не будет установлен бит WREN. Этот механизм предотвращает случайную запись в произвольные ячейки EEPROM, если в результате сбоя программа начнет выпол- няться с произвольного места. Пользователь должен держать бит WREN сброшенным всегда, кроме момента записи в EEPROM. Бит WREN не сбрасывается аппаратно! Необходимо сбросить его про- граммно после окончания записи. Если процесс записи начался, то сброс бита WREN его уже не остановит. После окончания цикла записи аппаратно сбрасывается бит WR и устанавливается флаг прерывания EEIF (PIR<7>). При необходи- мости пользователь может поступать на свое усмотрение: или раз- решить прерывание по этому флагу или просто программно прове- рять его состояние. Флаг-бит EEIF должен быть сброшен про- граммно. Верификация записи Хорошим стилем программирования считается проверка запи- санного в EEPROM значения с целью убедиться, что оно записано правильно: 146
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 bcf STATUS, RPO включили Банк 0 bsf STATUS, RPO произвольный код пользователя включили Банк 1 movf EEDATA, W берем данные из EEDATA, bsf EECON1, RD так как они не менялись с момента записи и переносим в аккумулятор читаем данные из ячейки xorwf EEDATA, W сравниваем прочитанное значение btfss STATUS, Z с сохраненным в аккумуляторе значения одинаковые? goto WRITE_ERR НЕТ, переходим на метку • Перечень регистров, WRITEJERR ДА, продолжаем обычную программу Таблица 2.13 ассоциированных с EEPROM Адрес Название bit7 bite bit5 bit4 OOh PIR1 EEIF ADIF — 9Ah EEDATA Регистр 9Bh EEADR Регистр 9Ch EECON1 — — — — 9Dh EECON2 He является bit3 bit2 bit1 bitO Значение при сбросе по питанию Значение при дру- гих вари- антах сброса GMIF — — TMR1IE 00-0-0 00-0-0 данных EEPROOM 0000 0000 0000 0000 адреса EEPROOM -000 0000 -000 0000 WRERR WWREN WR RD —-х000 —- q000 физическим реестром Обозначения: х = неопределенное, и = не изменяется, - = не применя- ется, читается как «О», q = значение зависит от условий. Выделенные за- ливкой биты не влияют на работу портов. 147
Микроконтроллеры Microchip9 rfPIC™ Слово конфигурации Слово конфигурации хранится в специальном 14-разрядном ре- гистре, расположенном по адресу 2007h. Этот адрес находится за пределами памяти программ и входит в состав специальной слу- жебной области памяти 2000h-3FFFh, которая доступна только при помощи программатора. Биты слова конфигурации могут быть ус- тановлены в заголовке ассемблерной программы, затем сохранены в составе hex-файла и записаны в процессе программирования кристалла. Обычно программы-оболочки программаторов позволя- ют автономно менять содержимое служебной памяти непосредст- венно перед программированием. Рассмотрим состав слова конфигурации: bit13-12 BG1:BG0 - пороговые калибровочные биты для схем сброса по включению и по аварийному снижению питания1 00 = наименьшее пороговое напряжение 11= наибольшее пороговое напряжение bit11-9 Не используются. Читаются как «0». bit8 CPD - бит защиты данных2 1 = защита включена 0 = защита выключена bit7 СР - бит защиты кода программы3 1 = защита включена 0 = защита выключена bit6 BODEN - бит разрешения сброса по аварийному спаду питания4 1 = сброс разрешен 0 = сброс запрещен bits MCLRE - выбор назначения вывода GP3/MCLR5 1 = GP3/MCLR используется как вывод для сброса 0 = GP3/MCLR используется как цифровой порт ввода/вывода bit4 PWRTE - бит разрешения таймера по включению питания 1 = таймер PWRT выключен 0 = таймер PWRT включен (бит инверсный!) 148
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 bit3 WDTE - бит включения сторожевого таймера 1 = сторожевой таймер включен 2 = сторожевой таймер выключен bit2-0 FOSC2:FOSCO - биты выбора тактового генератора согласно приведенным ниже данным: 111 = RC Вывод GP4/OSC2/CLKOUT настроен, как CLKOUT, внешняя RC-цепь подключена к GP5/OSC1/CLKIN Вывод GP4/OSC2/CLKOUT настроен, как порт вво- 110 = RC да/вывода, внешняя RC-цепь подключена к GP5/OSC1/CLKIN Вывод GP4/OSC2/CLKOUT настроен, как CLKOUT, 101 = INTOSC вывод GP5/OSC1/CLKIN настроен, как порт вво- да/вывода, используется внутренний генератор Вывод GP4/OSC2/CLKOUT настроен, как порт вво- 100 = INTOSC да/вывода, вывод GP5/OSC1/CLKIN настроен, как порт ввода/вывода, используется внутренний генератор Вывод GP4/OSC2/CLKOUT настроен, как порт вво- 011 = EC да/вывода, вывод GP5/OSC1/CLKIN используется, как вход тактовых импульсов от отдельного внешнего ге- нератора 010 = HS Высокочастотный кварцевый резонатор подключен к выводам GP4/OSC2/CLKOUT и GP5/OSC1/CLKIN. 001 = XT Кварцевый резонатор подключен к выводам GP4/OSC2/CLKOUT и GP5/OSC1/CLKIN 000 = LP Низкочастотный керамический резонатор подключен к выводам GP4/OSC2/CLKOUT и GP5/OSC1/CLKIN Примечания. 1. Пороговые калибровочные биты подбираются при изготовлении на фабрике и должны быть прочитаны и сохранены перед стиранием памяти микроконтроллера. 2. Память данных EEPROM будет полностью очищена в момент пере- вода бита защиты в положение «отключено». Это мера по защите данных от нелегального считывания. 3. Память кода программы будет полностью очищена в момент пере- вода бита защиты в положение «отключено». Это мера по защите про- граммы от нелегального считывания. Внимание! Калибровочное значение OSCCAL также стирается. 4. Включение обнаружения аварийного сбоя питания не означает авто- матическое включение таймера для установления питающего напряжения. 5. Если на вывод MCLR воздействуют в режимах INTOSC или RC, то встроенный тактовый генератор отключается. 149
Микроконтроллеры Microchip9 rfPIC™ Источники тактовой частоты Для тактирования микроконтроллера rfPICl2F675 может исполь- зоваться восемь различных вариантов источника тактовой частоты, определяемых тремя битами конфигурации FOSC2...FOSCO: • LP - с пониженным энергопотреблением (низкочастотный); • XT - обычный кварцевый/керамический резонатор; • HS - высокочастотный кварцевый/керамический резонатор; • RC - внешняя RC цепочка (2 варианта); • INTOSC - внутренний генератор (2 варианта); • ЕС - независимый внешний генератор. Кварцевые и керамические резонаторы В режимах LP, XT и HS кварцевый или керамический резонатор подключается к выводам OSC1 и OSC2 (см. рис. 2.25). Схема так- тового генератора rfPIC12F675 такова, что требует применения кри- сталлов с поперечным срезом. Применение кристаллов с продоль- ным срезом может привести к уходу частоты колебаний за пределы, указанные изготовителем кристалла. Кроме того, в режимах LP, XT и HS можно использовать незави- симый внешний генератор, подавая импульсы уровня TTL на вывод OSC1. В этом случае вывод 0SC2 должен оставаться свободным во избежание порчи микроконтроллера. Вывод 0SC2 можно ис- пользовать, как порт ввода/вывода GP4 только в случае исполь- зования внешнего генератора в режиме ЕС. Рис. 2.25. Подключение кварцевого/керамического резонатора: для определения рекомендованных значений С1 и С2 см. табл.2.12 и 2.13; последовательный резистор может потребоваться при использовании кристаллов со срезом типа АТ; значение RF меняется в зависимости от режима. Приблизительное значение составляет 10 МОм 150
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Таблица 2.14 Подбор конденсаторов для керамических резонаторов Режим Частота OSC1 (С1) OSC2 (С2) хт 455 кГц 2,0 МГц 4,0 МГц 68...100 пФ 15...68 пФ 15...68 пФ 68...100 пФ 15...68 пФ 15...68 пФ HS 8,0 МГц 16,0 МГц 10...68 пФ 10...22 пФ 10...68 пФ 10...22 пФ Примечание: Увеличение емкости повышает стабильность гене- ратора, но увеличивает время установления колебаний. Приведенные в таблице значения имеют ознакомительный характер и соответствуют наи- более часто употребляемым номиналам. В зависимости от конкретного типа резонатора могут потребоваться иные значения емкости. Таблица 2.15 Подбор конденсаторов для кварцевых резонаторов Режим Частота OSC1 (С1) OSC2 (С2) LP 32 кГц 68...100 пФ 68...100 пФ ХТ 100 кГц 2,0 МГц 4,0 МГц 68...150 пФ 15...30 пФ 15...30 пФ 150...200 пФ 15...30 пФ 15...30 пФ HS 8,0 МГц 10 МГц 20 МГц 15...30 пФ 15...30 пФ 15...30 пФ 15...30 пФ 15...30 пФ 15...30 пФ Примечание: Увеличение емкости повышает стабильность гене- ратора, но увеличивает время установления колебаний. Приведенные в таблице значения имеют ознакомительный характер и соответствуют наи- более часто употребляемым номиналам. В зависимости от конкретного типа резонатора могут потребоваться иные значения емкости. В случае применения резонатора, рассчитанного на низкий уровень напряжения раскачки, в режимах XT и HS может потребоваться применение резистора RS во избежание перегрузки кристалла. Для уточнения обращайтесь к спецификации производителя кварцевых резонаторов. Тактирование от внешнего генератора Если в разрабатываемом устройстве присутствует собственный тактовый генератор (рис. 2.26), его можно использовать и для такти- 151
Микроконтроллеры Microchip® rfPIC™ Импульсы от внешнего генератора Свободный OSC1 PIC12F629/675 I OSC2(1) Рис. 2.26. Внешнее тактирование в режимах LP, XT, HS или ЕС: вывод OSC2 может работать как порт GP4 только в режиме ЕС рования микроконтроллера rfPIC12F675. Важно лишь убедиться, что параметры выходного сигнала генератора соответствуют тре- бованиям, предъявляемым к тактирующему сигналу микроконтрол- лера (см. рис. 2.27 и табл. 2.14). Рис. 2.27. Диаграмма внешних тактирующих импульсов Таблица 2.16 Требования к тактирующим импульсам Номер пара- метра Обо- значе- ние Название Значение Усло- вие мин. тип. макс. DC — 0,37 LP Внешняя час- TOTaCLKIN1, МГц DC DC - 4 20 XT HS 1 Fosc DC — 20 EC 5 — 0,37 LP Частота гене- ратора1, МГц DC 0,1 4 4 4 INTOSC RC XT 1 — 20 HS 152
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Номер Обо- Название Значение Уело- пара- метра значе- ние мин. тип. макс. вие Период внеш- них импульсов1 27 мкс 50 нс 50 нс 250 нс —• оо оо LP HS ЕС XT 2 Tosc Период генера- тора1, нс 27 250 250 50 250 200 10 1 LP INTOSC RC XT HS 3 Tcy Длительность командного цикла1, нс 200 — DC Tcy = 4/Fosc 4 TosL, TosH Длительность низкого уровня Длительность высокого уров- ня 2 мкс 20 нс 100 нс —• —• LP HS XT 5 TosR, TosF Длительность нарастания. Длительность спада - - 50 нс 25 нс 15 нс LP XT HS 1 Длительность командного цикла Tcy равняется четырем длительностям периода входных колебаний. Все приведенные значения действительны для стандартных условий, при выполнении процессором кода программы. Уход за пределы приведенных значений может привести к нестабильной работе такто- вого генератора и/или увеличению потребляемого тока. Генератор на основе RC-цепи Для приложений, которые не требуют применения особо точной и стабильной тактовой частоты, может быть использован эконо- мичный и простой генератор на основе внешней RC-цепи. Работа такого генератора зависит от ряда параметров. Частота RC- генератора зависит от: - напряжения питания; - значений емкости СЕхт и сопротивления Rext, - рабочей температуры. 153
Микроконтроллеры Microchip9 rfPIC™ Рис. 2.28. Схема подключения внешней RC-цепи При прочих одинаковых параметрах частота генератора может варьироваться от микросхемы к микросхеме, и это нормальное яв- ление. На частоту оказывает влияние технологический разброс при производстве микроконтроллеров и разница в типах корпусов. Осо- бенно сильно это влияние проявляется при малом значении Сехт- Схема включения RC-цепи показана на рис. 2.28. Генератор мо- жет работать в двух режимах: когда вывод GP4/OSC2/CLKOUT ис- пользуется в качестве порта ввода-вывода GP4, и когда он использу- ется в качестве выхода импульсов с частотой Fosc/4. Встроенный генератор 4 МГц Калиброванный встроенный генератор вырабатывает тактовые импульсы с фиксированной частотой 4 МГц. В режиме INTOSC вы- вод GP4 также может работать в двух режимах: как порт ввода- вывода или как выход импульсов с частотой Fosc/4. В дальнейшем эти импульсы могут быть использованы для тактирования внешней логики или проверки исправности устройства. Команда калибровки записана в последний адрес программной па- мяти. Это команда RETLW XX, где XX - калибровочная константа. Ес- ли используется встроенный генератор, то эта константа должна быть перенесена в регистр OSCCAL для калибровки генератора. Для ста- бильной работы генератора рекомендуется выполнять проводники пи- тания предельно короткими и шунтирующие конденсаторы располагать как можно ближе к выводам питания микросхемы. Ниже приводится пример калибровки встроенного генератора: bsf STATUS, RPO ; включили Банк 1 call 3FFh ; получили калибровочную константу 154
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 movwf OSCCAL ; и занесли ее в калибровочный ; регистр bcf STATUS, RPO ; включили Банк О Организация сброса При использовании микроконтроллеров rfPIC12F675 различают несколько вариантов сброса: • по включению питания (POR); • по переполнению сторожевого таймера в обычном режиме; • по переполнению сторожевого таймера в режиме SLEEP; • по выводу MCLR в обычном режиме; • по выводу MCLR в режиме SLEEP; • по аварийному снижению питающего напряжения (BOD). Некоторые регистры устанавливаются в неопределенное со- стояние при сбросе по включению питания и не изменяются при всех остальных вариантах сброса. Но большинство регистров пе- реходит в определенное состояние «RESET» (см.табл.2-18) при следующих вариантах сброса: • по включению питания (POR); • по переполнению сторожевого таймера в обычном режиме; • по переполнению сторожевого таймера в режиме SLEEP; • по выводу MCLR; • по аварийному снижению питающего напряжения (BOD). На них не влияет выход из режима SLEEP по сигналу стороже- вого таймера, поскольку это является продолжением нормальной работы. Биты ТО и PD устанавливаются или сбрасываются в зависимо- сти от различных вариантов сброса, как показано в табл. 2.15. Эти биты могут быть использованы программой пользователя для рас- познавания типа сброса при старте программы. Упрощенная структурная схема цепей сброса показана на рис. 2.29. Цепь сброса по выводу MCLR снабжена схемой гашения им- пульсов помех. Сброс по входу MCLR Как уже упоминалось, вход MCLR снабжен фильтром шумов, по- зволяющим игнорировать кратковременные импульсы помех. Внимание! При разработке устройств имейте в виду: 1. Сброс по WDT не вызывает появления на выводе MCLR низ- кого уровня. Поэтому, если необходимо, чтобы по WDT сбрасы- валась и внешняя логика, это реализуют программно, используя один из портов микроконтроллера и посылая через него на внеш- нюю схему импульс сброса. 155
Микроконтроллеры Microchip9 rfPIC™ Рис. 2.29. Структурная схема цепей сброса rfPIG12F675 2. В микроконтроллере rfPIC12F675 применена схема входных цепей сброса, отличающаяся от применявшихся ранее в этом семействе. Эта особенность в случае превышения напряжения на выводе MCLR может привести к превышению допустимого тока через вывод и порче микросхемы. Производитель настоя- тельно рекомендует больше не подключать неиспользуемый вы- вод MCLR напрямую к напряжению питания VDD, а использовать внешнюю RC цепь, как показано на рис. 2.30. Если в слове конфигурации, при помощи бита MCLRE, вывод GP3/MCLR настроен, как вход сброса, то к нему подключается внут- ренний подтягивающий резистор. Ситуация, когда вывод настроен для сброса, а внутренний подтягивающий резистор отключен, невозможна. Сброс по включению питания (POR) При включении питающего напряжения оно не может нарас- тать мгновенно. Поэтому специальная встроенная схема удержи- вает процессор в состоянии сброса на время, гарантированно достаточное для окончательного установления питающего напря- жения. Скорость нарастания питающего напряжения должна быть не менее 0,05 В/мс. Для корректной работы схемы POR достаточно 156
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Рис. 2.30. Рекомендованная схема подключения вывода MCLR. Подклю- чать вывод сброса напрямую к цепи питания нельзя лишь, чтобы вывод MCLR через резистор был подключен к напря- жению питания VDD. Это позволяет сократить количество внешних компонентов. Как и в случае с WDT, схема POR не обеспечивает сброс внешней логики потребительского устройства. Таймер включения питания (PWRT) Таймер включения питания обеспечивает фиксированную за- держку 72 мс только в случае включения питания (POR) или при обнаружении аварийного снижения напряжения питания (BOD). Таймер работает от встроенного RC-генератора. Процессор удерживается в состоянии сброса до тех пор, пока ак- тивен внутренний сигнал PWRT. В свою очередь, PWRT активен до тех пор, пока напряжение VDD не достигнет приемлемого уровня, оп- ределяемого схемой POR. Таким образом, максимальная задержка при включении питания состоит из задержки POR для установле- ния питающего напряжения плюс задержка PWRT 72 мс. Бит конфигурации PWRTE может включить или выключить тай- мер PWRT. Таймер всегда должен быть включен, если включена схема BOD для обнаружения спада питающего напряжения. Задержка PWRT может незначительно варьироваться от кри- сталла к кристаллу в зависимости от питающего напряжения и ок- ружающей температуры. Таймер запуска тактового генератора (OST) Для того чтобы тактовый генератор запустился и вошел в нор- мальный режим, требуется время. Таймер запуска OST отсчитыва- 157
Микроконтроллеры Microchip9 rfPIC7" ет 1024 цикла тактового генератора с момента прекращения рабо- ты таймера PWRT. Таймер запускается только в режимах LP, XT или HS и только при сбросе по включению питания или при выходе из режима SLEEP. Обнаружение аварийного снижения питающего напряжения (BOD) Во время эксплуатации электронного устройства возможен такой перебой в подаче питающего напряжения, когда оно не отключает- ся полностью, а снижается ниже определенного критического уров- ня, при котором стабильная работа микроконтроллера невозможна (рис. 2.31). Перебой питания может иметь вид кратковременного провала, длящегося единицы микросекунд. Но этого достаточно, чтобы в ра- боте микроконтроллера произошел сбой с непредсказуемыми по- следствиями. Следовательно, в случае возникновения описанной ситуации, микроконтроллер должен быть сброшен и удержан в со- стоянии сброса до момента восстановления нормального напряже- ния питания. VBOD Внутренний сброс 72 МС(1) VBOD Внутренний сброс VBOD Внутренний сброс 72 МС(1) Примечание 1: Задержка 72 мс только для случая, когда бит PWRTE сброшен в “0” Рис. 2.31. Различные варианты срабатывания схемы BOD 158
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 MCLR Tpwrt- PWRT Tost— Внутренний сброс . Рис. 2.32. Диаграммы сброса при включении. MCLR не подключен к Vqd (вариант 1) Микроконтроллер rfPIC12F675 снабжен встроенной схемой об- наружения аварийного снижения питающего напряжения (BOD). Схема BOD может быть включена или выключена при помощи бита конфигурации BODEN. Если питающее напряжение VDd опускается до уровня VBqd = =2,025...2,175 В на время Твоо >100 мкс, то схема BOD переводит процессор в состояние сброса и удерживает в нем до восстановле- ния нормального напряжения питания. Скорость изменения питаю- щего напряжения не имеет значения. Сброс не гарантируется, если VDD совпадает с VBod> или длительность провала меньше TB0D. Последовательность интервалов при включении питания Различные варианты следования интервалов показаны на рис. 2.32 - рис. 2.34. В любом случае, сначала отрабатывается интервал POR, за ним следует интервал таймера PWRT (если таймер включен), да- лее срабатывает таймер запуска генератора OST (кроме случая внешнего генератора ЕС). Суммарная длительность задержек от момента включения пи- тания до момента начала работы в штатном режиме бывает раз- личной и зависит от конфигурации тактового генератора и состоя- ния бита PWRTE. Так, например, если таймер PWRT выключен и применяется неза- висимый внешний тактовый генератор (режим ЕС), то никакие интер- 159
Микроконтроллеры Microchip9 rfPIC™ Рис. 2.33. Диаграммы сброса при включении. MCLR не подключен к Vdd (вариант 2) валы кроме POR не отрабатываются и задержка запуска мини- мальна. Если во время работы таймера PWRT сработает схема BOD, то таймер перезапустится и начнет отрабатывать интервал повторно. Таймерные интервалы отсчитываются от конца интервала POR. Если вывод MCLR удерживается в состоянии низкого уровня длитель- ное время, то все стартовые интервалы за это время могут быть отработаны. Процессор начнет работать немедленно после того, как на входе MCLR появится высокий уровень (рис. 2.33). Это свой- ство можно использовать для отладочных целей или синхрониза- ции нескольких микроконтроллеров, работающих одновременно. В табл. 2.17 показано состояние по сбросу для некоторых специ- Рис. 2.34. Диаграммы сброса при включении. MCLR подключен к Vdd 160
Гпаеа 2, Микроконтроллер-передатчик rfPIC12F675 альных регистров, а в табл. 2.18 приведено состояние по сбросу для всех регистров. Таблица 2.17 Влияние различных вариантов сброса на регистры PCON и STATUS POR ВОР ТО PD Значение 0 U 1 1 Сброс по включению питания 1 0 1 1 Сброс по аварийному провалу пи- тания и U 0 и Сброс по переполнению WDT и U 0 0 Выход из SLEEP по WDT U U и и Воздействие на MCLR в обычном режиме U U 1 0 Воздействие на MCLR в режиме SLEEP Обозначения: и - значение не меняется. Таблица 2.18. Перечень регистров, ассоциированных с BOD Адрес Название bit7 bit6 bit5 bit4 03h STATUS . IRP IQ 8Eh PCON AL = bit3 bit2 bit1 bitO Значение при сбросе по питанию Значение при дру- гих вари- антах сброса PD 0001 1ххх OOOqquuu —- Ох ---0q Обозначения: х = неопределенное, и = не изменяется, - = не применя- ется, читается как «О», q = значение зависит от условий. Выделенные за- ливкой биты не влияют на работу портов. Регистр PCON и определение разновидности сброса Регистр PCON расположен по адресу 8Eh и в нем используется всего два разряда - нулевой и первый. В нулевом разряде распо- ложен бит ВОР. При сбросе по включению питания состояние этого 161
Микроконтроллеры Microchip® rfPIC™ бита произвольное. Если есть необходимость определения факта провала питания, то пользователь должен программно установить этот бит. После срабатывания схемы BOD содержимое этого бита обну- ляется, что позволяет программно обнаружить сброс из-за провала питания. Если схема BOD отключена путем установки в 1 бита BODEN слова конфигурации, то содержимое бита ВОР не имеет значения. В первом разряде расположен бит POR. Он устанавливается в «О» при сбросе по включению питания и не меняется при всех ос- тальных вариантах сброса. Для распознавания разновидности сброса необходимо программно установить этот бит в «1» при на- чале работы программы. Распознавание разновидности сброса происходит следующим образом. При старте работы программы производится проверка состояния бита POR. Если он обнулен, значит произошло включе- ние питания устройства. В этом случае следующим шагом устанав- ливают в «1» биты POR и ВОР, и далее поступают в соответствии с алгоритмом для начала работы по включению питания. Если при проверке выясняется, что бит POR остался в состоянии «1», а об- нулился бит ВОР, значит произошел провал питающего напряже- ния. В этом случае можно реализовать соответствующий алгоритм проверки всего устройства и т.п. Если же сброс был, но биты POR и ВОР оба остались в состоя- нии «1», значит причиной сброса было переполнение сторожевого таймера или воздействие на вывод MCLR. Для различения этих двух причин анализируют состояние битов ТО и PD регистра STATUS в соответствии с табл. 2.17. Таблица 2.19 Начальное состояние специальных регистров Условие Указатель команд Регистр STATUS Регистр PCON Сброс по вклю- чению питания OOOh 0001 1ххх Ox Сброс по MCLR в обычном ре- жиме OOOh 000u uuuu uu Сброс по MCLR в режиме SLEEP OOOh 0001 Ouuu uu 162
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Условие Указатель команд Регистр STATUS Регистр PCON Сброс по пере- полнению WDT 000h 0000 UUUU uu Выход из SLEEP по WDT РС + 1 uuuO Ouuu uu Сброс по сраба- тыванию BOD 000h 0001 1uuu 10 Выход из SLEEP по прерыванию РС + 1* uuu1 Ouuu uu * Если процессор выходит из режима SLEEP по прерыванию и глобальный бит GIE установлен, то после выполнения команды по адресу РС+1 в указатель команд заносится вектор прерывания 0004h. Обозначения: х = неопределенное, и = не изменяется, - = не применяется, читается как «О» Таблица 2.20 Начальные состояния регистров Регистр Адрес Сброс no включению питания • Сброс по MCLR в обыч- ном режиме • Сброс по MCLR в ре- жиме SLEEP • Сброс по переполнению WDT • Сброс по срабатыванию BOD1 • Выход из SLEEP no прерыванию • Выход из SLEEP по WDT W — хххххххх UUUU UUUU UUUU UUUU INDF 00h/80h - — — TMRO 01h хххххххх UUUU UUUU UUUU UUUU PCL 02h/82h 0000 0000 0000 0000 PC + 13 STATUS 03h/83h 0001 1ххх 000q quuu4 uuuq quuu4 FSR 04h/84h хххххххх UUUU UUUU UUUU UUUU GPIO 05h -хх хххх -UU UUUU -uu UUUU PCLATH 0Ah/8Ah —0 0000 —0 0000 —U UUUU 163
Микроконтроллеры Microchip® rfPIC™ Регистр Адрес Сброс no включению питания • Сброс no MCLR в обыч- ном режиме • Сброс по MCLR в ре- жиме SLEEP • Сброс по переполнению WDT • Сброс по срабатыванию BOD1 • Выход ИЗ SLEEP по прерыванию • Выход из SLEEP по WDT INTCON 0Bh/8Bh 0000 0000 0000 000и uuuu uuqq2 PIR1 OCh 00- 0-0 00- 0-0 «« ~ ~2,5 qq- q-q T1CON 10h -000 0000 -иии ииии -uuu uuuu CMCON 19h -0-0 0000 -0-0 0000 -u-u uuuu ADRESH 1Eh xxxx xxxx UUUU ииии uuuu uuuu ADCONO 1Fh 00- 0000 00- 0000 uu- uuuu OPTION_REG 81 h 1111 1111 1111 1111 uuuu uuuu TRISIO 85h -11 1111 -111111 -uu uuuu PIE1 8Ch 00- 0-0 00- 0-0 uu- u-u PCON 8Eh Ox ии16 uu OSCCAL 90h 1000 00- 1000 00- uuuu uu- WPU 95h -11 -111 -11 -111 uuuu uuuu ЮС 96h -00 0000 -00 0000 -uu uuuu VRCON 99h 0-0- 0000 0-0- 0000 u-u- uuuu EEDATA 9 Ah 0000 0000 0000 0000 uuuu uuuu EEADR 9Bh -000 0000 -000 0000 -uuu uuuu EECON1 9Ch — xOOO — qOOO — uuuu EECON2 9Dh ADRESL 9Eh xxxx xxxx ииии ииии uuuu uuuu ANSEL 9Fh -000 1111 -000 1111 -uuu uuuu 164
_____Глава 2. Микроконтроллер-передатчик rfPIC12F675________ 1 Если Vdd упадет слишком сильно, произойдет сброс по включению питания и регистры изменятся иначе. 2 Один или более разрядов INTCON и/или PIR1 будут изменены (в слу- чае выхода из SLEEP). 3 Если процессор выходит из режима SLEEP по прерыванию и гло- бальный бит GIE установлен, то после выполнения команды по адресу РС+1 в указатель команд заносится вектор прерывания 0004h. 4 См. табл. 2.17 для значений по сбросу в определенных условиях. 5 Если сигнал выхода из SLEEP сформирован в момент завершения записи в EEPROM, то Bit7=1; если при завершении преобразования АЦП, то Bit6=1; по изменению выхода компаратора Bit3=1; по переполнению Timed BitO=1. При всех остальных прерываниях, приводящих к выходу из SLEEP эти биты не меняются. 6 Если сброс произошел в момент срабатывания BOD, то этот бит ра- вен 0. При всех остальных случаях сброса бит не меняется. Обозначения: х = неопределенное, и = не изменяется, - = не применя- ется, читается как «0», q = значение зависит от условий. Прерывания При работе с микроконтроллером rfPIC12F675 доступно семь ис- точников прерывания: - внешнее прерывание по выводу GP2/INT; - по переполнению таймера TMR0; - по изменению уровня на одном из портов ввода-вывода; - по изменению состояния выхода компаратора; - по окончанию преобразования АЦП; - по переполнению TMR1; - по окончанию записи в EEPROM. В регистре управления прерываниями INTCON и регистре пери- ферийных прерываний PIR записываются отдельные запросы пре- рываний в виде флаг-битов. Кроме того, регистр INTCON содержит бит глобального разрешения прерываний и биты разрешения от- дельных прерываний. Бит глобального разрешения прерываний GIE (INTCON<7>) в состоянии «1» разрешает все немаскированные прерывания, а бу- дучи сброшенным в «0» запрещает все прерывания. Если бит GIE установлен, то отдельные прерывания можно запретить (маскиро- вать) сбросом соответствующих разрядов регистров INTCON и PIE. По сбросу процессора бит GIE также сбрасывается. Команда RETFIE возвращает процессор из подпрограммы обра- ботки прерывания и заодно автоматически устанавливает обратно сброшенный в начале обработки бит GIE, таким образом разрешая вновь прерывания. В регистре INTCON содержатся следующие 165
Микроконтроллеры Microchip® rfPIC™ флаги прерываний: - от вывода GP2/INT; - по изменению уровня на одном из портов ввода-вывода; - по переполнению таймера TMRO. Флаги прерываний от периферийных модулей содержатся в ре- гистре PIR1: - по изменению состояния выхода компаратора; - по окончанию преобразования АЦП; - по переполнению TMR1; - по окончанию записи в EEPROM. Соответствующие им биты разрешения прерываний находятся в регистре PIE1. Когда прерывание обнаружено, выполняется следующая после- довательность действий: 1. Бит GIE сбрасывается, чтобы запретить остальные прерыва- ния (как известно, вектор прерывания у микроконтроллера rfPIC12F675 лишь один, по адресу 0004h). 2. В стек заносится адрес возврата из подпрограммы обработки прерывания. 3. В указатель команд заносится значение 0004h. Команда RETFIE возвращает процессор из подпрограммы обра- ботки прерывания и заодно автоматически устанавливает обратно сброшенный в начале обработки бит GIE, таким образом вновь разрешая прерывания. Если разрешено несколько прерываний, то во время обработки подпрограммы источник прерывания может быть определен путем опроса флаг-битов прерываний. Перед возвратом из подпрограммы флаг-биты прерываний должны быть сброшены, в противном слу- чае возможен рекурсивный вызов подпрограммы и зацикливание. В случае прерывания по выводу GP2/INT или по изменению со- стояния портов ввода-вывода, задержка с момента события со- ставляет три или четыре командных цикла. Точное значение за- держки зависит от момента, когда случилось событие (см. рис. 2.36). Задержка одинаковая для одно- и двухтактных команд. Флаги событий устанавливаются независимо от состояния битов разрешения (маскирующих битов). Биты разрешения влияют лишь на выработку внутреннего сигнала прерывания при заданном событии. Поэтому существует дополнительная воз- можность программно отслеживать флаги событий, не прибе- гая к прерываниям, что повышает гибкость программирования. Когда выполнена инструкция, сбрасывающая бит GIE, все 166
Гпава 2. Микроконтроллер-передатчик I1PIC12F675 прерывания, которые ждали обслуживания в следующем цикле, игнорируются. Прерывания, которые были игнорированы, оста- ются в состоянии ожидания и обслуживаются, как только бит GIE вновь устанавливается в «1». Прерывания по выводу GP2/INT Внешнее прерывание по выводу GP2/INT является распозна- ваемым по фронту. Оно генерируется по нарастанию, если бит INTEDG (OPTION<6>) установлен, и по спаду, если бит INTEDG сброшен. Если заданный фронт поступает на вход GP2/INT, уста- навливается флаг-бит INTF (INTCON<1>). Прерывание может быть отключено (запрещено) сбросом бита INTE (INTCON<4>). Бит INTF должен быть сброшен программно в подпрограмме обработки прерывания до того, как прерывания вновь будут разрешены. Прерывание по выводу GP2/INT может вывести процессор из режима SLEEP, если был установлен бит INTE. Но при этом от со- стояния бита GIE зависит, уйдет или нет процессор в подпрограм- му прерывания после выхода из SLEEP. Если бит GIE сброшен, то процессор выйдет из SLEEP, но продолжит дальнейшее исполне- ние обычной программы. Диаграмма выхода из SLEEP по прерыва- нию показана на рис. 2.38. Регистры ANSEL и CMCON должны быть инициализированы так, чтобы сконфигурировать выводы, используемые для внеш- него прерывания, как цифровой вход. Прерывания от компаратора и АЦП Ситуации, при которых генерируются прерывания от АЦП и ком- паратора, описаны ранее, в соответствующих разделах главы. Сохранение данных при обработке прерываний Микроконтроллеры rfPIC12F675 не имеют функций PUSH и POP, позволяющих сохранить содержимое аккумулятора при пре- рывании. При переходе в подпрограмму прерывания в стеке сохраняется только значение указателя команд. Поэтому пользователь должен самостоятельно, программными средствами сохранить значения ключевых регистров (обычно это аккумулятор W и регистр STATUS). 167
Микроконтроллеры Microchip9 rfPIC™ IOC-GP1 IOC-GP2 IOC-GP5 CMIF CMIE ADIF ADIE IOC-GP3 юсз IOC-GP4 Рис. 2.35. Структурная схема модуля генерации прерываний В приведенном ниже примере показано, как сохранить и восста- новить значения регистров W и STATUS: movwf W_TEMP swapf STATUS, W bcf STATUS, RPO movwf STATUS_TEMP ; копируем значение аккумулятора во ; временную ячейку в любом банке ; помещаем значение регистра STATUS ;bW ; обязательно включаем Банк 0 неза- ; висимо ; от того, какой банк был включен ; сохраняем значение во вре менной ; ячейке [подпрограмма обработки прерывания] [при необходимости можно сменить банк] 168
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 swapf movwf STATUS_TEMP,W STATUS ; загружаем временное значение в W ; восстанавливаем STATUS ; при этом восстановлен прежний ; банк swapf swapf W_TEMP, F W_TEMP, W ; восстанавливаем значение W . Q1 | Q2| Q31 04 Q1 | Q21 Q3 | Q4 > Q1 | Q21 Q3 | Q4 Q1 | Q21 Q3 | Q4 I Q1 | Q21 Q3 | Q4 OSC1 CLKOUT (3) I / / / INTF х. (INTCON<1>) J gie (INTCON<7>) . INT г У® Задержка прерывания (g) PC <ZZZZEC Захваченные команды* (PC) РС+1 йС РС+1 (РС+1) X .....ОТУ4П.... К. (0004h) (0005h) Выполняемые команды' (РС-1) (PC) Пустой цикл Пустой цикл (0004h) 1: Флаг INTF проверяется здесь (каждый Q1) 2: Асинхронная задержка прерывания = 3-4Tcy, синхронная задержка = 3Tcy. где Tcy = длительность командного цикла 3: Сигнал CLKOUT доступен только если выбран тактовый генератор типа RC 4: Минимальная ширина импульса INT указана в технической документации 5: INTF может быть установлен в любой момент исполнения циклов Q1-O4 Рис. 2.36. Диаграмма обработки внешних прерываний по выводу GP/2INT Использование команды SWAPF для загрузки и выгрузки значе- ний обусловлено тем, что эта команда не изменяет состояние флаг- бита нулевого результата Z регистра STATUS. Применение коман- ды MOVF сократило бы программный код, но тогда при сохранении значения аккумулятора может быть изменено состояние бита Z, что в общем случае недопустимо. Корректное программирование тре- бует, чтобы при возвращении из подпрограммы прерывания значе- ния регистров W и STATUS были восстановлены абсолютно точно. Следует пояснить необходимость использования предпослед- ней команды, «swapf W_TEMP, F». Эта команда меняет местами полубайты в ячейке W_TEMP, оставляя результат операции в этой же ячейке. Дело в том, что следующая команда снова меняет мес- тами полубайты W_TEMP, но результат помещает в аккумулятор. Таким образом, в аккумуляторе оказывается корректное значение. Без предпоследней команды в аккумуляторе оказалось бы «раз- вернутое» значение. 169
Микроконтроллеры Microchip® rfPIC™ Рассмотренный фрагмент программы является типовым, реко- мендованным к применению изготовителем. Он включен в текст файлов-шаблонов интегрированной среды разработки MPLAB IDE. Таблица 2.21 Перечень регистров, ассоциированных с прерываниями Адрес Название bit7 bit6 bit5 bit4 0Bh/8Bh INTCON GIE PEIE TOIE INTE OCh PIR1 EEIF ADIF — — 8Ch PIE1 EEIE ADIE —. — bit3 bit2 bit1 bitO Значение при сбросе по пита- нию Значение при дру- гих вари- антах сброса GPIE TOIR INTF GPIF 0000 0000 0000 0000 CMIF 1 — ' — TMR1IF 00-0-0 00-0-0 CMIE — ' ' ' TMR1IE 00-0-0 00-0-0 Обозначения: х = неопределенное, и = не изменяется, - = не применя- ется, читается как «О», q = значение зависит от условий. Выделенные за- ливкой биты не влияют на работу модуля. Сторожевой таймер Назначением сторожевого таймера является борьба с аппарат- ными сбоями устройства, в результате которых может возникнуть «зависание» программы. Если сторожевой таймер включен, то нормально работающая программа должна периодически обнулять счетчик сторожевого таймера, не допуская сброса процессора. Ко- гда происходит сбой, сторожевой таймер перестает программно обнуляться, после его переполнения происходит сброс процессора и повторная инициализация устройства. Для достижения макси- мальной защищенности от сбоев рекомендуется выполнять сле- дующие условия: - выбирать возможно меньший интервал сторожевого таймера и сбрасывать его в разных местах программы; - внешняя аппаратная часть устройства должна полностью ини- циализироваться при любом сбросе микроконтроллера, а не только при включении питания или нажатии кнопки «RESET». 170
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Примечание: TOSE, TOCS, PSA, PS0-PS2 являются разрядами регистра OPTION Рис. 2.37. Структурная схема модуля сторожевого таймера Сторожевой таймер работает от полностью автономного внут- реннего RC-генератора. Это позволяет сторожевому таймеру про- должать работать в режиме SLEEP, когда внутренний тактовый ге- нератор процессора остановлен, и периодически выводить кон- троллер в нормальный режим. Когда происходит переполнение счетчика сторожевого таймера, он генерирует либо сигнал сброса, либо сигнал сброса для выхода из режима SLEEP. Когда срабаты- вает сторожевой таймер, обнуляется бит ТО регистра STATUS. Сторожевой таймер может быть полностью отключен установкой в «О» бита WDTE слова состояния только при помощи программатора. Когда срабатывает сторожевой таймер, он не переводит вы- вод MCLR в низкий уровень. Сброс осуществляется только по внутренним цепям микроконтроллера. Номинальный период срабатывания сторожевого таймера со- ставляет 18 мс. Применяя предделитель с коэффициентом деле- ния до 1:128 можно реализовать интервал величиной до 2,3 с. Это интервал незначительно изменяется от кристалла к кристаллу и зависит от температуры и напряжения питания. В исключительных ситуациях, когда присутствует минимально возможное питающее напряжение и высокая температура, период срабатывания сторожевого таймера с предделителем может дости- гать нескольких секунд. Команда CLRWDT очищает сторожевой таймер и предделитель, если он подключен к WDT и предотвращает сброс устройства. Коман- 171
Микроконтроллеры Microchip® rfPIC™ да SLEEP также очищает сторожевой таймер и предделитель, если он подключен к WDT, что позволяет достичь максимального пребывания в режиме SLEEP до момента пробуждения по сбросу от WDT. Таблица 2.22 Перечень регистров, ассоциированных с WDT Адрес Название bit7 bite bit5 bit4 81 h OPTION_REG GPPU INTEDG TOCS ТОСЕ 2007h Слово конфиг. GP BODEN MCLRE PWRTE bit3 bit2 bit1 bitO Значение при сбро- се по пи- танию Значение при дру- гих вари- антах сброса PSA PS2 PS1 PSO 1111 1111 1111 1111 WDTE POSC2 POSC1 POSCO uuuu uuuu uuuu uuuu Обозначения: х = неопределенное, и = не изменяется, - = не применя- ется, читается как «О», q = значение зависит от условий. Выделенные за- ливкой биты не влияют на работу модуля. Энергосберегающий режим SLEEP Режим пониженного энергопотребления включается исполнени- ем команды SLEEP. Если в этот момент включен сторожевой тай- мер, то происходит следующее: - WDT обнуляется, но продолжает работать; - в регистре STATUS обнуляется бит PD: - устанавливается бит ТО; - тактовый генератор процессора отключается; - порты ввода-вывода сохраняют свое состояние, имевшееся до выполнения команды SLEEP (высокий уровень, низкий уровень или высокоимпедансное состояние). Для уменьшения потребляемого тока в этом режиме, все выво- ды портов, находящиеся в высокоимпедансном состоянии, и вывод Т0СК1 можно соединить с VDD или с Vss для устранения хаотичных переключений «плавающим» входным напряжением. Внимание! В фирменной документации не очень удачно опи- сан этот момент, из-за чего можно предположить, что в режиме SLEEP нужно соединять все порты ввода-вывода с выводами пи- тания, причем напрямую. Разумеется, это неправильно! Неис- пользуемые выводы действительно можно (и нужно) соединить с 172
Глава 2. Микроконтроллер-передатчик rfPIC12F675 «землей» или питающим проводом, сохраняя их высокоимпеданс- ное состояние. Выводы, работающие в качестве входов, можно подключить к питающей шине через резисторы порядка 10 кОм. Если буквально следовать рекомендации руководства DS70091A, можно вывести микросхему из строя. В руководствах к другим микроконтроллерам этот момент описан правильно. Если вывод MCLR используется как вход сигнала сброса, на нем присутствует высокий логический уровень. Сигнал сброса, вырабаты- ваемый сторожевым таймером, не меняет уровень на выводе MCLR. Возврат из режима SLEEP Микроконтроллер может выйти из режима SLEEP по одному из трех событий: - внешний сброс по выводу MCLR: - по сигналу от WDT (если WDT включен); - по одному из прерываний: от вывода GP2/INT, от изменения состояния портов или от периферийных модулей. Первое событие приводит к полному и безусловному сбросу уст- ройства. Остальные два основаны на продолжении исполнения программы. Для определения события, которое привело к выходу из SLEEP, можно использовать биты ТО и PD, анализируя их со- держимое в соответствии с табл. 2.17. Когда выполняется инструкция SLEEP, происходит предзахват следующей инструкции по адресу РС+1. Если разработчик рассчи- тывает, что устройство должно выходить из SLEEP по прерыванию, с последующей его обработкой, то должен быть установлен соот- ветствующий разрешающий бит. Устройство выйдет из режима SLEEP независимо от состояния бита GIE. Различие проявится да- лее. Если бит GIE сброшен, то выйдя из SLEEP по прерыванию процессор, тем не менее, продолжит исполнение обычной про- граммы. Если же бит GIE установлен, то процессор сначала выпол- нит предзахваченную команду (которая следовала сразу за коман- дой SLEEP) и затем перейдет на вектор прерывания 0004h. Если выполнение предзахваченной команды нежелательно, то после команды SLEEP следует помещать команду NOP. Внимание! Если глобальный бит GIE сброшен, но какое-либо прерывание разрешено и установлен соответствующий ему флаг- бит, то процессор выйдет из SLEEP. Команда SLEEP при этом бу- дет отработана полностью. Необходимо программно сбрасывать все флаги прерываний перед исполнением команды SLEEP. Сторожевой таймер сбрасывается при выходе из SLEEP незави- симо от того, что стало причиной выхода. 173
Q11 Q2| Q31 Q4; Q11 Q2|Q31 Q< Q1| I Q1 IQ21 Q31 Q4J Q11 Q2| Q3| Q< Q11 Q2| Q31 Q< Q11 Q2| Q31 Q4 OSC1 CLKOUT*4) ; Tost*2) / INT Флаг INTF (INTCON<1>) Бит GIE (INTCON<7>) PC Захваченные j команды ] Исполняемые' команды ] 1 1 : ; : у Задержка прерывания , 1 1 1 (2) : : • • • Процесор 4 \ ! : : г sleep * • L- X PC X РС+1 .х РС+2 X РС+2 X РС + 2 X 0004h X 0005h J (PC) = SLEEP (РС + 1) : (pc-п : sleep : (PC + 2) ; ; (0004h) (PC + 1) • Пустой цикл 1 Пустой цикл (оообЬ) ; (0004h) ; Примечания 1 Предполагается режим XT, HS или LP 2 Tost = 1024Tosc (чертеж не в масштабе). Для режима RC задержка примерно 1 мкс. 3 Предполагается GIE = Т В этом случае после выхода из SLEEP процессор переходит в подпрограмму обработки прерывания 4 Сигнал CLKOUT недоступен в режимах XT, HS, LP или ЕС, но показан на чертеже Микроконтроллеры Microchip® rfPIC' 2 Рис. 2.38. Выход из SLEEP через прерывание
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Внутрисхемное программирование Микроконтроллер rfPIC12F675 может быть запрограммирован непосредственно в готовом устройстве. Для подключения програм- матора потребуется лишь пять проводников: последовательные данные, тактирование, напряжение программирования, напряжение питания +5 В, общий провод. Это позволяет пользователю выпускать собранные платы с не- запрограммированными микросхемами и программировать их по мере надобности, внося индивидуальные номера, пароли и т.п. Кроме того, можно совершенствовать программное обеспечение в процессе производства изделий. Микроконтроллер переходит в режим программирования при удержании низкого уровня на выводах GP0 и GP1 в тот момент, ко- гда напряжение на выводе GP3/MCLR/VPP нарастает до уровня на- пряжения программирования. После этого GP0 становится входом данных, a GP1 входом тактовых импульсов. Оба входа в этом ре- жиме работают через триггер Шмитта. Программный счетчик устанавливается на адрес OOOOh. Затем в микроконтроллер передают 6-разрядную команду. В зависимости от этой команды микроконтроллер настраивается на чтение или за- пись. Затем 14-разрядные коды программы либо считываются, ли- бо записываются. С детальным описанием процесса программиро- вания можно ознакомиться в [9]. Типовое подключение для внутрисхемного программирования показано на рис. 2.39. Рис. 2.39. Типовое подключение при внутрисхемном программировании 175
Микроконтроллеры Microchip9 rfPIC”" Линии, используемые при программировании, отделены от ос- тальных цепей, могущих конфликтовать, при помощи резисторов. Резистор от вывода MCLR на линию питания может не потребо- ваться, если вывод сконфигурирован, как GP3. Не следует подключать к выводу GP3/MCLR/VPP чувствительные элементы схемы, которые могут быть повреждены напряжением VPP при программировании. Внутрисхемная отладка Фирменные средства отладки, равно как и средства отладки сто- ронних производителей не обеспечивают возможность эмуляции ра- диочастотной части микроконтроллера. Однако процессорная часть эмулируется имеющимися средствами, предназначенными для отлад- ки устройств на основе PIC12F675. На время отладки процессорной части можно использовать собственно микроконтроллер PIC12F675. Для отладки устройства следует изготовить полнофункциональ- ную плату прототипа, содержащую все цифровые, аналоговые и ВЧ цепи. Вместо микроконтроллера rfPIC12F675 следует смонтировать гнездо DIP. В это гнездо можно установить микроконтроллер PIC12F675, сохранив всю функциональность цифровой части схе- мы, в соответствии с рис. 2.40. Более интересный способ представлен на рис. 2.41. В данном случае на отладочной плате монтируется дополнительный разъем, в который может быть вставлен шлейф эмулятора. Кроме разъема, на плате монтируется и rfPIC12F675, но часть его выводов, соот- ветствующая выводам отладочного разъема, временно не припаи- вается к дорожкам платы. Отладочный разъем может быть остав- лен и на плате готового устройства, если предусматривается воз- можность внутрисхемного программирования. 176
Гпава 2. Микроконтроллер-передатчик rfPIC12F67S Рис. 2.41. Применение дополнительного разъема для отладки Как вариант, отладочный разъем можно припаять с обратной стороны платы, (рис. 2.42). Такой вариант удобен при внутрисхем- ном программировании. Рис. 2.42. Применение разъема с обратной стороны платы Система команд Набор команд rfPIC12F675 можно разделить на три основных группы: - байт-ориентированные операции; - бит-ориентированные операции; - операции с литералами и управляющие. Команда представляет собой 14-разрядное слово, состоящее из кода команды (OPCODE) и одного или нескольких операндов. Фор- мат каждой группы показан на рис. 2.43. 177
Микроконтроллеры Microchip® rfPIC™ Байт-ориентированные операции с регистрами 13 8 7 6 О OPCODE d f (регистр) d = 0 - регистр назначения W d = 1 - регистр назначения f f = 7-разрядный адрес регистра Бит-ориентированные операции с регистрами 13 10 9 7 6 0 OPCODE b (BIT #) f(регистр) b = 3-раз рядный номер бита f = 7-разрядный адрес регистра Операции с литералами и управляющие Обычные 13 8 7 0 OPCODE k(литерал) к = прямое 8-разрядное значение Только для команд call и goto 13 11 10 0 OPCODE k(литерал) к = прямое 11-разрядное значение Рис. 2.43. Формат различных групп инструкций В случае с байт-ориентированными командами, <4» представляет собой указатель на регистр (включая ячейки пользовательской памя- ти), над которым совершается операция, a «d» является указателем на приемник результата. Если d=0, то приемником является аккумулятор W, если d=1, то результат помещается в регистр, указанный в команде. В бит-ориентированных командах «Ь» является указателем на битовое поле, где значение b указывает на порядковый номер бита в регистре «f», над которым совершается действие. Для операций с литералами и управляющих команд «к» представ- ляет собой 8- или 14-разрядную константу или литеральное значение. Один командный цикл состоит из четырех периодов тактовой частоты. Поэтому при тактовой частоте 4 МГц обычная команда исполняется за 1 мс. Исключение составляют команды условного и безусловного перехода а также другие команды, в результате ко- торых изменяется содержимое программного счетчика. В таком 178
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 случае команда выполняется за два командных цикла. Во время второго цикла вычислительная часть микроконтроллера выполняет команду NOP (пустая операция). Во всех примерах команд мы будем использовать шестнадцате- ричный формат, обозначая его буквой «h». Для обеспечения совместимости с будущими изделиями катего- рически не рекомендуется использовать команды TRISIO и OPTIONI Операции «чтение-модификация-запись» Любая команда, в которой указатель на регистр фигурирует, как часть кода команды, является командой чтения-модификации- записи. Регистр прочитывается, данные модифицируются в соот- ветствии с командой, и результат сохраняется в соответствии с указателем приемника. Например, команда CLRF GPIO считывает GPIO, очищает все биты данных и помещает результат обратно в GPIO. Непреднаме- ренным результатом этой команды, кстати, будет то, что набор флагов GPIF будет очищен. Таблица 2.23 Набор команд rfPIC12F675 Мнемоника, операнды Краткое описание Циклы Влияние на фла- ги При- ме- чание Байт-ориентированные операции с регистрами ABDWF f, d Сложение аккумулятора и регистра f 1 С, DC, Z 1,2 ANDWF f, d Логическое И между аккуму- лятором и f 1 Z 1,2 CLRFf Очистка регистра f 1 Z 2 CLRW Очистка аккумулятора W 1 Z — COMF f, d Комплемент (дополнение) f 1 Z 2 DECF f, d Декремент f 1 Z 2 DECFSZ f, Декремент f, переход если 0 1 — 1,2,3 INCF f, d Инкремент f 1 Z 1,2 INCFSZ f, d Инкремент f, переход, если 0 1(2) — 1,2,3 IORWF f, d Включающее ИЛИ между аккумулятором и f 1 Z 1,2 179
Микроконтроллеры Microchip9 rfPIC™ Мнемоника, операнды Краткое описание Циклы Влияние на фла- ги При- ме- чание MOVF f, d Перемещение f 1 Z 1,2 MOVWF f Перемещение значения из W Bf 1 - — NOP Нет операции 1 — — RLF f, d Сдвиг f влево через перенос 1 С 1,2 RRF f, d Сдвиг f вправо через пере- нос 1 с 1,2 SUBWF f, d Вычитание W из f 1 с, DC, Z 1,2 SWAPF f, d Поменять местами полу- байты f 1 - 1,2 XORWFf, d Исключающее ИЛИ между аккумулятором и f 1 Z 1,2 Бит-ориентированные операции с регистрами BCF f, b Очистка бита номер b в ре- гистре f 1 - 1,2 BSF f, b Установка бита номер b в регистре f 1 - 1,2 BTFSC f, b Проверка бита b в регистре f, переход если 0 1(2) — 3 BTFSS f, b Проверка бита b в регистре f, переход если 1 1(2) - 3 Операции с литералами и управляющие ADDLW k Сложение константы к и аккумулятор 1 с, DC, Z — ANDLW k Логическое И между кон- стантой и W 1 Z — CALLk Вызов подпрограммы по адресу к 2 - — CLRWDT Сброс сторожевого таймера 1 ТО, PD — GOTOk Безусловный переход на адрес к 2 — - IORLW k Включающее ИЛИ между константой и W 1 Z — 180
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Мнемоника, операнды Краткое описание Циклы Влияние на фла- ги При- ме- чание MOVLW к Занесение константы в ак- кумулятор W 1 - — RETFIE Выход из прерывания 2 — — RETLW к Выход из подпрограммы, константа к в W 2 — — RETURN Выход из подпрограммы 2 — — SLEEP Перейти в режим SLEEP 1 ТО. PD - SUBLW к Вычитание W из константы 1 с, DC, Z — XORLW к Исключающее ИЛИ констан- ты и W 1 Z - Примечания: 1. Если регистр модифицируется, как функция от самого себя (напр. MOVF GPIO, 1) то будет использовано значение, которое реально присут- ствует на выводе. Например, если в защелке порта защелкнуто значение «1», но порт настроен на ввод и внешняя схема тянет его в низкий уро- вень, то будет считано и записано обратно в защелку значение «О», а не «1»! 2. Если эта инструкция выполняется над регистром TMRO (и где это применимо, d=1), то предделитель будет сброшен, если он подключен к модулю TimerO. 3. Если счетчик команд изменен или тест на условие истинный, испол- нение команды требует два цикла. Второй цикл выполняется процессором как NOP. Описание инструкций ADDLW Add Literal and W Синтаксис Операнды Действие Влияет на флаги: [label] ADDLW k 0<f<255 (W) + (k) (W) C, DC, Z Содержимое регистра W суммируется с восьми- Описание битной константой к и результат помещается в аккумулятор W. Пример ADDLW 0x3F 181
Микроконтроллеры Microchip9 rfPIC™ ADDWF Add W and F Синтаксис [label] ADDWF f, d Операнды 0<f<127 de [0,1] Действие Влияет на флаги: (W) + (f) (dest) C, DC, Z Содержимое регистра W суммируется с содержи- мым регистра f и результат помещается в регистр Описание f если d=1 и в аккумулятор W если d=0. Вместо значений 0 и 1 можно применять, соответственно, символы W и f. Пример ADDWF MY_REG, 0 ANDLW AND Literal with W Синтаксис Операнды Действие Влияет на флаги: [label] ANDLW k 0<k<255 (W) .AND. (k) (W) Z Между содержимым регистра W и 8-битной кон- Описание стантой к выполняется операция «логическое И». Результат помещается в регистр W. Пример ANDLW ОхЗА ANDWF AND W with F Синтаксис [label] ANDWF f, d Операнды 0<f<127 de[0,1] Действие Влияет на флаги: (W) .AND. (f) (dest) Z Между содержимыми регистров W и f выполняется операция «логическое И». Результат помещается Описание в регистр f, если d=1 и в регистр W, если d=0. Вместо значений 0 и 1 можно применять, соответ- ственно, символы W и f. Пример ANDWF MY_REG, 1 182
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 BCF Bit Clear F Синтаксис [label] BCF f, b Операнды 0£f£127 0<b<7 Действие Влияет на флаги: 0 -» (f<b>) Нет Описание Сбрасывает в «0» бит номер b в регистре f. Пример BCF MY_REG, 3 ;сбросить в 0 бит 3 регистра MY.REG BSF Bit Set F Синтаксис [label] BSF f, d Операнды 0<f<127 0<b<7 Действие Влияет на флаги: 1 (f<b>) Нет Описание Устанавливает в «1» бит номер b в регистре f. Пример BSF MY_REG, 3 установить в 1 бит 3 регистра MY_REG BTFSC Bit Test F Skip if Clear Синтаксис [label] BTFSC f, b Операнды 0<f<127 0<b<7 Действие Влияет на флаги: skip next command if (f<b>)=0 Нет Если бит b регистра f равен 1, выполняется сле- дующая по порядку команда. Если бит b регистра f Описание равен 0, следующая команда пропускается, про- граммный счетчик инкрементируется. В этом слу- чае выполнение занимает 2 машинных цикла. BTFSC MY_REG, 2 тестируем бит 2 регистра Пример MY_REG GOTO LABEL_ONE ;если1, переход на метку 183
Микроконтроллеры Microchip9 rfPIC™ LABEL_ONE ADDWF MYREG ;если 0, выполняется сложе- ние с W BTFSS Bit Test F Skip if Set Синтаксис [label] BTFSS f, d Операнды 0<f<127 0<bS7 Действие Влияет на флаги: skip next command if (f<b>)=1 Нет Если бит b регистра f равен 0, выполняется сле- дующая по порядку команда. Если бит b регистра f Описание равен 1, следующая команда пропускается, про- граммный счетчик инкрементируется. В этом слу- чае выполнение занимает 2 машинных цикла. BTFSC MY_REG, 2 тестируем бит 2 регистра MY_REG Пример GOTO LABEL-ONE ;если 0, переход на метку LABEL-ONE ADDWF MYREG ;если 1, выполняется сложе- ние с W CALL Call subroutine Синтаксис Операнды [label] CALL k 0<Sk«S2047 (PC) + 1 TOS Действие k-> PC<10:0> (PCLATH<4:3>) (PC<12:11 >) Влияет на флаги: Нет Адрес следующей команды загружается в стек в качестве адреса возврата. Происходит переход на Описание адрес подпрограммы, указанный в константе к. В ассемблере вместо константы используется тек- стовая метка. Команда выполняется за два цикла. CALL LOADER Пример ... ;текст основной программы 184
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 LOADER ... ;текст подпрограммы RETURN CLRF Clear F Синтаксис Операнды [label] CLRF f 0^127 Действие OOh (f) 1 Влияет на флаги: z Описание Содержимое регистра f полностью очищается, устанавливается флаг Z. Пример CLRF MY_REG CLRW Clear W Синтаксис Операнды [label] CLRW Нет Действие OOh (W) 1 Влияет на флаги: Z Описание Содержимое регистра W полностью очищается, устанавливается флаг Z. Пример CLRW CLRWDT Clear WatchDog Timer Синтаксис Операнды [label] CLRWDT Нет OOh WDT Действие 0 (предделитель WDT) 1 -»TQ 1 PD Влияет на флаги: IQ, PD Описание Сбрасывает сторожевой таймер и очищает пред- делитель, если он подключен к сторожевому тай- 185
Микроконтроллеры Microchip9 rfPIC™ Пример меру. CLRWDT COMF Complement F Синтаксис [label] COMF f, d Операнды 0<f<127 de[O,1] Действие (dest) Влияет на флаги: z Инверсия содержимого регистра f. Если d=0, ре- Описание зультат сохраняется в W, если d=1, результат со- храняется в регистре f. Вместо значений 0 и 1 можно применять, соответственно, символы W и f. Пример COMF MY_REG, W диверсия MY_REG, ре- зультат в W DECF Decrement F Синтаксис [label] DECF f, d Операнды 0<f<127 de[0,1] Действие (f) - 1 (dest) Влияет на флаги: Z Описание Из содержимого регистра f вычитается единица. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значе- ний 0 и 1 можно применять, соответственно, сим- волы W и f. Пример DECF MY.REG DECFSZ Decrement F, Skip if Zero Синтаксис [label] DECFSZ f, d Операнды 0<f£127 de[0,1] Действие (f) - 1 (dest) skip if result = 0 186
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Влияет на флаги: Нет Из содержимого регистра f вычитается единица. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значе- ний 0 и 1 можно применять, соответственно, сим- Описание волы W и f. Если результат не равен 0, выполня- ется следующая по порядку команда. Если ре- зультат равен 0, следующая команда пропускает- ся, программный счетчик инкрементируется. В этом случае выполнение занимает 2 машинных цикла. DECFSZ MY.REG, 0 GOTO RES_ZERO ;перейти если 0 Пример RES.ZERO ... GOTO Goto label (unconditional branch) Синтаксис Операнды [label] GOTO k 0<k<2047 Действие k-> (PC<10:0>) (PCLATH<4:3>) (PC<12:11>) Влияет на флаги: Нет Описание Безусловный переход на адрес к. В ассемблере вместо константы используется текстовая метка. GOTO NEW.ADDR Пример NEW.ADDR ... INCF Increment F Синтаксис [label] INCF f,d Операнды 0<f<127 de[0, 1] Действие Влияет на флаги: (f) + 1 -» (dest) Z Описание К содержимому регистра f прибавляется 1. Если 187
Микроконтроллеры Microchip® rfPIC™ d=0, результат сохраняется в W, если d=1, резуль- тат сохраняется в регистре f. Вместо значений 0 и 1 можно применять, соответственно, символы W и f. Пример INCF MY_REG, 0 INCFSZ Increment F, Skip if Zero Синтаксис [label} INCFSZ f, d Операнды 0<f<127 de[O, 1] Действие (f) + 1 (dest) skip if result = 0 Влияет на флаги: Нет К содержимому регистра f прибавляется единица. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значе- ний 0 и 1 можно применять, соответственно, сим- Описание волы W и f. Если результат не равен 0, выполня- ется следующая по порядку команда. Если ре- зультат равен 0, следующая команда пропускает- ся, программный счетчик инкрементируется. В этом случае выполнение занимает 2 машинных цикла. INCFSZ MY.REG, 0 GOTO RES_ZERO ;перейти если 0 Пример RES.ZERO ... IORLW Inclusive OR Literal with W Синтаксис Операнды Действие Влияет на флаги: [label] IORLW k 0<k£255 (W) .OR. k (W) Z Выполняется операция «логическое ИЛИ» между Описание содержимым регистра W и восьмибитной констан- той к. Результат помещается в регистр W. 188
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Пример IORLW 0x15 IORWF Inclusive OR W with F Синтаксис [label] IORWF f, d Операнды 02f<127 de[0, 1] Действие Влияет на флаги: (W) .OR. (f) (dest) Z Выполняется операция «логическое ИЛИ» между содержимым регистра W и содержимым регистра Описание f. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значе- ний 0 и 1 можно применять, соответственно, сим- волы W и f. Пример IORWF MY_REG, 0 MOVLW Mov Literal to W Синтаксис Операнды Действие Влияет на флаги: [label] MOVLW k 0<Sk«S255 k-> (W) Нет Восьмибитная константа k помещается в регистр Описание W. Если значение к не указано, оно воспринима- ется ассемблером как 0. Пример MOVLW 0x15 MOVF Move F Синтаксис [label] MOVF f, d Операнды 0<te127 de[0, 1] Действие Влияет на флаги: (f) (dest) Z Описание Значение из регистра f переносится в приемник, определяемый значением d. Если d=0, результат сохраняется в W, если d=1, результат сохраняется 189
Микроконтроллеры Microchip9 rfPIC” в регистре f. Вместо значений 0 и 1 можно приме- нять, соответственно, символы W и f. Значение d=1 используется для тестирования на ноль со- держимого регистра f, поскольку в этом случае содержимое регистра не изменяется, но флаг2 выставляется в соответствии со значением реги- стра. MOVF MY_REG, 0 ;перенос содержимого Пример MY.REG в W. MOVF MY_REG, 1 тестирование содержимо- го MY.REG. MOVWF Move W to F Синтаксис Операнды Действие Влияет на флаги: [label] MOVWF f 0<f<127 (W) -> (f) Нет Описание Пример Содержимое регистра W переносится в регистр F MOVWF MY.REG NOP No Operation Синтаксис Операнды Действие Влияет на флаги: [label] NOP Нет Нет Нет Описание Арифметико-логическое устройство процессора не выполняет никакую операцию. Через четыре такта тактовй частоты (один машинный цикл) процессор переходит к исполнению следующей команды. Пример NOP RETFIE Return From Interrupt Синтаксис Операнды [label] RETFIE Нет Действие 1 -» GIE (TOS) -» (PC) 190
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Влияет на флаги: Нет Описание Возврат из прерывания. В программный счетчик загружается адрес возврата из стека. Пример RETFIE RETLW Return with Literal in W Синтаксис Операнды [label] RETLW k 0<k<255 Действие k(W) (TOS) (PC) Влияет на флаги: Нет Возврат из подпрограммы с константой в аккуму- Описание ляторе. В регистр W загружается восьмибитный литерал к. В программный счетчик загружается адрес возврата из стека. Пример RETLW OxFE RETURN Return From Subroutine Синтаксис Операнды Действие Влияет на флаги: [label] RETURN Нет (TOS) (PC) Нет Описание Возврат из подпрограммы. В программный счетчик загружается адрес возврата из стека. Пример RETURN RLF Rotate Left F through carry Синтаксис [label] RLF f, d Операнды 0<f<127 de[O, 1] Действие <- (C) <- (register) «- I >T Влияет на флаги: c 191
Микроконтроллеры Microchip® rfPIC™ Содержимое регистра f побитно сдвигается влево через флаг переноса С. Если d=0, результат со- Описание храняется в W, если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно приме- нять, соответственно, символы W и f. Пример RLF MY_REG, 0 RRF Rotate Right F through carry Синтаксис Операнды [label] RRF f, d 0<f<127 de[0, 1] Действие ->(C) ->(register) -» T« I Влияет на флаги: c Описание Содержимое регистра f побитно сдвигается впра- во через флаг переноса С. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно приме- нять, соответственно, символы W и f. Пример RRF MY.REG, 0 SLEEP SLEEP into standby mode Синтаксис Операнды [label] SLEEP Нет OOh (WDT) Действие 0 (WDT prescaler) 1 -»TO O-»PD Влияет на флаги: TO, PD Описание Переводит процессор в энергосберегающий ре- жим SLEEP и останавливает тактовый генератор. Пример SLEEP SUBLW Subtract W from Literal Синтаксис Операнды [label] SUBLW k 0<k<255 192
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Действие Влияет на флаги: (k)-(W)-»(W) С, DC, Z Описание Значение регистра W вычитается из константы к. Результат сохраняется в аккумуляторе. Пример SUBLW OxFE SUBWF Subtract W from F Синтаксис [label] SUBWF f, d Операнды 0<f<127 de[O,1] Действие Влияет на флаги: (f) - (W) (dest) C, DC, Z Значение регистра W вычитается из значения в регистре f. Если d=0, результат сохраняется в W, Описание если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно применять, соответ- ственно, символы W и f. SUBWF MY_REG, 1 Пример 1 До выполнения MY_REG=3, W=2, С=?, Z=? После выполнения MY_REG=1, W=2, С=1, Z=0 Результат положительный. Пример 2 Примеры До выполнения MY_REG=2, W=2, С=?, Z=? После выполнения MY_REG=O, W=2, С=1, Z=1 Результат равен нулю. Пример 3 До выполнения MY_REG=1, W=2, С=?, Z=? После выполнения MY_REG=OxFF, W=2, С=0, Z=0 Результат отрицательный SWAPF Swap nibbles in F Синтаксис Операнды [label] SWAPF f, d 0<f<127 193
Микроконтроллеры Microchip9 rfPIC™ de[0,1] Действие (f<3:0>) -» (dest<7:4>) (f<7:4>) (dest<3:0>) Влияет на флаги: Нет Описание Старший и младший полубайты значения в реги- стре f меняются местами. Результат помещается в приемник, определяемый значением d. Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно применять, соответственно, символы W и f. Пример SWAPF MY_REG, 1 XORLW Exclusive OR Literal with W Синтаксис [label] XORLW k Операнды 0<k<255 Действие (W) .XOR. k (W) Влияет на флаги: Z Описание Между содержимым регистра W и восьмибитной константой к выполняется логическая операция «исключающее ИЛИ». Результат помещается в регистр W. Пример XORLW ОхСВ XORWF Exclusive OR W with F Синтаксис [label] XORWF f, d Операнды 0<f<127 de [0,1] Действие (W) .XOR. (f) (dest) Влияет на флаги: Z Описание Между содержимым регистра W и регистра f вы- полняется логическая операция «исключающее ИЛИ». Если d=0, результат сохраняется в W, если d=1, результат сохраняется в регистре f. Вместо значений 0 и 1 можно применять, соответственно, символы W и f. Пример XORWF MY_REG, 0 194
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Радиочастотная часть Радиопередающая часть микросхемы представляет собой пол- ностью интегрированный УКВ передатчик, поддерживающий ам- плитудную манипуляцию (ASK) и частотную манипуляцию (FSK). В состав передатчика входят кварцевый генератор, система ФАПЧ, усилитель мощности с открытым коллектором и управляющая логи- ка. Выпускается три модификации микросхемы, рассчитанные на разные частотные диапазоны: Обозначение Диапазон Модуляция rfPIC12F675K 290 ... 350 МГц ASK/FSK rfPIC12F675F 390 ... 450 МГц ASK/FSK rfPIC12F675H 850 ... 930 МГц ASK/FSK Структурная схема передатчика Структурная схема встроенного передатчика показана на рис. 2.44. В минимальный набор внешних компонентов входят: кварце- вый резонатор, разделительный конденсатор и фильтр петли ФАПЧ, состоящий из одного резистора и двух конденсаторов. Принцип работы ФАПЧ и остальных узлов радиопередающей части рассмотрен в гл.1, применительно к микроконтроллерам rfPIC12C509. Нет никаких принципиальных различий в функциони- ровании ФАПЧ и остальных функциональных узлов и для rfPIC12F675. Поэтому мы опустим подробное описание и лишь кратко отметим основные моменты. Необходимыми внешними компонентами для функционирования передатчика являются кварцевый резонатор, блокировочный кон- денсатор цепи питания, и от двух до семи согласующих элементов для достижения максимальной энергии излучения в антенне. Два управляющих сигнала от микроконтроллера подключаются через внешние соединения, что позволяет достичь большей свободы при разработке потребительских изделий. Питающее напряжение Напряжение на радиочастотную часть микросхемы подается от- дельно от процессорной части, через выводы VDDRF (питание) и Vssrf (общий провод). 195
Микроконтроллеры Microchip9 rfPIC™ RFENg} Логика управления передатчиком VDDRF VSSRF VSSRF DATAfsk[X} Ключ FSK ^FSKOUT Рис. 2.44. Структурная схема встроенного передатчика 196
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Вывод общего провода должен быть подключен к конструктив- ной «земле» печатной платы предельно коротким проводником. Общий провод процессорной части должен иметь одинаковый по- тенциал с общим проводом радиочастотной части. Но при этом пи- тание на радиопередатчик может подаваться от отдельного источ- ника. Важно лишь, чтобы напряжения на выводах RFEN и DATA находились в установленных пределах. Рекомендации по разработке печатной платы Старайтесь использовать предельно короткие питающие про- водники и источник питания с малым внутренним сопротивлением. Это позволит уменьшить уровень паразитных излучений и предот- вратить паразитное самовозбуждение передающей части. Настоя- тельно рекомендуется использовать двустороннюю печатную плату, у которой обратная металлизированная сторона используется в качестве общего провода. Для напряжений VDD и VDdrf должны ис- пользоваться независимые блокировочные конденсаторы, подклю- чаемые как можно ближе к соответствующим выводам микросхемы. Оба вывода Vssrf должны быть подключены к общему проводу через собственные переходы на печатной плате. Не следует использовать эти переходы для соединения с общим проводом других цепей. Кварцевый генератор Кварцевый генератор передатчика является независимым от кварцевого генератора микроконтроллера, он выполнен по схеме емкостной трехточки (генератор Колпитта) и является источником опорной частоты для системы ФАПЧ. Кварцевый резонатор или сигнал от внешнего источника опорной частоты подключается к вы- воду RFXTAL. Частота излучаемого сигнала в 32 раза больше опорной частоты. В пределах рабочего диапазона к частоте квар- цевого резонатора не предъявляется особых требований, и разра- ботчик может использовать резонаторы, изготовленные по индиви- дуальному заказу. При модуляции типа ASK резонатор может быть подключен не- посредственно между выводом RFXTAL и общим проводом, или последовательно с дополнительным конденсатором, предназна- ченным для смещения частоты, как показано на рис. 2.45. В табл. 2.24 приведен пример того, как подключение дополни- тельного конденсатора С1 смещает частоту стандартного кварцево- го резонатора номиналом 13,55МГц. 197
Микроконтроллеры Microchip® rfPIC™ Рис. 2.45. Подключение кварцевого резонатора при модуляции ASK Таблица 2.24 Влияние дополнительного конденсатора на частоту передачи С1, пФ Частота генератора, МГц Частота передачи (х32) 22 13,551438 433,646 39 13,550563 433,618 100 13,549844 433,595 150 13,549672 433,5895 470 13,549548 433,5856 1000 13,549344 433,579 Примечание: при стандартных условиях - ТА = 25"С, RFEN = 1, VDDRF = 3V, fXTAL = 13,55 МГц. Генерация включается при высоком логическом уровне на выводе RFEN. Для запуска генератора требуется приблизительно 1 мс. По- этому управление по выводу RFEN в подавляющем большинстве случаев нельзя использовать для модуляции. Обычно генератор включают до начала передачи данных и выдерживают защитный ин- тервал для запуска опорного генератора и вхождения ФАПЧ в режим слежения (см. гл.1). После окончания передачи данных генератор может быть вновь отключен для экономии энергии батареи. 198
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 Когда на выводе RFEN низкий уровень, передатчик переходит в режим чрезвычайно малого энергопотребления, усилитель мощно- сти отключается и опорный генератор останавливается. Амплитудная манипуляция (ASK) При использовании модуляции типа ASK происходит ступенча- тое управление выходной мощностью передатчика, как правило, с двумя значениями: включено и выключено. Управление происходит через вывод DATAASk- В зависимости от уровня на этом выводе, включается или выключается выходной усилитель мощности. Квар- цевый генератор передатчика при этом работает непрерывно. Данные могут быть приняты при помощи простейшего приемни- ка, снабженного фильтром и пиковым детектором. Более сложный супергетеродинный приемник, такой как rfRXD0420, позволяет зна- чительно увеличить дальность приема и снизить чувствительность к интерференции. В режиме ASK выводы DATAFSk и FSKqut не используются и должны быть подключены к общему проводу. Типовая схема вклю- чения в режиме ASK приведена на рис. 2.49. Если применяется достаточно широкополосный приемник, то конденсатор С1 можно исключить из схемы, соединив второй вывод кварца с общим про- водом напрямую. Если же требуется точная подгонка излучаемой частоты, то для этого используют конденсатор С1. Частотная манипуляция (FSK) При использовании модуляции типа FSK происходит ступенча- тое управление излучаемой частотой передатчика при помощи на- грузочного конденсатора С2, подключенного, как показано на рис. 2.46. Для коммутации дополнительного конденсатора используется внутренний ключ, соединенный с выводом FSKOUT. В зависимости от того, подключен или отключен нагрузочный конденсатор, излучается одна из двух основных частот. В отличие от режима ASK, так называемая центральная частота никогда не излучается. Эта частота является воображаемой средней точкой между двумя основными частотами и рассчитывается, как их сред- нее арифметическое. Важным параметром частотной манипуляции является частот- ная девиация, или сдвиг частоты. Эта величина показывает, на- сколько сильно излучаемые частоты смещены от центральной час- тоты: А/ = (/min - fmax)/2. Приведенная формула показывает величину сдвига в одну сторону от центральной частоты. 199
Микроконтроллеры Microchip9 rfPIC”" Рис. 2.46. Подключение нагрузочного конденсатора при модуляции FSK Если на выводе DATAfsk присутствует высокий логический уро- вень, то вывод FSKout отключен, и дополнительный конденсатор С2 не влияет на излучаемую частоту. При низком уровне на выводе DATAfsk вывод FSKout через внутренний ключ соединен с общим проводом и конденсатор С2 подсоединен параллельно конденсатору С1. Под влиянием суммарной емкости частота генерации кварца Нагрузочная емкость, пФ Рис. 2.47. Смещение частоты при модуляции FSK 200
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 сдвигается вниз, как показано на рис. 2.47. В режиме FSK на вывод DATAask должен быть постоянно подан высокий уровень, чтобы был включен выходной усилитель мощно- сти. Пример типовой схемы включения изображен на рис. 2.49, а в табл. 2.25 приведен пример взаимосвязи между емкостями конден- саторов, центральной частотой и величиной девиации. Таблица 2.25 Типовые центральные частоты и величина девиации С1, пФ Центральная частота (МГц) / девиация (КГц) С2 = 1000 пФ С2 = 100 пФ С2 = 47 пФ 22 433,612/34 433,619/27 433,625 / 21 33 433,604 / 25 433,610/19 433,614/14 39 433,598/20 433,604/14 433,608 /10 47 433,596/17 433,601/11,5 433,604 / 8 68 433,593/13 433,598/9 433,600 / 5,5 100 433,587 / 8 — — Примечание: при стандартных условиях - Та = 25"С, RFEN = 1, Vddrf = 3 В, fxTAL = 13,55 МГц. Внешний выход тактовых импульсов Если внешняя схема устройства требует тактирования со ста- бильной частотой, для этого можно использовать импульсы с выво- да REFCLK. Импульсы с этого вывода можно подавать непосредст- венно на входы T0CKI или T1CKI. Теоретически, этими импульсами можно было бы тактировать и процессорную часть, но для работы опорного генератора передатчика необходимо присутствие высоко- го уровня на выводе RFEN. Обычно уровнем на этом выводе управ- ляет сам микроконтроллер, включая излучение по мере необходи- мости. И тогда при отключенном излучении процессорная часть не будет тактироваться. Поэтому импульсы с вывода REFCLK нельзя использовать для тактирования процессорной части. В зависимости от модификации микросхемы, выходная частота REFCLK по разному соотносится с частотой опорного генератора. Для микросхем rfPIC12F675K и rfPIC12F675F это частота кварца, деленная на 4, а для rfPIC12F675H - деленная на 8. При разводке печатной платы настоятельно рекомендуется де- лать проводник, по которому передаются тактовые импульсы, как можно короче и располагать его как можно дальше от других про- 201
Микроконтроллеры Microchip9 rfPIC™ водников, чтобы уменьшить емкостную связь и наводки. Если про- водник REFCLK должен проходить рядом с выводами кварца или внешними элементами фильтра ФАПЧ, то их следует отделить друг от друга заземленными проводниками. Фазовая автоподстройка чстоты (ФАПЧ) Фильтр ФАПЧ. Вывод LF предназначен для подключения внеш- него фильтра ФАПЧ. Он соединен с внутренним узлом фильтра ФАПЧ микросхемы. В типовом включении этот вывод не использу- ется. Но в отдельных случаях может потребоваться подключить между этим выводом и общим проводом внешний конденсатор. Применение фильтров ФАПЧ подробно рассмотрено в [10]. Вывод LF можно использовать для целей тестирования. Подклю- чаемый к этому выводу щуп должен иметь высокий импеданс и ма- лую емкость. Измеряя промежуток времени между моментом подачи высокого уровня на вывод RFEN и моментом стабилизации напряже- ния на выводе LF, определяют минимальную задержку, которую не- обходимо выдерживать перед началом передачи данных. Петля ФАПЧ может войти в слежение быстрее, чем стабилизи- руется работа опорного кварцевого генератора. Когда напряжение на выводе LF достигнет 0,8 В, это означает, что излучаемая частота привязана к опорному кварцевому генератору. Процесс занимает около 150 мкс, необходимых для гарантированной привязки. По ис- течении этого интервала передатчик готов к передаче данных, если на выводе DATAask присутствует высокий уровень. Выходной усилитель мощности Подключаемый к антенне усилитель мощности построен по схе- ме с открытым коллектором. Выход усилителя через развязываю- щую цепь подключается к линии питания передатчика Vddrf- Для достижения максимальной мощности в антенне сопротивление на- грузки должно быть согласовано с выходным сопротивлением уси- лителя. Обычно бывает достаточно ВЧ трансформатора на полос- ковых линиях или схемы с отводными конденсаторами. Отсутствие согласования сопротивлений не приведет к порче микросхемы, но вызовет значительное увеличение излучения пара- зитных гармоник и снижение энергии полезного сигнала. Согласо- вание при помощи трансформатора описано в [11], согласование при помощи конденсатора в [12]. Величина излучаемой мощности может принимать пять дискрет- 202
Гпава 2. Микроконтроллер-передатчик rfPIC12F675 ных значений, от +9 дБм, до -70 дБм, в зависимости от напряжения на выводе PS. Поскольку к выводу PS подключен внутренний ис- точник тока 8 мкА, то получить нужное напряжение можно, подклю- чая резистор между выводом PS и общим проводом, как показано на рис. 2.50. В табл. 2.26 перечислено несколько допустимых зна- чений сопротивления регулирующего резистора. Таблица 2.26 Типовые значения резистора управления мощностью Ступень мощности Выходная мощность, ДБм Напряже- ние на вы- воде PS Сопротивле- ние R1, кОм Потреб- ляемый ток, мА 4 9 1,6 не подключен 10,7 3 2 0,8 100 кОм 6,5 2 -4 0,4 47 кОм 4,7 1 -12 0,2 22 кОм 3,5 0 -70 0,1 Заземлен 2,7 При разработке устройства следует стараться использовать ми- нимально возможную энергию излучения. Причины очевидны: эко- номия энергии батарейки, уменьшение паразитных излучений, уменьшение помех другим радиочастотным устройствам. Однако снижение мощности излучения требует увеличения эффективности передающей антенны. Контроль питающего напряжения Передатчик микросхемы rfPIC12F675 имеет встроенную схему контроля питающего напряжения. Если напряжение источника пи- тания падает до уровня 1,85 В, то усилитель мощности отключается для предотвращения неуправляемого излучения. WPIC12F675 VPS | ф IPS = 8 мкА Г PS гЦ К схеме R1 управления Ц мощностью Рис. 2.48. Управление мощностью передатчика 203
204 Типовая схема включения в режиме ASK С1 может быть закорочен R1 может быть удален Voo GP5/T1CKI/OSC1/CLKIN GP4/AN3TT1G/OSC2/CLKOUT GP3/MCLR/Vpp RFXTAL RFENIN CLKOUT PS Voorf Vssrf U1 rfPIC12F675K Литиевая батарейка ВТ1 CR2032 ЗВ 20 19 18 17 16 15 Vss GP0/AN0/CIN+/ICSPDAT GP1/AN1/CINWref/ICSPCLK GP2/AN2/TOCKI/INT/COUT FSKout DATAfsk DATAask LF Vssrf ANT I—i С5 100 120 нГн R2 Петлевая антенна Микроконтроллеры Microchip9 rfPIC' 2 С7 Рис. 2.49. Пример типовой схемы передатчика с амплитудной манипуляцией
Типовая схема включения в режиме FSK С1 39 СЗ 01МК С2 юоо _Гх1 ? 13,55 МГц Vdd GP5/T1CKI/OSC1 /CLKIN GP4/AN3/T1G/OSC2/CLKOUT GP3/MCLRA/PP RFXTAL RFENIN CLKOUT PS Vddrf Vssrf Литиевая батарейка ВТ1 CR2032 ЗВ 20 19 18 17 16 Гпава 2. Микроконтроллер-передатчик rfPIC12F675 U1 rtPIC12F675K Vss GP0/AN0/CIN+/ICSPDAT GP1/AN1/CINWref/ICSPCLK GP2/AN2/T0CKI/INT/COUT FSKout DATAfsk DATAask LF Vssrf : ANT 120 нГн R2 Петлевая антенна 205 С7 Рис. 2.50. Пример типовой схемы передатчика с частотной манипуляцией
Глава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 Микросхемы (1RXD0420 и rfRXD0920 представляют собой ми- ниатюрные одночастотные радиоприемники, построенные по супер- гетеродинной схеме с однократным преобразованием частоты и требующие минимального количества внешних деталей для по- строения законченного радиоприемного устройства. Между собой они отличаются только рабочим диапазоном частот: rfRXD0420 ра- ботает в диапазоне частот 300...450 МГц, a rfRXD0920 в диапазоне 800...930 МГц. Независимо от диапазона, микросхемы имеют одинаковую ар- хитектуру, которая позволяет сконфигурировать их для приема сиг- налов с амплитудной манипуляцией (ASK), частотной манипуляци- ей (FSK) или частотной модуляцией (FM). На основе этих микро- схем могут быть построены устройства, предназначенные для приема как цифровых, так и аналоговых сигналов. Рабочие диапазоны частот и типы модуляции принимаемого сигнала обеспечивают полную совместимость с такими радиопере- дающими приборами компании Microchip, как rfPIC и rfHCS. Для расширения динамического диапазона и увеличения даль- ности приема в состав микросхемы входит малошумящий антенный усилитель с регулируемым коэффициентом усиления. Усиление можно выбирать из двух значений, меньшего (LNAgain = 0) и боль- шего (LNAgain = 1). Значение промежуточной частоты можно выбирать при помощи внешнего керамического фильтра. Значение ПЧ может находиться в пределах от 455 кГц до 21,4 МГц. В качестве фильтра ПЧ можно использовать очень распространенный и недорогой керамический фильтр на 10,7 МГц. Микросхемы приемника имеют встроенный измеритель уровня входного сигнала, который можно использовать для индикации уровня, а также для демодуляции сигнала с амплитудной манипу- ляцией. Параметры rfRXD0420 по постоянному и переменному току при- ведены в табл. 3.1,3.2, а параметры rfRXD0920 в табл. 3.3, 3.4 206
Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 Основные электрические параметры Таблица 3.1 Параметры rfRXD0420 по постоянному току Обо- значе- ние Параметр Значение Ед. изм. Примеча- ние мин. тип. макс. Vcc Напряжение питания 2,5 — 5,5 в frt<400 2,7 — 5,5 в frt > 400 ISTDBY Потребляемый ток в режиме ожидания — - 100 нА ENRX = 0 Ice Потребляемый ток 5,0 6,5 8,0 мА LNAgain = 1 6,5 8,2 10,0 мА LNAgain = 0 VoPA — -20 — 20 мВ IOPA — -50 — 50 нА I BIAS — -100 100 нА Vrssi Напряжение на инди- каторе уровня сигнала 0,5 1,0 1,5 В LNAgain = 1 1,25 1,9 2,45 в LNAgain = 0 Параметры даны для Vcc=3B, 23*С Таблица 3.2 Параметры rfRXD0420 по переменному току Обо- значе- ние Параметр Значение Ед. изм. Примеча- ние мин. тип. макс. Tfsk Время готовности для FSK/FM — - 0,9 мс ENRX= =0 —> 1 Task Время готовности для ASK - R1xC1 +Tfsk мс №1 — Чувствительность (узкополосная FSK) - -111 — ДБм №2 - Чувствительность (широкополосная FSK) — -104 — ДБм №3 207
Микроконтроллеры Microchip9 rfPIC™ Обо- значе- ние Параметр Значение Ед. изм. Примеча- ние мин. тип. макс. — Чувствительность (узкополосная ASK) — -109 - ДБм №4 — Чувствительность (широкополосная ASK) — -106 - ДБм №5 — Максимальный уро- вень входного сигнала (FSK/FM) - 0 - ДБм LNAgain = 1 - Максимальный уро- вень входного сигнала (ASK) — -10 — ДБм LNAgain = 1 Параметры даны для Vcc=3B, 23"С, fri = 433.6 МГц, ПЧ = 10.7 МГц. Примечания: 1. Зависит от постоянной времени детектора ASK. 2. Полоса ПЧ = 40кГц, Af = ±15кГц, BER S ЗхЮ’3. 3. Полоса ПЧ = 150 кГц, Af = ±50кГц, BER S ЗхЮ’3. 4. Полоса ПЧ = 40 кГц, BER S ЗхЮ’3. 5. По- лоса ПЧ = 150 кГц, BER S ЗхЮ’3. Таблица 3.3 Параметры rfRXD0920 по постоянному току Обо- значе- ние Параметр Значение Ед. изм. Примеча- ние мин. тип. макс. Vcc Напряжение питания 2,5 — 5,5 в frt < 900 МГц 3,3 — 5,5 в frf > 900 МГц ISTDBY Потребляемый ток в режиме ожидания — — 100 нА ENRX = 0 Icc Потребляемый ток 6,0 7,5 9,0 мА LNAgain = 1 7,5 9,2 11,0 мА LNAgain = 0 VoPA — -20 — 20 мВ IOPA — -50 — 50 нА I BIAS — -100 100 нА 208
Гпаеа 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 Обо- значе- ние Параметр Значение Ед. изм. Примеча- ние мин. тип. макс. Vrssi Напряжение на инди- каторе уровня сигнала 0,5 1,0 1,5 в LNAgain = 1 1,25 1,9 2,45 в LNAgain = 0 Параметры даны для Vcc=3B, 23’С Таблица 3.4 Параметры rfRXD0920 по переменному току Обо- значе- ние Параметр Значение ЕД. ИЗМ. Примеча- ние мин. тип. макс. Tfsk Время готовности для FSK/FM — — 0,9 мс ENRX= =0 —> 1 Task Время готовности для ASK — — R1xC1 +Tfsk мс №1 — Чувствительность (узкополосная FSK) - -109 - ДБм №2 — Чувствительность (широкополосная FSK) — -102 - ДБм №3 — Чувствительность (узкополосная ASK) - -108 — ДБм №4 — Чувствительность (широкополосная ASK) — -104 — ДБм №5 — Максимальный уро- вень входного сигнала (FSK/FM) — 0 — ДБм LNAgain = 1 — Максимальный уро- вень входного сигнала (ASK) — -10 - ДБм LNAgain = 1 Параметры даны для Vcc=3B, 23’С, frt = 433,6 МГц, ПЧ = 10,7 МГц. Примечания: 1. Зависит от постоянной времени детектора ASK. 2. По- лоса ПЧ = 40 кГц, At = ±15 кГц, BER < 3x10'3. 3. Полоса ПЧ = 150 кГц, Af = ±50 кГц, BER £ 3x10'3. 4. Полоса ПЧ = 40 кГц, BER < 3x10’3. 5. Полоса ПЧ = 150 кГц, BER<3x10’3. 209
Микроконтроллеры Microchip9 rfPIC™ Расположение и назначение выводов Микросхемы rfRXD0420 и rfRXD0920 выпускаются в 32- выводных пластмассовых корпусах типа LQFP. Габариты корпуса 7x1,4 мм. Расположение и назначение выводов не зависит от час- тотной модификации микросхемы. Расположение выводов показано на рис. 3.1, а назначение описано в табл.3.5. LQFP ЖЖ Vss LNAgain LNAout 1IFlN Vss 1IF+ 11F- Vdd 1 24 23 rfRXD0420 22 ш|5 rfRXD0920 20 Ш 6 19 Ш7 18 Ш 8 17 DEMOUT- DEMOUT+ VSS RSSI ОРА+ ОРА- ОРА Vdd Рис. 3.1. Расположение выводов микросхем rfRXD0420 и rfRXD0920 Таблица 3.5 Назначение выводов микросхем rfRXD0420 и rfRXD0920 Обозна- чение Номер вывода Тип вывода Тип бу- фера Описание LNAgain 2 I CMOS Управление усилением МШУ LNAout 3 О Analog Выход МШУ (открытый коллек- тор) 1IFin 4 I Analog Вход 1 -го смесителя 1IF+ 6 - Analog Выход MIXER1 (открытый кол- лектор), неинвертирующий вход предусилителя ПЧ 210
Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 Обозна- чение Номер вывода Тип вывода Тип бу- фера Описание 1IF- 7 — Analog Выход MIXER1 (открытый кол- лектор), инвертирующий вход предусилителя ПЧ IIFout 9 о Analog Выход 1-го смесителя 2IF.N 11 I Analog Вход усилителя-ограничителя ПЧ FBC1 12 — Analog Вывод для подключения внешне- го конденсатора цепи обратной связи усилителя-ограничителя FBC2 13 — Analog Вывод для подключения внешне- го конденсатора цепи обратной связи усилителя-ограничителя 2IFOUT 15 о Analog Выход усилителя-ограничителя ПЧ DEMin 16 I Analog Вход демодулятора ОРА 18 о Analog Выход ОУ ОРА- 19 I Analog Вход ОУ (обратный) ОРА+ 20 I Analog Вход ОУ (прямой) RSSI 21 о Analog Выход индикатора уровня сигнала DEMout+ 23 о Analog Выход демодулятора (позитив- ный) DEMqut- 24 о Analog Выход демодулятора (негатив- ный) XTAL 26 I Analog Вход кварцевого генератора ENRX 28 I CMOS Вход включения приемника LF 29 I Analog Вывод подключения внешнего фильтра ФАПЧ. Общая точка выхода источника тока подкачки и входа ГУ. LNAin 31 I Analog Вход малошумящего усилителя Vdd 8, 14, 17,27,32 р Положительный вывод питания Vss 1,5, 10,25,30 р Общий провод Обозначения: I - вход, О - выход, Р - питание, CMOS - совместимый по уровням входа и выхода с CMOS-логикой, Analog - аналоговый тип ситала. 211
Микроконтроллеры Microchip9 rfPIC1" Структурная схема Приемники rfRXD0420/0920 построены по супергетеродинной схеме с однократным преобразованием частоты. Структурная схе- ма приемника показана на рис. 3.2. Приемник состоит из следую- щих основных узлов. • Малошумящий усилитель с возможностью выбора величины усиления. • Смеситель для переноса вниз по частоте входного высокочас- тотного сигнала и следующий за ним усилитель промежуточной частоты. • Полностью интегрированный в кристалл синтезатор частоты на основе петли ФАПЧ, предназначенный для выработки стабильных колебаний с частотой гетеродина. В свою очередь, синтезатор час- тоты состоит из: - кварцевого генератора; - фазочастотного детектора и источника тока подкачки; - высокочастотного генератора, управляемого напряжением; - постоянного делителя в цепи обратной связи ФАПЧ. Для rfRXD0420 применяется делитель на 16, а для rfRXD0920 делитель на 32. • Усилитель-ограничитель ПЧ со схемой измерения уровня вход- ного сигнала и выработки выходных данных RSSI. • Демодулятор, состоящий из фазового детектора (MIXER2) и усилителя, которые образуют квадратурный детектор (иногда назы- ваемый детектором совпадения). Демодулятор предназначен для демодуляции сигнала ПЧ в случае применения модуляции типа FSK или FM. • Операционный усилитель, который может быть использован как компаратор для выделения данных при амплитудной и частот- ной манипуляции, или как фильтр в случае FM-модуляции. • Схема управления энергопотреблением и включением- выключением приемника. Рассмотрим подробнее назначение и устройство основных узлов. Схема управления предназначена для перевода приемника в режим ожидания, при котором потребляемый ток минимален. В режиме ожидания работает только кварцевый генератор, вы- ходные сигналы отсутствуют. После перехода в штатный режим требуется некоторое время для вхождения петли ФАПЧ в режим захвата. 212
го со Рис. 3.2. Структурная схема приемников rfRXD0420 и rfRXD0920
Микроконтроллеры Microchip9 rfPIC™ Вывод ENRX имеет внутренний подтягивающий резистор и со- вместим по уровням с CMOS-логикой. Уровень логической «1» на входе ENRX включает приемник, а уровень «О» переводит его в ре- жим ожидания. Кварцевый генератор построен по схеме емкостной трехточки (схема Колпитта) и вырабатывает опорный сигнал для синтезатора частоты. Кварцевый резонатор обычно включается между выводом XTAL (26) и общим проводом. Внутренняя (собственная) емкость генератора равна 15 пФ. Допускается подключение внешнего ис- точника высокочастотных колебаний к выводу XTAL через раздели- тельный керамический конденсатор. Относительный уровень сиг- нала на выводе XTAL должен составлять приблизительно 600 mVpp. Синтезатор частоты на основе ФАПЧ описан в главе 1 и имеет аналогичную с передатчиком конструкцию и принцип работы. Малошумящий усилитель обладает высокой чувствительно- стью и коэффициентом усиления и предназначен для усиления входного сигнала, поступающего непосредственно с антенны. Ха- рактеристики МШУ во многом определяют чувствительность при- емника. МШУ собран по так называемой каскодной схеме с откры- тым коллектором. Структурная схема МШУ приведена на рис. 3.3. Каскодная схема обладает рядом достоинств, среди которых широкая полоса усиления, низкий уровень шумов при высоком ко- эффициенте усиления, стабильный входной импеданс и высокое вы- ходное сопротивление. К сожалению, к моменту подготовки книги уровень шумов усилителя не был указан в фирменной документации. Выход LNAqut не имеет встроенного подтягивающего резистора и должен подключаться к цепи питания через внешние элементы схемы. Рис. 3.3. Структурная схема малошумящего входного усилителя 214
Глава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 Вход LNAin имеет входной импеданс около 26 Ом при емкости около 2 пФ. Внимание! Чтобы избежать самовозбуждения усилителя, вы- вод VSs(1) должен подключаться к «земле» предельно коротким и широким проводником. Величина усиления МШУ может быть выбрана из двух значений: высокого и низкого путем изменения напряжения на выводе LNAgain (2). Если напряжение на этом выводе меньше 0.8В, то МШУ нахо- дится в режиме высокого усиления; если напряжение на выводе (2) больше 1,4 В, то усилитель переходит в режим низкого усиления. Режим высокого усиления является для МШУ стандартным. При переходе в режим малого усиления снижается общий потребляе- мый ток и увеличивается максимально допустимый уровень входно- го сигнала, а коэффициент усиления снижается примерно на 25 дБ. Смеситель и предварительный усилитель ПЧ предназначены для переноса принимаемых колебаний из высокочастотной области на промежуточную частоту и последующего усиления сигнала про- межуточной частоты. Выход смесителя MIXER1 подключен непо- средственно ко входу предусилителя ПЧ. Вход 11F|N (4) имеет входной импеданс (несимметричный) около 33 Ом. Выводы 11F+ и 11F- являются точками смещения балансной схемы смесителя. Это выводы с открытым коллектором, которые подключаются к источнику питания через внешние нагрузочные ре- зисторы. Выход предусилителя промежуточной частоты 1 IFOut (9) имеет импеданс около 330 Ом, что позволяет подключать его напрямую к недорогим керамическим фильтрам ПЧ. Усилитель-ограничитель ПЧ используется на последнем этапе приемного тракта для того, чтобы поддерживать уровень сигнала на демодуляторе постоянным. Для этой цели может быть исполь- зован усилитель-ограничитель или усилитель с автоматической регулировкой усиления (АРУ). В нашем случае используется усили- тель-ограничитель, поскольку он имеет более широкий динамиче- ский диапазон, простую схему и меньшее энергопотребление по сравнению со схемой АРУ. Внутреннее сопротивление входа 2IF)N (11) составляет прибли- зительно 2,2 кОм. Чтобы согласовать его с выходом керамического фильтра, имеющего сопротивление 330 Ом, между выводами 2IF(N (11) и FBC2 (13) подключают внешний резистор сопротивлением 390 Ом. 215
Микроконтроллеры Microchip9 rfPIC™ Выводы FBC1 (12) и FBC2 (13) подключаются к внешним кон- денсаторам цепи обратной связи. Индикатор уровня принимаемого сигнала может одновре- менно служить для демодуляции сигнала с амплитудной манипуля- цией. Сигнал, вырабатываемый индикатором, находится в лога- рифмической зависимости от уровня сигнала на выводе 2IF|N (11). Уровень сигнала на входе индикатора может меняться в пределах от 40мкВ до 160мВ. Крутизна ответной характеристики индикатора приблизительно равна 26мВ/дБ радиочастотного сигнала. Выход RSSI (21) снабжен внутренним резистором ЗбкОм, соеди- ненным с общим проводом. Этот резистор преобразует ток, проте- кающий через схему индикатора в напряжение на выходе RSSI. При использовании амплитудной манипуляции (ASK), напряже- ние на выходе RSSI сравнивается с опорным напряжением. После- дующая фильтрация НЧ-сигнала легко реализуется при помощи конденсатора, подключаемого между выводом RSSI и общим про- водом. При использовании частотной манипуляции (FSK) или частотной модуляции (FM), выход RSSI работает в качестве индикатора уров- ня радиочастотного сигнала. Демодулятор состоит из фазового детектора (MIXER2) и усили- теля, вместе образующих квадратурный детектор, который демоду- лирует сигнал ПЧ при модуляции FSK или FM. Для построения за- конченной схемы квадратурного детектора требуется несколько внешних элементов. Синфазный сигнал приходит на MIXER2 напрямую с выхода усилителя-ограничителя ПЧ. Квадратурный сигнал создается при помощи внешней схемы из сигнала на выводе 2IF0Ut (15), имеюще- го связь по переменному току с выходом MIXER2 DEM|N (16). Вход- ной импеданс вывода DEMIN (16) приблизительно равен 47 кОм. Внешняя настраиваемая схема может быть построена на основе катушки индуктивности и конденсатора, но в этом случае должна иметь хотя бы один настраиваемый элемент. Дело в том, что ре- альные радиокомпоненты имеют разброс характеристик, а для на- дежной работы LC-цепь должна быть точно настроена. Схема, не требующая настройки, может быть реализована на основе керами- ческого дискриминатора. Выходное напряжение усилителя DEMOD, подаваемое на выво- ды DEMOut+ (23) и DEMqut- (24) зависит от пиковой девиации сиг- нала с модуляцией FSK или FM и квадратуры Q внешней схемы. Выходы имеют высокое сопротивление и обеспечивают выход- ной ток не более 20 мкА. 216
Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 Операционный усилитель может быть использован в качестве компаратора если используется амплитудная или частотная мани- пуляция, либо как фильтр в случае частотной модуляции. Основные понятия схемотехники приемников на основе rfRXD Очень трудно, почти невозможно охватить в одной небольшой книге все практические аспекты применения интегральных прием- ников rfRXD04020/04920. Каждая конкретная задача подразумевает конкретное решение. В этом разделе, основываясь на рекоменда- циях, приведенных в документации производителя, мы рассмотрим наиболее типичные моменты в построении практических схем на основе микросхем серии rfRXD. Далее, в главе, посвященной опи- санию отладочного макета и других практических устройств, мы приведем пример законченной схемы с указанием номиналов ис- пользуемых деталей и чертежа печатной платы. Блокировочные конденсаторы Блокировочные конденсаторы, включаемые между выводами питания VDD и общим проводом, предотвращают самовозбуждение устройства, уменьшают уровень нежелательных высокочастотных излучений и повышают устойчивость к помехам, проникающим по цепям питания. Конденсаторы должны быть безиндуктивными (обычно безвыводные керамические) и располагаться на плате уст- ройства как можно ближе к выводам питания 8, 14, 17, 27 и 32. Применение блокировочных конденсаторов никак не связано с применением фильтрующих конденсаторов в сетевом источнике питания, если он используется. Рабочие частоты Как мы уже упоминали, микросхемы rfRXD04020/04920 пред- ставляют собой супергетеродин с однократным преобразованием частоты и, соответственно, с одной промежуточной частотой. В предельно упрощенном изложении основной принцип суперге- теродинного приема состоит в том, что на смеситель подается входной сигнал fs и сигнал гетеродина fH. Модуль разности между частотой входного сигнала и сигнала гетеродина равняется проме- жуточной частоте f(. Частота принимаемого сигнала может быть как 217
Файл взят с сайта www.kodges.ru, на котором есть еще много интересной литературы
Микроконтроллеры Microchip9 rfPIC™ больше частоты гетеродина ( fs-нюн = fa+fi )> так и меньше ( fs-LOw- = fa-f,). В этом состоит главный недостаток супергетеродинного приема. Ведь принимаются одновременно два частотных канала, fs-н/вн и fs-Low, один из которых является информационным, а вто- рой зеркальным. В зеркальном канале может присутствовать поме- ха, способная подавить полезный сигнал. Поэтому для эффектив- ной работы супергетеродинного приемника обычно требуется фильтрация сигнала на входе с целью подавления сигнала в зер- кальном канале. Сигнал промежуточной частоты выделяется при помощи кера- мического фильтра. Частота гетеродина определяется резонансной частотой кварцевого генератора. Для rfRXD0420 частота гетероди- на равна частоте кварца, умноженной на 16, а для rfRXD0920 час- тота кварца умножается на 32. В типовой схеме включения кварц подключают к выводу XTAL (26), как показано на рис. 3.4. Последовательно с кварцевым резонатором может быть вклю- чен компенсирующий конденсатор. Емкость внешней нагрузки квар- цевого генератора может быть определена, как емкость вывода XTAL (15 пФ) плюс паразитная емкость монтажа (2...3 пФ). Компен- сирующий конденсатор играет в схеме двоякую роль. Во-первых, он частично компенсирует паразитные емкости платы и самого квар- цевого резонатора, во-вторых, смещает частоту генерации на не- большую величину. Смещение может происходить в небольших пределах, за которыми наступит срыв генерации. -J < 26 X -----□---- Компенсирующий конденсатор (опционально) о XTAL Рис. 3.4. Подключение кварцевого резонатора и компенсирующего конденсатора 218
Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 434,10 434,05 434,00 | 433,95 Q. 433,90 c: <5 433,85 £ 433,80 T 433,75 НоОСОЮМ-СОСОСМСМт-т-т-’г- X Емкость конденсатора, пФ Рис. 3.5. Зависимость частоты приема от номинала компенсирующего конденсатора Компенсирующий конденсатор может отсутствовать. В этом слу- чае кварц подключается непосредственно к выводу XTAL (26) и частота приема определяется комбинацией резонансной частоты кварца и паразитной емкости монтажа. Это не всегда допустимо, так как из-за влияния паразитных емкостей монтажа реальная час- тота гетеродина (и соответственно принимаемая частота) будет несколько отличаться от расчетной. Следует помнить, что частота гетеродина определяется как частота кварцевого генератора умно- женная на 16 или на 32. На столько же умножается и уход частоты под влиянием внешних факторов. Даже незначительный уход час- тоты гетеродина значительно снижает эффективность приема по- лезного сигнала или делает его невозможным. Подстройка частоты гетеродина с помощью подбора кварцевого резонатора на практике обычно не применяется, так как резонато- ры - один из самых дорогих внешних компонентов схемы и, кроме того, широкий выбор номиналов резонаторов бывает доступен очень редко. Поэтому в случаях, когда требуется подстройка часто- ты в готовом изделии, или имеющийся кристалл немного не совпа- дает с расчетным значением, применяется подгонка частоты при помощи дополнительного конденсатора. На рис. 3.5 показан пример влияния компенсирующего конден- сатора на частоту приема rfRXD04020, равную 433,92 МГц. Пример имеет исключительно иллюстративный характер, потому что конеч- ный результат зависит от конкретного кварца и используемой пе- чатной платы. В табл. 3.6 приведены примеры номиналов кварцевых резона- торов для часто применяемых рабочих частот при условии, что ис- пользуется фильтр ПЧ 10,7 МГц. 219
Микроконтроллеры Microchip9 rfPIC™ Таблица 3.6 Примеры номиналов кварцевых резонаторов Частота приема, МГц Частота гетеродина, МГц Номинал кварца, МГц rfRXD04020 315,00 325,70 20,35625* 433,92 423,22 26,45125** rfRXD0920 868,30 857,60 26,80** 915,00 904,30 28,259375** преобразование вверх; преобразование вниз. Чтобы выбрать требуемую частоту кварцевого резонатора, не- обходимо знать заданную частоту приема и промежуточную часто- ту. В радиолюбительской практике, наоборот, может возникнуть за- дача по имеющемуся кварцевому резонатору рассчитать частоту приема и определить, лежит ли она в пределах рабочего диапазона микросхемы. Алгоритмы расчета частотного плана Компания Microchip в своей сопроводительной документации предлагает алгоритм расчета частотного плана в виде бланка- черновика, подлежащего заполнению. Рассмотрим этот алгоритм. Шаг 1. Задаемся значениями принимаемой f$ и промежуточной f частот. Наиболее часто в качестве фильтра ПЧ используют керамиче- ский ПАВ-фильтр на 10,7 МГц, но может быть выбран и другой фильтр для частоты ПЧ в диапазоне от 455 кГц до 21,4 МГц. Шаг 2. Рассчитываем частоты кварцевого резонатора для вари- антов преобразования вверх и преобразования вниз: f _ (fs + 6). f _(fs ~fi) 'XTAL-HIGH ~ pup ’ 'XTAL-LOW ~ ppp” ’ где PDR - коэффициент деления петли ФАПЧ, равный 16 для rfRXD0420 и 32 для rfRXD0920. 220
Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 Шаг 3. Рассчитываем частоты гетеродина для преобразования вверх и преобразования вниз: ^Н-HIGH ~ fxTAL-HIGH Х PDR; f^f-LOW = ^XTAL-LOW х PDP Шаг 4. Выбираем, какой вариант преобразования будет приме- няться и проверяем, попадает ли частота гетеродина в допустимый диапазон: Приемник Частота гетеродина rfRXD0420 300...430 МГц rfRXD0920 800...915 МГц Шаг 5. Окончательно фиксируем номинал кварцевого резонато- ра, фильтра ПЧ и тип преобразования. Шаг 6. Рассчитываем частоту зеркального канала. Для варианта с преобразованием вверх: Imi = fs + (2 х ) • Для варианта с преобразованием вниз: ?mi = fs~^fi)- Для подавления помехи, проникающей по зеркальному каналу, в разработанном устройстве обязательно должен присутствовать так называемый преселектор, т.е. фильтр в цепи антенны, подав- ляющий зеркальный канал. Фильтр петли ФАПЧ Внешний фильтр петли ФАПЧ подключается к выводу LF (29). Фильтр определяет динамическое поведение ФАПЧ, в первую оче- редь время захвата и «перенос» опорной частоты в спектр полез- ного сигнала. На практике время захвата ФАПЧ составляет небольшую часть от общего времени запуска приемника. Наибольшее время запуска требуется для кварцевого генератора. Поэтому в большинстве практических разработок используется фильтр, дающий широкую полосу захвата для снижения уровня шума. На рис. 3.6 показан пример фильтра для широкого диапазона рабочих частот, приме- нимого в подавляющем большинстве устройств. 221
Микроконтроллеры Microchip9 rfPIC™ 29 о- C2* C1 1000 ^Опциональный Рис. 3.6. Пример схемы фильтра ФАПЧ Входной фильтр (преселектор) Качество приема очень сильно зависит от входного фильтра, предназначенного для подавления нежелательных сигналов и шу- мов на входе приемника. Как мы уже отмечали ранее, основным источником мешающего сигнала является зеркальный канал прие- ма. С формальной точки зрения, для супергетеродина нет различия между основным и зеркальным каналами, поэтому при отсутствии входной фильтрации сигналы основного и зеркального канала бу- дут смешиваться в канале ПЧ, что значительно ухудшит соотноше- ние сигнал/шум вплоть до полного подавления полезного сигнала. Преселектор может быть реализован как в виде простого LC-фильтра, так и на основе ПАВ-фильтра (фильтра на поверхно- стных акустических волнах, SAW). Простой LC-фильтр имеет низ- кую стоимость, но малую эффективность подавления зеркального канала. Для ответственных применений рекомендуется использовать ПАВ-фильтры, обеспечивающие подавление зеркального канала как минимум на 40 дБ. Кроме того, ПАВ-фильтр эффективно подав- ляет широкополосные шумы, увеличивая, таким образом, отноше- ние сигнал/шум. Применение ПАВ-фильтра несколько усложняет схему, так как для него требуются цепи согласования по импедансу с антенной и входом приемника. Разные фильтры требуют разных схем согласо- вания, поэтому в каждом конкретном случае необходимо обращать- ся к документации, описывающей фильтр. Пример использования ПАВ-фильтра показан на рис. 3.7. Дополнительной функцией преселектора является согласование импедансов антенны и входа LNA|N. 222
Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 F1 Фильтр ПАВ Антенна 2_ 1 Input Output г-!- Input Gnd Output Gnd Case Gnd 5 6 L2 LNAIN C2 Рис. 3.7. Пример использования ПАВ-фильтра Антенна Антенна во многом определяет габаритные размеры устройства и качество приема. Существует множество готовых малогабаритных антенн от сто- ронних производителей. Обычно такие антенны имеют импеданс 50 Ом. Компоненты преселектора должны быть подобраны таким образом, чтобы согласовываться с импедансом антенны с одной стороны и входным импедансом 26 Ом входа LNA)N с другой сто- роны. Разработчик может остановиться на использовании простой штыревой антенны. Длина антенны должна быть равной четверти длины волны принимаемого сигнала. Длину волны рассчитывают по формуле А = с / fs. где с = 3x108 м/с - скорость света. Например, длина волны сигнала с частотой 433,92 МГц составит 0,69 м. Соответственно длина четвертьволновой антенны L = 69 / 4= = 17,25 см. Импеданс четвертьволновой штыревой антенны обыч- но равен 36 Ом. Такая антенна может оказаться слишком длинной для многих портативных устройств. Для уменьшения габаритов применяют петлевые антенны в виде проводника на печатной плате или мало- габаритные спиральные антенны (часто с диэлектрическим сердеч- ником). Подобные антенны можно часто видеть на трубках домаш- них радиотелефонов. Внешние элементы малошумящего усилителя Выход малошумящего усилителя LNAout (3) выполнен по схеме с открытым коллектором. Питание на выходной каскад подается через внешний резонансный контур L1C1 (см. рис. 3.8). Сигнал с выхода МШУ (3) на вход предусилителя ПЧ (4) подается через раз- делительный конденсатор. 223
Микроконтроллеры Microchip9 rfPIC * Рис. 3.8. Внешние элементы малошумящего усилителя Для гарантии стабильной работы малошумящего усилителя необходимо, чтобы вывод (1) микросхемы соединялся с общим проводом предельно коротким и широким проводником. Внешний резонансный контур L1C1 и конденсатор С2 вместе образуют полосовой фильтр, настроенный на частоту приема, а также согласуют выходное сопротивление МШУ со входным со- противлением предусилителя ПЧ. Номиналы компонентов зависят от выбранной частоты прини- маемого сигнала. При разработке следует добиваться настолько высокой добротности контура, насколько это позволяет разброс номиналов применяемых деталей. На практике ширину полосы пропускания немного расширяют с учетом предполагаемого раз- броса номиналов. В табл. 3.7 приведены типовые номиналы компонентов для наи- более распространенных частот приема. Таблица 3.7 Примеры номиналов компонентов внешней цепи МШУ fs, МГц С1,пФ L1, нГн С2, пФ 315,00 7,0 22 6,0 433,92 3,0 15 6,0 868,30 2,0 7,6 3,0 915,00 2,0 6,8 3,0 224
Глава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 Внешние элементы смесителя MIXER1 Выводы балансного смесителя 1IF+ (6) и 1IF- (7) предназначены для подключения внешних резисторов коллекторной цепи. Каждый вы- вод представляет собой выход с открытым коллектором и подключает- ся к цепи питания через отдельный резистор, как показано на рис. 3.9. VDD VDD Рис. 3.9. Внешние элементы смесителя MIXER1 Фильтр промежуточной частоты Фильтр ПЧ определяет общую избирательность приемника, т.е. его способность «отсекать» посторонние сигналы на смежных час- тотах. Как мы уже упоминали, в большинстве приложений имеет смысл использовать керамические фильтры на частоту 10,7 МГц. Они изготавливаются разными производителями и могут иметь разную ширину полосы пропускания и разные типы корпуса. Стандартное входное и выходное сопротивление керамических фильтров на рабочей частоте обычно составляет 330 Ом. Вывод 1IFOUT (9) имеет сопротивление приблизительно 330 Ом и может соединяться с фильтром без дополнительных цепей согласования. Внутренне сопротивление входа 2IF)N (11) составляет приблизи- тельно 2,2 кОм. Для согласования этого входа с выходом керами- ческого фильтра к выводам 2IF(N (11) и FBC2 (13) подключают внешний резистор сопротивлением 390 Ом. На рис. 3.10 показан пример такой схемы. На этом рисунке также показаны конденсато- ры внешней цепи обратной связи усилителя-ограничителя ПЧ, под- ключенные к выводам FBC1 (12) и FBC2 (13). Амплитудная манипуляция Амплитудной манипуляцией (Amplitude Shift Keying, ASK) назы- вается такой тип модуляции сигнала передатчика, при котором ам- 225
226 Внешние конденсаторы Микроконтроллеры Microchip9 rfPIC' Рис. 3.10. Пример построения внешнего фильтра ПЧ
227 Рис. 3.11. Типовая схема включения для режима ASK лава 3. Миниатюрные приемники rfRXD0420 и I1RXD0920
Микроконтроллеры Microchip9 rfPIC™ плитуда высокочастотного сигнала на антенне передатчика прини- мает только два значения: включено и выключено (или, соответст- венно, минимальное и максимальное). Демодуляция сигнала ASK Для демодуляции сигнала ASK применяется встроенный инди- катор уровня сигнала (RSSI), входящий в состав усилителя- ограничителя ПЧ. Сигнал с выхода RSSI подвергается фильтрации для подавления высокочастотных составляющих и импульсных шумов. Обычно используется простейший RC фильтр низких час- тот, образованный выходным сопротивлением RSSI (36 кОм) и кон- денсатором С1. Постоянная времени RC = т зависит от длительно- сти такта полезного сигнала. Если постоянная времени фильтра будет слишком мала, то не получится эффективное подавление шумов. Если же постоянная времени будет слишком велика, это приведет к «размазыванию» импульсов сигнала и даже к наложе- нию их друг на друга по времени. Такое явление называют межсим- вольной интерференцией. Если распознавание бита сигнала происходит по его центру, то условное значение постоянной времени фильтра, находящееся в пределах 1т...2т, должно быть меньшим или равным половине длительности информационного бита сигнала, как показано на рис. 3.12. Моменты распознавания уровня Двоичный сигнал Период сигнала Сигнал на выводе RSSI (21)------- 1т .. 2т Рис. 3.12. Распознавание битов сигнала по центру бита 228
Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 Как видно из диаграмм, после прохождения через фильтр фрон- ты сигнала RSSI затягиваются. Но, для надежного распознавания уровня, к моменту распознавания процесс нарастания или спада должен быть завершен. Распознавание по центру бита применяется, например, в таком типовом приложении, как декодеры KeeLoq. Если распознавание бита происходит ближе к концу, то условная постоянная времени фильтра 1 ...2 т должна быть меньше или при- близительно равна длительности информационного бита сигнала. Этот вариант проиллюстрирован на рис. 3.13. Как только становятся известны точные значения длительности информационных битов и момент определения уровня, можно при- ступать к расчету номинала конденсатора, входящего в состав фильтра. Поскольку известно, что R = 36 кОм, то номинал конден- сатора подбирают из существующего типового значения, лежащего в пределах Cmin = т/ R ... Стах = 2т/ R. Точный подбор номинала конденсатора не исключает необхо- димость натурных испытаний. Необходимо при помощи осцилло- графа проверить форму сигнала RSSI с подключенным конденса- тором фильтра и убедиться, что высокочастотные шумы и выбросы надежно гасятся, но фронты сигнала не «затягиваются» больше допустимого. Моменты распознавания уровня Рис. 3.13. Распознавание битов сигнала по концу бита 229
Микроконтроллеры Microchip9 rfPIC”' Компаратор для режима ASK В режиме ASK внутренний операционный усилитель работает в режиме компаратора. Сигнал RSSI после фильтрации поступает на вывод ОРА+ (20) и сравнивается с опорным напряжением на выво- де ОРА- (19). По результату сравнения определяется текущий ло- гический уровень сигнала - ноль или единица. В реальном передатчике, собранном на основе rfPIC, высоко- частотный сигнал не отключается полностью, кроме того в канале передачи данных могут присутствовать посторонние шумы. По этим причинам при передаче логического нуля напряжение на выходе RSSI не обязательно будет равно нулю; достаточно того, чтобы оно было ниже опорного напряжения компаратора. Опорное напряжение компаратора может быть динамическим или статическим. Выбор между динамическим или статическим напряжением частично определяется соотношением между логиче- скими единицами и нулями в потоке данных (величиной постоянной составляющей потока данных). Динамическое опорное напряжение вырабатывается при помощи простейшей интегрирующей цепочки и зависит от соотношения количества нулей и единиц в потоке дан- ных. Благодаря использованию динамического опорного напряже- ния повышается общая чувствительность приемника в сложных условиях приема. Однако на выходе компаратора могут присутствовать случайные данные в виде шума. Обычно это случается в паузах между излуче- нием полезного сигнала. В такие моменты динамическое опорное напряжение снижается до уровня, при котором компаратор начина- ет реагировать на случайные шумовые выбросы. Декодер, в роли которого может выступать микроконтроллер или специальный де- кодер KeeLoq, должен уметь отличать случайный шум от данных. На выбор статического опорного напряжения влияет доля пере- менной составляющей в потоке данных. Мы имеем в виду ситуа- цию, когда данные содержат неравное и заранее неизвестное коли- чество нулей и единиц. Недостатком статического опорного напря- жения является меньшая чувствительность приемника. Но зато в этом случае на выходе компаратора отсутствует случайный шум. Динамическое опорное напряжение Простым способом получения динамически изменяющегося опорного напряжения является усреднение принимаемого сигнала в фильтре низких частот. Обратимся к рис. 3.11, на котором пока- 230
Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 зан пример типового включения приемника для режима ASK. Ус- редняющая цепочка образована резистором R1 и конденсатором С2. С выхода цепочки опорное напряжение поступает на вход ОРА-(19). Постоянная времени R1C2 зависит от соотношения между ну- лями и единицами в принимаемом сигнале и влияет на время реак- ции приемника. Если точное соотношение нулей и единиц в прини- маемом сигнале заранее не известно, постоянная времени должна быть относительно мала. Опорное напряжение будет быстро реагировать на изменение амплитуды принимаемого сигнала и различия в мощности отдель- ных передатчиков (если их несколько). Но есть опасность, что опорное напряжение может оказаться чересчур нестабильным и будет флуктуировать синхронно с изменением соотношения между нулями и единицами. Если сделать постоянную времени относительно большой, ста- бильность значительно возрастет. Однако приемник не сможет бы- стро реагировать на переход от паузы в излучении сигнала к началу приема полезного сигнала и несколько первых битов могут быть искажены и не распознаны декодером. Подбор оптимальной постоянной времени является довольно сложным итерационным процессом, требующим отладки на макете реального устройства. Сначала выбирают постоянную составляющую цепочки лежащей в пределах от 10 до 100 длительностей информационного бита сиг- нала. В многоканальном осциллографе совмещают лучи двух кана- лов на экране. Затем подключают осциллограф к приемнику, прини- мающему отладочный сигнал в виде меандра с частотой следования, равной скорости передачи полезного сигнала. Наблюдая сигналы на выводах RSSI (21) и ОРА- (19) подбирают номиналы R1 и С2 таким образом, чтобы опорное напряжение находилось посредине сигнала RSSI. Разумеется, при изменении скорости передачи данных потре- буется повторный подбор номиналов усредняющей цепочки. Статическое опорное напряжение Статическое опорное напряжение может быть сформировано как простейшим резистивным делителем питающего напряжения, так и при помощи стабилитрона. В любом случае требуется провер- ка правильности установки опорного напряжения при помощи ос- циллографа. 231
no GO ПО
Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 Частотная манипуляция Типовая схема включения для приема сигнала с частотной ма- нипуляцией (FSK) приведена на рис. 3.14. Она несколько сложнее, чем для приема ASK и при ее построении необходимо учитывать иные факторы. Требования к фильтру ПЧ Необходимая избирательность фильтра ПЧ зависит от того, ка- кой тип модуляции применяется и какова ширина полосы частот сигнала. На реальную избирательность фильтра влияют также раз- брос параметров компонентов схемы и их температурная неста- бильность. Полоса частот, занимаемая двоичным сигналом с частотной ма- нипуляцией, рассчитывается как сумма удвоенной пиковой частот- ной девиации и удвоенной полосы частот сигнала. Например, если сигнал представляет собой манчестерский код, передаваемый со скоростью 2400 бит в секунду и девиация частоты составляет 24 кГц, минимальная полоса пропускания фильтра ПЧ должна со- ставлять: BIF = (2 х 2400) + (2 х 24000) = 52800 Гц. К расчетной величине следует добавить просуммированные до- пуски по частоте и температуре для компонентов передатчика и приемника. Сигнал с частотной манипуляцией более чувствителен к изме- нению групповой задержки сигнала в фильтре ПЧ. Поэтому необхо- димо использовать фильтр с малой разностью групповой задержки. Такой фильтр сложно реализовать на основе компактных недорогих деталей. В качестве альтернативы можно использовать фильтр с более широкой, чем требуется, полосой пропускания, поскольку разность групповой задержки в центре полосы пропускания относи- тельно постоянная. Демодуляция сигнала FSK Узел демодулятора DEMOD состоит из фазового детектора MIXER2 и усилителя, образующих квадратурный детектор. В этом узле происходит демодуляция сигнала ПЧ применительно к моду- ляции типа FSK или FM. Синфазная составляющая поступает на- прямую с выхода усилителя-ограничителя ПЧ на вход детектора 233
Микроконтроллеры Microchip9 rfPIC™ MIXER2. Квадратурная составляющая создается при помощи внешней схемы из сигнала, поступающего с выхода усилителя- ограничителя 2IFOut (15), связанного по переменному току со вхо- дом MIXER2 DEMin (16). Соответствующая внешняя часть схемы называется дискриминатором. L С-дискриминатор Дискриминатор можно построить на основе недорогих распро- страненных элементов - катушки индуктивности и конденсатора. Такая схема хорошо работает, но требует подстройки одного из компонентов. Обычно используются подстроечные конденсаторы. Пример такой схемы показан на рис. 3.15. Резистор R1 снижает добротность контура L1СЗ, благодаря чему может быть демодули- рован сигнал с девиацией до 75 кГц. R1 Рис. 3.15. Пример схемы LC-дискриминатора Дискриминатор на основе керамического резонатора При массовом производстве малогабаритных изделий предпоч- тительнее использовать ненастраиваемую схему на основе кера- мического резонатора. Такой дискриминатор работает как схема с параллельным резонансом на частоте ПЧ. Подключенный парал- лельно конденсатор СЗ (рис. 3.16) подстраивает частоту резонанса. Высокая добротность резонансной цепи увеличивает крутизну 234
Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 частотной характеристики детектора, т.е. позволяет достигать зна- чительных изменений уровня сигнала при небольшой девиации частоты передатчика. Но использование малой девиации частоты предъявляет повышенные требования к частотной стабильности передатчика и приемника. Небольшие встречные отклонения в на- стройке приемника и передатчика могут привести к срыву приема. Для того, чтобы приемник устойчиво принимал сигнал с большой девиацией, необходимо расширить полосу рабочих частот детекто- ра. Физические параметры резонатора изменить нельзя, но можно, как и в случае с LC-дискриминатором, уменьшить добротность ре- зонансной цепочки. Одним из способов является подключение ре- зистора параллельно керамическому резонатору. Второй способ состоит в увеличении емкости конденсатора С1, что увеличивает нагрузку детектора. При уменьшении добротности резонансной це- почки уменьшится и выходное напряжение детектора. F1 КЕРАМИЧЕСКИЙ ДИСКРИМИНАТОР С1 1,0 СЗ 10-12 С2 680 —□— 16 z S ш О Рис. 3.16. Пример схемы дискриминатора на керамическом резонаторе Фильтрация демодулированного сигнала Вновь обратимся к рис. 3.14. Фильтрация сигнала, поступающего с выхода демодулятора, осуществляется при помощи конденсато- ров С1 и С2. Следует соблюдать осторожность при подборе этих конденсаторов, чтобы не возникало искажение формы принимаемо- го сигнала. Номиналы этих конденсаторов избираются одинаковы- ми и зависят от скорости передачи данных. Чем выше скорость передачи данных, тем меньше должна быть емкость. При разработке устройства требуется обязательная провер- 235

Гпава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920 ка правильности подбора номиналов при помощи осциллографа. Желательно также провести тестирование на стабильность приема образцового сигнала при скорости передачи, на 10-15% превы- шающей необходимую. Напряжение с выходов DEMOut+ (23) и DEMqut- (24) поступает на соответствующие входы встроенного операционного усилителя. Если будет использоваться иная схема включения, необходимо иметь в виду, что выходы демодулятора имеют высокое внутреннее сопротивление и обеспечивают выходной ток не более 20мкА. Эти выходы обладают собственной емкостью, которая также ограничи- вает максимально допустимую скорость передачи данных. Номи- нальное выходное напряжение на этих выводах составляет 1,23В. Частотная модуляция Пример типовой схемы включения для режима FM показан на рис. 3.17. Построение высокочастотной части абсолютно идентично схеме для режима FSK, поэтому мы не будем повторяться. Разли- чие наблюдается только в низкочастотной части, начиная с выхода демодулятора. Операционный усилитель в данном случае исполь- зуется уже не в качестве компаратора, а как усилитель низкой часто- ты и активный фильтр низких частот. Вследствие малой нагрузочной способности демодулятора последующие цепи частотной коррекции желательно подключать к выходу операционного усилителя. 237
Глава 4. Набор разработчика «rfPIC Development Kit 1» Набор «rfPIC Development Kit 1» предназначен, прежде всего, для обучения работе с микроконтроллерами серии rfPIC, разработ- ки и отладки программного обеспечения и схем готовых устройств. Наличие этого набора избавляет от необходимости на начальном этапе разработки самостоятельно изготавливать макетные платы приемника и передатчика. Таким образом, разработчик застрахован от возможных ошибок и неисправностей в радиочастотном тракте, и может приложить все усилия к отладке программы и интерфейс- ной или исполнительной части своего устройства. Важным достоинством набора является то, что он может быть изготовлен самостоятельно. Именно по этой причине мы отводим ему отдельную главу. Читатели могут воспользовать- ся описанием в этой книге, а также получить на сайте www.picman.ru дополнительную информацию и самостоятельно собрать отладочный набор или его отдельные компоненты. Перечень микроконтроллеров, доступных для программирова- ния, зависит только от управляющей программы. Поскольку она распространяется с открытым исходным кодом, любой желаю- щий может ее модифицировать для собственных нужд. Состав набора Набор построен по принципу матрешки. В состав рассматривае- мого набора включен другой: «PICkit 1 Flash Starter Kit», сам по се- бе полезный для начинающего разработчика в качестве учебно- отладочного модуля. Разработчики, уже имеющие набор «PICkit 1 Flash Starter Kit», могут отдельно докупить радиочастотные модули и компакт-диск, сформировав, таким образом законченный набор «rfPIC Develop- ment Kit 1». В законченный стандартный набор входят следующие компоненты. 1. Набор «PICkit 1 Flash Starter Kit», в свою очередь включающий в себя: - инструкцию; 238
Гпава 4. Набор разработчика «rfPIC Development Kit 1» - компакт-диск с MPLAB и дополнительной документацией; - брошюру «Tips and Tricks» («Подсказки и хитрости»); - компакт-диск с драйверами и описаниями набора; - соединительный кабель USB; - основную плату. 2. Микросхема PIC16C745 с прошивкой примера программы- драйвера USB 3. Микросхема PIC16F676 с прошивкой демо-программы для rfPIC. 4. Брошюра «Краткое руководство пользователя». 5. Компакт-диск с полным руководством, описаниями и приме- рами. 6. Модуль приемника на 315 МГц. 7. Модуль приемника на 433,92 МГц. 8. Модуль передатчика на 315 МГц. 9. Модуль передатчика на 433,92 МГц. Плата программатора и интерфейса Внешний вид платы программатора показан на рис. 4.1. Рис. 4.1 Плата программатора и периферийного интерфейса 239
Микроконтроллеры Microchip9 rfPIC™ На плате размещены: разъем USB, источник напряжения про- граммирования, разъем для управляющего микроконтроллера PIC16C745, отвечающего за связь по USB и программирование дру- гих микроконтроллеров, разъем для установки программируемого микроконтроллера, индикаторные светодиоды, позволяющие отла- живать учебные устройства, линейный разъем для подключения периферийных модулей и дополнительная область для макетиро- вания. Питание программатора осуществляется напряжением 5 В от порта USB. Программатор предназначен для программирования 8- и 14- выводных микроконтроллеров Microchip с FLASH-памятью. Наличие периферийных отладочных компонентов позволяет производить отладку большинства программ, не вынимая микроконтроллер из платы. Программатор будет полезен при разработке устройств не только на rfPIC, но и на базе других FLASH-микроконтроллеров. Поэтому мы рассмотрим его устройство подробно, чтобы наши чи- татели, не имеющие возможности приобрести готовое изделие, смогли самостоятельно изготовить аналогичное устройство, благо в комплект изделия входят подробные чертежи и описания платы, а также исходный код управляющей программы на языке Visual Ba- sic и прошивка для управляющего микроконтроллера. Основу программатора составляет микроконтроллер PIC16C745, имеющий встроенный контроллер USB. Он обрабатывает команды и данные, поступающие от персонального компьютера, и в соответ- ствии с ними переключает режимы программатора и программирует микроконтроллер, установленный в отладочный разъем (evaluation socket). Можно включать и выключать питание отлаживаемого мик- роконтроллера, считывать и сохранять содержимое памяти и ка- либровочных констант, выбирать источник тактовой частоты - иными словами, проделывать все основные операции, необходи- мые при программировании и отладке. Макетная часть платы рассчитана на самостоятельную установ- ку микросхемы МАХ232СРЕ для организации обмена данными по протоколу RS-232, 14-выводного разъема для микроконтроллера и необходимых навесных компонентов. Таким образом, макетная часть позволяет собрать и отладить устройство, осуществляющее обмен данными по последовательному каналу RS-232. Предусмот- рено место для монтажа независимого стабилизатора напряжения питания +5 В. На рис. 4.2 приведена часть схемы программатора, предназна- ченная для реализации собственно процесса программирования. 240
Гпава 4. Набор разработчика «rfPIC Development Kit 1» Программатор имеет собственный источник напряжения про- граммирования +13 В, состоящий из транзистора Q2, диода D1, ре- зисторов R9-R11, конденсаторов СЗ-С4 и дросселя L1. Управляю- щий микроконтроллер при помощи встроенного модуля ШИМ выра- батывает прямоугольные импульсы, управляющие ключевым тран- зистором Q2. В момент закрывания транзистора на его коллекторе, за счет наличия индуктивности дросселя L1 возникают выбросы повышенного напряжения, которые через диод D1 заряжают кон- денсатор С4. С делителя напряжения (резисторы R10, R11) часть напряжения программирования, равная 4.5В, поступает на вход AN1 управляющего микроконтроллера и измеряется при помощи АЦП. В зависимости от результата изменяется управляющая кон- станта модуля ШИМ. Константа обновляется 500 раз в секунду. Та- ким образом поддерживается стабильное напряжение программи- рования. Модуль ШИМ работает независимо от процессорного яд- ра, и не мешает выполнению основной программы. На транзисто- рах Q3, Q4 выполнен ключ для управления включением напряже- ния программирования. Транзистор Q1 является ключом для напряжения питания про- граммируемого/отлаживаемого микроконтроллера. Это позволяет сбрасывать отлаживаемый микроконтроллер путем отключе- ния/включения питания. Линии данных ICSPJDATA и строба ICSPJDLK соединены непосредственно с портами управляющего микроконтроллера. На рис. 4.3 показана схема включения управляющего микрокон- троллера. Для его тактирования применяется керамический резо- натор на 6 МГц. Для индикации режима работы программатора служат свето- диоды D14 («занят») и D15 («питание»). Светодиод D14 горит, ко- гда подано питание на микроконтроллер, установленный в отла- дочное гнездо. Так как для перевода отлаживаемого микроконтрол- лера в режим записи или считывания программного кода необхо- димо отключить и вновь включить питание (подавая при этом на- пряжение программирования), то при обмене данными через порт USB светодиод D14 периодически гаснет. Также он гаснет, если убрать галочку «Питание» в окне управляющей программы. Светодиоды D8...D11 при производстве программатора не уста- навливаются, так как они не используются для демонстрационных целей в стандартных поставляемых прошивках. Но их можно впа- ять самостоятельно, если возникнет необходимость полностью ис- пользовать возможность управления массивом светодиодов. 241
242 Рис. 4.2. Основная схема программатора Микроконтроллеры Microchip9 rfPIC:
VPP OFF VPP_FEEDBACK PIC16C745/SP Рис. 4.3. Узел управляющего микроконтроллера лава 4. Набор разработчика «rfPIC Development Kit 1 243
Микроконтроллеры Microchip9 rfPIC"1 Рис. 4.4. Навесные элементы отладочной схемы На рис. 4.6 показана разводка разъема расширения, в который могут устанавливаться дополнительные модули. В нашем случае в этот разъем можно установить модуль приемника для отладки про- граммы микроконтроллера, установленного в отладочное гнездо программатора, или модуль передатчика для внутрисхемного про- граммирования микроконтроллера передатчика. Элементов схемы, показанных на рис. 4.2 и рис. 4.3 в принципе достаточно для функционирования программатора. Но для различ- ных учебных экспериментов с микроконтроллерами и отладки про- стейших устройств необходимы дополнительные внешние компо- ненты: светодиоды и, как минимум одна кнопка и один переменный резистор, включенный потенциометром. Потенциометр нам нужен, поскольку подразумевается отладка программ для микроконтроллеров, имеющих встроенный модуль АЦП. На рис. 4.4 приведена схема включения дополнительных от- ладочных компонентов (кнопки и потенциометра), а на рис. 4.5 изо- бражена схема узла индикации. В узле индикации использовано из- вестное решение, описанное в брошюре полезных советов от Micro- chip, и позволяющее при помощи N выводов портов управлять све- тодиодами в количестве N*(N-1) штук. Применительно к отладоч- ному набору, данные отображаются в двоичном виде на восьми светодиодах D0...D7, каждый из которых соответствует одному двоичному разряду. 244
Рис. 4.5. Узел индикации отладочной части платы Гпава 4. Набор разработчика «rfPIC Development Kit 1 245
Микроконтроллеры Microchip9 rfP/C™ Предложенная схема включения светодиодов не позволяет ста- тично зажигать светодиоды в произвольном сочетании. Так, напри- мер, не могут одновременно гореть светодиоды DO и D1. Для вклю- чения светодиодов в произвольной комбинации необходимо при- менять динамическую индикацию. При включении светодиодов используется одно из трех возмож- ных состояний порта: высокий уровень на выходе, низкий уровень на выходе и высокий импеданс (режим ввода). Допустим, необхо- димо зажечь светодиод D5. Для этого порт RA5 настраиваем на вывод с низким уровнем, порт RA2 на вывод с высоким уровнем, порты RA1 и RA4 переключаем в режим ввода. Встроенные подтягивающие резисторы для этих портов должны быть отключены, иначе ток, протекающий через эти резисторы, может подсвечивать слаботочные светодиоды. На рис. 4.6 также изображена схема независимого стабилизато- ра +5 В для питания макетируемой схемы от внешнего источника питания. Типовая схема включения микросхемы МАХ232СРЕ при- ведена на рис. 4.7. Разъем для установки периферийных модулей Место для макетирования (под 14-контактное гнездо) VR1 LM7805 ------L In Out GND СЮ----Г 0,33 мк 2 Макетный стабилизатор +5 В (детали не установлены) Рис. 4.6. Фрагмент схемы макетной части платы 246
Гпава 4. Набор разработчика «rfPIC Development Kit 1» Монтажное место предусмотрено, но ни один элемент не установлен. Рис. 4.7. Схема включения микросхемы МАХ232СРЕ в макетной плате Таким образом, для освоения навыков работы с 8/14-выводными микроконтроллерами серии FLASH PIC или rfPIC и отладки простых устройств можно воспользоваться готовой платой программатора, а для отладки более сложных собственных устройств использовать макетную плату. Для удобства можно провести линии внутрисхемного програм- мирования от платы программатора и не вынимать каждый раз микроконтроллер из разъема макетной платы. Отладочный модуль передатчика Внешний вид отладочного модуля передатчика показан на рис. 4.8. Радиопередающая часть собрана по типовой схеме, рекомен- дованной компанией Microchip к массовому применению, поэтому при разработке собственного устройства высокочастотную часть, включая рисунок платы, можно полностью скопировать. На рисунке можно видеть рамочную антенну, выполненную печат- ным способом. Значительную часть поверхности платы занимают 247
Микроконтроллеры Microchip9 rfPIC™ I Рис. 4.8. Внешний вид модуля передатчика демонстрационные компоненты: две кнопки и два потенциометра. С их помощью демонстрируют работу учебной программы, проши- той производителем при изготовлении набора. Линейный разъем предназначен для подключения к разъему рас- ширения на плате программатора и программирования микрокон- троллера передатчика. При заводской сборке в монтажную позицию 111 впаивается микроконтроллер в миниатюрном корпусе SOIC, но предусмотрено место для монтажа гнезда под 8-выводный корпус DIP (U2). Это гнездо может быть использовано, например, для подключе- ния разъема внутрисхемного эмулятора ICD2 при отладке программ без подключения радиопередающей части, или установки 8-выводного микроконтроллера PIC12F675. Также этот разъем мож- но применять для программирования 8-выводных микроконтролле- ров при помощи программатора. В случае использования дополни- тельного гнезда необходимо перерезать четыре проводника, обозна- ченных крестиками. С обратной стороны платы расположено гнездо для плоской ли- тиевой батареи CR2032. В качестве выключателя питания исполь- зуется стандартная перемычка. В одном крайнем положении мо- дуль питается от батареи, в другом от программатора. В среднем положении питание отключено. Когда модуль питается от батареи, он может работать автономно. Во время программирования пере- мычка должна быть установлена в положение питания от про- грамматора. Для индикации включения передатчика на плате ус- тановлен светодиод «RFEN». 248
Гпава 4. Набор разработчика «rfPIC Development Kit 1» Если светодиоды, установленные на плате набора PICkit Starter Kit, мешают отладке программы, записанной в rfPIC12F675, их можно отключить, удалив резисторы R5, R6, R7 и R8. Принципиальная электрическая схема модуля Принципиальная электрическая схема модуля передатчика, изо- браженная на рис. 4.9, основывается на типовой схеме, предлагае- мой фирмой-изготовителем. В зависимости от рабочей частоты ра- диопередающей части ряд компонентов имеет различные номина- лы, приведенные ниже. Если номиналы демонстрационных эле- ментов могут иметь значительный разброс и отличаться от указан- ных на схеме на ±20%, то номиналы элементов радиочастотной части необходимо соблюдать предельно точно. Номинал резистора выбора мощности R8* < -70 дБм -12 дБм -4 дБм 2 дБм 8,5 дБм < ЮК 22 К 47 К 100 К >200 К * По умолчанию на плате не установлен Номиналы кварцевого резонатора и настроечных элементов цепи антенны Частота, МГц Кварц, МГц R9, Ом С4, пФ С5, пФ С6, пФ 315,00 9,84375 220 22 5,0 22 433,92 13,56 220 12 2,0 15 В модуле с рабочей частотой 315 МГц применяется микрокон- троллер rfPIC12F675K, с рабочей частотой 433,92 МГц - микрокон- троллер rfPIC12F675F. Печатная плата модуля Печатная плата модуля передатчика изготовлена из двухсто- роннего фольгированного стеклотекстолита. На рис. 4.10 показан чертеж проводников, а на рис. 4.11 расположение деталей. Полный комплект технологических файлов, включая drill-файлы, можно най- ти на сопроводительном диске набора. 249
no о Рис. 4.9. Принципиальная электрическая схема модуля передатчика Микроконтроллеры Microchip9 rfPIC'
Гпава 4. Набор разработчика «rfPIC Development Kit 1» Сторона монтажа Обратная сторона Рис. 4.10. Чертеж проводников печатной платы модуля передатчика Microchip rfPIC12F675 123456789 1011121314 Сторона монтажа Обратная сторона Рис. 4.11. Размещение компонентов на печатной плате передатчика 251
Микроконтроллеры Microchip® rfPIC™ Подготовка модуля к работе После распаковки из заводской тары модуль полностью готов к работе в демонстрационном режиме. В память микроконтроллера записана демонстрационная прошивка, позволяющая передавать номер нажатой кнопки и относительное значение напряжения на выводах потенциометров. Достаточно лишь установить перемычку в положение питания от батареи и нажать одну из кнопок. Свечение светодиода должно индицировать передачу данных. Если светоди- од не светится, необходимо проверить правильность положения перемычки и исправность батареи. У одного из модулей, с которым работал автор, были окислены контакты гнезда батареи, из-за чего модуль работал неустойчиво. При самостоятельном изготовлении платы передатчика можно обойтись без демонстрационных компонентов, а использовать лишь типовой дизайн радиопередающей части. Это позволяет с минимальными затруднениями изготовить действующий прототип устройства, разрабатываемого пользователем. Отладочный модуль приемника Поставляемый в составе набора модуль приемника является примером конструкции недорогого качественного приемника (рис. 4.12), рассчитанного на прием сигнала в диапазоне УКВ с модуляцией типа ASK (амплитудная манипуляция). В отличие от модуля передатчика, содержащего демонстраци- онные элементы, модуль приемника содержит только необходимый набор элементов. Компания Microchip рекомендует дизайн модуля приемника в качестве базового для собственных конструкций потребителя и советует для упрощения отладки стараться максимально повторять конструкцию. Для удобства читателей мы приводим в книге принципиальную схему и рисунок печатной платы. При использовании в качестве демонстрационного устройства модуль приемника не может работать автономно. Ему необходимы источник питания и декодер принятого сигнала. В отладочном на- боре модуль приемника устанавливается в разъем расширения программатора и питается от него, а декодером принятого сигнала является микроконтроллер, устанавливаемый в отладочное гнездо программатора. 252
Гпава 4. Набор разработчика «rfPIC Development Kit 1» Рис. 4.12. Внешний вид модуля приемника Но подключение к плате не является обязательным условием работы модуля. В качестве источника сигнала он может быть подключен к лю- бой другой схеме. Нужно отметить, что отладка устройства деко- дирования с физическим приемником чрезвычайно важна, по- скольку в этом случае на качество приема влияют реально суще- ствующие шумы эфира, помехи и затухания, значительно иска- жающие сигнал. Поэтому при окончательной отладке невозможно обойтись прямой подачей сигнала по проводу от источника к при- емнику. Модуль приемника выпускается для двух частотных каналов: 315 и 433,92 МГц, тип модуляции ASK, скорость передачи данных 4800 бод. По умолчанию в качестве антенны используется отрезок прово- да, подключаемый к гнезду на плате. Длина отрезка для частоты 315 МГц составляет 24 см, для частоты 433,92 - 17,25 см. Вместо штыревой антенны к контактным площадкам платы может быть подключена другая антенна, например выносная, подключаемая при помощи коаксиального кабеля. Нужно лишь помнить, что вход модуля рассчитан на несимметричную четвертьволновую штыре- вую антенну с сопротивлением 36 Ом. 253
Микроконтроллеры Microchip® rfPIC™ Принципиальная электрическая схема модуля Принципиальная электрическая схема модуля приемника, изо- браженная на рис. 4.13, соответствует типовой схеме, рекомендо- ванной фирмой-изготовителем. В зависимости от рабочей частоты канала ряд компонентов может иметь различные номиналы, приве- денные ниже. Согласующие элементы фильтра ПАВ: Номер детали1,3 Частота, МГц С6, пФ L1, нГн L2, нГн С7, пФ В3175 315 _2 82 82 _2 В3550 433,92 3,0 33 27 3,0 В3750 433,92 _2 39 39 _2 1 Номер детали производства EPCOS 2 Не устанавливается 3 EPCOS В3551 (315 МГц) несовместим по разводке выводов с рас- смотренными в таблице и требует изменения рисунка платы. Настроечные компоненты малошумящего усилителя Частота, МГц С15, пФ L3, нГн С17, пФ 315 7,0 22 6,0 433,92 3,0 15 6,0 Керамический фильтр F2 производства MURATA, номер по ка- талогу производителя SFECV10M7GA00, на частоту 10,7 МГц, по- лоса пропускания 230 кГц. Кварцевый резонатор Х1 Частота канала Частота кварца Номер детали1 315 МГц 20,35625 МГц 016999 433,92 МГц 26,45125 МГц 016985 1 Номер детали производства Crystek 254
no СП СП R1 Рис. 4.13. Принципиальная электрическая схема модуля приемника
Микроконтроллеры Microchip9 rfPIC™ Печатная плата модуля Печатная плата модуля передатчика изготовлена из двухстороннего фольгированного стеклотекстолита. Объемное экранирование не пре- дусмотрено. На рис. 4.14 показан чертеж проводников со стороны монтажа, на рис. 4.15 чертеж обратной стороны, а на рис. 4.16 распо- ложение деталей. Полный комплект технологических файлов, включая drill-файлы, можно найти на сопроводительном диске набора. Рис. 4.14. Чертеж проводников печатной платы модуля приемника (сторо- на монтажа) Рис. 4.15. Чертеж обратной стороны печатной платы модуля приемника Работа с комплектом Для начала эксплуатации набора «rfPIC Development Kit 1» доста- точно подключить плату программатора к компьютеру при помощи вхо- дящего в комплект кабеля USB. Установка драйверов не требуется. 256
Глава 4. Набор разработчика «rfPIC Development Kit 1» Рис. 4.16. Размещение компонентов на плате модуля приемника С завода программатор поставляется с установленным в отла- дочный разъем микроконтроллером PIC12F675. Прошитая в него программа управляет переключением светодиодов. Нажатие кнопки SW1 меняет направление переключения, а вращение потенцио- метра RP1 - скорость переключения. Подготовка к работе в демонстрационном режиме Убедившись в исправности платы программатора, можно перехо- дить к испытаниям модулей приемника и передатчика. Все подгото- вительные манипуляции необходимо выполнять при отключенном проводе USB. Удалите из отладочного гнезда 8-выводный микрокон- троллер PIC12F675. На его место установите микроконтроллер PIC16F676, входящий в комплект. На его корпус обычно наклеен яр- лычок с названием файла прошивки и контрольной суммой. В антенное гнездо приемного модуля вставьте отрезок провода, служащий штыревой антенной. Затем приемный модуль установите в разъем расширения на плате программатора. Убедитесь, что мо- дуль установлен правильно, как показано на рис. 4.17. Подключите кабель USB к плате программатора или разветвителю USB, имею- щему внешнее питание. В данном случае никакого обмена данными с компьютером или разветвителем не происходит и он использует- ся только в качестве источника питания. Выберите модуль передатчика с рабочей частотой, соответствую- щей используемому приемному модулю. Установите перемычку цепи питания в положение питания от батареи, как показано на рис. 4.18. Каждый передатчик имеет свой индивидуальный номер, вклю- чаемый в состав передаваемых данных. По этому коду приемник определяет «свой» передатчик, если их работает несколько. 257
Микроконтроллеры Microchip9 rfPIC™ Рис. 4.17. Подготовка набора «rfPIC Development Kit» к работе Перед началом работы приемник необходимо «обучить», т.е. записать в его энергонезависимую память индивидуальный но- мер нужного передатчика. Для этого необходимо нажать на плате Рис. 4.18. Подготовка модуля передатчика к работе 258
Гпава 4. Набор разработчика «rfPIC Development Kit 1» программатора кнопку SW1 и в течение восьми секунд, пока го- рит светодиод, нажать любую кнопку передатчика и держать около секунды. В этом режиме микроконтроллер приемника вы- делит из принимаемого сигнала индивидуальный номер передат- чика, запишет его в EEPROM и выйдет из режима обучения. За- пись номера нового передатчика удаляет предыдущий номер. По умолчанию в микроконтроллер PIC16F676 записана про- стейшая программа, демонстрирующая передачу кода нажатой кнопки. При нажатии кнопки SW2 загорается светодиод DO, а при нажатии кнопки SW1 загорается светодиод D1. На компакт-диске из набора «rfPIC Development Kit 1» записаны несколько дополнитель- ных демонстрационных программ, которые будут полезны при раз- работке и настройке собственных устройств. Они представлены как в виде готовых файлов с расширением *.hex, так и в виде ассемб- лерного текста (файлы с расширением *.asm). Этот текст вы може- те модифицировать по своему усмотрению, ассемблировать при помощи пакета MPLAB IDE и записывать при помощи программато- ра. В гл. 5 мы рассмотрим листинги программ, а сейчас ознакомим- ся с их перечнем и кратким описанием. Имена файлов соответст- вуют файлам, размещенным на фирменном компакт-диске набора. На диске поставляются следующие программы: XMIT_DEMO, RCVFLDEMO, RCVR_ANALOG_DISPLAY, XMlT_TEST, Presentation Pal и Programming Templates. XMIT_DEMO - это программа, по умолчанию записанная в мо- дуль передатчика. Она используется совместно с программами приемника RCVR_DEMO и RCVR_ANALOG_DISPLAY. При помощи этой программы демонстрируется передача кода нажатой кнопки и передача оцифрованного аналогового значения с последующим отображением на массиве светодиодов. Если в микроконтроллер приемника PIC16F676, установленный в гнездо программатора, записан код программы RCVR_DEMO.HEX, то при нажатии на плате передатчика кнопки SW2 загорается светодиод DO, а при нажатии кнопки SW1 загорается светодиод D1. Эта програм- ма записана в приемник по умолчанию. Если в микроконтроллер приемника записан код программы RCVR_ANAL.OG_DISPLAY.HEX, то при нажатии кнопки GP3 (SW2) зажигаются некоторые из светодиодов D0-D7 на плате программа- тора, отображая старшие 8 бит аналогового значения, полученного через 10-разрядный канал О АЦП передатчика, соединенного с по- тенциометром GPO, и переданные по радиоканалу. При нажатии кнопки GP4 (SW1) светодиоды D0-D7 отображают 8 старших бит 259
Микроконтроллеры Microchip® rfPIC”" значения, полученного через канал 1 АЦП, соединенного с потен- циометром GP1. Используемый при передаче данных протокол является дейст- вующим протоколом KeeLoq®, совместимым с серией приборов с фиксированным кодом HCS101. 10-разрядное значение помещает- ся в поле счетчика протокола KeeLoq. Программа XMIT_TEST содержит два теста, позволяющих про- верить модуль передатчика при помощи анализатора спектра и ка- либровочной антенны. Эта программа будет полезна при настройке собственного устройства. Тесты стартуют при нажатии кнопки и ос- танавливаются при отпускании. В промежутках между тестами про- цессор переходит в режим пониженного энергопотребления. Если в потребительском устройстве кнопки подключаются к иным, чем в стандартном модуле выводам, можно самостоятельно изменить исходный код. Для измерения потребляемой мощности нажмите кнопку GP3 (SW2). В этом режиме передатчик излучает постоянный немодули- рованный сигнал, который можно использовать для настройки ан- тенны и предварительной проверки на соответствие техническим условиям. Второй тест позволяет оценить спектр излучаемого сигнала. В нем задействован потенциометр, подключенный к выводу GP0. Установите движок потенциометра в положение, приблизительно соответствующее нужному диапазону скорости. Затем при помощи осциллографа или частотомера подстройте точное значение скоро- сти передачи. Зона вращения движка потенциометра условно разделена на четыре равных части, соответствующих максимальной, высокой, средней и низкой скорости передачи данных, как показано в табл. 4.1. Имейте в виду, что увеличение аналогового напряжения умень- шает скорость передачи, и что скорость в битах в секунду (bps) равна удвоенной частоте модулирующего меандра. Сокращение NRZ означает Non-Return to Zero - без возврата к нулю (метод би- нарного кодирования информации, при котором единичные биты представляются положительным значением, а нулевые отрица- тельным). Такое обозначение в нашем случае применимо и к одно- полярному модулирующему меандру. Модулирующий сигнал имеет форму меандра и его спектр не со- всем соответствует спектру сигнала с ШИМ или манчестерскому коду, но вполне подходит для оценки качества системы передачи данных. 260
Гпава 4. Набор разработчика «rfPIC Development Kit 1» Таблица 4.1 Приблизительные значения скорости передачи данных GP0 NRZ (0...100% GP1) Ширина импульса NRZ (0...100% GP1) О...25% 52,6 ... 3,64 кбит/с 19 ...274 мс 25...50% 3,64 ... 1,88 кбит/с 275 ... 530 мс 50...75% 1,88 ... 1,27 кбит/с 531 ... 786 мс 75... 100% 1,27 ... 0,96 кбит/с 787 ... 1024 мс Приложение Presentation Pal превращает ваш набор «rfPIC De- velopment Kit 1» в устройство для дистанционного управления пре- зентацией (слайд-шоу). Нажатием кнопок на модуле передатчика вы можете передавать команды «раде-up» и «раде-down» на пер- сональный компьютер. В данном приложении имитируется работа брелка для управления презентациями, конструкция которого пред- ложена компанией Microchip в качестве примера законченной раз- работки. Для работы приложения требуются две программы: про- шивки приемника и передатчика. Прошивка приемника PRES_PAL.HEX записывается в микрокон- троллер PIC16C745, поддерживающий протокол USB. Несмотря на то, что в руководстве пользователя сказано, что набор «rfPIC De- velopment Kit 1» не комплектуется записанным микроконтроллером, на самом деле в новых наборах, включая набор, имеющийся у ав- тора, такой микроконтроллер уже есть (вероятно, по многочислен- ным просьбам трудящихся). Микроконтроллер PIC16C745 является однократно программируемым. Его можно запрограммировать при помощи фирменных программаторов PICSTART® Plus или PRO MATE® II, а также программаторов сторонних производителей, на- пример, фирмы «Фитон» (www.phyton.ru). Прошивка PRESPAL_XMIT.HEX представляет собой измененную версию программы XMITJDEMO.ASM. В этом случае совместно с кодом нажатой кнопки передается значение счетчика, отображаю- щего длительность нажатия кнопки, что позволяет приемнику ин- терпретировать длительное нажатие на кнопку аналогично автопо- втору обычной клавиатуры. Перед началом работы с устройством управления презентацией запишите в модуль передатчика прошивку PRESPAL._XMIT.HEX. Затем вытащите из гнезда микроконтроллер PIC16C745 с управляющей про- шивкой программатора и установите вместо него микроконтроллер с 261
Микроконтроллеры Microchip9 rfPIC™ прошивкой PRES_PAL.HEX. Освободите 14-выводное гнездо програм- матора и соедините перемычкой выводы 9 и 13. Теперь плата программатора, подключенная к разъему USB персонального компьютера, будет рассматриваться как клавиатура. Нажатие кнопок по отдельности будет интерпретировано, как нажа- тие кнопок «раде-up» и «раде-down». Одновременное нажатие обе- их кнопок рассматривается, как комбинация Alt-Tab и переключает активные программы. Кроме рассмотренных программ на диске имеются программные шаблоны: PIC12F629-675 Assembly Language Programming Template.asm предназначенный для использования при программировании микро- контроллеров PIC12F629, PIC12F675 или rfPIC12F675K/675F/675H; PIC16F630-676 Assembly Language Programming Template.asm предназначенный для использования при программировании микро- контроллеров PIC16F630 или PIC16F676. Программирование модулей передатчика Для программирования микроконтроллера, установленного на плате модуля передатчика, проделайте при отключенном питании программатора следующие операции: - удалите микроконтроллер из гнезда Evaluation Socket; - установите перемычку питания на плате программатора в по- ложение PICkit; - установите модуль передатчика в гнездо расширения на плате программатора; - включите питание программатора, подключив кабель к порту USB, - запустите интерфейсную программу, после чего будет автома- тически определен тип микроконтроллера. Интерфейс управления программатором Управление программатором организовано при помощи специ- альной интерфейсной программы. Она требует инсталляции. После запуска диска выберите пункт в меню «Install PICkit™ 1 Software» или найдите на диске файл \Software\PICkit1\setup.exe и запустите его самостоятельно. После инсталляции программу можно запус- кать при помощи ярлыка на рабочем столе или через меню «Пуск». Программатор должен быть подключен к компьютеру до запуска программы. Никакие дополнительные драйверы не требуются. 262
Гпава 4. Набор разработчика «rfPIC Development Kit 1» ffij PlCkit(tm) 1 FLASH Starter Kit File Programmer Tools About Program Memory 0000 0000 28CF 3FFF 3FFF 00А0 0Е03 1283 00А1 d 0008 0Е21 0083 0EA0 0Е20 0009 1683 009В 141C 0010 081А 1283 0008 1683 151С 138В 3055 009D 0018 ЗОАА 009D 149С 189С 281В 111С 178В 1283 0020 0008 138В 1683 23FF 0090 1283 1683 303F 0028 0085 303F 0087 1283 1683 1291 1191 1111 0030 1283 1683 1781 1281 1201 1181 1101 1081 0038 1401 1283 130В 128В 120В 118В 138В 3400 0040 1СВ0 284В 307F 0701 1С03 3400 10В0 0FA8 0048 3400 0АА9 3400 307F 0701 1803 3400 14B0 0050 3400 0827 0201 07АА 1803 0AAB 0000 0000 0058 0000 3002 0201 00А7 3400 1830 3400 3000 0060 00AE 1430 15В2 01А8 01А9 3400 1ЕА9 286В 0068 1030 11В2 3400 3008 062Е 1D03 3400 1683 zJ EEDATA Memory „ _ _ . / . ...'......'..../....I. . ПплгЯ 00 73 43 02 03 FF FF FF FF 08 FF FF FF FF FF FF FF FF “ Р Device Power 10 FF FF FF FF FF FF FF FF | 18 FF FF FF FF FF FF FF FF Г 2.5kHzOsc 20 FF FF FF FF FF FF FF FF 28 FF FF FF FF FF FF FF FF 30 FF FF FF FF FF FF FF FF Read Device j| Write Device j Verify | Erase | JGLuit - Device Configuration-----—......................—----—-------—------- Device PIC16F676 Configuration Word 0x3194 UserIDs 0x7F7F7F7F OSCCAL . 0x34D8 / \ \ Checksum 0xEE17 Bandgap 0x3000 Л / Рис. 4.19. Окно интерфейса программатора Кроме исполняемого файла на диске находится исходный текст программы на языке Visual Basic. Подготовленный пользователь в образовательных целях может самостоятельно внести изменения в исходный текст. Интерфейс программы состоит из одного окна (рис. 4.19). Он ин- туитивно понятен, но некоторые моменты требуют дополнительных 263
Микроконтроллеры Microchip® rfPIC™ пояснений. Окно «Program Memory» показывает содержимое буфе- ра программы. В зависимости от контекста проводимых действий это может быть либо содержимое hex-файла прошивки, которое необходимо записать в микроконтроллер, либо прочитанное из микроконтроллера содержимое его памяти. В этом случае данные можно сохранить в файл или переписать в другой микроконтрол- лер. Аналогично отображаются данные в окне «EEDATA Memory». Имейте в виду, что эти окна не предназначены для прямого ре- дактирования кодов. Рассматриваемая программа вообще не имеет функций редактирования. Для этой цели нужно использо- вать пакет MPLAB IDE. Импорт кода программы из MPLAB Для импорта кода программы, подготовленного при помощи MPLAB, выберите в меню программатора File > Import HEX, как по- казано на рис. 4.20. Найдите сохраненный из MPLAB файл и на- жмите Орел. Программный код будет перегружен в буфер програм- матора и готов к записи в микроконтроллер. Г File Programmer Tools About Exit Ctrl+Q 3FFF OEAO 0008 1 A QC Рис. 4.20. Импорт файла прошивки Этот же раздел меню позволяет сохранить считанную из микро- контроллера прошивку в файл на диске. Запись кода программы е микроконтроллер Когда код программы импортирован и микроконтроллер уста- новлен в гнездо для программирования, достаточно нажать кнопку Write Device для начала программирования. Никакое дополнитель- ное подтверждение запрошено не будет и новая прошивка заменит старую. Поэтому будьте уверены, что старая прошивка сохранена или не имеет ценности. В процессе записи кода калибровочные константы имеющегося экземпляра микроконтроллера будут автоматически сохранены в буфер и восстановлены после окончания записи. 264
Гпава 4. Набор разработчика «rfPIC Development Kit 1» Head Device I Write Device j| Verify I Erase I flurt | UCYIUC u-ипнуUl Clliur 1 Device PIC16F676 Configuration Word 0x3194 UserIDs Ox/b/b/F/b Checksum EE17 OSCCAL Bandgap 0x34D8 0x3000 |^j^guccessju| Рис. 4.21. Индикация успешной записи кода программы Когда запись завершена, происходит сравнение контрольных сумм кода в буфере и кода в памяти микроконтроллера. В случае успешной записи появляется зеленый фон строки состояния и над- пись: «Write Successful». Если обнаружена ошибка, возникшая в процессе записи, фон строки состояния меняется на красный и по- является надпись «Checksum verify failed». В этом случае попро- буйте повторить запись несколько раз. Если не поможет - замените программируемый микроконтроллер. Программатор работает ус- тойчиво и надежно, вероятность возникновения ошибки по его вине довольно мала (рис. 4.21). Автоматическая перезагрузка файла Если НЕХ-файл был загружен в буфер программатора с диска, то перед каждой записью в микроконтроллер время создания фай- ла сравнивается с временем создания файла, находящегося на диске. Если файл на диске более новый, то автоматически загру- жается обновленная версия. Обычно в процессе разработки файл на диске обновляется после каждой компиляции при помощи MPLAB. Автоматическое обновление гарантирует, что в микрокон- троллер будет записана самая свежая версия (рис. 4.22). Верификация кода программы Программатор позволяет производить сравнение кода программы в буфере с кодом, записанным в микроконтроллер для гарантии того, что запись произведена правильно. Это не тоже самое, что проверка кон- трольной суммы при завершении записи, потому что совпадение кон- трольной суммы не дает абсолютной гарантии правильности записи. 265
Микроконтроллеры Microchip® rfPIC™ Bead Device [ Write Device ]| Verify I Erase I Quit Device Configuration-------------------------------------; Device PIC16F676 Configuration Word 0x3194 UserIDs 0x7F7F7F7F OSCCAL 0x34D8 CheckSum EE17 Bandgap 0x3000 Рис. 4.22. Индикация ошибки при записи кода программы Возможна ситуация, когда два или более неправильно записан- ных бита взаимно «уравновесят» друг друга при вычислении кон- трольной суммы. Кроме того, иногда, хотя и редко, биты «осыпают- ся» через некоторое время после записи. Поэтому в критичных случаях верификация после записи обязательна (рис. 4.23, 4.24). [ 1| I Qdit Head Device | Write Device -Device Configuration—* 1 2 3---r- Device ; PIC16F676 " Configuration Word 0x3194 : User IDs Ox7F7F7F7F OSCCAL . 0x34D8Л . Checksum 0xEE17 Bandgap 0x3000 (Verified successfully Рис. 4.23. Успешная верификация программной памяти Защита кода программы Программатор позволяет установить бит защиты кода програм- мы от считывания в служебном слове состояния микроконтроллера. Порядок действий должен быть таким. 1. Импортировать файл 2. Выбрать меню Tools > Code Protect Device 3. Записать код программы. При попытке прочитать содержимое памяти микроконтроллера при установленном бите защиты будут считаны и отображены в ок- нах только нули. 266
Гпава 4. Набор разработчика «rfPIC Development Kit 1» Read Device j Write Device [- Device Configuration ------ I Device PIC16F676 j UserIDs 0x7F7F7F7F i Checksum OxBEOO I» Verity i| Erase | fluit j Configuration Word 0x3FFF OSCCAL Bandgap 0x34D8 0x3000 Рис. 4.24. Ошибка при верификации программной памяти Стирание Функция Erase стирает содержимое памяти микроконтроллера. Можно нажать кнопку Erase или выбрать пункт меню Programmer > Erase, предоставляющий расширенные возможности. В отличие от функции Erase, функция Full Erase позволяет пользова- телю очистить не только область памяти, но и калибровочные константы OSCCAL и Bandgap Calibration1. В большинстве ситуаций полное стира- ние не требуется и не рекомендуется. Эту функцию необходимо исполь- зовать, если значения калибровочных констант повреждены. После окончания полной очистки необходимо регенерировать значение OSCCAL и сбросить бит Bandgap Calibration. Функция Re- generate OSCCAL запускает программу регенерации калибровочно- го значения генератора. Регенерированное значение OSCCAL не обязательно будет совпадать с предустановленным ранее, на за- воде, но это не страшно, поскольку новое значение вычисляется для реально действующих значений температуры и питающего на- пряжения и будет достаточно точным. Для восстановления значения Bandgap обратитесь к пункту ме- ню Programmer > Set Bandgap Calibration Value. В появившемся ок- не будет предложено выбрать одно из нескольких значений. Значения калибровочных констант отображаются в нижней час- ти окна интерфейса программатора. Источник импульсов OSC 2,5 кГц Если в окне интерфейса выбрана опция 2,5 kHz, то прямоугольные импульсы с этой частотой с вывода управляющей микросхемы пода- ются на вывод 3 гнезда отладки/программирования Evaluation Socket. ’ Bandgap - пороговая константа калибровки модуля слежения за сбоем или спадом питания, который подробно описан в гл. 2. 267
Глава 5. Применение микроконтроллеров серии rfPIC Эта глава посвящена практическим аспектам применения мик- роконтроллеров rfPIC. Мы приведем ряд практических рекоменда- ций от производителя микросхем, которые могут быть полезны раз- работчикам устройств на основе серий rfPIC и rfRXD. Рекомендации затрагивают процесс разработки прототипов на этапе подбора но- миналов деталей, настройки и тестирования готовых изделий. Во второй части главы приведены примеры учебных программ, предлагаемых компанией Microchip для изучения и отладки уст- ройств на основе rfPIC. Программы можно брать за основу при раз- работке собственных решений. В простых случаях можно обойтись почти без изменений. Для отладки программ и экспериментов с ни- ми предназначен простейший макет, устройство которого также описано в данной главе. Тексты всех приведенных в этой книге программ, прошивки и схемы можно скачать на сайте www.oicman.ru Расчет постоянной времени цепи RSSI Здесь мы рассматриваем практические рекомендации [5] по выбору компонентов цепи RSSI приемников, собранных на микросхеме rfRXD0420/0920 (см. гл. 3). В табл. 5.1 перечислены: типовые значения конденсатора С1, соответствующей постоянной времени RC-цепи т для резистора R1 = 36 кОм, постоянной времени 2т, общепринятых значений скорости передачи данных в случае решения по центру пе- риода сигнала (колонка 5) и по полному периоду (колонка 6). Когда период сигнала (скорость передачи) и метод принятия решения известны, выберите в столбце 3 значение 2т, которое меньше или равно нужному значению. Рекомендуется использовать стандартные значения скорости передачи KeeLoq и соответствую- щие номиналы С1. Напротив значения 2т находится значение С1. Это значение мо- жет быть увеличено до аналогичного значения 1т при условии соот- ветствия техническим требованиям. Например, мы выбрали ско- рость 9600 bps с манчестерским кодом. Этому типовому значению 268
Гпава 5. Применение микроконтроллеров серии rfPIC Таблица 5.1 Выбор значения С1 для цепи RSSI С1, пФ т, мкс 2т, мкс Период сигнала, мкс Распознава- ние по центру импульса Распознава- ние по полно- му импульсу 1 2 3 4 5 6 80000 NRZ 150 5,4 10,8 12,5 40000 Манче- стер 19200 NRZ 76800 NRZ 180 6,5 13,0 13,0 9600 Манче- 19200 Манче- стер стер 220 7,9 15,8 270 9,7 19,4 330 11,9 23,8 390 14,0 28,1 470 16,9 33,8 560 20,2 40,4 9600 NRZ 4800 Манче- 19200 NRZ 680 24,5 49,0 52,1 стер 9600 Манче- KeeLoq Те=100мкс стер 820 29,5 59,0 1000 36,0 72,0 4800 NRZ 2400 Манче- 9600 NRZ 1200 43,2 86,4 104,2 стер 4800 Манче- KeeLoq Те=200мкс стер 1500 54,0 108,0 1800 64,8 129,6 2200 79,2 158,4 2400 NRZ 1200 Манче- 4800 NRZ 2700 97,2 194,4 208,3 стер 2400 Манче- KeeLoq Те= 400 мкс стер 269
Микроконтроллеры Microchip® rfPIC™ С1, пФ т, мкс 2т, мкс Период сигнала, мкс Распознава- ние по центру импульса Распознава- ние по полно- му импульсу 1 2 3 4 5 6 3300 11,8 237,6 3900 140,4 280,8 4700 169,2 338,4 1200 NRZ 600 Манче- 2400 NRZ 5600 201,6 403,2 416,7 стер 1200 Манче- KeeLoq Те=800мкс стер 6800 244,8 489,6 8200 295,2 590,4 300 NRZ 1200 NRZ 10000 360,0 720,0 833,3 150 Манче- 600 Манче- стер стер 12000 432,0 864,0 15000 540,0 1080,0 18000 648,0 1296,0 22000 792,0 1584,0 27000 972,0 1944,0 33000 1188,0 2376,0 300 NRZ 39000 1404,0 2808,0 3333,33 150 Манче- стер 47000 1692,0 3384,0 56000 2016,0 4032,0 68000 2448,0 4896,0 82000 2952,0 5904,0 100000 3600,0 7200,0 * Максимально возможная скорость передачи данных соответствует 2т = 13 и и С1 =180 пФ. Во втором столбце находим значение 1т, максимально близкое к 13 с меньшей стороны. Это т = 270
Гпава 5. Применение микроконтроллеров серии rfPIC =11,9. Ему соответствует значение С1 = 330 пФ. Следовательно, мы можем варьировать С1 в пределах 180...330 пФ. Для большин- ства приложений принято выбирать среднее значение. Следует иметь в виду, что при слишком маленькой постоянной вре- мени RC-фильтра плохо фильтруются шумы. И наоборот, если посто- янная времени слишком велика, фронты импульсов данных слишком затягиваются и может возникнуть межсимвольная интерференция. После того, как разработчик остановился на определенном значе- нии С1, необходимо при помощи осциллографа проверить форму им- пульсов тестового сигнала, желательно в реальных эфирных условиях. Полезно также провести тестирование на потерю/замену битов. Выбор постоянной времени цепи опорного напряжения Здесь мы рассматриваем дополнение к гл. 3 (раздел «Компара- тор в режиме ASK»). В табл. 5.2 приведены начальные значения элементов R1 и С2, используемых в схеме динамического источни- ка опорного напряжения для разных расчетных значений скорости передачи данных. Нумерация элементов соответствует типовой схеме рис. 3.11. Таблица 5.2 Значения R1 и С1 для разных скоростей передачи R1, кОм С2, пФ 5т, мкс Период сигнала, мкс Скорость передачи 100 1000 500 100 1200 600 100 1500 750 100 1800 900 100 2200 1100 12,50 80000 100 2700 1350 13,02 76800 100 3300 1650 100 3900 1950 100 4700 2350 100 5600 2800 100 6800 3400 100 8200 4100 271
Микроконтроллеры Microchip® rfPIC™ R1, кОм С2, пФ 5т, мкс Период сигнала, мкс Скорость передачи 100 10000 5000 52,08 19200 100 12000 6000 100 15000 7500 100 18000 9000 104,17 9600 100 22000 11000 100 27000 13500 100 33000 16500 100 39000 19500 208,33 4800 100 47000 23500 100 56000 28000 100 68000 34000 100 82000 41000 416,67 2400 100 100000 50000 100 120000 60000 100 150000 75000 833,33 1200 100 180000 90000 100 220000 110000 100 270000 135000 100 ^feoooo 165000 100 ^0000 195000 100 470000 235000 100 560000 280000 3333,33 300 100 680000 340000 Расчет рамочных антенн для rfPIC12F675 Поскольку передатчик на основе rfPIC изготавливается по типовой схеме с минимумом навесных элементов, то основной объем работы при конструировании устройства составляет расчет рамочной антен- ны и подбор элементов согласования антенны и передатчика. 272
Гпава 5. Применение микроконтроллеров серии rfPIC Данный раздел основан на описании методики [6] и рассматрива- ет основы расчета рамочной антенны для передатчиков rfPIC12F675. Предлагаемая конструкция печатной рамочной антенны работает на всех трех частотных диапазонах, от 290 до 930 МГц при условии из- менения номиналов нескольких согласующих элементов. Микропередатчики, выпускавшиеся компанией Microchip ранее, имели симметричный выход. По этой причине для питания усили- теля мощности и согласования импеданса требовалось вдвое больше компонентов. Теперь в rfPIC12F675 используется значи- тельно меньше компонентов, в антенну поступает на 10 дБ больше выходной энергии, максимальная частота увеличена до 930 МГц. Малогабаритная рамочная антенна часто применяется в порта- тивных устройствах, в которых антенна другой конструкции, воз- можно даже более эффективная, была бы чрезмерно велика. Большим достоинством рамочной антенны является ее простота. В портативных устройствах ее обычно выполняют в виде петли из печатного проводника, настроенной в резонанс на рабочей частоте. Рамочная антенна, как и любая другая, требует согласования с вы- ходным каскадом передатчика. Полное сопротивление антенны (импе- данс) на рабочей частоте должно как можно точнее совпадать с сопро- тивлением выходного каскада передатчика на этой частоте. При этом условии достигается максимальная отдача энергии в антенну и хоро- шая фильтрация паразитных гармоник. Импеданс выходного каскада передатчика rfPIC является постоянным и мы не можем его менять, следовательно требуется подгонка импеданса антенны. Импеданс антенны зависит от многих факторов, в первую оче- редь от геометрических размеров рамки. Но при разработке порта- тивного устройства мы ограничены некими предельными габарита- ми платы и не можем произвольно варьировать размеры антенны. Поэтому для настройки антенны в резонанс и согласования сопро- тивлений используются внешние элементы. При согласовании сопротивлений применяются две базовые топо- логии антенны: с отводом от индуктивности (tapped inductor, транс- форматорная схема) и с отводом от емкости (tapped capacitor). Да- лее мы рассмотрим топологию для емкости с отводом. Топология для индуктивности с отводом применяется в передатчиках с симметрич- ным выходом, которые в серии rfPIC сейчас не выпускаются. Обратимся к эквивалентной схеме рамочной антенны, показанной на рис. 5.1. На этой схеме Rioss - сопротивление потерь, Rrad - сопро- тивление излучения, Rpar - параллельное сопротивление, С - собст- венная емкость антенны, L - собственная индуктивность антенны. 273
Микроконтроллеры Microchip® rfPIC™ Печатный Последовательная проводник । схема Параллельная схема Вход ВЧ а) Рис. 5.1. Преобразование схемы рамочной антенны: а - физическое представление рамочной антенны; б - стандартная экви- валентная модель; в - преобразование последовательных сопротивлений в параллельное Изначально малые рамочные антенны имеют высокую доброт- ность, которая должна быть снижена для упрощения требований к производству. Дело в том, что излишне высокая добротность может привести к самовозбуждению на гармонических частотах, чрезмер- ной зависимости от влияния окружающих предметов и очень «ост- рой» настройке в резонанс, что в свою очередь требует экранирова- ния схемы и применения дорогих высококачественных навесных элементов. При добротности меньше 20 становится возможным применение обычных серийных элементов и упрощается процесс подстройки при массовом производстве. Для снижения добротности парал- лельно антенне подключают дополнительный резистор (желатель- но безындуктивный). Рамочная антенна с периметром <0,3 X считается электрически малой и ее сопротивление излучения вычисляется по формуле Н^=320л4С^|, (5.1) I Л J где А - площадь рамки, ограниченная центральной осью проводни- ка, м2; Л - длина волны, м. Учитывая, что ширина печатной дорожки намного больше, чем толщина, а толщина намного больше, чем глубина поверхностного 274
Гпава 5. Применение микроконтроллеров серии rfPIC слоя1, сопротивление дорожки рассчитывается, как ’М — R = ' ° loss 2w (5.2) где /- периметр по центру печатной дорожки, м; w- ширина дорож- ки, м; о - проводимость меди равная 5,8x107 S/м; juq - магнитная проницаемость воздуха 1,256x10'6 Н/м. Полное последовательное сопротивление является суммой со- противления излучения, сопротивления потерь и эквивалентного последовательного сопротивления емкости (ESR, Equivalent Series Resistance): RS = F^rad Fl logs + Flesr. (5.3) Коэффициент полезного действия антенны (отдача антенны) рассчитывается, как Пг=-^- (5-4) Hs Увеличение Rrad или уменьшение Rtoss и Resr увеличивает КПД рамочной антенны. Для керамических конденсаторов ESR = 0,2 ... ... 0,6 Ом в диапазоне УКВ, у переменных конденсаторов и конден- саторов серии X7R значение ESR обычно выше. Прежде чем подбирать для настройки антенны в резонанс зна- чение емкости, необходимо вычислить значение индуктивности ан- тенны. Приведенное ниже выражение позволяет вычислить ее с точностью 95% L = — llrl—1 2л \Jw J Значение емкости находят из выражения с = —ГТ"- 4я2 *А2/_ (5.5) (5.6) 1 Высокочастотный ток протекает только по поверхности проводника. Это явление называется поверхностным эффектом, а глубина, на которую про- никают ВЧ токи - поверхностным слоем. 275
Микроконтроллеры Microchip® rfPIC™ Для вычисления импеданса антенны последовательное сопро- тивление необходимо преобразовать в параллельное. Сначала рассчитаем добротность ненагруженного контура рамки: °s=^- (5-7) Hs При высоких значениях добротности параллельное сопротивле- ние можно найти при помощи выражения RP = Rs[(% + l). (5.8) Когда антенна настроена в резонанс, импеданс антенны стано- вится равным величине параллельного сопротивления. Импеданс антенны намного больше, чем выходной импеданс передатчика. Но мы можем подключить выход передатчика не только к точке между L и С, а сделать отвод от индуктивности или, как в нашем случае, от емкости, как показано на рис. 5.2. Это уменьшит импеданс в соот- ношении, равном отношению емкостей конденсаторов. Рассматривая случай, когда антенна настроена в резонанс, ее импеданс находим из выражения ( Q Л2 Ftp (5-9) к И + ^2 7 Подставляя в это выражение эквиваленты предыдущих ра- венств, мы можем вычислить значения С! и С2: С, = ——-------— ------; (5.10) 4n2f2L-2nfylZinRs С2=------1------ (5.11) 2nf4z~R^ Можно заметить, что в выражении (5.10) последний элемент в знаменателе является обратным значением С2, поэтому его можно переписать иначе: 3 =-------—Г- (5.12) 4^2/. С2 276
Гпава 5. Применение микроконтроллеров серии rfPIC Рис. 5.2. Согласование импедансов Обычно С2 значительно больше, чем Ст и получается так, что при помощи Ci настраивают антенну в резонанс, в то время, как С2 совершенно независимо уравнивает импедансы антенны и пере- датчика. Благодаря этому окончательная отладка устройства ста- новится значительно проще. Можно, например, выполнить точную настройку на рабочую частоту, практически не сбивая согласование импедансов, и наоборот. 277
Микроконтроллеры Microchip® rfPIC™ Разработка печатной платы устройства В приложении [6] приведены рекомендации к общей методике разработки печатных плат применительно к устройствам на базе rfPIC. Нам представляется полезным кратко рассмотреть здесь эти рекомендации. В качестве примера разработки фигурирует модуль передатчика из рассмотренного выше набора. Чертеж его печатной платы показан на рис. 4.10. Изначально этот модуль разрабатывался на частоту 433,92МГц, как наиболее популярную для устройств дистанционного управления, не требующих лицензирования. Модуль работает с моду- ляцией типа ASK, но с равным успехом может применяться и модуля- ция FSK без каких-либо изменений в конструкции антенны. Фиксиро- ванным параметром при разработке, кроме рабочей частоты, является выходной импеданс передатчика. Он составляет 300 Ом для rfPIC12F675K/675F и 250 Ом для rfPICI 2F675H. Размер петли антенны и ширина печатного проводника в первую очередь определяются заданными размерами печатной платы уст- ройства. Рекомендуется в любом случае выдерживать ширину про- водника антенны около 2 мм и делать площадь антенны как можно больше. Приведенные выше равенства справедливы для антенны любой формы, не только прямоугольной, но площадь и периметр антенны, разумеется, необходимо вычислять разными способами для каждого случая. Точность вычислений значительно снижается, если внутри петли антенны или очень близко к ней размещены кон- струкционные элементы или компоненты схемы. Теперь обратимся к схеме модуля передатчика на рис. 4.9 и черте- жу его печатной платы рис. 4.10. Относительно теоретической схемы рис. 5.2, в практическую схему модуля внесены некоторые изменения. Конденсаторы С5 и С6, соединенные последовательно, соответствуют конденсатору С1, а конденсатор С4 соответствует конденсатору С2. Применение последовательно соединенных конденсаторов С5 и С6 объясняется удобством настройки готового изделия. Ведь комбинируя различные значения двух конденсаторов можно получить более широ- кий диапазон значений емкости, чем это может позволить стандартный ряд значений. Это, в свою очередь, позволяет разработчику более смело варьировать геометрические размеры антенны. Естественным недостатком последовательного соединения кон- денсаторов является сложение их эквивалентных последователь- ных сопротивлений, что снижает эффективность. Далее мы покажем, что при снижении добротности антенны (с целью бесподстроечного 278
Гпава 5. Применение микроконтроллеров серии rfPIC серийного производства) не происходит дополнительной потери мощности. При разводке печатной платы постарайтесь предусмотреть воз- можность установки подстроечного конденсатора вместо С5 и С6. Поскольку для установки подстроечного конденсатора вместо С4 места недостаточно, можно припаять подстроечный кондесатор одним выводом к площадке платы, а второй вывод соединить с за- земляющим проводником при помощи короткой перемычки. После окончания разводки печатной платы необходимо уточнить получившиеся геометрические размеры антенны для расчета зна- чений емкостей. В рассматриваемом нами примере печатной платы высота петли приблизительно 0,016 м, ширина 0,035 м, ширина до- рожки 0,002 м. Сумма значений ESR трех конденсаторов получена из справочника по компонентам и составляет около 1,7 Ом. Под- ставляя эти значения в приведенные выше равенства получаем: Rrad = 0,0573 Ом Rloss = 0,289 Ом КПД (отдача) = 2,8% L = 68,3 нГн С1 = 2,27 пФ С2 = 14,8 пФ. Экспериментальные данные показали, что реальные значения емкости должны быть приблизительно на 15% больше расчетных. Это хороший результат, принимая во внимание приближения при расчете индуктивности и сопротивления потерь петли, а также не- однородности материала печатной платы и разброс параметров компонентов в диапазоне ±5%. Если, из расчета на каждый конденсатор, добавить по последо- вательной индуктивности 1нГн к результату вычисления индуктив- ности по формуле (5.5), то расчетное значение С1 будет соответст- вовать действительному значению. Настройка и тестирование радиопередающей части Если конструкция печатной платы радиопередающего модуля копируется полностью, то при условии сохранения рабочей час- тоты не потребуется подбор новых значений согласующих кон- денсаторов. В случае, когда вы меняете рабочую частоту пере- датчика, используя другой кварц, прежде всего убедитесь, что имеющаяся модификация микроконтроллера поддерживает этот диапазон частот. Затем вам понадобится найти новые значения 279
Микроконтроллеры Microchip® rfPIC™ С1 и С2, подставляя в формулы новое значение частоты. Полу- ченное значение С2 округлите до ближайшего стандартного зна- чения для С4 в схеме. Для конденсаторов С5 и С6 подберите такие стандартные значения емкости, которые при последова- тельном соединении дадут значение, максимально близкое к расчетному С1. Минимальное оборудование, необходимое для тестирования готового устройства, состоит из анализатора спектра и антенны, работающей в диапазоне начиная с рабочей частоты передатчика и не менее, чем до пятой гармоники этой частоты. Если вы хотите достоверно наблюдать за тем, как изменения компонентов на плате влияют на излучаемый сигнал, обеспечьте хорошую повто- ряемость параметров окружающей среды при измерениях. Жела- тельно все измерения проводить в одном и том же помещении, как можно дальше от предметов вызывающих отражение радио- волн. Управлять процессом модуляции передатчика можно как при помощи внешнего сигнала подаваемого по проводам к плате пере- датчика, так и при помощи программы, записанной в микроконтрол- лер. Примером специальной тестовой программы является упомя- нутый в гл. 4 файл XMIT_TEST. Для настройки антенны обычно применяют немодулированный сигнал. Лишь когда настройка за- вершена, используют модулирующую последовательность для про- верки качества передачи данных, наблюдая при помощи осцилло- графа форму принимаемого сигнала на выходе приемника. Если планируется серийное производство устройства, то инже- неры компании Microchip рекомендуют изготовить порядка пяти экс- периментальных плат. Сначала на плату устанавливают подстро- ечные конденсаторы и определяют, как изменение емкости влияет на качество согласования антенны, а также уточняют значение по- стоянных емкостей для последующего монтажа. В этом случае кро- ме анализатора спектра потребуется измеритель емкости, с хоро- шей точностью работающий в диапазоне малых емкостей. Приоб- рести такой прибор достаточно сложно и стоит он дорого. Впрочем, в большинстве случаев можно обойтись подбором постоянных кон- денсаторов. Если же прибор изготавливается штучно, то наоборот, после на- стройки можно оставить подстроечные конденсаторы на плате. Вы- бирайте для монтажа подстроечные конденсаторы с максимальным номиналом примерно вдвое больше расчетного значения. Тогда 280
Гпава 5. Применение микроконтроллеров серии rfPIC среднее положение будет соответствовать расчетному значению и при настройке будет возможность смещать значение емкости как в большую, так и в меньшую сторону. Обязательно используйте для настройки специальный диэлектрический инструмент. Но даже в этом случае близость рук и инструментов будет влиять на процесс настройки. Если у вас нет опыта отладки высокочастотных уст- ройств, потребуется некоторое время на отработку навыков. Хорошим способом настройки является использование генерато- ра качающейся частоты (ГКЧ). Кварцевый резонатор на время отлад- ки отключают и подают на вывод XTAL сигнал от ГКЧ. Диапазон ка- чания настраивают на ±10% от центральной частоты. Синхронизиро- вав анализатор спектра и ГКЧ, можно наблюдать на экране анализа- тора спектра пик, соответствующий резонансной частоте антенны. Вращая подстроечные конденсаторы наблюдаем, как смещается по частоте пик и меняется его амплитуда. Нужно позаботиться о том, чтобы снизить влияние соединительных проводов от ГКЧ до на- страиваемой платы: сделать провода как можно короче и постарать- ся использовать ферритовые колечки, надетые на проводники. При помощи этого способа можно легко измерить полосу пропуска- ния антенны и ее добротность. Полоса пропускания определяется, как разность между значениями частот, на которых амплитуда сигнала снижается на 3 дБ относительно центрального пика. В свою очередь, добротность Q вычисляется, как частота пика, деленная на полосу. Приемлемым для серийного производства является Q менее 20. Большее значение увеличивает излучаемую мощность, но требует точной индивидуальной настройки каждого изделия. Добавление последовательного резистора в петлю антенны снижа- ет добротность. Это объясняет, почему эквивалентное последователь- ное сопротивление подстроечных конденсаторов вполне приемлемо. Возвращаясь к рассмотренным выше выражениям, мы можем преоб- разовать это сопротивление в параллельное, включенное параллельно антенне, что снижает добротность. На иллюстрации из [6], которую мы приводим на рис. 5.3, показано, как влияют на ширину полосы и добротность различные значения со- противления. Если при настройке опытных образцов вы будете менять не только емкости конденсаторов, но и значение индуктивности антен- ны, то можете заметить, что при изменении индуктивности на не- большую величину повторная настройка не требуется, т.е. антенна менее чувствительна к изменению индуктивности, чем емкости. 281
Частота, МГц Рис. 5.3. Влияние дополнительного сопротивления на добротность Для снижения стоимости допускается вообще отказаться от пет- ли антенны и просто подать питание на выход усилителя через ре- зистор. Но в этом случае мощность полезного излучения упадет на несколько децибел, зато значительно возрастет уровень паразит- ных гармоник. Если задумано промышленное производство устройства, про- верку на допустимый уровень гармоник придется проделать в лю- бом случае. Наибольший уровень имеют вторая и третья гармоники основной частоты. Причем если при изменении емкости С4 вторая гармоника уве- личивается, то третья уменьшается и наоборот. Варьируя значение С4 добиваются того, чтобы обе гармоники лежали в предписанных нормативами пределах. Когда излучаемая мощность настроена на максимум, и гармоники достаточно подавлены, можно переходить от подстроечных конденса- торов к постоянным. Если у вас есть возможность использовать точ- ный измеритель малых емкостей, удалите подстроечные конденса- торы с платы при помощи кусачек (или осторожно отрывая выводы от площадок платы) и измерьте их емкость. Нагрев при выпаивании может существенно изменить значение емкости подстроечного конденсатора (но поможет сохранить неповрежденную плату). Даже самый хороший измеритель емкости не может измерить ESR, собственную индуктивность и емкость конденсатора именно на рабочей частоте. Поэтому желательно иметь в запасе набор постоянных конден- саторов с минимальным шагом номинала для окончательной на- стройки. 282
Гпава 5. Применение микроконтроллеров серии rfPIC Рис. 5.4. Пример влияния емкостей С5 и С6 на резонансную частоту [6] Наиболее простой способ подобрать значения последовательно соединенных конденсаторов С5 и С6 состоит в следующем. Начи- наем с того, что берем конденсатор С5 со стандартным номиналом, немного большим, чем расчетное значение С,. Конденсатор С6 бе- рем значительно больше, чем С5, с тем, чтобы снизить суммарную емкость до расчетного уровня. Используя ГКЧ находим частоту, на которой наблюдается пик выходной мощности. Если эта частота велика, снижаем емкость С6, если низка - увеличиваем. На рис. 5.4 показан пример распределения резонансных частот для нескольких сочетаний номиналов С5 и С6. Наблюдая за спектром выходного сигнала, попробуйте поочередно слегка увеличить и уменьшить номинал С4, чтобы проверить, не улуч- шится ли настройка при одном из изменений. Не забывайте следить при этом за уровнем гармоник. Когда остановитесь на окончательном значении С4, проверьте положение пика мощности на шкале частот. Если настройка сбилась, подкорректируйте ее при помощи С6. Во время проведения измерений не забывайте подождать, пока плата и только что припаянные элементы не охладятся до комнат- ной температуры. Используйте только припой и паяльное оборудо- вание соответствующего типа. В некоторых конденсаторах при пе- регреве могут наступить необратимые изменения, меняющие ха- рактеристики, поэтому вы рискуете получить недостоверные значе- ния настроечных номиналов для серийного производства. Существует оригинальный способ подключения конденсаторов без пайки. Покройте контактные площадки платы слоем припоя и охладите. Затем прижмите конденсатор к площадкам при помощи обычного канцелярского ластика. Этот способ позволяет быстро менять и многократно использовать отладочные детали. Впрочем, такой способ снижает достоверность измерений уровня гармоник, 283
Микроконтроллеры Microchip® rfPIC™ но в подавляющем большинстве случаев вполне приемлем. Когда подбор отладочных номиналов завершен, повторно из- мерьте добротность. Если она близка к 20, уменьшите номинал R9 и повторите измерение. Вероятнее всего, излучаемая мощность снизится примерно на 5 дБ. Отключите ГКЧ от вывода микроконтроллера и подключите об- ратно кварцевый резонатор. Окончательно убедитесь в том, что после подключения резонатора излучаемая мощность и уровень гармоник остались в заданных пределах. При необходимости под- берите номиналы конденсаторов более точно. Окончательно подобранные номиналы настроечных элементов действительны только для определенного рисунка печатной платы. После любого изменения расположения компонентов или рисунка проводников (особенно в высокочастотной части схемы) настройку передатчика необходимо повторить. Основы расчета фильтров ФАПЧ В этом разделе мы рассмотрим метод расчета собственных фильтров ФАПЧ для передатчиков серии rfPIC и rfHCS. Содержа- ние раздела основывается на материале документа [10]. Прежде всего, мы рассмотрим ознакомительное описание схемы. Примеры номиналов компонентов могут быть найдены при помощи специ- ально подготовленной производителем таблицы Excel. Файл этой таблицы называется pllfilter.xls, его можно скачать с сайта компании Microchip www.microchip.com или по адресу www.picman.ru. Структурная схема узла ФАПЧ показана на рис. 5.5. Мы уже час- тично рассматривали работу этого узла в предыдущих главах, но для облегчения понимания вновь обратимся к описанию принципа работы ФАПЧ. Система ФАПЧ создает выходной сигнал, синхронизированный по фазе с опорным сигналом кварцевого генератора. Высокочас- тотный сигнал с выхода генератора, управляемого напряжением (ГУН), поступает на делитель на 32 для уравнивания с частотой опорного генератора. В реальных условиях колебания ГУН не сов- падают с колебаниями опорного генератора по частоте и фазе, и схема сравнения вырабатывает сигнал компенсации ошибки, воз- действующий на ГУН. Если в процессе работы выходной сигнал смещается от опорно- го значения в ту или иную сторону, фазочастотный детектор «ука- зывает» генератору тока подкачки направление смещения для воз- врата к исходной фазе. 284
285 Рис. 5.5. Структурная схема узла ФАПЧ лава 5. Применение микроконтроллеров серии rfPIC
Микроконтроллеры Microchip® rfPIC™ Фильтр ФАПЧ предназначен для фильтрации сигнала ошибки и оказывает очень большое влияние на параметры всей системы. В рассматриваемой нами схеме он, по сути, представляет собой емкостный накопитель напряжения, воздействующего на ГУН. Ге- нератор тока подкачки увеличивает зарядный ток, если выходная частота чуть меньше, и уменьшает, если выходная частота чуть больше опорной. Поскольку значение ошибки рассогласования в принципе не может быть определено за время меньшее, чем пери- од опорного сигнала, максимально возможная частота управляю- щих импульсов, воздействующих на фильтр ФАПЧ, равна опорной частоте. Любому фильтру присущи такие параметры, как полоса пропуска- ния и фазовый отклик. Можно говорить, что фильтр низких частот - это такой фильтр, который пропускает все частоты, начиная с наи- меньших и до определенной максимальной частоты, называемой частотой среза. Это частота, на которой уровень выходного сигнала уменьшается на 3 дБ относительно максимума. Фазовый отклик не- сколько труднее для наглядного представления, но достаточно по- нять, что фильтр вносит положительный сдвиг в фазу сигнала. Рассматриваемый фильтр способен на высших частотах задер- живать фазу сигнала вплоть до четверти периода, т.е. на 90°. При этом вместе со сдвигом 90°, который вносит ГУН, мы можем ока- заться в опасной близости от значения в 180°, что позволит петле ФАПЧ совершать непрерывный колебательный процесс около вы- ходной частоты (что для нас абсолютно нежелательно). Для возникновения колебаний кроме сдвига фазы нужно, чтобы коэффициент усиления петли был, как минимум, равен 1, значит нам достаточно лишь определить фазовый сдвиг частоты, на кото- рой фильтр имеет единичное усиление. Затем этот вычисленный фазовый сдвиг вычитаем из 180° и получаем так называемый запас по фазе. Все высшие частоты, со сдвигом фазы стремящимся к 180°, будут подавлены и не станут представлять угрозу возникнове- ния паразитных колебаний. Фазовый сдвиг <рт связан с коэффициентом затухания С сле- дующим выражением: tg.i90° ~(PmJ = _L (5.13) У 2 4£2 Если запас по фазе небольшой, то петля ФАПЧ быстрее захва- тывает частоту при запуске опорного генератора, или когда проис- 286
Гпава 5. Применение микроконтроллеров серии rfPIC ходит модуляция задающего генератора по частоте. Если же запас по фазе большой, то для захвата опорной частоты требуется больше времени. Фактически, время отклика есть функция от обоих параметров, запаса по фазе и полосы пропускания фильтра. Кон- денсатор фильтра, имеющий значение более 10 нФ или резистив- ная нагрузка на выводе фильтра также будут влиять на время от- клика, ограничивая скорость нарастания выходного напряжения. Пиковый выходной ток генератора подкачки, величиной 260 мкА, в течение рабочего цикла снижается примерно до 180 мкА, ограничи- вая скорость нарастания в соответствии с формулой: Время нарастания = AV-С/1. (5.14) Выходная частота ГУН не отличается высокой стабильностью, и хаотичные колебания частоты называются фазовым шумом. Дос- тоинство замкнутой цепи ФАПЧ в том, что этот шум ограничивается. На рис. 5.6 показано влияние полосы пропускания фильтра на фа- зовый шум. Шум в пределах полосы пропускания петли подавляется, в то время как за пределами полосы пропускания шум может возрасти. Таким образом, желательно разрабатывать фильтр с максимально возможной полосой пропускания (в заданных пределах запаса по фазе, разумеется). Когда полоса пропускания фильтра увеличивается, через него про- ходит большее количество шума фазочастотного детектора. Этот шум проявляет себя в виде выбросов в спектре выходного радиочас- тотного сигнала на несущей частоте передачи плюс/минус целое число значений опорной частоты. На рис. 5.7 показана спектрограмма, отра- жающая уровни выбросов при полосе пропускания 1 МГц. Это особое значение полосы, поскольку при нем выбросы шумов становятся заметными относительно фазовых шумов несущей частоты. Дальнейшее увеличение полосы пропускания делает выбросы шумов ФЧД доминирующими в излучаемых шумах. В случае использования узкополосного приемника может оказаться полезным увеличение полосы пропускания фильтра до 2 МГц с по- следующей отсечкой возросших шумов за счет узкой полосы про- пускания приемника. Если полоса излучения должна быть узкой, например по причине близости к краю разрешенного диапазона, то рекомендуется уменьшить полосу пропускания до значения меньше, чем 500 кГц, чтобы уменьшить ширину спектра излучаемых шумов и остаться в пределах допустимой полосы. 287
-1000 -800 -600 -400 -200 0 200 400 600 600 1000 Девиация частоты относительно 433,92 МГц (кГц) Рис. 5.6. Зависимость фазового шума от полосы пропускания Выбор полосы пропускания фильтра ФАПЧ зависит также и от физических ограничений. Слишком узкая полоса пропускания требует чрезмерно больших номиналов конденсаторов, которые проблематично подобрать в миниатюрном исполнении. С другой стороны, чересчур широкая полоса пропускания приводит к трудностям в серийном производст- ве, так как требуются очень маленькие номиналы конденсаторов (иногда сопоставимые с паразитными емкостями монтажа, отчего изделие имеет нестабильные параметры). В качестве оптимального решения рекомендуется использовать Центр 433,92 МГц шаг 60 МГц Рис. 5.7. Уровни выбросов шумовых составляющих при полосе 1 МГц 288
Гпава 5. Применение микроконтроллеров серии rfPIC конденсаторы с номиналом, как минимум в пять раз превышающим сумму паразитных емкостей и собственной емкости вывода LF. По- скольку упомянутая сумма обычно принимается равной 2 пФ, то ем- кость конденсатора фильтра должна быть не менее 10 пФ. Таким образом, максимальная полоса пропускания фильтра ог- раничивается значением 1,2 МГц. Стандартный алгоритм расчета, предлагаемый изготовителем в виде таблицы Excel со встроенны- ми формулами, позволяет учесть значения паразитной емкости, с тем, чтобы расширить полосу пропускания, но такая конструкция более подвержена погрешностям при серийном производстве. Двуполярный фильтр, показанный на рис. 5.5, выбран по причине того, что это наиболее простой из фильтров, соответствующих тре- бованиям к полосе пропускания и фазовым характеристикам. Про- стая и понятная схема фильтра легко поддается анализу и имеет всего три пассивных компонента. Более дорогие активные фильтры или более сложные пассивные фильтры позволяют улучшить харак- теристики фильтра, но вносят больше шумов в петлю ФАПЧ. Для большинства конструкций все три компонента фильтра мо- гут быть быстро найдены при помощи алгоритма расчета. В са- мом простом случае достаточно ввести лишь значение частоты передачи. Убедитесь, что значение этой частоты соответствует региональным нормам. Чтобы немного оптимизировать свою кон- струкцию, вы можете также изменить значения, принятые по умолчанию для полосы пропускания, запаса по фазе и паразитной емкости. Мы знаем, что фильтр ФАПЧ формирует постоянное напряже- ние, поступающее на вход ГУН. Но выходная частота ГУН не абсо- лютно зависит от управляющего напряжения, поскольку характери- стика ГУН не совсем линейная. Кроме того, и напряжение на выходе реального фильтра изменяется не по линейному закону. На рис. 5.8 изображена кривая отклика ГУН, основанная на реальных измере- ниях. Фирменный алгоритм расчета использует не линейное выра- жение, а табличный подбор измеренных значений для определения коэффициента усиления петли. При амплитудной манипуляции (ASK) меняется только амплитуда сигнала передатчика, значение несущей частоты остается неизмен- ным. Поэтому фильтр может иметь большое время отклика для эф- фективной фильтрации шумов. Но отклик фильтра должен быть доста- точно быстрым для того, чтобы при включении питания петля ФАПЧ успела стабилизировать выходную частоту до того, как начнется пере- дача. Кроме того, быстрая петля ФАПЧ снижает непредвиденную час- тотную модуляцию, возникающую при колебаниях питающего напря- жения. 289
Микроконтроллеры Microchip® rfPIC™ Рис. 5.8. Типовое напряжение на фильтре и кривая отклика ГУН При частотной манипуляции (FSK) скачкообразно меняется час- тота излучения, тогда как амплитуда остается неизменной. Для достижения высокой скорости передачи данных при малой меж- символьной интерференции частота должна меняться быстро и точно. Уменьшение запаса по фазе и увеличение полосы пропуска- ния позволяет улучшить такой параметр канала передачи данных, как время установления при старте передачи каждого бита. В большинстве случаев установленной по умолчанию полосы пропус- кания 1 МГц достаточно для стабильной работы устройства, причем скорость передачи данных ограничивается тем, насколько сильно смещается частота опорного кварцевого генератора при модуляции. Порядок расчета элементов фильтра Кратко рассмотрим порядок работы с упомянутым ранее калькуля- тором для расчета номиналов элементов фильтра. По умолчанию в примере используется рабочая частота передачи 433,92 МГц, как ти- повая для большинства приложений на основе rfPIC или rfHCS. Лист калькулятора построен в том порядке, в каком обычно про- исходит решение задачи подбора номиналов элементов фильтра. Сначала следует ввести значение рабочей частоты, затем, при не- обходимости, такие параметры, как запас по фазе и ширина полосы 290
Гпава 5. Применение микроконтроллеров серии rfPIC пропускания, если параметры по умолчанию не устраивают разра- ботчика. При вводе каждого нового значения автоматически изме- няются расчетные значения С1, С2 и R1. Второй шаг позволяет по известным значениям элементов рас- считать параметры фильтра. После ввода новых номиналов на- жмите кнопку «Пересчитать» (Recalculate). Некоторые ячейки защищены от модификации пользователем, чтобы нельзя было испортить значения фиксированных параметров. Для возврата к предустановленным значениям достаточно вновь от- крыть файл калькулятора pllfilter.xls. Рекомендуется иметь резервную копию этого файла и не пользоваться командой «Сохранить». Расчетные значения номиналов компонентов обычно не совпада- ют со стандартным рядом номиналов. Подберите номиналы элемен- тов из стандартного ряда и введите их в ячейки второго шага вычис- лений. Обязательно проверьте и при необходимости введите новое значение погрешности номинала. Если в результате пересчета запас по фазе не попадает в диапазон 40...60 градусов, попробуйте по- добрать другие номиналы из доступных вам стандартных значений. Если вы располагаете необходимым измерительными оборудо- ванием, то в третьей секции можете ввести результаты измерений и увидеть, каковы реальные базовые параметры получившегося фильтра. Если эти параметры не соответствуют вашим требовани- ям, то можно скорректировать их значения путем последовательно- го подбора номиналов. Отдельно следует сказать о типах используемых компонентов. Фильтр работает на частоте кварцевого резонатора и керамические конденсаторы являются оптимальным недорогим решением. По воз- можности следует выбирать конденсаторы с диэлектриком типа NP0. При увеличении емкости конденсатора С1 можно использовать диэлектрик X7R. Для номиналов С1 и С2, принятых по умолчанию, доступны детали в корпусе 0603 с диэлектриком типа NP0. Если вы будете использовать конденсаторы с диэлектриком X7R, то в каль- куляторе увеличьте допуски С1 и С2 до 10%. Применение металлопленочных резисторов помогает снизить уровень шумов, но более дешевые стандартные тонкопленочные резисторы тоже будут работать достаточно хорошо. В примере стандартного модуля передатчика применены тонкопленочные ре- зисторы с погрешностью номинала 1%. Они незначительно дороже, чем резисторы с разбросом 5%, но ощутимо снижают колебания запаса по фазе при серийном производстве. Габаритные размеры деталей не имеют принципиального зна- 291
Микроконтроллеры Microchip® rfPIC " чения и определяются только конструкционными ограничениями. В идеале, чем меньше детали фильтра и чем ближе они располо- жены друг к другу, тем меньше влияние внешних факторов. Требования к печатной плате Фильтр ФАПЧ очень чувствителен к внешним наводкам и утечкам. Хотя на выходе фильтра мы имеем постоянное напряжение, управ- ляющее генератором, но на уровень постоянного напряжения могут накладываться наводки, вызывающие колебания частоты ГУН, что, в свою очередь, приводит к появлению случайных пиков в спектре вы- ходного сигнала. Так, на рис. 5.9 в качестве примера показан спектр выходного сигнала передатчика, измеренный специалистами компании Microchip. На спектрограмме отчетливо видны два боковых выброса, вызванных наводками от внутреннего генератора микросхемы. Ref-10 дБм Peak Log 10 ДБ/ -1.! 1 1 < ► 2R Ал, Центр 433,92 МГц ; шаг 5 МГц Рис. 5.9. Спектр выходного сигнала с наводками Чрезмерно большая утечка через материал печатной платы (на- пример, вследствие его гигроскопичности) приведет к тому, что конденсаторы фильтра будут разряжаться током утечки и для под- держания нужного управляющего напряжения потребуется завы- шение тока подкачки. Это снижает диапазон регулировки петли ФАПЧ и ее стабильность. Обычно утечка не является заметной проблемой, если емкость конденсаторов составляет не менее 20 пФ, но сопротивление утечки порядка 100 кОм увеличивает нерав- номерность спектрограммы на 10 дБ. При разводке платы необходимо располагать элементы фильт- ра как можно дальше от любых других проводников, особенно ли- ний питания и антенны. Делайте проводники цепей фильтра как можно короче, обязательно заэкранируйте фильтр сплошным за- 292
Глава 5. Применение микроконтроллеров серии rfPIC земленным проводником с обратной стороны платы. Если обвести элементы фильтра с внешней стороны заземляющим проводником, в нескольких точках соединенным с обратной стороной платы, это тоже снизит уровень внешних наводок на фильтр, но может привести к уве- личению утечек. Еще одна рекомендация относительно размещения деталей состоит в том, что не следует размещать последовательно соединенные компоненты ВЧ-цепей так, чтобы они образовывали замкнутый контур на плоскости. Этот контур может сыграть роль пара- зитной петлевой антенны, принимающей наведенные помехи. Тестирования изделия Тот факт, что вы при помощи специального калькулятора под- считали минимальные и максимальные значения параметров фильтра (с учетом разброса номиналов деталей), еще не означает, что ваше устройство будет работать после установки этих деталей. Готовя устройство к серийному производству вы должны протести- ровать его в полном диапазоне рабочих температур и питающих напряжений, чтобы убедиться, что параметры фильтра ФАПЧ не выходят за допустимые пределы. Используя осциллограф, вы можете измерить запас по фазе, как переходную характеристику на выводе LF при включении питания или при переключении между частотами при частотной манипуля- ции. При помощи анализатора спектра можно сравнить спектр из- лучаемого сигнала с предполагаемым теоретически и выявить ис- точники мешающих шумов. Для этого необходимо, чтобы схема из- лучала стабильный немодулированный сигнал. Неравномерность в спектр может внести собственный резонанс передающей антенны, поэтому на время проверки фильтра ФАПЧ рекомендуется слегка сбить ее настройку. Если схема работает и спектр имеет должный вид, можно включить модуляцию и проверить время отклика фильтра и стабильность захвата ФАПЧ при частотной манипуляции. Появление высокого уровня на выводе RFENin включает опор- ный кварцевый генератор и ГУН. Различие частот двух генераторов побуждает генератор тока подкачки быстро заряжать конденсаторы фильтра, как показано на рис. 5.10. Петля ФАПЧ может захватить частоту раньше, чем стабилизируется кварцевый генератор. Когда напряжение на выводе LF достигает 0.8В, выходная частота пере- датчика при помощи ФАПЧ привязана к опорной частоте. Процесс инициализации занимает 150 микросекунд, с запасом на гарантиро- ванный захват частоты петлей ФАПЧ. По истечении этого времени включается цепь модуляции и выходной усилитель мощности, что позволяет начать передачу. 293
Микроконтроллеры Microchip9 rfPIC™ Рис. 5.10. Переходные процессы при включении передатчика Чтобы удостовериться, что запас по фазе реального устройства соответствует предъявляемым требованиям, рассмотрите напря- жение на фильтре, когда ФАПЧ захватывает частоту. Измерьте на- пряжение и временной интервал нарастания до пика, спада и ста- бильное напряжение, как показано на рис. 5.11. Введите полученные значения в ячейки третьего шага вычисле- ний специального калькулятора. Вы получите вычисленные значе- Рис. 5.11. Измерение параметров петли ФАПЧ для ввода в калькулятор 294
Гпава 5. Применение микроконтроллеров серии rfPIC ния запаса по фазе и собственной частоты контура ФАПЧ. Щуп ос- циллографа должен иметь минимально возможный импеданс и собственную емкость. В этом случае ошибка измерения параметров составит несколько процентов. Для изучения шумов в цепи фильтра ФАПЧ можно использовать анализатор спектра, рассчитанный на диапазон до 20 МГц, и под- ключаемый к выходу фильтра, но работа пойдет быстрее, если ми- новать этот этап и перейти сразу к исследованию спектра на ра- диочастоте. Такие измерения подразумевают наличие более доро- гого и сложного анализатора спектра, но сразу показывают, соот- ветствует ли схема официальным требованиям к излучаемому сиг- налу и не вносят погрешность в работу ФАПЧ. Полоса пропускания фильтра может быть приблизительно оценена по спектрограмме рис. 5.9, как расстояние между двумя пиками, отстоящими симмет- рично по обе стороны от несущей частоты. Если шумовые выбросы в спектре чрезмерно велики, придется определять источник наво- док на фильтр и принимать меры к уменьшению их уровня. Примеры программ для приема и передачи данных Для передачи данных по радиоканалу, как и по любому другому последовательному асинхронному каналу, требуется наличие кода передачи данных. Под кодированием мы понимаем здесь не засек- речивание, а генерацию последовательности двоичных импульсов, следующих сообразно заранее заданному формату. Разрабатывая приложение, можно воспользоваться готовым форматом, либо ус- тановить собственный. Компания Microchip предлагает использо- вать формат передачи данных, являющийся базовым для фирмен- ной технологии KeeLoq и реализованный в семействе микросхем- кодеров серии HCS. В чем преимущество использования данного формата? Во- первых, он прост. Во-вторых, как уже упоминалось, он используется в технологии KeeLoq. Поэтому изучение и усвоение приемов рабо- ты с базовым форматом значительно облегчит переход на работу с серией HCS. За основу для изучения взят код, вырабатываемый микросхемой HCS101. Эта микросхема является генератором фик- сированного кода и разработана специально для систем дистанци- онного управления. HCS101 не использует технологию прыгающего кода и предназначена для приложений, не требующих повышенного уровня секретности (управление бытовыми приборами и т.п.) Каж- дая микросхема имеет уникальный серийный номер, передаваемый в составе кода. Чтобы различать источники сигнала, приемник дол- 295
Микроконтроллеры Microchip® rfPIC™ жен иметь возможность «обучения», т.е. сохранять в памяти и впо- следствии опознавать серийный номер нужного передатчика. По- скольку в нашем случае передатчик построен на основе обычного микроконтроллера, то уникальный серийный номер генерируется программно, на основе данных, записанных в микроконтроллер при изготовлении устройства. Формат слова данных Все данные, каков бы ни был их объем, передаются в виде слов. Каждое слово состоит из четырех основных частей (рис. 5.12): - преамбула; - заголовок; - данные; - защитный интервал. Преамбула начинает передачу и состоит из серии чередующихся импульсов высокого и низкого уровня, каждый длительностью ТЕ - элементарный (эталонный) отрезок времени. Заголовок представляет собой сигнал низкого уровня длитель- ностью 10ТЕ. Далее следуют данные длиной 66 бит. Они представ- лены при помощи широтно-импульсной модуляции (ШИМ). Как по- казано на рис. 5.12, логический ноль передается, как импульс высо- кого уровня длительностью 2ТЕ с последующим низким уровнем длиной 1ТЕ. Период бита данных Логический "О" Логическая “Г Преамбула Заголовок Данные ; (тР) _._(Th) _.t__________________________да) .......|Т1Л1Л1П1ГП_ГЕГ____________ Стартовый'импульс (Те) Защитный интервал (Т9)г; Л1ГОГПЛ1П_1_______। Рис. 5.12. Формат слова данных Логическая единица передается, как импульс высокого уровня длительностью 1ТЕ с последующим низким уровнем длительностью 2Те. Таким образом, один бит данных в любом случае имеет дли- тельность ЗТЕ. Завершается передача слова данных защитным ин- 296
Гпава 5. Применение микроконтроллеров серии rfPIC тервалом длительностью не менее Тд, необходимым для разделе- ния слов данных. Строение слова данных На рис. 5.13 схематически показано строение стандартного сло- ва данных. В очень простых приложениях, наподобие рассматри- ваемого здесь учебного примера, должны быть приняты и обрабо- таны только два байта кода. В этих двух байтах 10-битный серийный номер используется для распознавания передатчика, а остальные биты несут функциональную нагрузку. Для большей гибкости при передаче управляющих сигналов может быть использован 16-битный счетчик. Его можно применить как для большей секретности, так и для увеличения функциональности. Например, данные счетчика можно использовать для различе- ния кратковременного и длительного нажатия на кнопку пульта. Ра- зумеется, вышесказанное в первую очередь относится к жесткой аппаратной реализации кодера на основе микросхем серии HCS. Используя в качестве генератора кода микроконтроллер rfPIC, можно строить слово данных по своему усмотрению. Но по возмож- ности следует стараться соблюдать унификацию кода - это может облегчить последующую работу. В соответствии со стандартом для HCS, данные могут переда- ваться с двумя фиксированными скоростями. В одном случае ТЕ = 400 мкс, во втором ТЕ = 200 мкс. Vhigh (1 бит) Vlow (1 бит) Функция (0/4 бита) S2S1 S0 S3 Серийный номер 1 (32/28 бит) Счетчик (16 бит) Функция (4 бита) S2 S1 S0 S3 Серийны (32 । ‘00’ (2 бита) йномер 2 бита) Серийный номер 3 (10 бит) Направление передачи (начиная с младших разрядов) Рис. 5.13. Строение слова данных Принципиальная схема отладочного макета Для изучения приемов программирования можно эффективно использовать описанный в Главе 4 отладочный набор разработчика «rfPIC Development Kit». Но мы в дальнейшем будем оперировать с 297
Микроконтроллеры Microchip® rfPIC™ самодельным отладочным макетом, исходя из нескольких практи- ческих соображений. Не каждый разработчик, тем более, если он - радиолюбитель, может с легкостью приобрести фирменный отла- дочный набор. Кроме того, входящие в состав комплекта примеры программ достаточно сложны для быстрого понимания неподготов- ленным пользователем. Поэтому было принято решение использо- вать в качестве учебного макета предельно простую схему, пока- занную на рис. 5.14. Эта конструкция состоит из недорогих распро- страненных компонентов, в ней использован самый популярный среди радиолюбителей микроконтроллер PIC16F84. Демонстраци- онно-обучающие программы, предлагаемые производителем, из- менены в соответствии с новой схемой и несколько упрощены для большей наглядности, но без изменения функциональности. Схема включения диодов аналогична использованной в фир- менном наборе и описанной в рекомендациях изготовителя. При такой схеме включения нельзя использовать встроенные подтяги- вающие резисторы. В микроконтроллере PIC16F84 не предусмот- рено включение отдельного подтягивающего резистора на произ- вольный вывод, поэтому для вывода кнопки «LEARN» предусмот- рен специальный подтягивающий резистор R2. Передающий модуль макета Автор использовал готовый модуль передатчика из фирменного набора, но читатели могут без особых затруднений изготовить пе- редатчик самостоятельно, воспользовавшись информацией из гл. 4. При рассмотрении двух первых примеров подразумевается, что модуль передатчика собран по оригинальной схеме, с применением двух кнопок и двух потенциометров. Микроконтроллер передатчика прошит стандартной учебной программой, предлагаемой компанией Microchip. Эта программа будет рассмотрена далее, в разделе гла- вы, описывающем примеры программ. Радиоприемный модуль В качестве радиоприемного модуля может использоваться, в принципе, любое радиоприемное устройство соответствующего диапазона и типа модуляции. Microchip рекомендует использовать готовый модуль RR6-434 производства Telecontrol!!. Этот и другие аналогичные модули можно приобрести в России. Также можно са- мостоятельно изготовить модуль приемника, но это более трудная задача, чем изготовление передатчика. Можно использовать в качестве приемника УКВ-радиостанцию, 298
Гпава 5. Применение микроконтроллеров серии rfPIC Рис. 5.14. Принципиальная электрическая схема отладочного макета снимая сигнал с вывода дискриминатора (в случае использования частотной манипуляции) или с выхода измерителя уровня сигнала (в случае использования амплитудной манипуляции). Применение радиостанции может значительно повысить дальность и надеж- ность передачи данных. В качестве приемника может быть исполь- зован даже слегка переделанный старый пейджер - здесь имеется большой простор для творчества. Сигнал, подлежащий декодированию, с выхода приемника по- ступает на вход RXDATA. Возможен вариант, когда на время отлад- ки радиоканал вообще не используется, а модулирующий сигнал с вывода порта микроконтроллера rfPIC по проводу подается непо- средственно на вход модуля декодирования и отображения. После отладки сигнал с этого порта подают на вход DATAASK или DATAFSK в зависимости от выбранного типа модуляции. 299
Микроконтроллеры Microchip® rfPIC™ Прием кода нажатой кнопки Сначала мы рассмотрим программу, позволяющую принять и распознать код нажатой кнопки передатчика. Для демонстрации работы этой программы достаточно светодиодов DO и D1, а также кнопки S1 «LEARN» (обучение) и светодиода D2 «LEARN». Когда мы будем решать задачу отображения аналогового значения, пона- добятся и остальные светодиоды. Поскольку программа способна распознавать «свой» передатчик по серийному номеру, то ее прак- тически без изменений можно использовать для построения про- стых систем дистанционного управления и сигнализации. Мы не будем подробно описывать назначение каждого операто- ра, поскольку подразумеваем, что читатель уже знаком с набором команд микроконтроллера PIC16F84 из литературы или фирменной документации. Листинг программы снабжен комментариями, позво- ляющими понять ход выполнения. Тем не менее, обратим внима- ние на некоторые моменты. В определении констант описаны две их разновидности - LEDx- TRIS и LEDxON. Первая описывает настройку режима всех портов для включения определенного светодиода. Напомним, что при ин- дикации каждый вывод порта может находиться в трех состояниях: высокий уровень, низкий уровень и высокий импеданс (режим вво- да). Вторая константа описывает уровни для портов, настроенных на вывод. Для портов, настроенных на ввод, в константе типа LEDxON можно установить любой уровень, это не имеет значения. Алгоритм программы основывается на циклическом исполнении с контекстными ветвлениями. Предусмотрено такое понятие, как текущий статус программы. Контекстное ветвление происходит в соответствии с флагом текущего статуса и приводит к исполнению необходимой в конкретный момент времени процедуры. В главном цикле постоянно происходит проверка, нажата ли кноп- ка «LEARN» и не начался ли прием полезного сигнала. Если обнару- жено нажатие кнопки «LEARN», то отрабатывается подпрограмма получения и сохранения серийного номера передатчика. Зажигается светодиод D2 и в течение 8 с программа ожидает прием корректного слова данных, из которого выделяется серийный номер. Затем он сохраняется в EEPROM. Вновь принятый номер заменяет предыду- щий. Незначительно изменив программу, можно организовать сохра- нение нескольких номеров. Если корректное кодовое слово не приня- то, программа возвращается в режим ожидания. Если на выходе передатчика обнаружен высокий уровень, это интерпретируется, как возможный старт передачи, и программа пе- 300
Гпава 5. Применение микроконтроллеров серии rfPIC реходит в режим проверки валидности заголовка. Передача кодово- го слова предваряется преамбулой - чередованием высокого и низ- кого уровней определенной длительности. Прежде всего проверя- ется наличие такого чередования. Если импульс высокого уровня имеет нестандартную длительность, значит на вход приемника по- ступила помеха и прием отменяется. В противном случае програм- ма переходит в статус приема заголовка. Заголовок представляет собой сигнал низкого уровня длительностью 10Те и тоже проверя- ется на валидность. Если длительность заголовка соответствует ожидаемой величине, из слова данных выделяется номер нажатой кнопки, в соответствии с которым зажигается светодиод. Гашение светодиода происходит автоматически. Измерение интервалов времени производится при помощи встро- енного модуля таймера TIMER0, тактируемого от внутреннего источни- ка тактовой частоты. Задействовано несколько программных таймеров, использующих значения регистров аппаратного таймера. Учебная программа 1 ; Программа декодирования и отображения кода нажатой кнопки ; Исходный файл decoderl.asm list p=16F84; директива, определяющая тип процессора #include <pl6F84.inc> ; файл, описывающий специфические ; переменные, соответствующие процессору errorlevel -302 ; запрет сообщения 302 в листинге errorlevel -205 ; запрет сообщения 205 в листинге слово конфигурации микроконтроллера (при необходимости изменить) защита кода выключена строжевой таймер выключен таймер сброса при подаче питания включен источник тактирования - внешний кварцевый резонатор __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC , резервируем ячейки памяти данных под переменные cblock ОхОС ; начальный адрес области данных DATA0 ; 1-й байт принятых данных DATA1 ; 2-й байт принятых данных DATA2 ; 3-й байт принятых данных DATA3 ; 4-й байт принятых данных ORIGIN ; ссылка для инкремента значения TMRLOW SX1TMR ; таймер светодиодов (младшие разряды) SX2TMR ; таймер светодиодов (старшие разряды) TMRLOW ; таймер ширины импульса (младшие разряды) TMRHIGH ; таймер ширины импульса (старшие разряды) 301
Микроконтроллеры Microchip9 rfPIC™ HIGHWDTH ; ширина импульса высокого уровня LOWWDTH ; ширина импульса низкого уровня STATECNTR ; счетчик текущего состояния программы BITCNTR ; счетчик битов потока данных FLAGS ; переменная для хранения различных флагов LEDREG ; регистр массива светодиодов LEDREGBUF ; буферный регистр массива светодиодов LEDSTATE ; счетчик состояния массива светодиодов endc ; конец области данных COUNTR equ BITCNTR ; промежуточный счетчик .******************* ОПЕРАТОРЫ ОПРЕДЕЛЕНИЯ ********************** ; установка подключения и коэффициента предделителя #define PRESCL В'00000001' ; 1 инкремент TMR0 за 4 командных цикла ; частота циклов = 4 МГц/4 = 1 МГц ; период инкремента TMR0 = 1мкс*4 = 4мкс ; определение имен входов #define RXDATA PORTB,0 ; вход потока данных #define LRNBTN PORTB,7 ; кнопка LEARN ; имена текущих состояний для счетчика состояния #define BEGN 0x00 #define BEGN1 0x01 #define HEADR 0x02 #define HEADR1 0x03 #define HIGHP 0x04 #define LOWP 0x05 #define RECRD 0x06 #define WAIT 0x07 #define VALID 0x08 #define IMPLMNT 0x09 #define LEDO LEDREG, 0 #define LED1 LEDREG, 1 #define LED2 LEDREG, 2 #define LED3 LEDREG, 3 #define LED4 LEDREG, 4 #define LED 5 LEDREG, 5 #define LED6 LEDREG, 6 #define LED7 LEDREG, 7 #define LED0TRIS b'11100111' #define LED1TRIS b'lllOOlll’ #define LED2TRIS b'lllOlOll' #define LED3TRIS b'lllOlOll' #define LED4TRIS b'11110011' #define LED5TRIS b’11110011' #define LED6TRIS b'11111001' #define LED7TRIS b'11111001' #define LEDOFFTRIS b'11111111 #define LEDOON b'00010000' #define LED1ON b'00001000' #define LED2ON b'00010000’ #define LED3ON b'00000100' #define LED4ON b'00001000' #define LED5ON b'00000100' #define LED6ON b'00000100' #define LED7ON b'00000010' ; имена флагов 302
Гпава 5. Применение микроконтроллеров серии rfPIC #define LERN FLAGS, О #define TOGGLE FLAGS, 1 #define HIGHLOW FLAGS, 2 ; флаг, означающий режим обучения ; флаг перехода из выс. уровня в низк. .******************** НАЧАЛО ПРОГРАММЫ *********************** org 0x000 goto RESET org 0x004 ; Здесь можно поместить ; обработки прерывания пор retfie ; Вектор сброса ; перейти на начало по сбросу ; Вектор прерывания (указать обязательно!) тело пользовательской подпрограммы RESET clrf FLAGS clrf PORTB bsf STATUS, RP0 movlw LEDOFFTRIS movwf PORTB bcf STATUS, RP0 movlw BEGN movwf STATECNTR goto MAIN ; сбрасываем все флаги ; инициализируем порт В ; включили банк 1 ; настроили порт В: ; все линии на ввод, светодиоды погашены ; включили банк 0 ; устанавливаем счетчик состояния в BEGIN ; переход на MAIN MAIN Программа постоянно работает в цикле MAIN, вызывая различные функции по мере необходимости MAIN call INITIAL call TIMER call CLOCK movlw andwf btf ss call SXON B'00000011 LEDREG, W STATUS, Z ' ; проверка, горит ли один из светодиодов ; DO, D1. Если да, вызываем SXON btfss call LRNBTN LRNDTCT ; если нажата кнопка LEARN ; вызываем LRNDTCT btfsc call LEARN LERN ; если уже в режиме обучения, вызываем ;LEARN movf STATECNTR, W andlw В'00001111 addwf PCL, F goto BEGIN goto BEGIN1 goto HEADER goto HEADER1 goto HIGHPLSE goto LOWPULSE goto RECORD goto WAIT4END goto VALIDATE goto IMPLEMNT goto RESET goto RESET ; Маскируем старшие значащие биты ' ; STATECNTR (защита от сбоев) ; Указатель команд (PCL) инкрементируется ; на величину STATECNTR с целью перехода ; на соответствующую процедуру ; эти команды перехода блокируют ошибочные значения STATECNTR 303
Микроконтроллеры Microchip9 rfPIC™ goto RESET goto RESET goto RESET goto RESET ; не маскированные ранее INITIAL Эта подпрограмма вызывается постоянно, инициализирует регистр OPTION_REG, а также сбрасывает сторожевой таймер (если он включен). Это необходимо для того, чтобы застраховаться от случайного искажения содержимого жизненно важных регистров под влиянием шумов. INITIAL clrwdt ; сброс сторожевого таймера, , если он используется bsf STATUS, RPO включили банк 1 movlw movwf PRESCL OPTION_REG • инициализируем предделитель bcf STATUS, retlw RPO 0 включили банк 0 SETWATCH Инициализация регистров таймера ширины импульсов SETWATCH movf TMRO, W ; записываем значение TMRO в ORIGIN movwf ORIGIN clrf TMRLOW ; сбрасываем ст. и мл. разряды таймера clrf TMRHIGH retlw О CLOCK Постоянно обновляет TMRLOW и TMRHIGH. Входные переменные: ORIGIN Выходные переменные: TMRLOW, TMRHIGH CLOCK movf ORIGIN, W TMRLOW обновляется на основе времени, subwf TMRO, W ; прошедшего до момента установки ORIGIN. addwf TMRLOW, F ; разрешение TMRLOW ~= 4 мкс (как TMR0) btf sc STATUS, C ; переполнение TMRLOW ~= 1 мс (2Л8*4 мкс) incf TMRHIGH, F разрешение TMRHIGH ~= 1ms nop переполнение TMRHIGH ~= 0.24 сек (2Л8*1 мс) nop nop Команды NOP и SUBWF гарантируют равенство movlw 2 ; ORIGIN = TMRO как было выше, во второй subwf TMRO, W ; строке процедуры CLOCK. (ORIGIN необходимо movwf ORIGIN ; привести к равенству со значением TMRO во retlw 0 ; время операции с ORIGIN) TIMER Непрерывно обновляет два таймера верхнего порядка (SX1TMR и SX2TMR) Входные переменные: нет Выходные переменные: SX1TMR, SX2TMR TIMER 304
Гпава 5. Применение микроконтроллеров серии rfPIC btfss TOGGLE ; TOGGLE заставляет эту процедуру потратить goto TIMER1 ; 1/2 от емкости TMR0 на TIMER movlw B'01111111' ; и 1/2 на TIMER1. addwf TMRO, W btfss STATUS, C retlw 0 ; переполнение TMRO ~= 1 мс (2Л8*4 мкс) bcf TOGGLE incfsz SX1TMR, F ; разрешение SX1TMR ~= 1 мс retlw 0 ; переполнение SX1TMR ~= 0. .25 сек (2Л8*1 MC) incf SX2TMR, F ; разрешение SX2TMR ~= 0.25 сек retlw 0 ; переполнение SX2TMR ~= 1 мин (2Л8*0.23 сек) TIMER1 movlw B'01111111' ; Процедура TIMER расходует половину этого addwf TMRO, W ; времени в TIMER1, ожидая, когда флаг TOGGLE btfsc STATUS, C ; будет установлен вновь retlw 0 bsf TOGGLE retlw 0 ; SXON ; Выключает все выходы (DO, DI, D2) по истечению времени ; Повторный вызов через 0.25 секунды (2Л8*1мс) ; Входные переменные: SX2TMR ; Глобальная переменная LEDREG SXON btfss SX2TMR, 0 ; Когда SX1TMR переполнен, SX2TMR retlw 0 ; увеличивается на 1 clrf LEDREG ; очищаем регистр состояния светодиодов clrf PORTB ; очищаем порт В bsf STATUS, RPO ; включили банк 1 movlw LEDOFFTRIS ; настроили порт В: movwf PORTB ; все линии на ввод, светодиоды погашены bcf STATUS, RPO ; включили банк 0 retlw 0 ; LRNDTCT ; Когда нажата кнопка «LEARN», эта функция переводит программу ; в режим обучения, устанавливая флаг LERN ; Входные переменные: нет ; Выходные переменные: LEDLRN, флаг LERN LRNDTCT btfsc LERN retlw 0 movlw BEGN movwf STATECNTR bsf LERN call LEDLRNPOWER clrf SX1TMR clrf SX2TMR retlw 0 ; Режим LEARN инициализируется установкой ; флага LERN в 1, ; установкой счетчика состояния в BEGN, ; включением светодиода D2 и очисткой ; таймеров верхнего порядка, SX1IMR и SX2IMR ; включение светодиода D2 (LEARN) ; LEARN ; Эта процедура «знакомит» приемник с первыми двумя байтами ; принимаемых от передатчика данных, сохраняя их в ячейках ; внутренней памяти EEPROM 305
Микроконтроллеры Microchip® rfPIC™ .******************************************************************* LEARN btf ss SX2TMR, 5 ; Если валидный прием не завершен в тече- ние goto LEARN1 8 секунд (2Л5*0.25 сек) bcf LERN ; то выходим из режима LEARN и гасим D2 clrf PORTB иначе переходим на LEARN 1. bsf STATUS, RPO включили банк 1 movlw LEDOFFTRIS ; настроили порт В- movwf PORTB ; все линии на ввод, светодиоды погашены bcf STATUS, retlw RPO 0 включили банк 0 LEARN1 movlw VALID ; Если счетчик состояния содержит xorwf STATECNTR, W ; значение, соответствующее выполнению btfss STATUS, Z ; функции VALIDATE, то прием был retlw 0 ; осуществлен успешно movlw 0x00 ; Устанавливаем регистр EEADR movwf EEADR ; для записи первого байта в EEPROM movlw DATAO ; Переносим адрес DATA0 в регистр FSR movwf movlw movwf FSR 2 BITCNTR ; (см. описание косвенной адресации) LEARN2 movf INDF, W ; Переносим содержимое ячейки, movwf EEDATA ; на которую указывает FSR в EEDATA. LEARN3 call EEPROM, .WRITE ; запись в EEPROM incf EEADR, incf FSR, F F decfsz BITCNTR, F ; исполняем последовательность записи goto LEARN2 ; для двух байтов bcf LERN ; сбрасываем флаг LERN clrf PORTB ; выходим из режима LEARN и гасим D2 bsf STATUS, RPO ; включили банк 1 movlw LEDOFFTRIS ; настроили порт В: movwf PORTB ; все линии на ввод, светодиоды погашены bcf STATUS, RPO ; включили банк 0 movlw BEGN movwf STATECNTR retlw 0 ; выход из режима обучения ; EEPROM_READ ; Для чтения данных из EEPROM адрес записывается ; в регистр EEADR и устанавливается управляющий бит RD (EECON1<0>) ; для начала процесса чтения. В следующем цикле данные ; доступны для чтения в регистре EEDATA. , Входные данные: В аккумуляторе находится адрес ячейки для чтения ; Выходные данные: Аккумулятор содержит прочитанные данные EEPROM_READ bsf STATUS, RPO movwf EEADR bsf EECON1, RD movf EEDATA, W bcf STATUS, RPO ; выбрали Банк 1 ; перенесли адрес из W в EEADR 7 запустили чтение ; перенесли данные в W ; выбрали Банк О 306
Гпава 5. Применение микроконтроллеров серии rfPIC return ; возврат из подпрограммы ; EEPROM_WRITE ; Для записи в ячейку EEPROM адрес помещают в регистр EEADR, / данные в регистр EEDATA, затем выполняют обязательную ; последовательность команд ; Предупреждение: Если прерывания были разрешены, то на время / выполнения этой подпрограммы они запрещаются ; Входные данные: Адрес ячейки в EEADR, данные в EEDATA ; Выходные данные: нет EEPROM_WRITE bsf STATUS, RPO ; выбрали Банк 1 bsf bcf EECON1, WREN INTCON, GIE ; разрешили запись в EEPROM ; запретили все прерывания г* ОБЯЗАТЕЛЬНЫЙ набор movlw 0x55 movwf EECON2 movlw ОхАА movwf EECON2 команд, менять нельзя!!! *** bsf EECON1, WR / старт записи в EEPROM r* конец bt f sc goto обязательного EECON1, WR $-1 набора *** ; запись завершена? / нет, проверить снова (на шаг назад) bcf bsf bcf return EECON1, WREN INTCON, GIE STATUS, RPO / запись завершена, запрет новой записи / разрешили прерывания / выбрали Банк 0 ; возврат из подпрограммы .***************** ПРИЕМ ПОСЛЕДОВАТЕЛЬНОСТИ ********************** .*********************** ФОРМАТ СЛОВА КОДА |--ПРЕАМБУЛА--|--ЗАГОЛОВОК- - | ДАННЫЕ |-ЗАЩИТНЫЙ-| ИНТЕРВАЛ ;**о****ооо*** РАСШИФРОВКА СОСТАВА ДАННЫХ ***************** ;байты DATA1 I DATA0 /биты 7| 61 5| 41 31 21 1| 0| 7| 6] 5| 4| 3| 2| 1| О /знач. S2J SI I SO I S3 I о| 0| СЕРИЙНЫЙ НОМЕР /байты DATA3 I DATA2 /биты 7|б|5|4|3|2|1|0|7|6|5|4|3|2|1|0 /знач. ДОП.ДАННЫЕ ;* В данном приложении используются только значения SO, S1 307
Микроконтроллеры Microchip9 rfPIC™ ; BEGIN ; Эта функция ждет возможный старт передачи данных (RXDATA). ; Входные данные: RXDATA BEGIN btfsc RXDATA incf STATECNTR, F goto MAIN BEGIN1 btfsc RXDATA goto MAIN call SETWATCH incf STATECNTR, F goto MAIN ; Установить состояние BEGIN1 ; Установить состояние HEADER ; HEADER ; Эта функция обнаруживает валидный заголовок ; Входные данные: RXDATA HEADER btfsc RXDATA ; Программа выполняет цикл длит. 1,25 мс goto RESTART ; если уровень сигнала данных остается низким btfss TMRHIGH, 0 ; Если оба условия выполнены, устанавли- вается goto MAIN ; статус HEADER1 1 movlw D'64' ; 1,25 мс формируется при помощи: andwf TMRLOW, W ; TMRHIGH = 1 ~= 2Л8*4 мкс = 1 мс btfsc STATUS, Z ; TMRLOW = 64 ~= 64*4 мкс = 0,25 мс goto MAIN incf STATECNTR, F ; устанавливаем статус HEADER1 goto MAIN HEADER1 movlw D' 6 ' ; Если сигнал переходит в высокий уровень subwf TMRHIGH, W ; ранее 6 мс, то заголовок валидный btfss STATUS, C ; иначе переход на RESTART goto HEADER2 goto RESTART ; TMRHIGH = 6 = 6*1 мс = 6 мс HEADER2 btfss RXDATA goto MAIN call SETWATCH movlw D'32' ; Инициализируем счетчик BITCNTR для от- счета movwf BITCNTR ; 32 бит данных во входном сигнале RXDATA incf STATECNTR, F ; устанавливаем статус HIGHPLSE goto MAIN ; HIGHPLSE ; Функция измеряет длительность импульса высокого уровня ; Входные данные: RXDATA .******************************************************* HIGHPLSE btfsc TMRHIGH, 0 goto RESTART btfsc RXDATA goto MAIN movf TMRLOW, W movwf HIGHWDTH call SETWATCH incf STATECNTR, F ; Если TMRLOW переполняется, то RESTART ; Переносим значение длительности импульса ; в HIGHWDTH для дальнейших вычислений ; Устанавливаем статус LOWPULSE 308
Гпава 5. Применение микроконтроллеров серии rfPIC goto MAIN LOWPULSE Функция измеряет длительность импульса низкого уровня LOWPULSE btf sc TMRHIGH, 0 ; Если TMRLOW переполняется, то устанавливаем goto LOW2 ; статус HEADER btf ss RXDATA goto MAIN movf TMRLOW, W ; Переносим значение длительности импульса movwf LOWWDTH ; в LOWWDTH для дальнейших вычислений call SETWATCH incf STATECNTR, F ; устанавливаем статус RECORD goto MAIN LOW2 movlw HEADR movwf STATECNTR ; Устанавливаем статус HEADER если им- пульс goto MAIN ; низкого уровня слишком длинный RECORD Функция записывает каждый бит, поступающий из потока RXDATA. Входные данные: RXDATA Выходные данные: DATA0 DATA1 DATA2 (в этом приложении не используется) DATA3 (в этом приложении не используется) ******************************************************************* RECORD movf HIGHWDTH , w subwf LOWWDTH, W ; Состояние бита переноса после этой опе- рации rrf DATA3, F ; отражает логику данных. rrf DATA2, F ; Затем он сдвигается в байты накопления rrf DATA1, F rrf DATAO, F movlw HIGHP movwf STATECNTR decfsz BITCNTR, F goto MAIN movlw D’4 ' movwf COUNTR movlw DATAO movwf FSR RECORD1 movlw OxFF xorwf INDF, W ; Используем косвенные ссылки для btf ss STATUS, Z ; указания на DATAO...DATA3 goto RECORD2 ; во вложенном цикле в RECORD1 incf FSR, F decfsz COUNTR, F goto RECORD1 goto RESTART RECORD2 movlw WAIT movwf STATECNTR ; Устанавливаем статус WAIT4END goto MAIN 309
Микроконтроллеры Microchip9 rfPIC™ WAI T4 END Функция ожидает защитный интервал, завершающий слово кода перед тем, как приступить к приему следующего слова. Входные данные: RXDATA WAIT4END btfsc goto WAIT1 btfsc goto MAIN call SETWATCH bsf HIGHLOW WAIT1 btf ss goto WAIT2 bcf HIGHLOW goto MAIN WAIT2 btfss goto MAIN bcf HIGHLOW incf STATECNTR goto MAIN HIGHLOW ; HIGHLOW устанавливается для индикации, что ; сигнал перешел из высокого уровня в низкий RXDATA RXDATA TMRHIGH, 3 ; Если период низкого уровня больше, чем ; 8 мс (2Л3*1 мс) значит достигнут ; защитный интервал F ; устанавливаем статус VALIDATE VALIDATE Функция проверки, соответствует ли принятый серийный номер передатчика ранее сохраненному в EEPROM. Входные данные: DATA0 (полностью) DATA1 (только два первых бита) VALIDATE movlw 0x00 movwf EEADR movlw DATAO movwf FSR ; Используем косвенную адресацию для ; сравнения серийного номера с сохраненным VAL1 call EEPROM_READ ; читаем первый сохраненный байт movf INDF, W xorwf EEDATA, W btfss STATUS, Z ; Если первый байт совпал, про- должаем, goto RESTART ; иначе RESTART incf FSR, F incf EEADR, F VAL2 call EEPROM_READ ; читаем второй сохраненный байт movf INDF, W xorwf EEDATA, F btfsc EEDATA, 0 ; Проверяем, совпадают ли 2 млад- ших goto RESTART ; значащих бита с сохраненными btfsc EEDATA, 1 goto RESTART incf STATECNTR, F ; устанавливаем статус IMPLEMENT goto MAIN .******************************************************************* IMPLEMNT 310
Гпава 5. Применение микроконтроллеров серии rfPIC ; Функция распределяет по назначению данные, принятые в кодовом слове ; Входные данные: DATA1 ; Выходные данные: ; SO (DO) ; SI (DI) . ****************************************************************** IMPLEMNT btfsc Call LED1POWE btfsc call LEDOPOWE clrf SX1TMR clrf SX2TMR goto RESTART DATA1, 6 :r DATA1, 5 :r включаем светодиод Dl, если DATA1(6)=1 включаем светодиод DO, если DATA1(5)=1 инициализируем таймеры, задающие длительность свечения светодиодов .★★A**************************************************************** ; RESTART ; Функция устанавливает счетчик состояния в BEGIN, что означает ; рестарт приема последовательности .******************************************************************* RESTART movlw BEGN movwf goto MAIN STATECNTR LEDLRNPOWER clrf LEDREG bsf LEDREG, 2 bsf STATUS, RPO ; включили банк 1 movlw LED2TRIS ; настроили порт В для включения D2 movwf PORTB bcf STATUS, RPO ; включили банк 0 movlw LED2ON movwf return PORTB ; включили светодиод D2 LEDOPOWER clrf LEDREG bsf LEDREG, 0 bsf STATUS, RPO ; включили банк 1 movlw LEDOTRIS ; настроили порт В для включения DO movwf PORTB bcf STATUS, RPO ; включили банк 0 movlw LEDOON movwf return PORTB ; включили светодиод DO LED1POWER clrf LEDREG bsf LEDREG, 1 bsf STATUS, RPO ; включили банк 1 movlw LED1TRIS ; настроили порт В для включения D1 movwf PORTB bcf STATUS, RPO ; включили банк 0 movlw LED1ON movwf return PORTB ; включили светодиод D1 .★A***************************************************************** end конец программы 311
Микроконтроллеры Microchip9 rfPIC™ Прием и отображение двоичного кода оцифрованого аналогового сигнала Следующая программа при помощи комбинации включенных све- тодиодов в двоичном виде отображает оцифрованное аналоговое зна- чение на выводе одного из потенциометров. Если на плате макета пе- редатчика нажата кнопка SW1, подключенная к выводу порта GP4, то отображается напряжение на выводе порта GP1 (резистор R2). При нажатии на кнопку SW2 (порт GP3) отображается напряже- ние на движке резистора R1 (порт GP0). Программа передатчика та же самая, что и для первого примера, но помещенная ниже про- грамма декодирования может выделять из принятого сигнала дво- ичный код оцифрованного напряжения и преобразовывать этот код в комбинацию включенных светодиодов. Исходный текст на ас- семблере в основном повторяется, за исключением фрагментов инициализации портов и отображения данных. Данные отображаются на восьми светодиодах D0...D7, каждый из которых соответствует одному двоичному разряду. Как уже отме- чалось в гл. 4, использованная схема включения светодиодов не позволяет статично зажигать светодиоды в произвольном сочета- нии. Так, например, не могут одновременно гореть светодиоды DO и D1. Поэтому для получения полноценного диапазона отображения применена динамическая индикация, реализованная программно. При отображении полученного двоичного значения подпрограмма индикации отрабатывает восемь тактов, в каждом из которых зажи- гается (или не зажигается) соответствующий светодиод. Некоторым недостатком метода является то, что динамически переключаемые светодиоды визуально воспринимаются менее яр- кими, чем включенные постоянно. Добавив в схему 8-разрядный сдвиговый регистр и незначительно изменив подпрограмму индика- ции, можно получить статическую индикацию. Применяя регистр- дешифратор, можно отображать значение на семисегментных ин- дикаторах. Возможности программы позволяют с минимальными изменениями использовать ее для беспроводного приема и после- дующего отображения на различных табло набора данных ограни- ченного объема (например, температуры воздуха), или иных анало- гичных задач. Режим обучения, распознавание полезного сигнала и выделение данных из принятого слова реализованы по аналогии с предыду- щей программой, по этой причине мы не будем дублировать описа- ние соответствующих частей, данное выше. 312
Гпава 5. Применение микроконтроллеров серии rfPIC Учебная программа 2 ;* Программа декодирования и отображения кода аналогового значения ;* Исходный файл decoder2.asm list p=16F84; директива, определяющая тип процессора #include <pl6F84.inc> ; файл, описывающий специфические ; переменные, соответствующие процессору errorlevel -302 ; запрет сообщения 302 в листинге errorlevel -205 ; запрет сообщения 205 в листинге ; слово конфигурации микроконтроллера (при необходимости изменить) защита кода выключена строжевой таймер выключен таймер сброса при подаче питания включен источник тактирования - внешний кварцевый резонатор .CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC резервируем ячейки памяти данных под переменные cblock 0х0С ; г начальный адрес области данных endc DATA0 DATA1 DATA2 DATA3 ORIGIN SX1TMR SX2TMR TMRLOW TMRHIGH HIGHWDTH LOWWDTH STATECNTR BITCNTR FLAGS LEDREG LEDREGBUF LEDSTATE ; счетчик 1-й байт принятых данных 2-й байт принятых данных 3-й байт принятых данных 4-й байт принятых данных ссылка для инкремента значения TMRLOW таймер светодиодов (младшие разряды) таймер светодиодов (старшие разряды) таймер ширины импульса (младшие разряды) таймер ширины импульса (старшие разряды) ширина импульса высокого уровня ширина импульса низкого уровня счетчик текущего состояния программы счетчик битов потока данных переменная для хранения различных флагов регистр массива светодиодов буферный регистр массива светодиодов состояния массива светодиодов ; конец области данных COUNTR equ BITCNTR ; промежуточный счетчик .******************* ОПЕРАТОРЫ ОПРЕДЕЛЕНИЯ ****************** ; установка подключения и коэффициента предделителя #define PRESCL В'00000001’ ; 1 инкремент TMR0 за 4 командных цикла ; частота циклов = 4 МГц/4 = 1 МГц ; период инкремента TMR0 = 1мкс*4 = 4мкс ; определение имен входов #define RXDATA PORTB,0 #define LRNBTN PORTB,7 ; вход потока данных ; кнопка LEARN ; имена #define #define текущих BEGN BEGN1 состояний для счетчика состояния 0x00 0x01 313
Микроконтроллеры Microchip9 rfPIC™ #define HEADR 0x02 #define HEADR1 0x03 #define HIGHP 0x04 #define LOWP 0x05 #define RECRD 0x06 #define WAIT 0x07 #define VALID 0x08 #define IMPLMNT 0x09 #define LEDO LEDREG, 0 #define LED1 LEDREG, 1 #define LED2 LEDREG, 2 #define LED3 LEDREG, 3 #define LED4 LEDREG, 4 #define LED5 LEDREG, 5 #define LED6 LEDREG, 6 #define LED7 LEDREG, 7 #define LED0TRIS b’11100111' #define LED1TRIS b'11100111' #define LED2TRIS b’11101011' #define LED3TRIS b'11101011’ #define LED4TRIS b'11110011’ #define LED5TRIS b’11110011' #define LED6TRIS b'11111001' #define LED7TRIS b’11111001' #define LEDOFFTRIS b'11111111' #define LEDOON b'00010000' #define LEDION b’00001000' #define LED2ON b'00010000' #define LED3ON b'00000100’ #define LED4ON b'00001000’ #define LED5ON b'00000100’ #define LED6ON b'00000100' #define ; имена LED7ON флагов b'00000010' #define LERN FLAGS, 0 ; флаг, означающий режим обучения #define TOGGLE FLAGS, 1 #define HIGHLOW ; в низкий FLAGS, 2 ; флаг перехода из высокого уровня I************....... НАЧАЛО ПРОГРАММЫ *********************** org 0x000 ; Вектор сброса goto RESET ; перейти на начало по сбросу org 0x004 ; Вектор прерывания (указать обязательно!) ; Здесь можно поместить тело пользовательской подпрограммы ; обработки прерывания пор retfie ; возврат из подпрограммы RESET clrf FLAGS ; сбрасываем все флаги clrf PORTB ; инициализируем порт В bsf STATUS, RPO ; включили банк 1 movlw LEDOFFTRIS ; настроили порт В: movwf PORTB ; все линии на ввод, светодиоды погашены bcf STATUS, RPO ; включили банк 0 movlw movwf BEGN STATECNTR ; устанавливаем счетчик состояния в BEGIN goto MAIN ; переход на MAIN 314
Гпава 5. Применение микроконтроллеров серии rfPIC ; MAIN ; Программа постоянно работает в цикле MAIN, ; вызывая различные функции по мере необходимости MAIN call INITIAL call TIMER call CLOCK call DISPLAY movlw B'00000011 проверка, горит ли один из светодиодов andwf LEDREG, W DO, D1. Если да, вызываем SXON btf ss STATUS, Z call SXON btfss LRNBTN если нажата кнопка LEARN call LRNDTCT ; вызываем LRNDTCT btf sc LERN если уже в режиме обучения, call LEARN вызываем LEARN movf STATECNTR, w Маскируем старшие значащие биты andlw B’00001111 STATECNTR (защита от сбоев) addwf PCL, F Инкремент указателя команд (PCL) goto BEGIN на величину STATECNTR с целью goto BEGIN1 перехода на соответствующую процедуру goto HEADER goto HEADER1 goto HIGHPLSE goto LOWPULSE goto RECORD goto WAIT4END goto VALIDATE goto IMPLEMNT goto RESET эти команды перехода goto RESET блокируют ошибочные значения STATECNTR goto RESET не маскированные ранее goto RESET goto RESET goto RESET ; LEDSTATEMACHINE ; Подпрограмма динамически отображает данные на массиве из восьми ; светодиодов. Динамическое состояние (номер отображаемого разряда) ; меняется каждый раз при переполнении TMR0 и вызове п/п DISPLAY. ; Подпрограмма помещена в начало листинга програмы для того, чтобы ; фрагмент табличной конвертации гарантированно находился в пределах ; одного сегмента программной памяти размером 256 команд (см.описание ; в тексте главы) LEDStateMachine movf LEDSTATE, W andlw В*00000111’ addwf PCL, F маскируем старшие биты LEDStateMachineStart goto LEDSTATE0 goto LEDSTATE1 goto LEDSTATE2 goto LEDSTATE3 315
Микроконтроллеры Microchip9 rfPIC™ goto LEDSTATE4 goto LEDSTATE5 goto LEDSTATE6 goto LEDSTATE7 LEDSTATE0 call LITELEDO goto EndLEDStateMachine LEDSTATE1 call LITELED1 goto EndLEDStateMachine LEDSTATE2 call LITELED2 goto EndLEDStateMachine LEDSTATE3 call LITELED3 goto EndLEDStateMachine LEDSTATE4 call LITELED4 goto EndLEDStateMachine LEDSTATE5 call LITELED5 goto EndLEDStateMachine LEDSTATE6 call LITELED6 goto EndLEDStateMachine LEDSTATE7 call LITELED7 EndLEDStateMachine return DISPLAY Эта подпрограмма анализирует данные, находящиеся в регистре LEDREGBUF и управляет их отображением. При каждом вызове отображается 1 бит. Содержимое LEDREGBUF отображается полностью за 8 вызовов DISPLAY. Светодиоды D7...D4 отображают старший полубайт Светодиоды D3...D0 отображают младший полубайт DISPLAY movf btfsc goto btfss goto LEDSTATE, W STATUS, Z BUFFERRESET LEDSTATE, 3 BUFFERLOADED ; Сейчас мы в состоянии О? ; Да ; Нет, мы перешагнули последний разряд? ; Нет BUFFERRESET movf ] btfss goto 1 LEDREG, W STATUS, Z BUFFERRESET1 bsf STATUS, RPO movlw LEDOFFTRIS movwf PORTB bcf STATUS, RPO ; LEDREG =0? ; Если да, гасим светодиоды 316
Гпава 5. Применение микроконтроллеров серии rfPIC clrf PORTB BUFFERRESET1 movf movwf clrf LEDREG, W LEDREGBUF LEDSTATE ; Загрузить текущее значение в LEDREGISTER ; Установить нулевое состояние LEDSTATE BUFFERLOADED bcf STATUS, C ; Обнулить флаг переноса rrf LEDREGBUF, F btf sc STATUS, C ; Является ли следующий бит '1' goto UPDATELED ; Да, обновить массив светодиодов goto CONTINUE ; Нет UPDATELED call LEDStateMachine ; Обновление массива CONTINUE incf LEDSTATE, F ; Установить следующее состояние LEDSTATE return ; Набор небольших подпрограмм для включения светодиодов ; Вызываются из подпрограмм LEDSTATEMACHINE и LRNDTCT LEDLRNPOWER Clrf LEDREG bsf LEDREG, 2 bsf STATUS, RPO ; включили банк 1 movlw LED2TRIS ; порт В для включения светодиода D2 movwf PORTB bcf STATUS, RPO ; включили банк О movlw LED2ON movwf PORTB ; включили светодиод D2 return LITELEDO bsf STATUS, RPO movlw LEDOTRIS movwf PORTB bcf STATUS, RPO movlw LEDOON movwf PORTB return LITELED1 bsf STATUS, RPO movlw LED1TRIS movwf PORTB bcf STATUS, RPO movlw LED1ON movwf PORTB return LITELED2 bsf STATUS, RPO movlw LED2TRIS movwf PORTB bcf STATUS, RPO movlw LED2ON movwf PORTB return LITELED3 317
Микроконтроллеры Microchip9 rfPIC™ bsf STATUS, RPO movlw LED3TRIS movwf PORTB bcf STATUS, RPO movlw LED3ON movwf PORTB return LITELED4 bsf STATUS, RPO movlw LED4TRIS movwf PORTB bcf STATUS, RPO movlw LED4ON movwf PORTB return LITELED5 bsf STATUS, RPO movlw LED5TRIS movwf PORTB bcf STATUS, RPO movlw LED5ON movwf PORTB return LITELED6 bsf STATUS, RPO movlw LED6TRIS movwf PORTB bcf STATUS, RPO movlw LED6ON movwf PORTB return LITELED7 bsf STATUS, RPO movlw LED7TRIS movwf PORTB bcf STATUS, RPO movlw LED7ON movwf PORTB return ; INITIAL ; Эта подпрограмма вызывается постоянно, инициализирует регистр ; OPTION—REG, а также сбрасывает сторожевой таймер ; (если он был включен). ; Это необходимо для того, чтобы застраховаться ; от случайного искажения содержимого жизненно важных регистров INITIAL ; clrwdt ; сброс сторожевого таймера, если он используется bsf STATUS, RPO ; включили банк 1 movlw PRESCL ; инициализируем предделитель movwf OPTION_REG bcf STATUS, RPO ; включили банк О retlw О ; SETWATCH ; Инициализация регистров таймера ширины импульсов 318
Гпава 5. Применение микроконтроллеров серии rfPIC SETWATCH movf TMRO, W ; записываем значение TMRO в ORIGIN movwf ORIGIN clrf TMRLOW ; сбрасываем старшие и младшие разряды clrf TMRHIGH retlw О CLOCK Постоянно обновляет TMRLOW и TMRHIGH. Входные переменные: ORIGIN Выходные переменные: TMRLOW, TMRHIGH CLOCK movf ORIGIN, W ; TMRLOW обновляется на основе времени, ; прошедшего subwf TMRO, W ; до момента установки ORIGIN. addwf TMRLOW, F ; разрешение TMRLOW ~= 4 мкс (как TMRO) btfsc STATUS, С ; переполнение TMRLOW ~= 1 мс (2Л8*4 мкс) incf TMRHIGH, F ; разрешение TMRHIGH ~= 1ms nop ; переполнение TMRHIGH ~= 0.24 сек (2Л8*1 мс) nop nop ; Команды NOP и SUBWF гарантируют равенство movlw 2 ; ORIGIN = TMRO как было выше, во второй строке subwf TMRO, W ; процедуры CLOCK. (ORIGIN необходимо movwf ORIGIN ; привести к равенству со retlw 0 ; значением TMR0 во время операции с ORIGIN) TIMER Непрерывно обновляет два таймера верхнего порядка (SX1TMR и SX2TMR) Входные переменные: нет Выходные переменные: SX1TMR, SX2TMR ********************************************************************* TIMER btfss TOGGLE ; флаг TOGGLE вынуждает эту процедуру goto TIMER1 потратить 1/2 от TMRO на TIMER movlw B’01111111 ’ ; и 1/2 на TIMER1. addwf TMRO, W btfss STATUS, C retlw 0 ; переполнение TMRO ~= 1 мс (2Л8*4 мкс) bcf TOGGLE incfsz SX1TMR, F ; разрешение SX1TMR ~= 1 мс retlw 0 ; переполнение SX1TMR ~= 0.25 сек (2Л8*1 мс) incf SX2TMR, F ; разрешение SX2TMR ~= 0.25 сек retlw 0 ; переполнение SX2TMR ~= 1 мин (2Л8*0.23 сек) TIMER1 movlw B’01111111 ' ; Процедура TIMER расходует половину это- ro addwf TMRO, W ; времени в TIMER1, ожидая, когда флаг TOGGLE btfsc STATUS, C ; будет установлен вновь retlw 0 bsf TOGGLE retlw 0 ; SXON ; Выключает все выходы (DO, Dl, D2) по истечению времени 319
Микроконтроллеры Microchip9 rfPIC™ Повторный вызов через 0.25 секунды (2л8*1мс) Входные переменные: SX2TMR Глобальная переменная LEDREG SXON btfss SX2TMR, 0 ; Когда SX1TMR переполнен, SX2TMR retlw 0 ; увеличивается на 1 clrf LEDREG ; очищаем регистр состояния светодиодов clrf PORTB ; очищаем порт В bsf STATUS, RPO ; включили банк 1 movlw LEDOFFTRIS ; настроили порт В: movwf PORTB ; все линии на ввод, светодиоды погашены bcf STATUS, RPO ; включили банк 0 retlw 0 LRNDTCT Когда нажата кнопка «LEARN», эта функция переводит программу в режим обучения, устанавливая флаг LERN Входные переменные: нет Выходные переменные: LEDLRN, флаг LERN LRNDTCT btf sc LERN ; Режим LEARN инициализируется установкой retlw 0 ; флага LERN в 1, movlw BEGN ; установкой счетчика состояния в BEGN, movwf STATECNTR ; включением светодиода LEDLRN D2 и очи- сткой bsf LERN ; таймеров верхнего порядка, SX1TMR и SX2TMR call LEDLRNPOWER ; подпрограмма включения светодиода D2 clrf SX1TMR clrf SX2TMR retlw 0 LEARN Эта процедура «знакомит» приемник с первыми двумя байтами принимаемых от передатчика данных, сохраняя их в ячейках внутренней памяти EEPROM LEARN btfss SX2TMR, 5 ; Если валидный прием не завершен в тече- ние goto LEARN1 bcf LERN clrf PORTB bsf STATUS, movlw movwf bcf STATUS, retlw RPO LEDOFFTRIS PORTB RPO 0 ; 8 секунд (2Л5*0.25 сек) ; то выходим из режима LEARN и гасим D2 ; иначе переходим на LEARN 1. ; включили банк 1 ; настроили порт В: ; все линии на ввод, светодиоды погашены ; включили банк 0 LEARN1 movlw xorwf btfss retlw movlw movwf movlw VALID STATECNTR, W STATUS, Z 0 0x00 EEADR DATAO ; Если счетчик состояния сейчас содержит ; значение, соответствующее выполнению ; функции VALIDATE, то прием был ; осуществлен успешно ; Устанавливаем регистр EEADR ; для записи первого байта в EEPROM ; Переносим адрес DATA0 в регистр FSR 320
Гпава 5. Применение микроконтроллеров серии rfPIC movwf movlw movwf FSR 2 BITCNTR ; (см. описание косвенной адресации) LEARN2 movf INDF, v V ; Переносим содержимое ячейки, на которую movwf EEDATA ; указывает FSR в EEDATA. LEARN3 call EEPROM. .WRITE ; запись в EEPROM incf EEADR, F incf FSR, F decfsz BITCNTR, F ; исполняем последовательность записи goto LEARN2 ; для двух байтов bcf LERN ; сбрасываем флаг LERN clrf PORTB ; выходим из режима LEARN и гасим D2 bsf STATUS , RPO ; включили банк 1 movlw LEDOFFTRIS ; настроили порт В: movwf PORTB ; все линии на ввод, светодиоды погашены bcf STATUS , RPO ; включили банк 0 movlw BEGN movwf STATECNTR retlw 0 ; выход из режима обучения EEPROM.READ Для чтения данных из EEPROM адрес записывается в регистр EEADR и устанавливается управляющий бит RD (EECON1<0>) для начала процесса чтения. В следующем цикле данные доступны для чтения в регистре EEDATA. Входные данные: В аккумуляторе находится адрес ячейки для чтения Выходные данные: Аккумулятор содержит прочитанные данные EEPROM_READ bsf STATUS, RPO ; выбрали Банк 1 movwf EEADR ; перенесли адрес из W в EEADR bsf EECON1, RD ; запустили чтение movf EEDATA, W ; перенесли данные в W bcf STATUS, RPO ; выбрали Банк 0 return ; возврат из подпрограммы EEPROM_WRITE Для записи в ячейку EEPROM адрес помещают в регистр EEADR, данные в регистр EEDATA, затем выполняют обязательную последовательность команд Предупреждение: Если прерывания были разрешены, то на время выполнения этой подпрограммы они запрещаются Входные данные: Адрес ячейки в EEADR, данные в EEDATA Выходные данные: нет EEPROM_WRITE bsf STATUS, RPO bsf EECON1, WREN bcf INTCON, GIE ; выбрали Банк 1 ; разрешили запись в EEPROM ; запретили все прерывания 321
Микроконтроллеры Microchip® rfPIC™ ; *** ОБЯЗАТЕЛЬНЫЙ набор команд, менять нельзя!!' *** movlw 0x55 movwf EECON2 movlw OxAA movwf EECON2 bsf EECON1, WR ; старт записи в EEPROM ’★ конец обязательного набора *** btfsc EECON1, WR ; запись завершена? goto $-1 ; нет, проверить снова (на шаг назад) bcf EECON1, WREN ; запись завершена, запрет новой записи bsf INTCON, GIE ; разрешили прерывания bcf STATUS, RPO ; выбрали Банк 0 return ; возврат из подпрограммы ;************** ПРИЕМ ПОСЛЕДОВАТЕЛЬНОСТИ ******************** *********************** ФОРМАТ СЛОВА КОДА ************************ | - -ПРЕАМБУЛА- - | - -ЗАГОЛОВОК- - |-ДАННЫЕ-----------| -ЗАЩИТНЫЙ- | ИНТЕРВАЛ *******************рАСШИфР0ВКА СОСТАВА ДАННЫХ ********************* байты DATA1 I DATA0 биты 7|б|5|4|3|2|1|0|7|б|5|4|3|2|1|0 знач. S2I SI I SO|S3| 0| 0| СЕРИЙНЫЙ НОМЕР байты DATA3 I DATA2 биты 7| б| 5| 4| 3| 2| 1| 0| 7| 6| 5| 4| 3| 2| 1| О знач. ДОП.ДАННЫЕ ; BEGIN ; Эта функция ждет возможный старт передачи данных (RXDATA). ; Входные данные: RXDATA BEGIN btfsc RXDATA incf STATECNTR, F goto MAIN BEG INI btfsc RXDATA goto MAIN call SETWATCH incf STATECNTR, F goto MAIN ; Установить состояние BEGIN1 ; Установить состояние HEADER HEADER Эта функция обнаруживает валидный заголовок Входные данные: RXDATA HEADER btfsc RXDATA ; Программа выполняет цикл длит. 1,25 мс goto RESTART ; если уровень сигнала данных остается низким. 322
Гпава 5. Применение микроконтроллеров серии rfPIC btfss TMRHIGH, 0 ; Если оба условия выполнены, устанавли- вается goto MAIN ; статус HEADER1 1 movlw D' 64 ' ; 1,25 мс формируется при помощи: andwf TMRLOW, W ; TMRHIGH = 1 ~= 2Л8*4 мкс = 1 мс btf sc goto MAIN STATUS, Z ; TMRLOW = 64 ~= 64*4 мкс = 0,25 мс incf STATECNTR, F устанавливаем статус HEADER1 goto MAIN HEADER1 movlw D' 6 ' ; Если сигнал переходит в высокий уровень subwf TMRHIGH, W ; ранее 6 мс, то заголовок валидный btfss STATUS, C ; иначе переход на RESTART goto HEADER2 goto RESTART ; TMRHIGH = 6 = 6*1 мс = 6 мс HEADER2 btfss RXDATA goto MAIN call SETWATCH movlw D' 32 ' ; Инициализируем счетчик BITCNTR для от- счета movwf BITCNTR ; 32 бит данных во входном сигнале RXDATA incf STATECNTR, F ; устанавливаем статус HIGHPLSE goto MAIN ; HIGHPLSE ; Функция измеряет длительность ; Входные данные: RXDATA импульса высокого уровня ************************************ HIGHPLSE btfsc TMRHIGH, 0 goto RESTART btfsc RXDATA goto MAIN movf TMRLOW, W movwf HIGHWDTH call SETWATCH incf STATECNTR, F goto MAIN ; Если TMRLOW переполняется, то RESTART ; Переносим значение длительности импульса ; в HIGHWDTH для дальнейших вычислений ; Устанавливаем статус LOWPULSE .******************************1 t***************************i********* ; LOWPULSE ; Функция измеряет длительность импульса низкого уровня LOWPULSE Btfsc TMRHIGH, 0 ; Если TMRLOW переполняется, то устанавливаем goto LOW2 btfss RXDATA goto MAIN ; статус HEADER movf TMRLOW, W ; Переносим значение длительности импульса movwf LOWWDTH call SETWATCH ; в LOWWDTH для дальнейших вычислений incf STATECNTR, F goto MAIN LOW2 movlw HEADR ; устанавливаем статус RECORD movwf STATECNTR ; Устанавливаем статус HEADER если импульс goto MAIN ; низкого уровня слишком длинный ; RECORD ; Функция записывает каждый бит, поступающий из потока RXDATA. 323
Микроконтроллеры Microchip9 rfPIC™ Входные данные: RXDATA Выходные данные: DATA0 DATA1 DATA2 DATA3 RECORD movf HIGHWDTH, W subwf LOWWDTH, W rrf DATA3, F rrf DATA2, F rrf DATA1, F rrf DATAO, F movlw HIGHP movwf STATECNTR decfsz BITCNTR, F goto MAIN movlw D' 4 ' movwf COUNTR movlw DATAO movwf FSR RECORD1 movlw OxFF xorwf INDF, W btfss STATUS, Z goto RECORD2 incf FSR, F decfsz COUNTR, F goto RECORD 1 goto RESTART RECORD2 movlw WAIT movwf STATECNTR goto MAIN ; Состояние бита переноса после этой ; операции отражает логику данных. ; Затем сдвиг в байты накопления ; Используем косвенные ссылки для ; указания на DATAO...DATA3 ; во вложенном цикле в RECORD1 ; Устанавливаем статус WAIT4END WAIT4END Функция ожидает защитный интервал, завершающий слово кода перед тем, как приступить к приему следующего слова. Входные данные: RXDATA WAIТ4END btfsc HIGHLOW ; HIGHLOW устанавливается для индикации, что goto WAIT1 ; сигнал перешел из высокого уровня в низкий btfsc RXDATA goto MAIN call SETWATCH bsf HIGHLOW WAIT1 btfss RXDATA goto WAIT2 bcf HIGHLOW goto MAIN WAIT2 btfss TMRHIGH, 3 ; Если период низкого уровня больше, goto MAIN ; чем 8 мс (2Л3*1 мс) значит достигнут bcf HIGHLOW ; защитный интервал incf STATECNTR, F ; устанавливаем статус VALIDATE goto MAIN 324
Гпава 5. Применение микроконтроллеров серии rfPIC ; VALIDATE ; Функция проверки, соответствует ли принятый серийный номер ; передатчика ранее сохраненному в EEPROM. ; Входные данные: ; DATAO (полностью) ; DATA1 (только два первых бита) VALIDATE movlw 0x00 movwf EEADR movlw DATAO movwf FSR ; Используем косвенную адресацию для сравнения ; сохраненного серийного номера с сохраненным VAL1 call EEPROM_READ movf INDF, W xorwf EEDATA, btfss STATUS, goto RESTART incf FSR, F incf EEADR, F ; читаем первый сохраненный байт W Z ; Если первый байт совпал, продолжаем, ; иначе RESTART VAL2 call EEPROM_READ movf INDF, W xorwf EEDATA, btfsc EEDATA, goto RESTART btfsc EEDATA, goto RESTART incf STATECNTR, F goto MAIN ; читаем второй сохраненный байт F 0 ; Проверяем, совпадают ли 2 младших ; значащих бита с сохраненными 1 ; устанавливаем статус IMPLEMENT .*********************** ; IMPLEMNT ; Функция направляет по ******************************************** назначению данные, принятые в кодовом слове ******************************************** IMPLEMNT movfw DATA3 movwf LEDREG clrf SX1TMR clrf SX2TMR goto RESTART ; читаем принятое аналоговое значение ; сохраняем в LEDREG ; инициализируем таймеры, задающие ; длительность свечения светодиодов RESTART Функция устанавливает счетчик состояния в BEGIN, что означает рестарт приема последовательности RESTART movlw movwf goto MAIN BEGN STATECNTR end ; конец программы 325
Микроконтроллеры Microchip9 rfPIC™ Передача кода оцифрованного аналогового сигнала Учебно-демонстрационная программа передающего модуля не- сколько сокращена по сравнению с исходной программой, предла- гаемой изготовителем. Сокращения коснулись фрагментов кода, не используемых непосредственно в рассматриваемом алгоритме, но приведенных в тексте программы для ее унификации, с тем, чтобы эти фрагменты пользователь мог применить в случае необходимости. Текст программы традиционно начинается с объявления пере- менных и констант. Далее следует подпрограмма обработки преры- вания. В нашем случае прерывание используется только для выхода из режима SLEEP при нажатии одной из кнопок и в подпрограмме обработки кроме обязательных операций по сохране- нию/восстановлению содержимого аккумулятора и режима статуса единственным практически важным действием является сброс флага прерывания. Но пользователь может включить в обработку прерыва- ния свой код, например, генерацию короткого звукового сигнала. Значительную часть программы занимает инициализация микро- контроллера для решения конкретной задачи. Варианты настройки модулей и задействованных для этой цели слов состояния описаны в гл. 2. Программа построена таким образом, что в ожидании нажатия кнопки микроконтроллер находится в режиме SLEEP для экономии энергии батареи. С этой же целью отключается питание модуля АЦП и источник опорного напряжения. Единственное прерывание, которое обслуживается в состоянии SLEEP - по изменению состояния одного из выводов порта. При нажатии одной из кнопок микроконтроллер выходит из режима SLEEP. Программно определяется номер нажа- той кнопки, включается модуль АЦП, и к нему подключается один из аналоговых каналов, в зависимости от номера кнопки. После под- ключения аналогового канала выдерживается обязательная пауза, необходимая для зарядки накопительного конденсатора АЦП. Оцифрованное значение помещается в буфер передачи, вклю- чается модуль передатчика и двоичное слово данных излучается в эфир. Опрос кнопок происходит циклически. Если держать кнопку нажатой и вращать движок потенциометра, то в эфир будут излу- чаться меняющиеся данные, что хорошо заметно по переключению светодиодов приемного макета. На основе предложенного решения можно построить несложную систему пропорционального управле- ния или сбора данных. В состав слова данных входит индивидуальный номер передат- 326
Гпава 5. Применение микроконтроллеров серии rfPIC чика. Для простоты номер в качестве константы введен непосред- ственно в тело команды, но для серийного промышленного произ- водства этот вариант неприемлем, поскольку требует перекомпи- ляции программы для каждого нового номера. После незначитель- ного изменения программы серийный номер можно считывать из EEPROM. При мелкосерийном производстве индивидуальный но- мер обычно заносится в EEPROM во время записи прошивки в го- товое изделие. Если по окончании передачи слова данных ни одна кнопка не нажата, отключается передающий модуль, АЦП и источник опорно- го напряжения, затем микроконтроллер переходит в режим SLEEP. Учебная программа 3 Файл: transmit.asm На основе: xmit_demo asm (Steven Bible, Microchip Technology Inc.) list p=12f675 ; определение типа процессора #include <pl2f675.inc> ; описание специфических переменных errorlevel -302 ; запрет сообщения 302 в файле листинга ; Биты слова конфигурации микроконтроллера ______CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT ; Объявление блока переменных cblock 0x20 w_temp status_temp TEMP CSRO CSR1 CSR2 CSR3 CSR4 CSR5 CSR6 CSR7 CSR8 Count Count2 BitCount TimeHi TimeLo ; временный регистр ; временный регистр ; Временный регистр общего назначения ; Сдвиговый регистр буфера передачи 327
Микроконтроллеры Microchip9 rfPIC™ FuncBits ; Функциональные биты endc Определения #define POTO GPIO, 0 ; Аналоговый вход (потенциометр GPO) #define POTI GPIO, 1 ; Аналоговый вход (потенциометр GP1) #define TXD GPIO, 2 ; Выход (данны на передачу) #define PB3 GPIO, 3 ; Вход (кнопка GP3) #define PB4 GPIO, 4 ; Вход (кнопка GP4) #define RFENA GPIO, 5 ; Выход (RF Enable, светодиод) #define GPTRIS B’00011011' ; Биты, определяющие направление ; передачи данных через порты ; задержки / интервалы #define TGUARD D' 46 ’ ; 46 X ТЕ #define PREAMB D'16' ; Длина преамбулы = 16 импульсов Program Memory ORG 0x000 ; вектор сброса nop goto INITALIZE ; требуется при использовании ICE ORG 0x004 ; вектор прерывания Далее следует подпрограмма обработки прерывания (обязательная часть) В данном приложении прерывание используется только для выхода из sleep, пользователь может вставить свой код обработки прерывания movwf w_temp ; swapf STATUS, W bcf STATUS, RPO movwf status_temp ; ; Здесь вставляется код пользователя ; для обработки прерывания, ; если это необходимо movfw GPIO ; bcf INTCON, GPIF swapf status_temp, W movwf STATUS ; swapf w_temp, F swapf w_temp, W retfie ; DATA_EEPROM_READ сохранение аккумулятора W перенос регистра STATUS в W включили банк 0 сохранение регистра STATUS чтение GPIO сброс флага прерывания перенос содержимого status_temp в W восстановление регистра STATUS восстановление аккумулятора W 328
Гпава 5. Применение микроконтроллеров серии rfPIC ; Подпрограмма чтения данных из EEPROM ; В данном приложении не используется, может быть применена ; пользователем для своих целей ; Входные данные: W содержит адрес EEPROM для чтения ; Выходные данные: W содержит данные из ячейки EEPROM DATA_EE PROM_READ bsf STATUS, RPO ; выбрали Банк 1 movwf EEADR ; перенос адреса из W в EEADR bsf EECON1, RD ; запуск с :читывания movf EEDATA, W ; перенос данных в W bcf STATUS, RPO ; выбрали Банк 1 return ; DATA_EEPROM_WRITE ; В данном приложении не используется, может быть применена ; пользователем для своих целей. ; ВНИМАНИЕ: На время выполнения записи прерывания должны быть запрещены! ; Входные данные: Адрес в EEADR, данные в EEDATA DATA_EEPROM_WRITE bsf STATUS, RPO ; выбрали Банк 1 bsf EECON1, WREN ; разрешаем выполнение записи bcf INTCON, GIE ; глобальный запрет прерываний ; *** обязательный набор команд!!! *** movlw 0x55 movwf EECON2 movlw OxAA movwf EECON2 bsf EECON1, WR ; старт записи в EEPROM ; **★ конец обязательного набора *** bsf INTCON, GIE ; разрешаем прерывания bcf EECON1, WREN ; запрещаем запись в EEPROM bcf STATUS, RPO ; выбрали Банк 0 return ; READ_ANALOG_ANO; READ_ANALOG_AN1 ; Чтение аналоговых значений каналов О (AN0) или 1 (AN1) ; Входных данных нет ; Выходные данные: регистры ADRESH и ADRESL содержат 10-битный результат ; конвертации, форматированный в соответствии с битами ADCONO и ADFM READ_ANALOG_ANO 329
Микроконтроллеры Microchip9 rfPIC™ bcf bcf goto ADCONO, CHS1 ADCONO. CHSO READ-ANALOG ; выбираем аналоговый канал ANO READ_ANALOG_AN1 bcf ADCONO, CHS1 ; выбираем аналоговый канал AN1 bsf ADCONO, CHSO READ-ANALOG bsf ADCONO, ADON ; включаем модуль АЦП ; После выбора нового канала обязательно нужно дать время на ; установление режима конвертации. Длительность задержки зависит ; от емкости внутреннего накопительного конденсатора. movlw movwf decfsz goto D'6 ' TEMP TEMP, F $-1 ; При 4 МГц задержка 22мкс ; (22мкс = 2мкс + 6 * Змкс + 1мкс) bsf ADCONO, GO ; старт конвертации btfsc ADCONO, GO ; конвертация завершена? goto $-1 bcf ADCONO, ADON ; выключаем модуль АЦП return ;WaitxTE ; Подпрограмма формирования интервала в зависимости от значения W WaitxTE movwf Count2 ; [1] waitxlp movlw D'79' ; [1] movwf Count ; [1] wait4001p nop ; [1] nop ; [1] decfsz Count,F ; [1] goto wait4001p ; [2] 79 х 5 = 395 мкс decfsz Count2,F ; [1] goto waitxlp ; [2] retlw 0 ; [2] всего 2 (call) + W х (395 + 5) + 2 (return) w а 1 -> 406 мкс при 4 МГц w = 2 -> 806 мкс при 4 МГц Инициализация микроконтроллера (PIC12F675) 330
Гпава 5. Применение микроконтроллеров серии rfPIC INITALIZE ; на время инициализации прерывания необходимо запрещать bcf INTCON, GIE ; запрет всех прерываний bsf STATUS, RPO ; выбрали Банк 1 ; встроенный тактовый генератор должен быть откалиброван ; при помощи заводской калибровочной константы, ; записываемой в конце памяти программ call 0x3FF ; запрашиваем заводскую ; калибровочную константу movwf OSCCAL ; записываем константу в регистр калибровки movlw GPTRIS movwf TRISIO ; запись настройки в регистр TRISIO bcf STATUS, RPO ; выбрали Банк О ; Настройка модуля компаратора ; В данном приложении модуль компаратора не используется, ; поэтому настраивается на режим минимального потребления тока. ; При необходимости пользователь может настроить компаратор ; иначе, для этого в тексте предусмотрены заготовки. ; Конфигурация компаратора bcf CMCON, CINV ; инверсия выхода: не инвертируется bcf CMCON, COUT ; выход компаратора: Vin+ < Vin- bcf CMCON, CIS ; переключатель входа: Vin- подключен к Cin- ; СМ2: bsf bsf bsf :CM0 = 111 CMCON, CMCON, CMCON, . - компаратор выключен {наименьшее СМ2 ; бит режима 2 СМ1 ; бит режима 1 СМО ; бит режима 0 потребление) ; настройка регистра опорного напряжения VRCON bsf bcf STATUS, RPO VRCON, VREN ; выбрали Банк 1 ; Схема CVref: ; тока Idd нет питание отключено, bcf VRCON, VRR ; Выбор диапазона CVref: верхний bcf VRCON, VR3 ; CVref бит 3 bcf VRCON, VR2 ; CVref бит 2 bcf VRCON, VR1 ; CVref бит 1 bcf VRCON, VRO ; CVref бит 0 bcf STATUS, RPO ; выбрали Банк 0 ; Настройка модуля АЦП {только PIC12F675, rfPIC12F675) ; Внимание: при использовании портов GPIO в качестве аналоговых ; входов, убедитесь, что соответствующие биты регистра TRISIO ; установлены в '1' bcf ADCONO, ADFM ; Формат результата: выравнивание влево bcf ADCONO, VCFG ; Опорное напряжение: Vdd bcf ADCONO, ADON ; АЦП отключен и не потребляет ток bsf STATUS, RPO ; выбрали Банк 1 331
Микроконтроллеры Microchip9 rfPIC™ ; выбор источника тактирования для АЦП: Fosc/8 bcf bcf bsf ANSEL, ADCS2 ANSEL, ADCSI ANSEL, ADCSO ; бит выбора 2 ; бит выбора 1 ; бит выбора 0 ; выбор портов GPIO для аналоговых входов: GPO/ANO, GP1/AN1 bcf ANSEL, ANS3 ; GP4/AN3: цифровой вход/выход bcf ANSEL, ANS2 ; GP2/AN2: цифровой вход/выход bsf ANSEL, ANSI ; GP1/AN1: аналоговый вход bsf ANSEL, ANSO ; GP0/AN0: аналговый вход bcf STATUS, RPO ; выбрали Банк 0 Настройка модуля TIMER1 bcf T1CON, TMR1ON ; TIMER1: остановлен bcf T1CON, TMR1CS ; источник тактирования TIMER1: ; внутренний (Fosc/4) bcf T1CON, NOT_T1SYNC ; синхронизация входа TIMER1: ; синхронизировать ; с внешней частотой. bcf T1CON, T1OSCEN ; управление генератором типа LP ; отключен ; входной предделитель TIMER1: 1:1 bcf bcf T1CON, T1CKPS1 ; бит настройки предделителя 1 ; бит настройки предделителя 0 T1CON, T1CKPS0 ; TMR1GE применяется если TMR1ON = 1, иначе игнорируется bcf T1CON, TMR1GE ; TIMER1 Gate Enable: on ; Подтягивающие резисторы ; Каждый вывод GPIO, кроме GP3, имеет индивидуально включаемые ; подтягивающие резисторы. Они автоматически отключаются, если ; порт настроен на вывод. bsf STATUS, RPO ; включили Банк 1 movlw B’00010000’ ; резистор для GP4 включен movwf bcf WPU STATUS, RPO ; включили Банк 0 Настройка регистра OPTION bsf STATUS, RPO включили Банк 1 bcf OPTION_REG, NOT—GPPU ; подтягивающие резисторы разрешены bsf OPTION_REG, INTEDG ; фронт прерывания: по нарастанию на GP2/INT bcf OPTION_REG, TOCS источник тактов TMRO: внутренние командные такты (CLKOUT) bcf OPTION_REG, TOSE фронт источника TMRO: инкремент по переходу 0/1 на GP2/T0CKI bcf OPTION_REG, PSA предделитель подключен к TIMER0 Коэффициет предделителя TMRO 1:2 bcf OPTION_REG, PS 2 бит настройки предделителя 2 bcf OPTION_REG, PSI бит настройки предделителя 1 bcf OPTION_REG, PSO бит настройки предделителя 0 bcf STATUS, RPO включили Банк 0 332
Гпава 5. Применение микроконтроллеров серии rfPIC Настройка регистра IOCB bsf STATUS, RPO movlw b'00011000’ movwf IOCB bcf STATUS, RPO ; включили Банк 1 ; Прерывание по изменению: GP3, GP4 ; включили Банк 0 Настройка регистра PIE1 bsf STATUS, RPO ; включили Банк 1 bcf PIE1, EEIE ; прерывание по завершению ; записи EEPROM запрещено bcf PIE1, ADIE ; прерывание от АЦП запрещено bcf PIE1, CMIE ; прерывание от компаратора запрещено bcf PIE1, TMR1IE ; прерывание по переполнению ; TMR1 запрещено bcf STATUS, RPO ; включили Банк 0 Настройка регистра INTCON bcf INTCON, PEIE ; сброс бита, разрешающего ; периферийные прерывания bcf INTCON, T0IE ; сброс бита, разрешающего ; прерывания по TMR0 bcf прерывания по INTCON, GP2/INT INTE ; сброс бита, разрешающего внешние bsf INTCON, ние по изменению GPIE ; установка бита, разрешающего прерыва- ; состояния портов ; bcf INTCON, GIE ; глобальный запрет прерываний ;(если нужно пользователю) Главная программа MAIN bcf RFENA ; передатчик отключен bsf INTCON, GIE ; глобальное разрешение прерываний сканирование кнопок SCANPB movlw movwf 0x00 ; FuncBitS ; : загружаем 0 в W : очистка регистра функций btf sc PB3 ; : кнопка GP3 нажата? goto SPB1 movlw 0x23 ; выбираем функцию S0 iorwf FuncBitS, F call READ_ANALOG_AN0 ; ; читаем аналоговый канал AN0 333
Микроконтроллеры Microchip9 rfPIC™ SPB1 btfsc PB4 ; кнопка GP4 нажата? goto SPB2 ; нет, обойти movlw 0x43 ; выбираем функцию S1 iorwf FuncBits, F call READ_ANALOG_AN1 ; читаем аналоговый канал AN1 SPB2 movlw OxFF andwf FuncBits, W ; была ли нажата одна из кнопок? btfss STATUS, Z goto XMIT ; да, передаем буфер bcf RFENA ; нет, выключаем передатчик sleep ; переводим процессор в режим SLEEP goto SCANPB ; после пробуждения возобновляем ; сканирование кнопок ; загрузка буфера передачи XMIT bsf movlw RFENA 0x73 ; включаем передатчик ; передаем серийный номер movwf CSRO movfw FuncBits ; передаем функциональные разряды movwf CSR1 ; передаем аналоговое значение, как ; модификацию стандартного протокола KeeLoq(r) ; в котором эти два поля используются для передачи ; значения 16-разрядного счетчика bsf movfw bcf movwf STATUS, RPO ADRESL ; включаем Банк 1 ; читаем результат АЦП из ADRESL ; включаем Банк 0 STATUS, CSR2 RPO movfw movwf ADRESH CSR3 ; читаем результат АЦП из ADRESH movlw movwf 0x56 CSR4 ; передаем 1-й 32-битный сер. ном ; (игнорируется приемником) movlw movwf 0x34 CSR5 movlw movwf 0x12 CSR6 movlw movwf 0x20 CSR7 movlw movwf 0x55 CSR8 ; передаем флаги Цикл передачи 334
Глава 5. Применение микроконтроллеров серии rfPIC TXLoop ; Передаем преамбулу (заполнение 50%) Preamble movlw PREAMB movwf BitCount ; начальное число битов преамбулы PreL bsf TXD ; включение передачи movlw 1 call WaitxTE ; задержка bcf TXD ; выключение movlw 1 call WaitxTE ; задержка decfsz BitCount,F ; цикл goto PreL ; синхропауза TXloop movlw D'10’ ; Thead = 10 х Те call WaitxTE ; передаем 72-битную последовательность movlw CSRO ; младший бит первый movwf FSR TXNextByte movlw D’8’ movwf BitCount TXNextBit rrf INDF,W ; 8-битный сдвиг rrf INDF,F ; мл.бит в Carry BC ONE ZERO movlw 2 movwf TimeHi ; + + + +-- movlw 1 ; 1 II movwf TimeLo ; + + + goto Trasm_BIT ; | 2Те Те | ONE movlw 1 1 movwf TimeHi • + + + — movlw 2 ; 1 1 1 movwf TimeLo ; + + + + ; 1 Те 2Те 1 Trasm_BIT bsf TXD ; вкл. movf TimeHi,W call WaitxTE bcf TXD ; выкл. movf TimeLo,W call WaitxTE decfsz BitCount,F goto TXNextBit incf FSR,F 335
Микроконтроллеры Microchip0 rfPIC”" movlw CSR8+1 xorwf FSR,W andlw OxlF BNZ TXNextByte ; проверка на окончание ; защитный интервал movlw TGUARD call WaitxTE goto SCANPB ; возврат к сканированию кнопок ; Блок определения данных для EEPROM ; При необходимости может быть определен пользователем ; Доступны 128 байт с адресами от 0x00 до 0x7F ORG 0x2100 DE 0x00, 0x01, 0x02, 0x03 ; Команды калибровки (нужны только для MPLAB SIM) org retlw 0x3 ff 0x80 end 336
Список литературы 1. rfPIC12C509AG/509AF Data Sheet (DS70031A) - Microchip Technology Inc., 2001. 2. rfPIC12F675K/675F/675H Data Sheet (DS70091A) - Microchip Technol- ogy Inc., 2003. 3. rfPICI 2C509AG/509AF Rev. A Silicon/Data Sheet Errata (DS80138A) - Microchip Technology Inc., 2002. 4. rfPIC12F675K/675F/675H Rev. A Silicon/Data Sheet Errata (DS80174A) - Microchip Technology Inc., 2003. 5. rfRXD0420 ASK Receiver Reference Design (DS00860B) - Stiven Bible, Microchip Technology Inc., 2003. 6. Designing Loop Antennas for the rfPIC12F675 (DS00868A) - Myron Loewen, Microchip Technology Inc., 2003. 7. Яценков B.C. Микроконтроллеры Microchip. Практическое руково- дство. (издание второе, исправленное и дополненное) - М.: Горячая ли- ния - Телеком, 2005. 8. PICmicro Mid-Range Reference Manual (DS33023) - Microchip Tech- nology Inc., 2001. 9. In-Circuit Serial Programming™ (ICSP™) Guide (30277c) - Microchip Technology Inc., 2001 10. Basic PLL filters for rfPIC I rfHCS (AN846) - Microchip Technology Inc., 2003. 11. Matching Small Loop Antennas to rfPIC Devices (AN831) - Microchip Technology Inc., 2003. 12. Designing an FCC Approved ASK rfPIC Transmitter (AN242) - Micro- chip Technology Inc., 2003. 337
Содержание Предисловие................................................3 Введение...................................................5 Глава 1. Микроконтроллеры-передатчики rfPIC12C509xx........7 Типы корпусов и система обозначений.....................7 Основные электрические параметры........................11 Расположение и назначение выводов.......................13 Процессорная часть......................................17 Организация памяти...................................18 Специальные регистры.................................21 Программный счетчик..................................25 Порты ввода-вывода...................................27 Модуль TIMERO и регистр TMRO.........................30 Слово конфигурации...................................34 Источники тактовой частоты...........................35 Организация сброса...................................40 Сторожевой таймер....................................43 Энергосберегающий режим SLEEP........................45 Внутрисхемное программирование.......................46 Система команд.......................................47 Радиочастотная часть....................................65 Структурная схема передатчика........................65 Кварцевый генератор..................................67 Фазовая автоподстройка частоты (ФАПЧ)................71 Выходной усилитель мощности..........................75 Типовая схема включения в режиме ASK....................78 Типовая схема включения в режиме FSK....................79 Глава 2. Микроконтроллер-передатчик rfPIC12F675............80 Типы корпусов и система обозначений.....................81 Основные электрические параметры........................83 Расположение и назначение выводов.......................85 Процессорная часть и периферийные модули................88 Организация памяти...................................90 Специальные регистры.................................93 338
Регистры PCL и PCLATH.................................104 Стек..................................................105 Порт ввода-вывода GPIO................................107 Модуль TIMER0.........................................117 Модуль TIMER1.........................................120 Модуль компаратора....................................127 Модуль АЦП............................................136 Работа с EEPROM.......................................142 Слово конфигурации....................................147 Источники тактовой частоты............................150 Организация сброса....................................155 Прерывания............................................165 Сторожевой таймер.....................................170 Энергосберегающий режим SLEEP.........................172 Внутрисхемное программирование........................175 Внутрисхемная отладка.................................176 Система команд........................................177 Радиочастотная часть....................................195 Структурная схема передатчика.........................195 Кварцевый генератор...................................197 Амплитудная манипуляция...............................199 Частотная манипуляция.................................199 Фазовая автоподстройка частоты (ФАПЧ).................202 Выходной усилитель мощности...........................202 Типовая схема включения в режиме ASK..................204 Типовая схема включения в режиме FSK..................205 Глава 3. Миниатюрные приемники rfRXD0420 и rfRXD0920.......206 Основные электрические параметры........................207 Расположение и назначение выводов.......................209 Структурная схема.......................................212 Основы понятия схемотехники приемников на основе rfRXD..217 Рабочие частоты.......................................217 Алгоритм расчета частотного плана.....................220 Фильтр петли ФАПЧ.....................................221 Входной фильтр (преселектор)..........................222 Антенна...............................................223 Внешние элементы малошумящего усилителя...............223 Внешние элементы смесителя MIXER1 ....................225 Фильтр промежуточной частоты..........................225 Амплитудная манипуляция.................................225 Демодуляция сигнала ASK...............................228 Компаратор для режима ASK.............................230 339
Частотная манипуляция..................................233 Требования к фильтру ПЧ..............................233 Демодуляция сигнала FSK..............................233 Фильтрация демодулированного сигнала.................235 Частотная модуляция....................................237 Глава 4. Набор разработчика «rfPIC Development Kit 1».....238 Состав набора..........................................238 Плата программатора и интерфейса.......................239 Отладочный модуль передатчика..........................247 Принципиальная электрическая схема модуля............249 Печатная плата модуля................................249 Отладочный модуль приемника............................252 Принципиальная электрическая схема модуля............254 Печатная плата модуля................................256 Работа с комплектом....................................256 Подготовка к работе в демонстрационном режиме........257 Программирование модулей передатчика.................262 Интерфейс управления программатором..................262 Глава 5. Практическое применение микроконтроллеров серии rfPIC...............................................268 Расчет постоянной времени цепи RSSI....................268 Выбор постоянной времени цепи опорного напряжения......271 Расчет рамочных антенн для rfPIC12F675 ................272 Разработка печатной платы устройства...................278 Настройка и тестирование радиопередающей части.........279 Основы расчета и тестирования фильтров ФАПЧ............284 Примеры программ для приема и передачи данных..........295 Формат слова данных..................................296 Прием кода нажатой кнопки............................300 Прием и отображение двоичного кода оцифрованного сигнала . 312 Передача кода оцифрованного аналогового сигнала......326 Список литературы.........................................337 340
Файл взят с сайта www.kodges.ru, на котором есть еще много интересной литературы