Не так давно радиолюбители конструировали свои схемы на лампах, потом пришлось осваивать транзисторы и микросхемы. В восьмидесятые годы радиолюбители стали собирать свои первые конструкции на микропроцессорах. Чтобы не отставать от своего времени пришла пора освоить микроконтроллеры и ПЛИС. Целю данной статьи является преодоление барьера радиолюбителями от конструирования схем на обычной логике к микроконтроллерам. В статье будут рассмотрены вопросы поэтапной разработки схем на основе микроконтроллеров фирмы MICROCHIP, хотя в принципе они мало чем отличаются от микроконтроллеров АНГСТРЕМ, ATMEL или аналогичных.

Для начала поговорим об инструментах которые нам понадобятся для создания конструкций. Это прежде всего компьютер с модемом, без которого в наше время продвинутому радиолюбителю делать нечего, так как необходимо будет с интернета качать необходимые нам файлы. Какой покупать компьютер это зависит от возможностей конкретного человека. Автор рекомендует конфигурацию не ниже Pentium 2, ОЗУ- 32Мв, диск 10Гв, Видео –8Мв, Windows-98, Windows-2000, NT, ХР, модем в зависимости от телефонной линии, можно узнать у местных провайдеров. Следует предостеречь от покупки очень навороченной материнской платы, так как в последних отсутствуют СОМ порты. Принтер лучше покупать лазерный так как сегодняшние радиолюбители уже давно не рисуют платы рейсфедером, а изготавливают их утюжно-лазерным способом о чем позже будет рассказано подробнее. Необходим так же программатор при помощи которого мы будем записывать коды программы в микроконтроллер. Программаторов существует огромное множество. Автор считает что самый удачный программатор подходящий для радиолюбителей это JDM программатор с программной оболочкой ic-prog. А наиболее удачной схемой является программатор JonisProg. Данным программатором на существующий момент можно программировать достаточно большое количество PIC, ATMEL контроллеров, флеш- память, pic карточек, fun карточек, интерфейс phoenix, интерфейс season + loger. Автором программатора JonisProg  является JOnas Treciokas из литвы, его официальный сайт находится по адресу [1]. На данном сайте можно почитать подробную информацию по программатору. Автором были проведены небольшие доработки схемы программатора рис1. и  схемы адаптера рис2. Программатор запитывается от компьютера  через стандартный четырех контактный  разъём Х2, и подключается через интерфейс СОМ порта X1. Шлейф соединяющий компьютер с программатором лучше делать не длиннее 20-30см. Разъем Х4 программатора надо состыковать с разъемом Х1 адаптера. Для программирования PICконтроллеров переключатель SA1 необходимо установить в крайнее нижнее положение. О всех возможностях программатора для других целей можно посмотреть на авторском сайте [1].

Для изготовления печатных плат лучше использовать односторонний стеклотекстолит. Это  конечно усложняет разводку дорожек, но зато удобен в случае изготовления платы  методом термопереноса (утюжно-лазерным способом). Если дорожки разводиться трассировщиком будут плохо то можно поставить со стороны деталей перемычки. Таким способом мы избавляемся от проблемы совмещения слоев, в случае с двухсторонней разводкой. Итак нарисовав плату в каком либо редакторе ( удобен ACCEL 15, PCAD2001), устанавливаем лазерный принтер на максимальный выход тонера, отключаем все слои кроме дорожек и отверстий, инвертируем при необходимости и печатаем на термобумагу от факса, предварительно наклеенную на стандартный лист по контуру, чувствительным слоем наружу. Для этих целей удобно пользоваться карандашом для склейки бумаги. Подготавливаем стеклотекстолит (гетинакс): для этого замеряем размеры выведенного чертежа и ножницами, предназначенными для резки металла вырезаем заготовку.

image002 (6).gif РИС 1

image004 (4).gifРИС 2

Обрабатываем фольгу очень мелкой наждачной бумагой (нулёвкой) и протираем ацетоном или спиртом. Затем накладываем на стеклотекстолит, тонером к фольге. При помощи утюга разглаживаем около минуты ( это зависит от размеров платы). Утюг установлен на максимум. После этого кладут под струю теплой воды и замачивают минут 15-20. Затем пальцами стирают как резинкой бумагу, при этом на поверхности фольги остается тонер. Сцепление и кислотостоустойчивость тонера позволяют травить практически в любых известных растворах. Если тонер расплылся, операцию повторяют, предварительно уменьшив время или температуру утюга. На следующем этапе сверлят отверстия. Зачищают поверхность мелкой наждачной бумагой и протирают ацетоном. Маленькой кисточкой наносят на дорожки жидкую канифоль и небольшим количеством припоя облуживают поверхность. Таким методом удаётся получить печатную плату по качеству не уступающему промышленной.  Печатать на бумагу лучше из программы на которой разводится плата. В программе ACCEL 15 можно выводить дорожки 1:1, инвертировать, разворачивать, включать и отключать слои, при необходимости.

Печатные платы программатора изготовленные таким способом приведены на рис3. и адаптера рис4. и имеют соответственно размеры 110х75см и 118х60см. Файлы печатных плат в формате ACCEL 15, (PCAD2000) высланы в редакцию.

В схеме можно использовать микросхемы серий 555, 1533. Панельки лучше использовать цанговые. Диод VD5 любой c барьером шотки, в крайнем случае Д311. На коллекторе VT1 должно быть напряжение 13-14 вольт. Для этого при необходимости можно последовательно с диодами VD3,VD4 установить ещё один. Остальные детали не критичны.

image006 (2).gif РИС 3

image008 (1).gif РИС 4

На компьютере надо установить программу ic-prog. На момент написания статьи с сайта [2] из папки Download можно скачать последнюю версию icprog105D. Если на компьютере установлена Windows-2000, NT или ХР то дополнительно надо скачать и подключить драйвер icprog_driver.

Запустив программу и подключив программатор настраивают оболочку. В меню Settings необходимо выбрать Options. Далее в Language выбираем язык Russian и перезапускаем программу. После этого имеем меню на русском языке. Заходим в Настройки далее выбираем JDM programmer и устанавливаем номер COM порта к которому подключен программатор. Устанавливаем точку Используя драйвер Windows. Остальные все галочки должны быть сняты. Задержка Ввода/Вывода зависит от конкретного компьютера. При использовании Windows-2000, NT или ХР подключаем драйвер icprog_driver, для этого в Опциях на вкладке Общие надо установить галочку напротив NT/2000/XP драйвер. На этом настройка программатора завершена.

На следующем этапе освоения, выберем микроконтроллер и поговорим о том, что он из себя представляет. Из всего разнообразия микроконтроллеров необходимо выбрать тот, который будет наиболее отвечать поставленной задаче. Фирма микрочип на данный момент выпускает несколько семейств КМОП микроконтроллеров с внутренним ПЗУ, ОЗУ, таймерами, АЦП, ШИМ и другими периферийными модулями. Самые маленькие это PIC10  -3–6 вывода, PIC12 — 8 выводов, PIC16- 14-68 выводов, PIC17- 40-84 вывода, PIC18- 28-84 вывода, dsPIC30-28-64 вывода, rfPIC12- 18-20 выводов, со встроенным радиоканалом. Каждое семейство имеет свое назначение и область применения. Разработчик при выборе конкретного микроконтроллера исходит от количества необходимых выводов, скорости выполнения операции, встроенных периферийных модулях, условиях эксплуатации и стоимости. Поэтому сначала чертят предполагаемую схему всего устройства, и примерный алгоритм его работы. По результатам этого этапа выбирают микроконтроллер. При нехватке портов ввода/вывода, (схема постепенно разбухает как правило, так и бывает, поэтому надо выбирать контроллер с большим, чем предполагалось количеством выводов) заменяют на микроконтроллер, с другим количеством выводов. Печатную плату следует разрабатывать на самом последнем этапе, а отлаживать конструкцию лучше на макетной плате.

Идентифицируют тип микроконтроллера согласно коду, следующему за семейством. То есть в обозначении идут буквы указывающие на тип памяти программ : EPROM- обозначается индексом “С”, ROM- обозначается индексом “CR”, FLASH- обозначается индексом F. Если перед этими буквами стоит индекс “L” то это означает что данный микроконтроллер работает в расширенном диапазоне питания . Далее идет порядковый номер разработки, 2-4 цифры. Следующие 2 цифры обозначают

Табл1.

L = PLCC (пластиковый выводной кристаллоноситель)
P = пластиковый DIP
S = кристалл в ячеистой упаковке
W = кристалл в форме пластины
MR = микромодуль на ленте, 8 контактный, 35 мм
MT = микромодуль на подносе, 8 контактный
OT = SOT-23, 5 контактный
SL = SO 150 mil, 14 выводный
SM = SO 207 mil, 8 выводный
SN = SO 150 mil, 8 выводный
SO = SOIC 300 mil
SS = пластиковый узкий SSOP
ST = тонкий узкий SO (4.4 мм)
TO = пластиковый транзисторный, 3 выводный
TS = тонкий SO (8×20 мм)
TT = маленький пластиковый транзисторный, 3 выводный
VS = очень маленький SO (8×12 мм)
WF = нарезанная пластина
CL = CERQUAD с окошком
JW = CERDIP с окошком для УФ стирания
PQ = PQFP (пластиковый, квадратный, плоский)
PT = TQFP (тонкий, пластиковый, квадратный, плоский)
SP = пластиковый DIP
SB = COB (кристалл на плате)

максимальную частоту кварцевого генератора в мГц. Последующая буква означает рабочую температуру кристалла I=-40oC…+85oC,  E=-40oC…+125oC, при отсутствии буквы = 0oC…+70oC. И наконец последние буквы обозначают тип корпуса табл1. Например, PIC16F873-20/P означает микроконтроллер фирмы микрочип среднего семейства, с FLASHпамятью программ (многократное перепрограммирование порядка 1000 циклов), максимальная частота кварца 20мГц, рабочий диапазон температур 0oC…+70oC, корпус пластиковый типа DIP.

Так как нашей целью является изучение микроконтроллера, другой задачи мы не ставим, поэтому его мы и будем рассматривать. Внутренняя структура микроконтроллера изображена на рис5. Для данного микроконтроллера нижним пределом напряжения питания будет 4 вольта при частоте кварца до 16мГц, при частоте кварца 20мГц от 4,5 вольт, верхний предел 5,5вольт (в модификациях PIC16LF873-04/P нижний предел 2 вольта при кварце 4мГц и верхний 5,5вольт). Общее потребление зависит от частоты работы тактового генератора, включенных периферийных модулях, и подключенных нагрузок, и может быть в пределах от 20мкА до 250-300ма. А в режиме сна (sleep) в зависимости от модификации  0,9-10мкА. В таблице 2 приведена цоколёвка и назначение ножек микроконтроллера.

image010 (1).jpgРИС 5

Табл2.

Обозначение
вывода
№ вывода  DIP Описание
OSC1/CLKIN 9 Вход генератора/ вход внешнего тактового сигнала
OSC2/CLKOUT 10 Выход генератора. Подключается кварцевый или керамический резонатор. В RC режиме тактового генератора на выходе OSC2 присутствует тактовый сигнал CLKOUT, равный Fosc/4
-MCLR/Vpp 1 Вход сброса микроконтроллера или вход напряжения программирования. Сброс микроконтроллера происходит при низком логическом уровне сигнала на входе.
    Двунаправленный порт ввода/вывода PORTA.
RAO/AN0 2 RA0 может быть настроен как аналоговый канал 0
RA1/AN1 3 RA1 может быть настроен как аналоговый канал 1
RA2/AN2/Vref- 4 RA2 может быть настроен как аналоговый канал 2 или вход отрицательного опорного напряжения
RA3/AN3/Vref+ 5 RA3 может быть настроен как аналоговый канал  или вход положительного опорного напряжения
RA4/TOCKI 6 RA4 может использоваться в качестве входа внешнего тактового сигнала для TMR0. Выход с открытым стоком.
RA5/-SS/AN4 7 RA1 может быть настроен как аналоговый канал 1 или вход выбора микросхемы в режиме ведомого SPI
    Двунаправленный порт ввода/вывода PORTB. PORTB имеет программно подключаемые подтягивающие резисторы на входах.
RBO/INT 21 RBO может использоваться в качестве входа внешних прерываний
RB1 22  
RB2 23  
RB3/PGM 24 RB3 может использоваться в качестве входа для режима низковольтного программирования
RB4 25 Прерывания по изменению уровня входного сигнала.
RB5 26 Прерывания по изменению уровня входного сигнала.
RB6/PGC 27 Прерывания по изменению уровня входного сигнала или вывод для режима внутрисхемной отладки ICD. Тактовый вход в режиме программирования.
RB7/PGD 28 Прерывания по изменению уровня входного сигнала или вывод для режима внутрисхемной отладки ICD. Вывод данных в режиме программирования.
    Двунаправленный порт ввода/вывода PORTC
RCO/T1OSO/T1CKI 11 RC0 может использоваться в качестве выхода генератора TMR1 или входа внешнего тактового сигнала для TMR1.
RC1 /Т1OSI/CCP2 12 RC1 может использоваться в качестве входа генератора для TMR1 или вывода модуля ССР2.
RC2/CCP1 13 RC2 может использоваться в качестве вывода модуля ССР1.
RC3/SCK/SCL 14 RC3 может использоваться в качестве входа/выхода тактового сигнала в режиме SPI и I2C.
RC4/SDI/SDA 15 RC4 может использоваться в качестве входа данных в режиме SPI или вход/выход данных в режиме I2C.
RC5/SDO 16 RC5 может использоваться в качестве выхода данных в режиме SPI.
RC6/TX/CK 17 RC6 может использоваться в качестве вывода передатчика USART в асинхронном режиме или вывода синхронизации USART в синхронном режиме.
RC7/RX/DT 18 RC7 может использоваться в качестве вывода приемника  USART в асинхронном режиме или вывода данных USART в синхронном режиме.
Vss 8,19 Общий вывод для внутренней логики и портов ввода/вывода
VDD 20 Положительное напряжение питания для внутренней логики  и портов ввода/вывода

Микроконтроллер имеет 6 портов ввода/вывода канала “А” (RA0-RA5), 8 портов  канала “В” (RB0-RB7) 8 портов канала “C” (RC0-RC7). Некоторые порты кроме стандартных функций ввода/вывода имеют дополнительные возможности, которые мультиплицированы с периферийными модулями. В PIC-контроллерах каждому порту соответствует два регистра — данных и направления (TRIS). При этом в зависимости от содержания регистра направления каждый вывод может быть индивидуально запрограммирован или на ввод или на вывод. Максимальная нагрузочная способность портов 25 мА втекающий ток, 20 мА вытекающий ток, но с учетом, что общая нагрузка на порты не будет превышать 200ма. Входное напряжение порта не может быть более Uпит+0,3в и не менее Uпит –0,3в , так  как для защиты каждого порта на входе установлены диоды. Выход порта RA4 с открытым коллектором и триггером Шмидта на входе. Для формирования уровня логической 1 необходимо дополнительно навесить внешний резистор. Внутри микроконтроллера к каждому порту канала “B” подключены подтягивающие резисторы которые можно отключить с помощью программы. Четыре канала RB4-RB7 могут генерировать прерывания по изменению логического уровня на входах. RB0/INT может работать как вход внешнего источника прерывания. Все входы канала “С” имеют триггер Шмидта.

Кроме портов микроконтроллер содержит FLASH память программ, 14-разрядных слов расположенную по адресам с 0000H по 0FFFh (4 KB).  192 байта ОЗУ (память данных или регистры общего назначения и представляет собой статическую память, при отключении питания информация обнуляется). И 128 байт EEPROM (Электрически стираемая память данных ППЗУ, при отключении питания информация остаётся). ОЗУ или регистры общего назначения физически находятся в одном адресном пространстве с регистрами специального назначения и имеют общее количество более 256, поэтому адресное пространство разбито на 4 банка. Каждый банк имеет адреса от 00H до 7FH (128 байт) и для полной адресации необходимо 7 разрядное слово. Банки переключаются еще 2 разрядами. Адресация всех трех видов памяти находится в разном адресном пространстве и при изменении счетчика памяти программ не может изменить адреса регистров или EEPROM памяти. Такая архитектура основанная на концепции раздельных шин и областей памяти для данных и команд называется Гарвардской архитектурой. Шина данных и память  данных имеют ширину 8 бит, а программная шина и программная память имеют ширину 14  бит. Такая концепция  обеспечивает простую, но мощную систему команд, разработанную так, что битовые,  байтовые и регистровые операции работают с высокой скоростью и с перекрытием по  времени выборок команд и циклов выполнения. 14- битовая ширина программной памяти обеспечивает выборку 14-битовой команды в один цикл. Двухступенчатый конвейер  обеспечивает одновременную выборку и исполнение команды. Все команды выполняются за один цикл, (200нс при использовании кварцевого резонатора на частоту 20мГц) исключая команды переходов. Данный микроконтроллер имеет всего 35 команд ( инструкций ). Смысл и принципы работы команд будут рассмотрены позже.

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

Контроллер PIC16F873 имеет 8 разрядное арифметическо -логическое устройство (ALU) необходимое для проведения операций вычитания, сложения, операций “И”, “ИЛИ”  и некоторых других инструкций. А также аккумулятор, (в PIC контроллерах обозначается как “W”) 8 разрядный регистр, с которым ALU производит свои действия и иногда помещает результаты операции.

Не малым преимуществом микроконтроллера является встроенный тактовый генератор. Он может работать в одном из четырех режимов LP- низкочастотный резонатор, XT-обычный резонатор, HS- высокочастотный резонатор, RC- внешняя RC цепочка. А так же возможна работа генератора от внешнего тактового сигнала. В режимах LP, XT, HS, кварцевый резонатор подключается к выводам OSC1/CLKIN и OSC2/CLKOUT, согласно схемы изображенной на рис 6. Параметры конденсаторов для керамического и кварцевого резонатора приведены в таблице 3. При подключении внешнего тактового сигнала, логический уровень соответствующий напряжению питания микроконтроллера подают на вход OSC1. В схемах не требующих высокостабильной тактовой частоты возможно использовать RC цепочку, которую подключают в соответствии с рис7. Частота RC генератора зависит от напряжения питания, значения сопротивления R1, емкости C1 и рабочей температуры. Значения, рекомендуемые для R1 должны быть больше 3 ком но меньше 100ком. Конденсатор С1 должен быть больше 20пф. С вывода OSC2 можно снять частоту генератора, деленную на 4 для синхронизации с другими устройствами.

image012.gif                           image014.gif

Рис6.                                                                         Рис7.

 

Табл3.

режим частота OSC1 OSC2

Керамический резонатор

XT 455кГц 68-100пф 68-100пф
2мГц 15-68пф 15-68пф
4мГц 15-68пф 15-68пф
HS 8мГц 10-68пф 10-68пф
16мГц 10-22пф 10-22пф

Кварцевый резонатор

LP 32кГц 33пф 33пф
200кГц 15пф 15пф
XT 200кГц 47-68пф 47-68пф
1мГц 15пф 15пф
4мГц 15пф 15пф
HS 4мГц 15пф 15пф
8мГц 15-33пф 15-33пф
20МГц 15-33пф 15-33пф

Кроме тактового, во всех контроллерах имеется внутренний RC-генератор, использующийся для работы «Сторожевого Пса» (Watch Dog » — WDT), или просто «собаки”. Этот генератор, если он включен при программировании, тактирует специальный счётчик, который должен периодически сбрасываться программой через определенные промежутки времени, не больше заданного. Если в результате зависания или некорректности работы программы счетчик не будет вовремя сброшен, произойдет перезапуск контроллера. Время сброса WDT можно увеличить подключив к нему предделитель.

Предделитель представляет собой 8 разрядный счетчик коэффициент деления, которого можно задать программным способом. Предделитель можно подключать как к WDT так и к TMR0. Для WDT коэффициенты деления будут- 1:1, 1:2, 1:4, 1:8, 1:16, 1:32, 1:64 и 1:128, для TMR0 — 1:2, 1:4, 1:8, 1:16, 1:32, 1:64, 1:128 и 1:256. Текущее состояние предделителя не возможно записать/прочитать программным способом.

Кроме того, PIC16F873 содержит три таймера TMR0, TMR1, TMR2. Таймер 0 (TMR0) представляет собой 8 разрядный таймер/счетчик. Его текущее состояние, возможно, прочитать/записать в любой момент времени. Возможно включить прерывание при переполнении (переходе от состояния FFH к 00H ). Счетчик может быть подключен к внешнему или внутреннему тактовому сигналу, при этом, возможно выбрать момент приращения счетчика от высокого к низкому или от низкого к высокому уровню. Возможность подключения перед счетчиком программируемого предделителя. Внешний тактовый сигнал заводится на ножку T0CKI, которая объединена с RA4.

Таймер 1 (TMR1) представляет собой 16 разрядный таймер/счетчик, состоящий из двух 8- разрядных регистров TMR1H (старший байт) и TMR1L (младший байт). Его текущее состояние возможно, прочитать/записать в любой момент времени. Данный таймер может быть дополнительно использован с модулем CCP. При переполнении (переходе от состояния FFFFH к 0000H ) возможно включить прерывание. Счетчик может быть подключен к внешнему или внутреннему тактовому сигналу, приращение счетчика происходит по каждому переднему фронту сигнала. У таймера TMR0 имеется свой программируемый предделитель, с коэффициентами деления 1:1, 1:2, 1:4, 1:8. Данный таймер может тактироваться от дополнительного встроенного низкочастотного генератора, максимальная частота которого может быть не более 200кГц. Схема включения кварцевого резонатора показана на рис7, а номиналы конденсаторов в таблице 4. Внешний кварц подключается к ножкам T1OSI и T1OSO, которые объединены с RC1, RC0.

image016.gif РИС 7

 

Табл4.

Кварцевый резонатор

LP 32кГц 33пф 33пф
100кГц 15пф 15пф
200кГц 15пф 15пф

Таймер 2 (TMR2) представляет собой 8 разрядный таймер с программируемым предделителем, выходным делителем и 8 разрядным регистром периода (PR2). Его текущее состояние возможно, прочитать/записать в любой момент времени. TMR2 может быть опорным таймером, для модуля ССР, при использовании его в ШИМ (широтно – импульсная модуляция) режиме. Входной тактовый сигнал (Fosc/4) поступает через программируемый предделитель, с коэфициентом деления 1:1, 1:4 или 1:16. TMR2 инкрементирует (увеличивает) значение от 00H до значения содержащегося в регистре периода, затем сбрасывается в 00H. Регистр периода PR2 также доступен для записи/чтения. Сигнал переполнения TMR2 проходит через выходной делитель с переключаемым коэффициентом деления 1:1 или 1:16 и при  необходимости вызывает прерывание.

Модуль (CCP) захват/сравнение/ШИМ содержит 16 разрядный регистр, который может быть использован в качестве 16 разрядного регистра захвата данных, 16 разрядного регистра сравнения или двух 8 разрядных регистров ШИМ. В микроконтроллере PIC16F873 имеются два модуля CCP1 и CCP2. Каждый  модуль ССР состоит из двух 8 разрядных регистров CCPR1L (CCPR2L) –младший байт, и CCPR1H (CCPR2H) –старший байт. Все регистры доступны для записи/чтения. Модули в режиме захвата/сравнения используют дополнительно таймер TMR1, поэтому он не может быть использован одновременно в других приложениях. В режиме ШИМ таймер TMR2, при этом, если будут использоваться оба модуля их частота и фаза будет одинаковая. В режиме захвата можно использовать предделитель, который используется в качестве счетчика событий  с программируемыми коэфициентами деления 1:1, 1:4 или 1:16. В режиме сравнения 16 разрядный регистр CCPR1 сравнивается со значением TMR1. Как только значения в регистрах становятся одинаковые, модуль CCP изменяет состояние вывода CCP1, в этот момент так же может быть установлено прерывание. Период ШИМ определяется значениями в регистре PR2, а скважность старшими 8–ю. битами в регистрах CCPR1L (CCPR2L) и 2- я младшими битами в регистре CCP1CON (CCP2CON). В режиме захвата/сравнение/ШИМ используются ножки CCP1 совмещенные с RC2 и CCP2 совмещенные с RC1.

Модуль ведущего синхронного, последовательного порта (MSSP) может использоваться для связи с периферийными устройствами. MSSP может работать в одном из двух режимов: Последовательный периферийный интерфейс –SPI и интерфейс I2c. В режиме SPI возможен одновременный синхронный прием/передача 8-разрядных данных. Модуль MSSP поддерживает четыре режима SPI с использованием трех выводов совмещенных с портами микроконтроллера. SDI/RC4 — вход последовательных данных, SDO/RC5 –выход последовательных данных, SCK/RC3- тактовый сигнал. Дополнительно может быть задействован четвертый вывод для работы в режиме ведомого –SS/RA5. В режиме I2c модуль MSSP полностью поддерживает все функции ведущих и ведомых устройств, включая поддержку общего вызова, аппаратные прерывания по детектированию битов START и STOP для определения занятости шины I2c в режиме ведущего. В модуле MSSP реализована поддержка стандартного режима 7, 10- разрядной адресации. Для работы с шиной I2c используется два вывода совмещенные с портами SCL/RC3 (сигнал синхронизации) и SDA/RC4 (данные). Выводы SDA и SCL автоматически настраиваются при включении режима I2c.

Универсальный синхронно-асинхронный приемопередатчик USART – это модуль последовательного ввода/вывода, который может работать в полнодуплексном асинхронном режиме для связи с терминалами, персональными компьютерами или синхронном полудуплексном режиме для связи с микросхемами ЦАП, АЦП и т.д. Модуль может работать в трёх режимах: асинхронный- полный дуплекс, ведущий синхронный – полудуплекс, ведомый синхронный – полудуплекс и использует выводы совместно с портами TX/CK/RC6 и RX/DT/RC7. USART поддерживает режим детектирования 9- разрядного адреса для работы в сетевом режиме. Для работы USART в синхронном ведущем и асинхронном режимах используется отдельный 8-разрядный генератор скорости обмена (BRG) в бодах, период которого определяется значением в регистре SPBRG. В синхронном режиме этот бит не используется.

Модуль аналого-цифрового (АЦП) 10 разрядного преобразователя имеет пять каналов, входы которых совмещены с портами ввода/вывода AN0/RA0, AN1/RA1, AN2/RA2, AN3/RA3, AN4/RA5. Физически в микроконтроллере преобразователь АЦП  один, но он может коммутироваться к разным входам. Модуль АЦП преобразует входное напряжение методом последовательного приближения, при этом возможно использовать опорное напряжение с выводов совмещенных с портами Vref-/RA2, Vref+/RA3 или выводов подключенных к напряжению питания Vss и Vdd. Модуль может быть тактирован частотой кварцевого резонатора  Fosc/2, Fosc/8, Fosc/32 или отдельным внутренним RC генератором. При использовании RC генератора ЦАП может преобразовывать напряжение в режиме сна. При преобразовании полных 10 разрядов этот режим часто используют для уменьшения наводок на вход аналогового канала. Данные преобразования сохраняются в регистрах ADRESH (старший байт) и ADRESL (младший байт). Так как данные 10 разрядные имеется возможность выравнивать данные влево в сторону старшего байта, или вправо в сторону младшего байта. Среднее время преобразования АЦП 30 мкс, включая время выборки. По окончании преобразования можно сгенерировать прерывание.

Микроконтроллер PIC16F873 имеет устройства повышающие надёжность системы и возможность защиты кода программы. Схема POR (сброс по включению питания) удерживает микроконтроллер в состоянии сброса, пока напряжение VDD не достигнет требуемого уровня (от 1.2В до 1.7В). Для включения схемы POR необходимо соединить вывод -MCLR с VDD через резистор, не требуя внешней RC цепочки, обычно используемой для сброса. Схема PWRT представляет собой таймер включения питания который обеспечивает задержку в 72мс по сигналу схемы сброса POR. Таймер включения питания работает от внутреннего RC генератора и удерживает микроконтроллер в состоянии сброса по активному сигналу от PWRT. Задержка PWRT позволяет достигнуть напряжению VDD номинального значения. Таймер запуска генератора (OST) обеспечивает задержку в 1024 такта генератора (вход OSC1) после окончания задержки от PWRT (если она включена). Это гарантирует, что частота кварцевого/керамического резонатора стабилизировалась. Задержка OST включается только в режимах HS, XT и LP тактового генератора после сброса POR или выхода микроконтроллера из режима SLEEP. Схема ВОР сбрасывает микроконтроллер если напряжение VDD опускается ниже 4.0В на время больше TBOR. Если длительность снижения напряжения питания меньше TBOR, сброс микроконтроллера не произойдет.

Биты конфигурации Табл5. микроконтроллера располагаются по адресу 2007H и используются для указания режима его работы. Программируются биты конфигурации при помощи программатора.

 

V используется для
программирования микроконтроллера

бит 6: BODEN: Бит разрешения сброса по снижению напряжения питания
1 = разрешен сброс BOR
0 = запрещен сброс BOR
бит 3:  -PWRTE: Бит разрешения работы таймера включения питания
1 = PWRT выключен
0 = PWRT включен
бит 2: WDTE: Бит разрешения работы сторожевого таймера
1 = WDT включен
0 = WDT выключен
биты 1-0: FOSC1:FOSC0: Биты выбора режима тактового генератора
11 = RC генератор
10 = HS генератор
01 = XT генератор
00 = LP генератор

В заключение данного раздела хочется сказать, что нет необходимости все это запоминать сразу, все встанет на свои места по мере практического освоения микроконтроллера. Для более подробного изучения можно скачать англоязычную документацию DS30292C доступная с сайта [5]. А также некоторые переводы документов на русский язык, в том числе и  для PIC16F873 на сайте [6]. При необходимости всегда можно задать вопрос на русскоязычной конференции [7] посвященной изделиям фирмы микрочип.

 

На этом этапе мы рассмотрим среду разработки программ MPLAB для микроконтроллеров PICmicro фирмы Microchip, разрешённую для бесплатного коммерческого использования. Данная программа позволяет писать, отлаживать и оптимизировать программы для Ваших разработок. MPLAB включает в себя текстовый редактор, симулятор (виртуальный отладчик), менеджер проектов. Данная среда обеспечивает поддержку разнообразных отладочных средств фирмы Microchip (PICSTART Plus, PRO MATE II, ICD2 и т.д.) Среда разработки MPLAB IDE позволяет: ассемблировать, компилировать исходный текст; отлаживать логику работы, наблюдая с помощью симулятора или, в реальном времени, с использованием эмуляторов и внутрисхемных отладчиков; просматривать переменные в окнах просмотра; программировать кристаллы с помощью программаторов PICSTART Plus или PRO MATE II и многое другое. С ней неплохо интегрируются и программные продукты от других фирм производителей. На момент написания статьи доступна версия MPLAB IDE V7.11 с сайта [8]. Объем архива 29,895мб поэтому закачивать файл лучше всего специально предназначенными качалками например типа ReGet или ему подобными, они позволяют в случае обрыва связи продолжить закачку от места обрыва. Когда файл закачан его необходимо разархивировать программой WinZip или WinRar в отдельную папку например MPLAB IDE. Программу устанавливают запустив setup.

Изучение MPLAB начнём с создания первого проекта, присвоим ему название- Micro. Создаём папку на диске C: (например C:/Micro) в которую будем помещать все файлы связанные с разрабатываемым проектом. Запускаем MPLAB IDE v7.11 нажав на ярлык установленный программой на рабочем столе. После запуска MPLAB появляется заставка, а затем окно с главным меню. А также два дополнительных окна Untitled Workspace и Output.  Нажимаем в главном меню закладку Fail  затем  New, откроется окно редактора программ Untitled. Сохраним даное окно под именем названия проекта, для этого в главном меню выберем закладку Fail  затем  Save As, в появившемся окне выберем нашу папку C:/Micro , в Имя файла напишем Micro.asm , а затем сохранить. В главном меню выбираем пункт Project  далее Project Wizard появится окно с приветствием помощника по созданию проекта. Нажимаем кнопку Далее (Next) и в следующем окне выбираем тип микроконтроллера Device. В данном случае PIC16F873 и кнопку Далее (Next). Появляетсяокно Select a language toolsuite. В окне Active Toolsuite: должно быть выбрано Microchip MPASM Toolsuite. В окне Toolsuite Contents будут указаны имена ассемблера, линкера и библиотеки, при установке курсора на данные имена в окне Location будет появляться путь размещения файлов, при необходимости их можно изменить нажав кнопку Browse. После этого нажимаем кнопку Далее (Next), появляется окно установки имени файла  и пути размещения проекта. В нашем случае Micro и C:\Micro.  Нажимаем кнопку Далее в появившемся окне Add any existing files to your project  слева выбираем папку Micro и файл Micro.asm а затем жмем кнопку Add. В появившемся справа окне пути ставим галочку (в квадратике) и нажимаем кнопку Далее. Появится окно Project Parameters, если выбранные параметры Вас устраивают то нажимают Готово. Окно Untitled Workspace изменит своё название на Micro.mcp. Так как у нас не имеется дополнительной отладочной платы (MPLAB ICD-2) поэтому включим программный симулятор (отладчик). Нажимаем в главном меню закладку Debugger потом Select Tool  и MPLAB SIM.  В главном меню появятся дополнительные кнопки симулятора. Для того чтобы симулятор правильно подсчитывал временные задержки необходимо установить частоту кварцевого резонатора который реально будет у нас стоять в проекте. Установим кварц 20мГц максимально возможная паспортная частота для данного контроллера (реально микроконтроллеры иногда работают с кварцами 30-60мГц) при этом каждый шаг программы будет выполняться за 200нс. Нажмем в главном меню закладку Debugger потом Setting  и в появившемся окне Simulator Setting выберем закладку Osc/Trace в окне напишем 20 и установим точку на MHz, а затем OK. Как уже описывалось ранее каждый процессор имеет свои биты конфигурации которые определяют режимы работы процессора, их необходимо установить. Нажимаем в главном меню закладку Configure потом Configuration Bits. В появившемся окне устанавливаем тип генератора Oscillator – HS , для начала отключим Watchdog Timer– Off , задержку по включению питания желательно включать всегда Power Up Timer –On , детектор по снижению питания без лишней необходимости тоже лучше не отключать Brown Out Detect – On , так как мы пока не будем пользоваться внутрисхемным программированием (программирование микроконтроллера в собранном устройстве и запаянном микроконтроллере позволяет модифицировать устройства непосредственно перед отправкой клиенту), поэтому данный режим отключим Low Voltage Program –Disabled. Остальные три строки относятся к разрешению записи памяти программ и защиты адресного пространства от копирования, их можно оставить без изменения. На этом предварительная настройка проекта завершена. На время закроем проект. Для этого в главном меню выберем закладку File далее Exit. На вопрос Do you to save the workspace before closing ответим Да. Отладку программы рассмотрим позже. Подробнее про MPLAB IDE версии 4.00 можно почитать в русифицированном документе основанном на переводе DS51025D с сайта микрочип [9].

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

Многие программисты говорят научился мигать светодиодом, значит освоил микроконтроллер, далее идет этап совершенствования методов и навыков. Эта задача не имеет завершения, так как постоянно выпускаются все новые и новые микроконтроллеры с новыми модулями. Схема первого проекта представлена на Рис8. Как рекомендует фирма микрочип в качестве ZQ1 необходимо использовать кварц с параллельным резонансом. С1-С3 желательно чтобы были керамическими и располагались как можно ближе к ножкам микроконтроллера.

image018.gif РИС 8

Как уже упоминалось микроконтроллер PIC16F873 содержит 35 инструкций, полный список приведен в табл.6. Команды разделены на три группы: байт ориентированные, бит ориентированные, команды управления и операций с константами.

 

Табл.6

Мнемоника команды

Описание

Циклов Изм. флаги
Байт ориентированные команды
ADDWF         f,d Сложение W и f 1 C,DC,Z
ANDWF         f,d Побитное ‘И’ W и f 1 z
CLRF             f Очистить f 1 z
CLRW Очистить W 1 z
COMF            f,d Инвертировать f 1 z
DECF              f,d Вычесть 1 из f 1 z
DECFSZ        f,d Вычесть 1 из f и пропустить если 0 1(2)  
INCF               f,d Прибавить 1 Kf 1 z
INCFSZ         f,d Прибавить 1 к f и пропустить если 0 1(2)  
IORWF          f,d Побитное ‘ИЛИ’ W и f 1 z
MOVF            f,d Переслать f 1 z
MOVWF        f Переслать W в f 1  
NOP Нет операции 1  
RLF                f,d Циклический сдвиг f влево через перенос 1 с
RRF                f,d Циклический сдвиг f вправо через перенос 1 с
SUBWF         f,d Вычесть W из f 1 C.DC.Z
SWAPF          f,d Поменять местами полубайты в регистре f 1  
XORWF        f,d Побитное ‘исключающее ИЛИ1 W и f 1 z
Бит ориентированные команды
BCF                 f,b Очистить бит b в регистре f 1  
BSF                 f,b Установить бит b в регистре f 1  
BTFSC           f,b Проверить  бит b  в  регистре f,  пропустить если 0 1(2)  
BTFSS            f,b Проверить бит b  в  регистре f,  пропустить если 1 1(2)  
Команды управления и операций с константами
ADDLW         k Сложить константу с W 1 C,DC,Z
ANDLW         k Побитное ‘И’ константы и W 1 Z
CALL             k Вызов подпрограммы 2  
CLRWDT Очистить WDT 1 -TO,-PD
GOTO             k Безусловный переход 2  
IORLW          k Побитное ‘ИЛИ’ константы и W 1 Z
MOVLW        k Переслать константу в W 1  
RETFIE Возврат из  подпрограммы  с  разрешением прерываний 2  
RETLW          k Возврат    из    подпрограммы    с    загрузкой константы в W 2  
RETURN Возврат из подпрограммы 2  
SLEEP Перейти в режим SLEEP 1 -TO.-PD
SUBLW          k Вычесть W из константы 1 C,DC,Z
XORLW         k Побитное ‘исключающее ИЛИ’ константы и W 1 Z

 

В таблице w -означает рабочий регистр, в некоторых микроконтроллерах данный регистр называют аккумулятором. Например при выполнении команды над регистром w и константой результат будет помещен в w (аккумулятор). fозначает адрес регистра. dуказатель адресата результата операции, при d=0 –результат сохраняется в регистре w, при d=1 –результат сохраняется в регистре f. В кодах программы вместо d иногда напрямую указывают регистр f или w. bномер бита в 8 –разрядном регистре. kконстанта, под которой понимается метка или 8 –разрядные данные. Cфлаг признака переноса. DCфлаг признака вспомогательного переноса из младшего полубайта в старший. Zфлаг признака нулевого результата, выполненной арифметической или логической операции.  TO=1 – флаг выполнения команды clrwdt, sleep или включено питание, TO=0 – сработал wdt .    –PD=1 — флаг выполнения команды clrwdt или включено питание, PD=0 – выполнена команда sleep .   

Подробнее о действии команд на микроконтроллер будем рассматривать при практическом программировании.

Микроконтроллер PIC16F873 содержит регистры специального назначения которые физически расположены в 4 банках, некоторые регистры повторяются в каждом банке. Табл7. С помощью регистров специального назначения выполняется управление функциями ядра и периферийными модулями микроконтроллера. Рассмотрим основные из них.

 

 

Табл7.

Адрес Имя Регист. Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит1 Бит0
Банк 0
00h INDF Обращение к регистру, адрес которого записан в FSR (не физический регистр)
01h TMRO Регистр таймера 0
02h PCL Младше биты счетчика команд PC
03h STATUS IRP RP1 RPO -ТО -PD Z DC С
04h FSR Регистр адреса при косвенной адресации
05h PORTA Зап. в вых. защелку PORTA чтение сост. выв. PORTA
06h PORTB Запись в выходную защелку PORTB, чтение состояния выводов PORTB
07h PORTC Запись в выходную защелку PORTC, чтение состояния выводов PORTC
08h PORTD Запись в выходную защелку PORTD, чтение состояния выводов PORTD
09h PORTE RE2 RE1 REO
0Ah PCLATH .- Старшие биты счетчика команд PC
0Bh INTCON GIE PEIE TOIE INTE RBIE TOIF INTF RBIF
0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
0Dh PIR2   — EEIF BCLIF CCP2IF
0Eh TMR1L Младший байт 16-разрядного таймера 1
0Fh TMR1H Старший байт 16-разрядного таймера 1
10h T1CON  —  — T1CKPS1 T1CKPSO T1OSCEN T1SYNC TMR1CS TMR1ON
11h TMR2 Регистр таймера 2
12h T2CON TOUTPS3 TOUTPS2 TOUTPS1 TOUTPSO TMR2ON T2CKPS1 T2CKPSO
13h SSPBUF Буфер приемника MSSP / регистр передатчика
14h SSPCON WCOL SSPOV SSPEN СКР SSPM3 SSPM2 SSPM1 SSPMO
15h CCPR1L Младший байт захвата/сравнения/ШИМ ССР1
16h CCPR1H Старший байт захвата/сравнения/ШИМ ССР1
17h CCP1CON ССР1Х CCP1Y ССР1МЗ ССР1М2 ССР1М1 ССР1МО
18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
19h TXREG Регистр данных передатчика USART
1Ah RCREG Регистр данных приемника USART
1Bh CCPR2L Младший байт захвата/сравнения/ШИМ ССР2
1Ch CCPR2H Старший байт захвата/сравнения/ШИМ ССР2
1Dh CCP2CON ССР2Х CCP2Y |ССР2МЗ | ССР2М2|ССР2М1 ССР2МО
1Eh ADRESH Старший байт результат преобразования АЦП
1Fh ADCONO ADCS1 ADCSO CHS2 CHS1 CHSO GO/-DJNE   — ADON
Банк 1
80h INDF Обращение к регистру, адрес которого записан в FSR (не физический регистр)
81h OPTION_REG -RBPU INTEDG T0CS TOSE PSA PS2 PS1 PSO
82h PCL Младше биты счетчика команд PC
83h STATUS IRP RP1 RPO -ТО -PD Z DC C
84h FSR Регистр адреса при косвенной адресации
85h TRISA  —  Направление выводов PORTA
86h TRISB Направление выводов PORTB
87h TRISC Направление выводов PORTC
88h TRISD Направление выводов PORTD
89h TRISE IBF OBF IBOV PSPMODE  — Направление выводов PORTE
8Ah PCLATH   —  —  — Старшие биты счетчика команд PC
8Bh INTCON GIE PEIE TOIE INTE RBIE TOIF INTF RBIF
8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
8Dh PIE2  —   — EEIE BCLIE CCP2IE
8Eh PCON -POR -BOR
91h SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN
92h PR2 Регистр периода таймера 2
93h SSPADD Регистр адреса / Регистр генератора скорости обмена
94h SSPSTAT SMP СКЕ D/-A Р S R/-W UA BF
98h TXSTA CSRC ТХ9 TXEN SYNC BRGH TRMT TX9D
99h SPBRG Регистр генератора скорости USART
9Eh ADRESL Младший байт результат преобразования АЦП
9Fh ADCON1 ADFM PCFG3 PCFG2 PCFG1 PCFG0
Банк 2
100h INDF Обращение к регистру, адрес которого записан вFSR (не физический регистр)
101h TMRO Регистр таймера 0
102h PCL Младше биты счетчика команд PC
103h STATUS IRP RP1 RPO -ТО -PD Z DC С
104h FSR Регистр адреса при косвенной адресации
106h PORTB Запись в выходную защелку PORTB, чтение состояния выводов PORTB
10Ah PCLATH Старшие биты счетчика команд PC
10Bh INTCON GIE PEIE TOIE INTE RBIE TOIF INTF RBIF
10Ch EEDATA Регистр данных, младший байт
10Dh EEADR Регистр адреса, младший байт
10Eh EEDATH Регистр данных, старший байт
10Fh EEADRH  — Регистр адреса, старший байт
Банк 3
180h INDF Обращение к регистру, адрес которого записан вFSR (не физический регистр)
181h OPTION_REG -RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
182h PCL Младше биты счетчика команд PC
183h STATUS IRP RP1 RPO -ТО -PD Z DC С
184h FSR Регистр адреса при косвенной адресации
186h TRISB Направление выводов PORTB
18Ah PCLATH  —  —  — Старшие биты счетчика команд PC
18Bh INTCON GIE PEIE TOIE INTE RBIE TOIF INTF RBIF
18Ch EECON1 EEPGD WREER WREN WR RD
18Dh EECON2 Регистр управления 2 (физически не реализован)

 

Регистр STATUS содержит флаги состояния АЛУ, флаги причины сброса микроконтроллера и биты управления банками памяти данных. Табл 8. Регистр INTCON содержит биты разрешения и флаги прерывания TMR0, изменение уровня сигнала на входах PORTB и внешнего источника прерывания RB0/INT. Регистр OPTION_REG содержит биты управления предделителем TMR0/WDT, активным фронтом внешнего прерывания RB0/INT и подтягивающими резисторами на входах PORTB. Регистр PIE1 содержит биты разрешения периферийных прерываний. Регистр PIR1 содержит флаги прерываний периферийных модулей. Регистр T1CON содержит биты управления таймером TMR1. Регистр T2CON содержит биты управления таймером TMR2. Регистр TRIS(A,B,C) содержит биты управления направлением портов ввода-вывода (1-вход, 0-выход). Полный список регистров относящихся к интересующему вас микроконтроллеру можно посмотреть открыв блокнотом файл. Для PIC16F873 это будет C:\Program Files\MPLAB IDE\MCHIP_Tools/ P16F873A.INC .

 

Табл8.

Имя бита № бита Назначение
Регистр STATUS
IRP 7 Бит выбора банка при косвенной адресации
RP1 6 Биты выбора банка при непосредственной адресации
RP0 5
NOT_TO 4 Флаг переполнения сторожевого таймера
1-после POR или выполнения команды clrwdt, sleep
0-после переполнения WDT
NOT_PD 3 Флаг включения питания
1-после POR или выполнения команды clrwdt
0-после выполнения команды sleep
Z 2 Флаг нулевого результата
1-нулевой результат после выполнения арифметической или логической операции
0-не нулевой результат после выполнения арифметической или логической операции
DC 1 Флаг десятичного переноса или заёма
1-был перенос из младшего полубайта
0-не было переноса из младшего полубайта
C 0 Флаг переноса или заёма
1-был перенос из старшего бита
0-не было переноса из старшего бита
Регистр INTCON
GIE 7 Глобальное разрешение прерывания
1-разрешены все немаскированные прерывания
0-все прерывания запрещены
PEIE 6 Разрешение прерывания от периферийных модулей
1-разрешены все немаскированные прерывания от периферийных модулей
0-прерывания от периферийных модулей запрещены
T0IE 5 Разрешение прерывания по переполнению TMR0
1-прерывание разрешено
0-прерывание запрещено
INTE 4 Разрешение внешнего прерывания INT
1-прерывание разрешено
0-прерывание запрещено
RBIE 3 Разрешение прерывания по изменению сигнала на входах RB7-RB4
1-прерывание разрешено
0-прерывание запрещено
T0IF 2 Флаг прерывания по переполнению TMR0
1-произошло переполнение TMR0
0-переполнение TMR0 не было
INTF 1 Флаг внешнего прерывания INT
1-выполнено условие внешнего прерывания на выводе RB0/INT
0-внешнего прерывания не было
RBIF 0 Флаг прерывания по изменению уровня сигнала на входах RB7-RB4
1-произошло изменение уровня сигнала на одном из входов RB7-RB4
0-не было изменения уровня сигнала на одном из входов RB7-RB4
Регистр OPTION_REG
NOT_RBPU 7 Включение внутренних подтягивающих резисторов на входах PORTB
1-подтягивающие резисторы отключены
0-подтягивающие резисторы включены
INTEDG 6 Выбор активного фронта сигнала на входе внешнего прерывания INT
1-прерывание по переднему фронту сигнала
0-прерывание по заднему фронту сигнала
T0CS 5 Выбор тактового сигнала для TMR0
1-внешний тактовый сигнал с вывода RA4/T0CKI
0-внутренний тактовый сигнал CLKOUT
T0SE 4 Выбор фролнта приращения счетчика TMR0 при внешнем тактовом сигнале
1- по спаду на выводе RA4/T0CKI
0- по фронту на выводе RA4/T0CKI
PSA 3 Выбор включения предделителя
1-предделитель включен перед WDT
0-предделитель включен перед TMR0
PS2 2 Установка коэффициента деления предделителя
значение        для TMR0        для WDT
000                  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
PS1 1
PS0 0
Регистр PIE1
1-прерывание разрешено,  0-прерывание запрещено
ADIE 6 Разрешение прерывания по окончанию преобразования  АЦП
RCIE 5 Разрешение прерывания от приёмника USART
TXIE 4 Разрешение прерывания от передатчика USART
SSPIE 3 Разрешение прерывания от модуля синхронного последовательного
порта
CCP1IE 2 Разрешение прерывания от модуля CCP1
TMR2IE 1 Разрешение прерывания по переполнению TMR2
TMR1IE 0 Разрешение прерывания по переполнению TMR1
Регистр PIR1
ADIF 6 Флаг прерывания от модуля АЦП
1-преобразование АЦП завершено
0-преобразование АЦП не завершено
RCIF 5 Флаг прерывания от приёмника USART
1-буфер приёмника USART полон
0-буфер приёмника USART пуст
TXIF 4 Флаг прерывания от передатчика USART
1-буфер передатчика USART  пуст
0-буфер передатчика USART полон
SSPIF 3 Флаг прерывания от модуля MSSP
1-выполнено условие возникновения прерывания
0-условие возникновения прерывания не выполнено
CCP1IF 2 Флаг прерывания от модуля CCP1
Режим захвата: 1-выполнен захват значения TMR1, 0-захвата не происходило
Режим сравнения: 1-значение TMR1 достигло указанного в регистрах CCPR1H, CCPR1L
0-значение TMR1 не достигло указанного в регистрах CCPR1H, CCPR1L
TMR2IF 1 Флаг прерывания по переполнению TMR2
1-произошло переполнение TMR2
0-переполнение TMR2 не было
TMR1IF 0 Флаг прерывания по переполнению TMR1
1-произошло переполнение TMR1
0-переполнение TMR1 не было
Регистр T1CON
T1CKPS1 5 выбор коэффициента деления предделителя TMR1:
11-1:8  ; 10-1:4   ; 01-1:2  ; 00-1:1
T1CKPS0 4
T1OSCEN 3 Включение тактового генератора TMR1
0- генератор включен,  1-генератор выключен
 -T1SYNC 2 Синхронизация внешнего тактового сигнала
1-не синхронизировать, 0 -синхронизировать
TMR1CS 1 Выбор источника тактового сигнала
1-внешний источник с вывода RC0,  0-внутренний источник Fosc/4
TMR1ON 0 Включение модуля TMR1:  1-включен; 0-выключен
Регистр T2CON
TOUTPS3 6 выбор коэффициента деления выходного делителя TMR2:
0000-1:1 ; 0001- 1:2  ; 0010- 1:3 ; 0011- 1:4;     и т.д.     1111- 1:16
TOUTPS2 5
TOUTPS1 4
TOUTPS0 3
TMR2ON 2 Включение модуля TMR2:  1-включен; 0-выключен
T2CKPS1 1 выбор коэффициента деления  педделителя TMR2:
00-1:1  ; 01-1:4  ; 1х-1:16
T2CKPS0 0

 

 

На следующем этапе рассмотрим редактор программ MPASM входящий в состав интегрированной среды разработки программ MPLAB, напишем первую программу и отладим.

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

Запустим MPLAB и откроем файл сохраненного проекта. Для этого в главном меню выберем закладку File далее Recent Workspaces и выберем наш файл C:\Micro\Micro. В открывшемся окне редактора Micro.asm мы будем писать программу. Разобьём условно редактор на 4 вертикальные колонки. В первой (левой) пишут метки программы, во второй мнемоника команды, в третьей операнды команды и в четвёртой если необходимо комментарии. Символом- ; отделяют команды программы от комментариев. Подробно о всех командах ассемблера можно узнать из Руководства пользователя MPASM [10]. Кроме комментариев весь текст должен быть написан латинским алфавитом. Все колонки должны быть отделены друг от друга одним и более пробелом, удобно пользоваться табуляцией. Рассмотрим нашу программу с подробными комментариями.

include

Предупреждения Message[302] указывают на возможно неправильную установку банков. Проверить это необходимо вручную воспользовавшись таблицей 7. Данное предупреждение можно отключить вставив директиву errorlevel    -302    ;не выводить ошибки переключения банков, например после директивы __CONFIG .  Если компиляция будет неуспешной то в окне Output будут строки с комментариями ошибок. Подробно про типы ошибок можно посмотреть в [10]. Ошибки необходимо устранить иначе отладка будет не возможна. Для детальной отладки программы необходимо запустить симулятор. Для начала сбрасываем процессор. В главном меню выбираем закладку Debugger далееReset и Processor Reset. Указатель выполняемой строки (зеленая стрелка) установится на начало программы. Для того чтобы мы знали, что творится в регистрах процессора необходимо открыть окно с регистрами процессора. Для этого выбираем в главном меню закладку View далее Special Function Registers. Так же можно открыть окно File Registers. Для отслеживания времени выполнения программы может быть полезен счетчик. Выбираем в главном меню закладку Debugger далее StopWatch. Все эти окна размещаем на экране, перетащив их в нужное место при помощи мышки. Для пошаговой отладки нажимаем кнопку F7  или Debugger далее Step Into. Для быстрого прохода подпрограммы служит кнопка F8 или Debugger далее Step Over. Для быстрого прохода программы в режиме просмотра регистров служит кнопка Animate. Если необходима ещё большая скорость то можно воспользоваться кнопками Run (F9) и Halt (F5).  Пиктограммы этих кнопок имеются в главном меню справа. Для остановки отладчика в нужном месте программы, в окне редактора необходимо щелкнуть два раза левой кнопкой мышки по команде. При этом в левом поле редактора  появится красный кружек с буквой B (Breac). Для удаления точки останова необходимо повторить процедуру щелкнув два раза мышкой. При пошаговой отладке автор рекомендует обратить внимание на окно Special Function Registers и отметить для себя, какая команда какие регистры изменяет. Когда программа будет полностью отлажена, необходимо повторить процедуру компиляции. Подробно о всех возможностях симулятора можно узнать прочитав [10].

На следующем этапе запрограммируем микроконтроллер ранее изготовленным программатором. Для этого запустим программу ic-prog. В правом верхнем окне выберем микроконтроллер PIC16F873. Загрузим только что отлаженную программу. Для этого в главном меню выберем закладку Файл далее Открыть файл. В появившемся окне найдем файл Micro.HEX и нажмем кнопку Открыть. В программатор вставим микроконтроллер SA1 установим в режим PIC и включим SA2. В главном меню выберем закладку Команды далее Программировать всё. Дождавшись окончания программирования выключаем SA2 и вынимаем микросхему из панельки. Устанавливаем микроконтроллер в устройство и получаем удовлетворение от первой программы.

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

Следует заметить что с некоторыми компьютерами программа ic-prog работает только в среде Windows –98.

Ссылки:

  1. http://sat.riga.lv/jonis -Официальный сайт разработчика программатора JonisProg.
  2. http://www.ic-prog.com/index1.htm -Официальная страница программной оболочки IC-Prog.
  3. http://www.ic-prog.com/icprog_driver.zip -Прямая ссылка для драйвера.
  4. http://www.ic-prog.com/icprog105D.zip — Прямая ссылка для icprog105D.
  5. http://www.microchip.com/ -Англоязычный сайт технической поддержки изделий фирмы MicroChip
  6. http://www.microchip.ru/ -Русский сайт технической поддержки изделий фирмы MicroChip
  7. http://www.microchip.ru/phorum/list.php?f=2 -Форум для тех кому нужна помощь в освоении PIC контроллеров.
  8. http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB711.zip -адресс для закачки интегрированной среды разработки программ MPLAB IDE V7.11 -29,895мб.
  9. http://www.microchip.ru/lit/?mid=1×0 — Руководство пользователя MPLAB IDE -2,838 мб.
  10. http://www.microchip.ru/lit/?mid=1×0 — Руководство пользователя MPASM-921 кб.
  11. А. Долгий. Разработка и отладка устройств на МК. РАДИО №5, 2001г, стр 17
Реклама