Большие возможности маленького PIC-контроллера
Малые размеры и ограниченное число портов ввода-вывода 8-выводных контроллеров PIC12Fxxx компании Microchip — не помеха при создании довольно сложных устройств. Используя схемотические и программные трюки, эти контроллеры можно применять в задачах, где традиционно используются их стпршие братья.
Фирма 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 выводов
Высокий выходной ток (до 20 мА) портов ввода-вывода микроконтроллеров PIC12Fxxx позволяет подключать светодиоды без применения дополнительных драйверов. Управление свечением отдельных светодиодов или их комбинаций может быть осуществлено с помощью установки вывода микроконтроллера в «1 », «0 » или переключение его на вход. Число диодов (D), которое может управляться независимо, определяется числом используемых выводов микроконтроллера (GP) и рассчитывается по следующей формуле:
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 » или не подключен. Конденсатор заряжается или разряжается в зависимости от состояния выходного порта GP и позволяет определить все три состояния. Вход микроконтроллера находится в третьем состоянии, если при выставлении уровня лог. «1 » на порт GP с этого порта считывается «1 » и при выставлении лог. «0 » считывается «0 ».
Внешний RC-генератор с изменяемой частотой генерации
Частота внешнего RC-генератора определяется параметрами внешней цепи, подключенной к выводу OSC1. Сопротивление этой цепи можно изменять, управляя напряжением на выводе порта GP. Уровень лог. «1 » на GP0 подключает резистор R2 параллельно R1, таким образом, общее сопротивление цепи уменьшается, и частота генерации увеличивается. Перевод состояния GP0 на вход увеличивает сопротивление RC-генератора, тем самым уменьшая его частоту. Данный прием позволяет изменять частоту тактирования микроконтроллера, изменять быстродействие системы, а значит, изменять потребление микроконтроллера в зависимости от выполняемой задачи.
Обработка нескольких кнопок с помощью одного входа
Микроконтроллеры PIC12Fxxx имеют аналоговый компаратор с программируемым источником опорного напряжения, а также два таймера с разрядностью 8 и 16 бит. Следующий пример показывает, как, используя только один вход микроконтроллера с компаратором, а также один из таймеров, можно определить нажатие одной из нескольких кнопок.
Время заряда конденсатора C1 (рис.4) определяется сопротивлением резисторов, подключенных между цепью напряжения питания и конденсатором. При изменении сопротивления изменяется время заряда. Когда какая-либо кнопка нажата, напряжение питания подключается к конденсатору через определенное количество резисторов и общее сопротивление зарядной цепи уменьшается, уменьшая время заряда. Использование таймера совместно с компаратором позволяет измерять время заряда, а значит, и определять, какая из кнопок нажата.
Программная последовательность:
- Конфигурируем GP2 как выход с уровнем лог. «0 » для разрядки конденсатора.
- Конфигурируем GP2 как один из входов компаратора, другой вывод компаратора подключается к внутреннему источнику опорного напряжения.
- Запускаем таймер и измеряем время до срабатывания компаратора.
Если измеренное время соответствует максимальному для данной схемы, значит, ни одна из кнопок не нажата, и процедура опроса клавиатуры повторяется. Когда какая-либо кнопка нажата, скорость нарастания пилообразного сигнала увеличивается, а время срабатывания компаратора уменьшается.
Обработка нескольких кнопок с помощью одного входа с выходом из режима SLEEP
Микроконтроллеры PIC12Fxxx имеют режим микропотребления SLEEP. В этом режиме работа ядра останавливается, и потребление контроллера может снизиться до 0,9 мкА. Работу предыдущего примера можно дополнить функцией выхода из режима SLEEP при нажатии какой-либо кнопки. Для реализации этой возможности необходимо использовать дополнительный вывод микроконтроллера (рис.5).
До входа в режим SLEEP нужно сконфигурировать вывод GP2 как выход с установленным уровнем лог. «1 », а GP1 — как вход с возможностью прерывания по изменению состояния.
Подтягивающий резистор R1 удерживает GP1 в низком состоянии. При нажатии кнопки вход GP1 переводится в высокое состояние через GP2 и Vdd, что приводит к возникновению прерывания и выходу микроконтроллера из SLEEP. После этого нужно записать в GP2 лог. «0 » для разряда конденсатора C1 через резистор R2. Затем GP1 устанавливаем в лог. «1 », а GP2 конфигурируем как вход компаратора для измерения времени заряда конденсатора.
Программная последовательность:
- GP1 соединяется с общим выводом кнопок.
- Разрешить прерывание по изменению состояния порта GP1.
- До включения режима SLEEP установить GP1 как вход, а GP2 как выход с лог. «1 ».
- Если кнопка нажата, микроконтроллер выходит из SLEEP, установить в GP2 лог. «0 » для разряда конденсатора.
- Установить GP1 в лог. «1 », определить, какая кнопка нажата, путем измерения времени заряда.
Клавиатура 4×4 с использованием одного входа
Микроконтроллер PIC12F675 имеет в своем составе 10-разрядный АЦП с временем измерения до 20 мкс. Наличие встроенного АЦП позволяет реализовать клавиатуру с большим количеством кнопок, используя всего один вход (см.рис.6). При правильном выборе значений номиналов резисторов замыкание каждой из кнопок сформирует уникальное напряжение, соответствующее именно этой кнопке. Измеряя напряжение Vout с помощью АЦП, можно определить, какая именно кнопка нажата. Для однозначности определения нажатой клавиши лучше использовать точные резисторы. Если ни одна из кнопок не нажата, измеренное напряжение будет около 0 В.
Питание устройства и обмен данными по одной линии
Один вывод микроконтроллера (МК1) может использоваться для однонаправленной связи и как источник питания для другого (МК2). Линия ввода-вывода микроконтроллера МК1 удерживается в высоком состоянии подтягивающим резистором R1 и подает питание на МК2. Микроконтроллер МК2, в свою очередь, может передавать данные по этой же линии с помощью транзистора VT1. Конденсатор С1 фильтрует напряжение питания передатчика, а диод предотвращает разряд конденсатора через линию связи, пока она находится в состоянии лог. «0 ».
Следует заметить, что напряжение питания передатчика меньше, чем приемника на величину падения на диоде.
Формирование высокого напряжения
Напряжение выше, чем напряжение питания, может быть сформировано с использованием одного вывода микроконтроллера. В режиме внешнего RC-генератора на выводе CLKOUT/OSC2 присутствует тактовая частота, деленная на 4. Когда напряжение на выводе контроллера OSC2 равно нулю, конденсатор накачки С1 заряжается через диод VD1 (рис.8). При напряжении на этом выводе, равном Vdd, заряд с С1 переносится через диод VD2 на выходной конденсатор С2. В результате на выходе схемы получаем удвоенное напряжение питания минус падение на двух диодах.
Этот же результат можно получить с помощью любого переключаемого вывода микроконтроллера или вывода ШИМ.
Схема автоматического поддержания питания
Используя схему на переключаемых конденсаторах из предыдущего примера, можно создать устройство, поддерживающее свое питание (рис.9).
В исходном состоянии транзистор VT1 закрыт, напряжение питания контроллера Vdd равно нулю. При нажатии на кнопку напряжение источника питания Vbat подается на вывод питания микроконтроллера, и на выводе CLKOUT/OSC2 в режиме внешнего RC-генератора возникает генерация. Напряжение, вырабатываемое удвоителем, открывает транзистор VT1, соединяя шину Vbat и Vdd. Таким образом, схема начинает поддерживать свое питание.
Для выключения питания контроллера нужно выполнить инструкцию SLEEP, которая остановит тактовый генератор, что в свою очередь выключит питание микроконтроллера. Данный прием позволяет программно выключать питание устройства.
Преимущества:
- практически нулевое потребление тока;
- низкая стоимость (используется n-канальный полевой транзистор);
- высокая надежность;
- не требуется дополнительных выводов микроконтроллера.
Продолжение следует