Компоненты и технологии, № 2'2003
Большие возможности
маленького PIC-контроллера
Малые размеры и ограниченное число портов ввода-вывода 8-выводных контроллеров PIC12Fxxx компании Microchip — не помеха при создании довольно сложных устройств. Используя схемотехнические и программные трюки, эти контроллеры можно применять в задачах, где традиционно используются их старшие братья.
Илья Афанасьев
О-
Ф:
I
ирма Microchip продолжает разработку и производство передовых продуктов, предоставляющих пользователю большую функциональность и надежность. Новое семейство 8-выводных Flash-микроконтроллеров найдет применение во многих отраслях промышленности, в медицине и в бытовой технике.
Контроллеры PIC12F629/675 объединили все преимущества архитектуры микроконтроллеров PICmicro и гибкость программной Flash-памяти. При низкой цене и малых размерах новые контроллеры обеспечивают функциональность и удобство использования, которые были недоступны ранее. Основные особенности контроллеров серии PIC12Fxxx — это диапазон питающих напряжений от 2 до 5,5 В, тактовая частота до 20 МГц, возможность включения калиброванного внутреннего RC-генератора на 4 МГц, внутренняя память данных EEPROM, аналоговый компаратор и источник опорного напряжения, до 4 каналов 10-разрядного АЦП и до 6 портов ввода-вывода. Наличие Flash-памяти программ и отличные средства разработки, включая внутрисхемный отладчик ICD-2 (см. ChipNews № 7'2002), а также поддержка языка С позволяет в кратчайшие сроки создавать программы и делает эти контроллеры идеальными для применения во многих задачах.
Несмотря на малые размеры и ограниченное число портов ввода-вывода, используя лишь схемотехнические и программные трюки, 8-выводные контроллеры PIC12Fxxx можно применять в задачах, где традиционно используются их старшие братья.
Управление 6 светодиодами от 3 выводов
подключать светодиоды без применения дополнительных драйверов. Управление свечением отдельных светодиодов или их комбинаций может быть осуществлено с помощью установки вывода микроконтроллера в «1», «0» или переключение его на вход. Число диодов (Б), которое может управляться независимо, определяется числом используемых выводов микроконтроллера (ОР) и рассчитывается по следующей формуле:
Б = ОРх(ОР-1)
Таблица 1. Соответствие состояния портов контроллера и включения светодиодов
GP0 0 1 Z Z 0 1 1 0 1 0 1 0 1
GP1 1 0 0 1 Z Z 0 1 1 0 0 1 1
GP2 Z Z 1 0 1 0 0 0 0 1 1 1 1
VD1
VD2
VD3
VD4
VD5
VD6
Определение 3 состояний одного входа
Вход микроконтроллера может иметь три состояния: подключен к «1», к «0» или не подключен. Конденсатор заряжается или разряжается в зависимости от состояния выходного порта ОР и позволяет определить все три состояния. Вход микроконтроллера находится в третьем состоянии, если при выставлении уровня лог. «1» на порт ОР с этого порта считывается «1» и при выставлении лог. «0» считывается «0».
Компоненты и технологии, № 2'2003
Внешний RC-генератор с изменяемой частотой генерации
Частота внешнего ИС-генератора определяется параметрами внешней цепи, подключенной к выводу 08С1. Сопротивление этой цепи можно изменять, управляя напряжением на выводе порта ОР. Уровень лог. «1» на ОР0 подключает резистор И2 параллельно И1, таким образом, общее сопротивление цепи уменьшается, и частота генерации увеличивается. Перевод состояния ОРО на вход увеличивает сопротивление ИС-генератора, тем самым уменьшая его частоту. Данный прием позволяет изменять частоту тактирования микроконтроллера, изменять быстродействие системы, а значит, изменять потребление микроконтроллера в зависимости от выполняемой задачи.
Обработка нескольких кнопок с помощью одного входа
Микроконтроллеры Р1С12Бххх имеют аналоговый компаратор с программируемым источником опорного напряжения, а также два таймера с разрядностью 8 и 16 бит. Следующий пример показывает, как, используя только один вход микроконтроллера с компаратором, а также один из таймеров, можно определить нажатие одной из нескольких кнопок.
Время заряда конденсатора С1 (рис. 4) определяется сопротивлением резисторов, подключенных между цепью напряжения питания и конденсатором. При изменении сопротивления изменяется время заряда. Когда какая-либо кнопка нажата, напряжение питания подключается к конденсатору через определенное количество резисторов и общее сопротивление зарядной цепи уменьшается, уменьшая время заряда. Использование таймера совместно с компаратором позволяет измерять время заряда, а значит, и определять, какая из кнопок нажата.
Программная последовательность:
1) Конфигурируем ОР2 как выход с уровнем лог. «0» для разрядки конденсатора.
2) Конфигурируем ОР2 как один из входов компаратора, другой вывод компаратора подключается к внутреннему источнику опорного напряжения.
3) Запускаем таймер и измеряем время до срабатывания компаратора.
Если измеренное время соответствует максимальному для данной схемы, значит, ни одна из кнопок не нажата, и процедура опроса клавиатуры повторяется. Когда какая-либо кнопка нажата, скорость нарастания пилооб-
---------------------www.finestreet.ru -
разного сигнала увеличивается, а время срабатывания компаратора уменьшается.
Обработка нескольких кнопок с помощью одного входа с выходом из режима SLEEP
Микроконтроллеры PIC12Fxxx имеют режим микропотребления SLEEP. В этом режиме работа ядра останавливается, и потребление контроллера может снизиться до 0,9 мкА. Работу предыдущего примера можно дополнить функцией выхода из режима SLEEP при нажатии какой-либо кнопки. Для реализации этой возможности необходимо использовать дополнительный вывод микроконтроллера (рис. 5).
До входа в режим SLEEP нужно сконфигурировать вывод GP2 как выход с установленным уровнем лог. «1», а GP1 — как вход с возможностью прерывания по изменению состояния.
Подтягивающий резистор R1 удерживает GP1 в низком состоянии. При нажатии кнопки вход GP1 переводится в высокое состояние через GP2 и Vdd, что приводит к возникновению прерывания и выходу микроконтроллера из SLEEP. После этого нужно записать в GP2 лог. «0» для разряда конденсатора C1 через резистор R2. Затем GP1 устанавливаем в лог. «1», а GP2 конфигурируем как вход компаратора для измерения времени заряда конденсатора. Программная последовательность:
1) GP1 соединяется с общим выводом кнопок.
2) Разрешить прерывание по изменению состояния порта GP1.
3) До включения режима SLEEP установить GP1 как вход, а GP2 как выход с лог. «1».
4) Если кнопка нажата, микроконтроллер выходит из SLEEP, установить в GP2 лог. «0» для разряда конденсатора.
5)Установить GP1 в лог. «1», определить, какая кнопка нажата, путем измерения времени заряда.
Клавиатура 4x4 с использованием одного входа
Микроконтроллер PIC12F675 имеет в своем составе 10-разрядный АЦП с временем измерения до 20 мкс. Наличие встроенного АЦП позволяет реализовать клавиатуру с большим количеством кнопок, используя всего один вход (см. рис. 6). При правильном выборе значений номиналов резисторов замыкание каждой из кнопок сформирует уникальное напряжение, соответствующее именно этой кнопке. Измеряя напряжение Vout с помощью АЦП, можно определить, какая именно кнопка нажата. Для однозначности определения нажатой клавиши лучше использовать точные резисторы. Если ни одна из кнопок не нажата, измеренное напряжение будет около 0 В.
Питание устройства и обмен данными по одной линии
Один вывод микроконтроллера (МК1) может использоваться для однонаправленной связи и как источник питания для другого (МК2). Линия ввода-вывода микроконтроллера МК1 удерживается в высоком состоянии подтягивающим резистором R1 и подает питание на МК2. Микроконтроллер МК2, в свою очередь, может передавать данные по этой же линии с помощью транзистора VT1. Конден-
PIC12F675 Vout
ЇЇ
OSC1 GP0
OSC2 GP1
GP3 GP2
тг
'Ч=Ь
■сп-
о-*>
СМ'
'Ч=ь
о-*>
Т
о—1
Рис. б. Клавиатура 4x4 с использованием одного входа
Є
107
Компоненты и технологии, № 2'2OO3
.Vdd
VD1
GP5 GP0 —
R
GP4 GP1
GP3 GP2 —
"X
C1
V
VD2
Vout
C2
Рис. S. Удвоитель напряжения на переключаемых конденсаторах
сатор С1 фильтрует напряжение питания передатчика, а диод предотвращает разряд конденсатора через линию связи, пока она находится в состоянии лог. «0».
Следует заметить, что напряжение питания передатчика меньше, чем приемника на величину падения на диоде.
Формирование высокого напряжения
Напряжение выше, чем напряжение питания, может быть сформировано с использованием одного вывода микроконтроллера. В режиме внешнего ИС-генератора на выводе ^К0Ш708С2 присутствует тактовая частота, деленная на 4. Когда напряжение на выводе контроллера 0вС2 равно нулю, конденсатор накачки С1 заряжается через диод УБ1 (рис. 8). При напряжении на этом выводе, равном Уіі4 заряд с С1 переносится через диод УБ2 на выходной конденсатор С2. В результате на выходе схемы получаем удвоенное напряжение питания минус падение на двух диодах.
Этот же результат можно получить с помощью любого переключаемого вывода микроконтроллера или вывода ШИМ.
Схема автоматического поддержания питания
Используя схему на переключаемых конденсаторах из предыдущего примера, можно создать устройство, поддерживающее свое питание (рис. 9).
В исходном состоянии транзистор УТ1 закрыт, напряжение питания контроллера У(Ы равно нулю. При нажатии на кнопку напряжение источника питания УЬа1 подается на вывод питания микроконтроллера, и на выводе ^К0иТ/0БС2 в режиме внешнего ИС-генератора возникает генерация. Напряжение, вырабатываемое удвоителем, открывает транзистор УТ1, соединяя шину УЬа1 и У(Ы.
Таким образом, схема начинает поддерживать свое питание.
Для выключения питания контроллера нужно выполнить инструкцию SLEEP, которая остановит тактовый генератор, что в свою очередь выключит питание микроконтроллера. Данный прием позволяет программно выключать питание устройства.
Преимущества:
• практически нулевое потребление тока;
• низкая стоимость (используется n-канальный полевой транзистор);
• высокая надежность;
• не требуется дополнительных выводов микроконтроллера.
Продолжение следует
Vdd
PIC12Fxxx
— GP0 OSC1 —
— GP1 OSC2
— GP2 GP3 —
.Vdd
VD1
т
R
HHI-
сі
.Vbat
V
VT1
VD2
М-
=РС2
R2
К1
о
Vdd
Рис. 9. Схема автоматического отключения питания
1O8
www.finestreet.ru