Устройства управления роботами, схемотехника и программирование (М. Предко, 2004). Устройства управления роботами, схемотехника и программирование. Устройствауправления роботамисхемотехника и микроконтроллеров picmicro
Скачать 6.79 Mb.
|
FOsc/4 Сброс Компаратор TMR2 TOUTPSO Рис. 3.38. Структурная схема Микроконтроллеры PICmicro 107 синхроимпульсами. TMR2 также может работать совместно с широтно-импульс- модулятором (ШИМ, Pulse Width Modulation - PWM). Текущее значение счетчика таймера TMR2 постоянно сравнивается с величи- ной, записанной в регистре В тот момент, когда значения совпадут, про- изойдет сброс таймера TMR2. Этот сигнал будет подан на модуль ССР. Если используется в режиме обычного таймера, в момент его перепол- нения происходит то же самое, что и с TMRO: увеличивается на 1 счетчик делите- ля (postscaler - сигнал о переполнении которого, в свою очередь, является источником прерывания. Для управления работой TMR2 служит регистр T2CON (табл. 3.15), доступный как для чтения, так и для записи. При выполнении операции записи обнуляются оба делителя и постскалер). Таблица Регистр Номер бита Имя Назначение 7 Не используется, читается О Выбор коэффициента деления 15:1; 1 — работа таймера разрешена; О таймера TMR2 запрещена 1-0 Выбор коэффициента деления прескалера: 4:1; 1:1 Совместно с TMR2 не используется синхронизатор, так как источником так- товых импульсов для него могут являться только командные циклы процессора. Поэтому он тактируется моментом начала каждого командного цикла (а не каж- дым вторым командным циклом, как это было с предыдущими таймерами). TMR2 срабатывает либо при переполнении, либо при достижении заданного в регистре PR2 значения. Формула для вычисления задержки: At = x ( P R 2 + l ) x 4 / F , где F - как и раньше, частота тактирования микроконтроллера в герцах, а - коэффициент деления прескалера. При нулевом значении PR2 = х 256) х 4 / F. Обычно для формирования повторяющихся задержек я использую нулевое начальное значение счетчика таймера, а длительность задержки, задаваемую с помощью вычисляю по формуле At = х [PR2 + 1 | х 4 / (F х 108 Устройства управления роботами Для разрешения прерываний от таймера TMR2 необходимо установить бит регистра При срабатывании таймера устанавливается флаг регистра PIR1. Благодаря своей высокой точности таймер TMR2 обычно исполь- зуется при реализации асинхронных протоколов связи или для широтно-импульс- ной модуляции (ШИМ) сигнала. Во многих случаях может пригодиться еще одно устройство, имеющееся в мик- роконтроллерах PIC16F627 и в некоторых других - это блок захвата/сравнения/ ШИМ - СРР). Некоторые МК имеют два таких блока, поэтому в PIC16F627 блок СРР называется СРР1, хотя и является единственным. Для управления модулем СРР1 предназначен регистр CPP1CON (табл. 3.16). Таблица Регистр Номер бита Имя 7-6 Не используется, читается О 5-4 Два младшие бита числа CEPST, загружаемого в компаратор и определяющего ширину импульса при модуляции (восемь старших разрядов находятся в регистре 3-0 : Режим работы модуля СРР: 1 /хх - режим ШИМ; - режим — триггер специального - режим сравнения — программное — режим сравнения — при срабатывании компаратора выход СРР принимает значение 0; 1000 — режим сравнения — при срабатывании компаратора выход СРР принимает значение 1; — выборка значения по положительному фронту каждого 16-го импульса; — выборка значения по положительному фронту каждого 4-го импульса; 0101 - выборка значения по положительному фронту каждого импульса; — выборка значения по отрицательному фронту каждого импульса; ООхх — модуль СРР выключен В режиме триггера специального события в момент срабатывания модуля есть в момент совпадения значения таймера и загруженной в регистры CCPR1L) формируется запрос на прерывание и сбрасывается таймер TMR1. Если в микроконтроллере имеется АЦП, то в этот же момент на него сигнал — перев. ** В режиме программного прерывания в момент срабатывания модуля СРР 1 состояние СРР 1 не изменяется. — перев. Когда модуль СРР находится в режиме захвата (capture), то в определенные моменты времени значение, хранящееся в счетчике таймера TMR1, переписывается в регистры CCPR1H:CCPR1L модуля СРР. Это может происходить по переднему или заднему фронту импульсов, подаваемых на вход модуля СРР, а также по переднему фронту каждого четвертого или каждого шестнадцатого импульса. Режим задается в младших четырех битах регистра Струк- турная схема модуля СРР в режиме захвата показана на рис. 3.39. Микроконтроллеры PICmicro 109 3.39. схема модуля СРР в режиме захвата Перед тем как разрешать работу модуля СРР в режиме надо разрешить работу таймера TMR1 (обычно в этом случае используется внутреннее тактиро- вание таймера). Схема, срабатывающая по фронту входных импульсов (детектор фронта), на рис. 3.39 представляет собой мультиплексор (по числу режимов). На его входы подаются сигналы от предварительного делителя. Выбор нужного входа определяется младшими битами регистра CPP1CON. Сиг- нал с выбранного входа управляет срабатыванием регистров CCPR1H:CCPR1L, а также может формировать запрос на прерывание от модуля СРР. В режиме захвата таймер TMR1 постоянно включен. По приходу на вход СРР1 активного фронта импульса (определяемого младшими битами регистра CPP1CON) происходит захват (загрузка значения из таймера в регистры модуля СРР1) и формируется запрос на прерывание. Процедура обработки прерывания должна сохранить захваченное значение счетчика таймера, так как оно будет по- теряно в момент следующего срабатывания модуля Режим захвата часто используют для реализации функций, повторяющихся че- рез заданные промежутки времени, или для формирования импульсов заданной ширины при широтно-импульсной модуляции. В последнем случае тактирование таймера TMR1 должно производиться от генератора достаточно высокой частоты, чтобы модуль СРР1 мог регулировать ширину импульсов с высокой точностью. Когда модуль СРР1 работает в режиме то значение счетчика тай- мера TMR1 сравнивается с величиной, предварительно загруженной в регистры В момент совпадения значений изменяется состояние вывода СРР1, который теперь работает в качестве выходного. Структурная схема модуля в режиме сравнения показана на рис. 3.40. Этот режим обычно используют для того, чтобы переключать состояние какого-либо периферийного устройства с заданной задержкой во времени. Из трех возможных режимов работы модуля СРР1, по мнению автора, наиболее полезен для разработчика режим широтно-импульсной модуляции (ШИМ, Pulse Modulation - Структурная схема модуля СРР1 в режиме ШИМ по- казана на рис. 3.41. Этот режим представляет собой своего рода комбинацию В режиме сравнения TMR1 должен работать в режиме таймера или синхронизированного счетчика; в режиме асинхронного счетчика операция сравнения не работает. - Прим. 110 Устройства управления роботами Рис. 3.40. Структурная схема модуля в режиме сравнения Рис. схема модуля в обычного режима работы таймера TMR2 и режима сравнения. Обычный режим по- зволяет осуществлять отсчет времени, а благодаря режиму сравнения формируется запрос на прерывание по истечении заданного времени. В режиме ШИМ содержимое 8-разрядного счетчика таймера TMR2 сравнива- ется с содержимым регистра PR2. В момент совпадения обоих значений таймер сбрасывается, а на выводе устанавливается сигнал высокого уровня - начи- нается очередной период широтно-модулированного сигнала. В это время таймер TMR2 работает в 10-разрядном режиме - дополнительные два разряда обеспечи- вает с коэффициентом деления 1, 4 или 16 (относительно частоты системного тактового генератора). Это десятибитное значение сравнивается со значением, записанным в 8-разрядный регистр CCPR1L (младшие два разряда - в регистре CCP1CON). В момент совпадения обоих значений на выходе ССР1 устанавливается сигнал низкого уровня - начинается вторая фаза периода ши- ротно-модулированного сигнала. Она продолжаться до тех пор, пока снова не сравняются значения TMR2 и PR2 и не начнется новый период. Период определяется по формуле T + 1 где Р - коэффициент деления таймера TMR2; F - частота системного тактового генератора в герцах. ' г Микроконтроллеры PICmicro 111 Длительность импульса можно рассчитать следующим образом: = где ССР - это 10-разрядное значение, старшие восемь бит которого хранятся в реги- стре CCPR1L, а младшие два бита - в пятом и четвертом разрядах регистра CCP1CON. Например, мы хотим сформировать с помощью микроконтроллера PIC16F627 сигнал частотой 20 кГц (то есть с периодом 50 мс), у которого длительность им- пульса составляет 65%, а длительность паузы - 35% периода, при частоте систем- ного тактового генератора 4 МГц. Во-первых, необходимо вычислить значение, которое будет загружено в регистры CCPR1L и Если коэффициент деления Р = 1, то PR2 Т х F / (Р х 4) - 1 = 50 мкс х 4 МГц / 4 - 1 = 50 - 1 = 49. Так как 65% от мкс составляет 32,5 мкс, то ССР = At х F / Р = 32,5 мкс х 4 МГц / 1 = 130. В виде число 130 представляется как 0x082, а в двоичном - 0010000010. Младшие два бита надо записать в соответствующие разряды CCP1CON, а старшие восемь битов 0010 то есть число 0x020 = регистр CCPR1L. Другими словами, значение находится как целое част- ное от деления ССР на 4, а остаток от деления определяет младшие два бита. Установка нужного значения коэффициента деления производится с помощью двух младших разрядов регистра T2CON согласно табл. 3.17. Таблица Установка коэффициента деления прескалера TMR2 Коэффициент деления 00 1 01 4 Широтно-импульсная модуляция часто применяется для управления работой периферийных устройств, например электродвигателей, так как легко может быть преобразован в аналоговый с помощью RC-цепи. Как и многие другие микроконтроллеры, PIC16F627 имеет последовательный интерфейс ввода-вывода. Это не только позволяет подключать к МК внешнюю память и различные периферийные устройства, в частности АЦП, но и обеспечи- вает возможность связи МК с компьютером по протоколу RS-232. Следует заметить, что возможности настройки модуля последовательного ин- терфейса весьма скудны. Они ограничены простейшей протокола Сигналы интерфейса RS-232 кодируются в отрицательной логике: низкому уровню соответствует большее значение напряжения, а высокому - меньшее. Модуль USART микроконтроллеров PICmicro использует положительную логику и не имеет аппаратных устройств для инвертирова- ния сигнала, которое приходится реализовывать с помощью дополнительных элементов. - Прим. 112 Устройства управления роботами RS-232 и минимальными функциями, обеспечивающими синхронное последова- тельное соединение с периферийными устройствами. Модуль USART (универсальных синхронно-асинхронный приемопередатчик) микроконтроллеров PIC16F627 наиболее подходит для обеспечения асинхронной последовательной передачи данных. Режим синхронной передачи (синхронизированный тактовыми импульсами) показан на рис. 3.42. Принятый сигнал защелкивается во входном регистре при- емника по заднему фронту синхроимпульсов. Правила формирования сигнала передатчиком и декодирования принятого сигнала приемником будут подробно рассмотрены позже, а пока будем представлять кодирующее и декодирующее устройства на структурной схеме модуля USART в виде ящиков». Рис. 3.42. Временные диаграммы сигналов в режиме синхронной передачи Модуль USART состоит из трех устройств: генератора синхроимпульсов (baud rate generator - BRG), блока передачи и блока приема. Структурная схема генера- тора на рис. 3.43. Рис. 3.43. Структурная схема блока формирования тактовых импульсов модуля USART Значение, хранящееся в регистре SPBRG, сравнивается компаратором со зна- чением счетчика. В момент совпадения обоих значений счетчик сбрасывается и генерируется импульс Reset - заканчивается очередной цикл работы генератора. Работа счетчика управляется битом (Serial Port ENable - разрешение работы последовательного порта), битом SYNCH, состояние которого определяет, в каком режиме находится порт (в синхронном или асинхронном), и битом BRGH, с помощью которого устанавливается скорость передачи данных. Микроконтроллеры PICmicro 113 К сожалению, биты управления разбросаны по разным регистрам. Мы опишем их подробно чуть позже, когда разберем все три режима работы модуля USART. В асинхронном режиме скорость передачи данных (бит в секунду) определя- ется по формуле = F / ( 16 х х ( SPBRG + 1 ) ) . Если задана скорость передачи R, то - SPBRG = F / ( R х 16 х -1. Например, при частоте системного тактового генератора 4 МГц, если необхо- димо передавать данные со скоростью 1200 бод (то есть 1200 бит/с), при сбро- шенном бите BRGH понадобится загрузить в регистр значение SPBRG 4 ( 1200 х 16 х -1 - 4 х (1200 х 16 х 4) - 1 = 51,0833. Так как округлять нужно до ближайшего целого, на самом деле в регистр SPBRG придется загрузить число 51; при этом фактическая скорость передачи данных составит бит/с, что дает ошибку в по сравнению с заданным значением бит/с. К счастью, эта ошибка несущественна для приемника. Блок передачи USART может пересылать за один цикл работы восемь или девять битов в синхронном или асинхронном режиме. Структурная схема блока USART приведена на рис. 3.44. Рис. 3.44. Структурная схема блока передатчика модуля USART Когда бит SYNCH установлен, передаваемые данные появляются на выходе RX синхронно с тактовыми импульсами, принимаемыми со входа ТХ или выводимы- ми на выход ТХ (синхронный режим передачи). Восемь передаваемых двоичных разрядов хранятся в регистре TXREG, этот ре- гистр загружается программно. Низкий уровень сигнала CSRC соответствует режиму ведомого (внешний тактовый сигнал). Как только закончится передача 114 Устройства управления роботами предыдущего данные из регистра TXREG автоматически записываются в сдвиговый регистр TSR. На это требуется один командный цикл, по завершении которого устанавливается флаг TXIF (бит 4 регистра PIR1) и формируется запрос на прерывание. Это прерывание можно разрешить/запретить установкой/сбро- сом бита TXIE (бит 4 регистра PIE1). Сдвиговый регистр преобразует параллель- ный код в последовательный: с каждым тактовым импульсом хранимая в нем ин- формация сдвигается в сторону старших разрядов, а старший разряд передается на выход. Буферизация передаваемых данных с помощью регистра TXREG позволяет производить запись очередного слова в регистр передатчика в любой момент, без ожидания конца передачи предыдущего слова. В асинхронном режиме перед началом передачи очередного 8-разрядного сло- ва формируется так называемый стартовый бит (он кодируется нулевым значе- нием). Затем передаются информационные биты (начиная с младшего), после чего следует бит. Нулевой передаваемый информационный разряд ко- дируется импульсом низкого уровня, единичный - импульсом высокого уровня (NRZ-кодирование). Перед стоповым битом в зависимости от настроек может формироваться специальный бит четности. Блок приемника модуля USART устроен намного сложнее, чем передатчик. Это объясняется сложностью процесса декодирования принимаемого сигнала. Структурная схема приемника показана на рис. 3.45. Синхроимпульсы приемника Рис. 3.45. Структурная блока приемника модуля В режиме синхронного приема входные данные поступают на сдвиговый ре- гистр, где преобразуются в параллельный код. При этом может использоваться либо внешний (режим ведомого), либо внутренний генератор синхроимпульсов (режим ведущего), которые будут фиксировать моменты времени, когда прини- маемые данные имеют правильное значение. Микроконтроллеры PICmicro 115 В режиме асинхронного приема, когда дополнительные синхроимпульсы от- сутствуют, момент фиксации данных определяется с помощью генератора син- хроимпульсов приемника (Receiver Sensor Clock - RSC). Этот генератор рабо- ает на частоте, которая в 16 раз больше частоты передачи данных. Выборка значения принимаемых данных со входа RX производится трижды, примерно в середине интервала, соответствующего очередному биту информа- (рис. 3.46). По трем выбранным уровням входного сигнала специальный ма- жоритарный элемент формирует значение, за которое «голосует» большинство (хотя бы два) из них. Это значение подается на сдвиговый регистр RSR. Так по- вторяется восемь (или девять, если передавался бит четности) раз для всех раз- рядов передаваемого слова, после чего еще три раза происходит выборка вход- сигнала для декодирования стопового бита. Синхронизация генератора осуществляется по стартовым битам: приемник ожидает, пока все три выборки во время приема стартового бита не дадут нулевое значение уров- ня входного сигнала. 3.46. Асинхронный прием данных t В приемнике применяется двойная буферизация данных с помощью регистра RCREG, который на самом деле представляет собой очередь (FIFO-буфер) глуби- ной в два уровня. Если приемник заканчивает декодирование стопового бита оче- редного 8-разрядного слова, а два предыдущих еще не прочитаны из регистра RCREG, то возникает ошибка переполнения - устанавливается флаг OERR (бит 1 регистра RCSTA). Сбросить этот флажок можно программно. Еще одна возмож- ная ошибка — неправильное значение стопового Ей соответствует флаг FERR «т 2 регистра RCSTA). 116 Устройства управления роботами Назначение разрядов регистра состояния передатчика TXSTA показано в табл. а регистра состояния приемника RCSTA - в табл. 3.19. Таблица Назначение разрядов регистра TXSTA Номер бита Имя Назначение 7 CSRC Выбор источника синхронизации для синхронного режима: — режим ведущего (используется внутренний генератор синхроимпульсов О - режим ведомого от внешнего в асинхронном режиме состояние этого значения не имеет ТХ9 Разрешение передачи 9-го бита (четности): 1 - 9-й бит разрешен; О - 9-й бит запрещен Разрешение роботы передатчика: 1 — передатчик включен; О — передатчик выключен SYNC Выбор режима USART: 1 - синхронный режим; О — асинхронный режим Зарезервирован, читается О Выбор скорости передачи в асинхронном режиме: J - высокоскоростной режим; О - низкоскоростной режим В синхронном режиме состояние этого бита значения не имеет Состояние передатчика: 1 — сдвиговый регистр TSR свободен; О — регистр TSR занят Значение 9-го разряда передаваемых данных TXD 3. / 9. Назначение разрядов регистра RCSTA Номер Имя 7 SPEN Разрешение работы приемника: 1 - включен; 0 — выключен Разрешение приема 9-го бита / - 9-й бит разрешен; О - 9-й бит запрещен (8-разрядный прием) Разрешение однократного приема (одного байта) данных в синхронном режиме ведущего; этот бит сбрасывается после приема байта CREN Разрешение многократного приема данных Разрешение режима детектирования адреса (имеется не у всех FERR Флаг ошибки кадровой синхронизации OERR Флаг ошибки переполнения приемного буфера RX9D Значение 9-го разряда (бита четности) принятых данных Микроконтроллеры PICmicro 117 Для инициализации режима асинхронной передачи данных служит следую- щий фрагмент программы: SYNCH = 0; // Установлен асинхронный режим. BRGH =• 0; // Низкоскоростной режим передачи. SPBRG = DataRate; // Скорость передачи. SPEN = 1; // Разрешена работа ТХ9 = RX9 = 0; // 8-разрядный режим передачи и приема. TXEN // Разрешена работа передатчика. Чтобы передать один байт, достаточно двух строк кода: 0); // Ждать, пока не освободится регистр TSR. TXREG = // Загрузить в TXREG передаваемые данные. Здесь бит TRMT используется для определения момента освобождения сдви- гового регистра TSR. Есть и другой способ: можно разрешить прерывания установкой бита TXIE. Тогда в процедуре обработки прерываний надо будет проверить состояние флага TXIF. Если он установлен, то прерывание сформи- ровано блоком передатчика. Значит, можно загрузить в регистр TXREG очеред- ной байт. Для приема байта следующий фрагмент программы: while (RXIF == 0); ReceiveData = RCREG; RXIF = 0; // пока будет принят очередной байт. // Получить принятые данные. // Сбросить флаг прерывания. Для работы с аналоговыми сигналами порта А микроконтроллера предназначены два компаратора. С их помощью можно узнать, превышает ли входное напряжение заданный порог. Величина порога задается внутренним или внешним источником опорного напряжения. При изменении состояния компаратора может формироваться запрос на пре- рывание. Выходное значение компаратора можно записать в выходной порт мик- | роконтроллера. Работа компаратора поясняется на рис. 3.47. Если напряжение на входе «+» [оказывается больше, чем на входе то на компаратора формируется ; сигнал высокого уровня, в противном случае - сигнал низкого уровня. Для | управления работой обоих компараторов предназначен регистр CMCON (табл. 3.20). ! Состояние выходов компараторов можно узнать по битов OUT этого регистра. Все возможные комбинации состояний битов и CIS расшифрованы табл. 3.21. При включении питания, когда биты = 000, входы RA3 - RAO нахо- дятся в режиме ввода аналоговой информации и не могут быть использованы для обычного цифрового ввода-вывода. Если надо переключить эти выводы в режим ввода-вывода, то необходимо установить все биты записав в регистр 118 Устройства управления роботами Рис. 3.47. Принцип работы компаратора Таблица 3.20. Регистр CMCON Номер 7 6 5 4 3 2-0 бита Имя C2OUT CIS Таблица Режимы работы СМ 000 001 00 J OJO 010 011 100 101 CIS X 0 1 0 1 X X X Назначение Выход второго компаратора Выход первого компаратора Если этот бит выход второго компаратора Если этот бит установлен, то выход первого инвертируется Переключение входов компараторов Режим работы компараторов компараторов Вход Вход Выход компаратора компаратора компаратора компаратора компаратора 1 1 2 RAO RA3 (1) RA2 RAO RA2 RA3 Vref RAO Vref RA3 RA2 RAO (2) RA3 RAO GND GND (3) RA2 RA1 RA2 RA2 RA 1 Vref RA2 RA2 RA 1 RA2 RA 1 RA2 RAJ Выход компаратора 2 C2OUT C2OUT C2OUT C2OUT C20UT C2OUT C2OUT с 5 4 1 Микроконтроллеры PICmicro 119 Таблица Режимы работы компараторов (окончание) CM CIS Вход Вход Вход Выход Выход компаратора компаратора компаратора компаратора компаратора компаратора 1 ПО X RA2 0 = = RA3 (4) - RA4 (5) О При — 000 выводы RA3 - не быть использованы для обычного ввода-вывода. (2) Вывод RA3 может использован для обычного ввода-вывода. (3) Выводы и RA3 могут быть использованы для обычного ввода-вывода. (4) Вывод является выходом первого (5) Вывод RA4 является выходом (с открытым стоком) второго компаратора. (6) Выводы RA3 — могут быть использованы для обычного ввода-вывода. внутренний источник опорного напряжения. Запрос на прерывание от компараторов формируется, если состояние любого из них При этом устанавливается флаг CMIF. Для разрешения обра- ботки запроса на прерывание необходимо установить биты разрешения CMIE, PEIE и GIE. Если любой из этих трех битов сброшен, то прерывание не генериру- ется, но флаг устанавливается в любом случае. Программа обработки пре- рывания должна, во-первых, прочитать текущее значение регистра а во- вторых, сбросить флаг CMIF. Для формирования опорного напряжения можно использовать внутренний источник. Для этого в микроконтроллере имеется специальный четырехразряд- ный цифро-аналоговый преобразователь Опорное напряжение Vref встро- енного источника задается с помощью регистра VRCON (табл. 3.22). 3.22. Регистр VRCON Номер бита Имя Назначение 7 VREN Разрешение работы источника опорного напряжения: - разрешено; О - запрещено - разрешено; О - запрещено VROE Разрешение подачи напряжения Vref на вход RA2: 1 — разрешено; О - запрещено VRR Выбор диапазона напряжений Vref: 1 - нижний диапазон; О - верхний диапазон - Не реализовано, читается как О 3-0 Выбор значения напряжения Vref Возможна и программная установка флага CMIF; в этом случае моделируется возникновение прерыва- ния от модуля компараторов независимо от того, изменилось ли состояние любого из них. - Прим. 120 Устройства управления роботами При установленном бите VRR регистра VRCON (нижний диапазон опорных на- пряжений) выходное напряжение внутреннего источника определяется по фор- муле Vref = Vdd x (Vrcon & 0x0 OF) / 24, а при сброшенном бите VRR (верхний диапазон) Vdd x (8 + ( Vrcon & OF ) ) / 32. Здесь Vdd - это напряжение питания микроконтроллера; Vrcon - число, запи- санное в регистр VRCON; & - поразрядная операция AND. Заметим, что макси- мальное опорное напряжение нижнего диапазона составляет 15/24 (то есть чуть меньше 2/3) от напряжения питания Vdd, а максимальное напряжение верхнего диапазона - 3/4 от напряжения питания. 3.5. ПРОГРАММАТОР EL CHEAPO Для программирования микроконтроллеров PICmicro существует множество раз- личных устройств. Дело в том, что принцип работы программатора достаточно прост и его несложно сделать самому. Самый простой программатор состоит все- го из нескольких элементов, а наиболее сложные коммерческие модели могут сто- ить несколько тысяч долларов. Для того чтобы вы могли изготовить устройства, описанные в следующих двух главах книги, я разработал несложную схему, предназначенную для программи- рования микроконтроллера Вам потребуется лишь около часа, чтобы реализовать эту конструкцию, а стоимость используемых элементов не превысит нескольких долларов. Я назвал свой программатор El Несомненное преимущество микроконтроллеров PICmicro — возможность внутрисхемного программирования Serial Programming - ICSP). Бла- годаря этому разработчик не должен использовать в своей конструкции дорогие разъемы для размещения микроконтроллера, из которых его можно было бы опе- ративно извлекать для того, чтобы вставить в программатор. Также не нужны сложные схемы, обеспечивающие перепрограммирование МК. По протоколу ICSP микроконтроллер может быть запрограммирован уже по- сле того, как все его выводы будут припаяны к печатной плате. Кроме того, разра- ботчик может после этого в любой момент изменить программу, если захочет ис- править какую-нибудь ошибку или добавить новые функциональные возможности. Благодаря простоте ICSP можно продавать незапрограммирован- ные устройства - тогда пользователь сможет выбирать программу по своему усмотрению. Выводы микроконтроллера, участвующие в процессе внутрисхемного про- граммирования, показаны в табл. 3.23. Схема программатора и программное обеспечение, необходимое для его работы, доступны на сайте издательства а также на сайте автора этой книги www.myke.com. - Прим. Микроконтроллеры 121 Таблица 3.23. Выводы микроконтроллеров PICmicro, используемые для внутрисхемного программирования 12С5хх семейства корпус с 18 выводами 4 J 8 7 6 4- 1 - 13 12 Vdd 4- 14 5- 13 12 • Vss корпус корпус 28 с 40 выводами 1 26 - Vdd 8, 21 - Vss 28 - RB7 1 Vdd 21, 31 - Vss 40 - 39 - RB6 Для записи программы в микроконтроллер или чтения ранее записанной про- граммы необходимо перевести МК в режим программирования, подав напряже- ние от 12 до 14 В на вывод _MCLR/Vpp. Затем в течение нескольких миллисе- кунд необходимо поддерживать на линиях Data и Clock сигнал низкого уровня. После этого данные можно записывать или считывать в последовательном коде, используя линию Data Вход Clock используется для тактирования. Вход Vdd при напряжении 5 В потребляет ток от 20 до 50 мА, поэтому для питания подойдет микросхема 78L05 или простейший самодельный стабилиза- тор напряжения на одном стабилитроне. Этот вопрос уже обсуждался в начале главы (см. рис. 3.18 и 3.19). Для коммутации напряжений Vpp и Vdd в схеме программатора можно исполь- зовать транзисторные ключи. Микроконтроллеры PICmicro имеют встроенную цепь, которая обеспечивает подачу напряжения низкого уровня на вход _MCLR/ Vpp в то время, пока этот вывод отключен от внешнего источника напряжения. Временные диаграммы сигналов для инициализации режима программирова- ния показаны на рис. 3.48. Когда напряжение на выводе достигает сбрасывается внутрен- ний программный счетчик микроконтроллера. Он используется для формирования Рис. программирования 122 Устройства управления роботами текущего адреса программной памяти. По адресу 0x02000 находится специальное слово идентификации ID, по адресу 0x02007 - слово конфигурации (см. табл. 3.5). Запись программы в микроконтроллер производится по синхронному после- довательному протоколу, то есть побитно, младшим байтом вперед. Фиксация данных на линии Data производится по заднему фронту синхроимпульсов Clock, то есть в середине очередного такта (рис. 3.49). Минимальная длительность одно- го периода синхроимпульсов составляет 200 При программировании исполь- зуются 6-разрядные команды (табл. 3.24). Рис. 3.49. Временные диаграммы сигналов при передаче 6-разрядных команд программатора Таблица 3.24. Команды режима программирования Команда Загрузка слова конфигурации Загрузка команд в программ Загрузка данных в память Считывание команд из памяти программ данных из памяти данных Инкремент программного счетчика программирования всей памяти Стирание всей памяти данных 000000 000010 000011 000100 000101 000110 001000 001001 0.01011 07FFE 0, 14-разрядная команда, 0 Байт данных, сдвинутый на 1 разряд влево 0, команда, 0 •Байт данных, сдвинутый на 1 разряд влево Программируемые данные (то есть коды команд, записываемых в программ- ную память, или значения, записываемые в память данных) начинают передавать- ся спустя 1 мкс после подачи соответствующей 6-разрядной команды. Коды ко- манд при программировании сдвигаются влево на один разряд; в результате получается, что 14-разрядный код слева и справа дополняется до шестнадцати разрядов нулевыми битами. Цикл программирования Flash-памяти микроконтроллеров выглядит следую- щим образом: Посылается команда О О загрузки в память программ, после которой следует сдвинутый на 1 бит влево код очередной команды. Микроконтроллеры 123 2. Посылается команда начала программирования 3. Выдерживается пауза 10 мс. Аналогично программируются байты идентификации и конфигурации. Для этого посылается команда и следующий за ней байт в резуль- тате в программном счетчике устанавливается адрес 0x02000. После этого опи- санные три пункта повторяются каждый раз для очередного байта идентифика- ции или конфигурации. Для увеличения программного счетчика на 1 в конце очередного цикла подается команда Еще не запрограммированные ячейки Flash-памяти содержат единичные зна- чения во всех битах, поэтому при программировании нужные биты устанавлива- ются в нулевое состояние. Для стирания программы можно опять записать во все биты единичные значения. Это можно сделать автоматически, используя специ- альную команду стирания для программной памяти и команду для памяти данных. Но я предпочитаю использовать способ, который позволяет стереть и память команд, и память данных даже в тех случаях, когда в сло- ве конфигурации установлен бит защиты. Для этого надо выполнить следующие действия: Подать напряжение Vpp, удерживая низкий уровень на выводах Data и Clock. 2. Выполнить команду загрузки слова конфигурации и 3. Семь раз выполнить инкремент программного счетчика (команда для получения адреса регистра конфигурации 4. Послать команду 5. Послать команду 6. Послать команду начала программирования ОЬООЮОО. 7. Выдержать паузу 10 мс. 8. Послать команду 9. Послать команду ObOOOOlll. Здесь используются две недокументированные команды PICmicro - После выполнения этих девяти действий память программ и память данных будет стерта и подготовлена для последующего программирования. В процессе программирования после записи в программную память микрокон- троллера очередной команды необходимо увеличивать значение программного счетчика на 1, выполнив команду Если какие-либо адреса не содержат кодов команд или содержат код можно пропустить шаг записи кода манды, просто выполнив инкремент программного счетчика. После окончания программирования надо на короткое время снять напряже- ние Vpp, а затем подать его снова и прочитать только что записанную программу с целью проверки ее правильности (этап верификации). Если верификация про- шла удачно, надо повторить ее при минимальном напряжении питания Vdd (око- ло 4,5 В), снова предварительно убрав, а затем подав напряжение Vpp. В третий раз процесс верификации повторяется при максимальном напряжении питания (около 5,5 В). 124 Устройства управления роботами Некоторые программаторы (включая El Cheapo, а также программатор PIC- Start Plus фирмы Microchip) не могут изменять напряжение питания в процессе верификации. Это допустимо при макетировании устройств или для радиолюби- тельских конструкций, но при серийном производстве верификация на предель- ных режимах питания необходима. Принципиальная схема программатора El Cheapo показана на рис. 3.50. подключается к персональному компьютеру через параллельный порт и управля- ется с помощью программы, которая работает в операционной системе Microsoft Windows. Рис. 3.50. Принципиальная схема программатора El Cheapo Первая версия этой схемы была опубликована автором четыре года назад; здесь представлена шестая версия. В последней модификации программатор может быть использован с любым микроконтроллером PICmicro, который поддержива- ет режим программирования ICSP. Большинство модификаций схемы програм- матора и управляющей его работой программы было направлено как раз на то, чтобы он мог работать без переделок на любых персональных компьютерах и с практически любыми МК PICmicro. В табл. 3.25 перечислены все элементы, использованные в схеме программато- ра. Все необходимые элементы нетрудно достать в любом радиомагазине. Приведенную на рис. 3.50 схему можно условно разделить на четыре блока. Первый - это источник питания. Он может быть выполнен на основе специаль- ной микросхемы или на стабилитроне (см. рис. и обеспечивает питание Микроконтроллеры PICmicro 125 3.25. Элементы, использованные в схеме программатора El Позиционное обозначение а Л а Элемент DIP 2N3906 В; 0,5 Вт 1 или 0,01 180 Ом, 1Вт Разъем 2,5 мм Разъем DB-25F Примечание Микросхема стабилизатора напряжения (9 В) для подключения микроконтроллеру Буфер-инвертор, имеющий выход с открытым коллектором Биполярный транзистор. Может быть заменен на ВС557 Любой стабилитрон на В соответствующей мощности Может быть использован любой плоскостной кремниевый диод на ток свыше 50 мА (например, Оксидный конденсатор на 16 В Конденсатор любого типа Резистор Резисторы Для подачи напряжения питания Разъем-розетка для параллельного порта Источник + 14 В, 250 Кабель с разъемами DB-25F на обоих концах Для подключения программатора к персональному компьютеру ' В скобках указаны добавленные при переводе отечественные аналоги. - перев. Vdd для программатора, а также формирует напряжение программирования Vpp для микроконтроллера. Напряжение программирования должно составлять по крайней мере Чтобы сформировать такое напряжение с помощью 9-вольто- вой микросхемы 78L08, используется дополнительный стабилитрон на В, с ко- торого одновременно снимается напряжение Vdd, необходимое для работы про- грамматора. Входной диод CR2 используется для защиты от неправильного включения напряжения питания. На вход источника питания необходимо подавать напряжение В. Для это- го можно использовать обычный сетевой AC/DC адаптер. В документации Microchip для различных микроконтроллеров PICmicro указы- вается значение тока, потребляемого по входу Vdd в режиме программирования, не превышающее 40 мА. Кроме этого, необходимо учесть небольшой ток потребления микросхемы U3. При общем токе 60 на резисторе R1 = 180 Ом будет падать на- пряжение около 10 В. При этом резистор будет рассеивать более половины всей по- требляемой мощности. Поэтому необходимо использовать резистор мощностью 1 Вт. оминал резисторов R2-R6 зависит от типа использованных для микросхем серии 155 его рекомендуется уменьшить до 5,1 кОм. - Прим. перев. 126 Устройства управления роботами Если микроконтроллер не подключен, то весь предназначенный для него ток (40 мА) течет через При этом на нем рассеивается мощность около 0,3 Вт. Поэтому необходимо использовать стабилитрон, рассчитанный на мощ- ность по крайней мере 0,5 Вт. Источник питания на 5 В рассчитан таким что при коротком замыка- нии на выходе ток через него не превысит 60 мА. Поэтому во время подключения или отключения микроконтроллера нет необходимости выключать и снова вклю- чать источник питания. Обычно радиолюбители предпочитают самостоятельно разрабатывать источ- ники питания для своих конструкций и не упустят возможности переделать ука- занную схему. Однако я настоятельно рекомендую оставить ее без изменений - она и без того достаточно проста и эффективна. Второй блок нашей схемы обеспечивает интерфейс с компьютером. Для связи программатора с персональным компьютером используются инвертирующие бу- ферные элементы (микросхема U3). Я испробовал множество разных вариантов, но указанная схема обладает наилучшими характеристиками при работе с различ- ными компьютерами. Выходы микросхемы 74LS05 имеют открытый коллектор, поэтому необходимо использовать «подтягивающие» резисторы сопротивлением около 10 кОм, включая их между выходом микросхемы и положительной шиной питания. Аналогичные резисторы подключены и к линиям параллельного порта персонального компьютера. Для подключения к параллельному порту компьютера применяется стандартный кабель с розеткой DB-25F. На рис. 3.50 указаны контакты разъема параллельного порта. Заметим, что программатор использует вывод GND параллельного порта - иначе было бы невозможно подавать все управляющие сигналы. Не рекомендуется брать слишком длинный кабель: его длина не должна превышать футов (около 3 м). Прежде чем подключать программатор к компьютеру, желательно проверить правильность распайки кабеля. Все жилы одного разъема должны быть подклю- чены к одноименным выводам другого, как показано в табл. 3.26. Третий блок - это программирующего напряжения Vpp. Он вы- полнен на одном элементе микросхемы U3, выход которого через резистор R7 подключен к p-n-р транзистору Q1. Эта простая схема реализует программное включение и выключение напряжения Vpp при токе до 50 мА. Последний блок - это разъем для подключения к микроконтроллеру. На рис. 3.50 указаны номера используемых выводов МК PIC16F627 (и любых других МК среднего семейства, имеющих корпус с 18 выводами). При разработке печатной платы не забудьте обеспечить свободный доступ к разъе- му, предназначенному для установки микроконтроллера. Не следует забывать также про разъем подключения кабеля и источника питания. Макетирование программатора заняло у меня не более получаса. Однако вы поступите разумно, если будете планировать график работ без излишней спешки. Я что результат всегда получается более качественным, если отводишь на работу больше времени, чем требуется на самом деле. Электронное приложение к этой книге содержит инсталлятор программы, предназначенной для работы с описанным программатором. Там вы найдете по- дробные инструкции по ее установке. Микроконтроллеры PICmicro 127 3.26. Распайка кабеля для подключения программатора к параллельному порту персонального компьютера На рис. 3.51 показан внешний вид окна программы. В правой части окна со- держатся необходимые подсказки и пошаговые инструкции по сборке схемы про- грамматора и по ее наладке Instructions). По завершении теста необ- ходимо нажать кнопку Debug End (Закончить отладку). Рис. Интерфейс программы El Cheapo После этого кружок в верхнем правом углу окна окрасится в желтый цвет. Если цвет останется черным, необходимо повторить все этапы настройки, чтобы найти причину неисправности. Процесс стирания содержимого памяти микроконтроллера перед его програм- мированием занимает не более 15 с. Хотя многие программаторы справляются с этой задачей несколько быстрее, El Cheapo более устойчив в работе. 128 Устройства управления роботами Первое улучшение конструкции программатора состоит в исполь- зовании (Zero Insertion Force - с «нулевым» усилием соединения). Это предохранит микроконтроллер от повреждений, которые нередко случаются, ког- да микросхему пытаются вставить в или вытащить из него при помо- щи отвертки. Во-вторых, можно заметить, что благодаря простоте схемы программатора его можно встроить в целевую схему. При этом напряжение программирования В можно взять от источника, уже, возможно, имеющегося в устройстве, или от до- полнительной батарейки напряжением 9 В. В последнем случае «минус» батарей- ки надо подключить к линии Vcc, а «плюс» - к эмиттеру транзистора При разработке устройств на основе микроконтроллера желательно не зани- мать выводы RA6 и RA7, резервируя их для режима программиро- вания. Ведь еще остается не так уж мало выводов, которые можно использовать. Зато не придется извлекать микроконтроллер из целевой схемы, чтобы подклю- чить его к программатору. В большинстве случаев это решение можно считать оптимальным. |