Использование вывода MCLR микроконтроллера PIC в качестве выхода
Хотя производители микроконтроллеров стараются предлагать разработчикам продукты, которые почти точно соответствуют требованиям их проектов, часто бывает так, что не хватает всего одного выходного контакта. Такая ситуация особенно типична для небольших конструкций, использующих микроконтроллеры с восемью выводами или менее. В этой статье используется микроконтроллер PIC10F222 компании Microchip. PIC10F222, выпускаемый в корпусе SOT23-6, имеет три контакта ввода-вывода, один входной контакт, ПЗУ, флеш-память и модуль АЦП. Программировать эти крошечные микроконтроллеры нужно точно так же, как их старших братьев. Для этого требуются вывод MCLR, две линии ввода-вывода (данные и тактовый сигнал) и выводы питания (VCC и GND). Чтобы войти в режим программирования, понадобятся выводы MCLR и питания. Поскольку микроконтроллер должен различать нормальный режим и режим программирования, в режиме программирования напряжение на выводе MCLR обычно достигает примерно 12 В. После этого при нормальной работе вывод MCLR можно настроить либо как вход внешнего сброса, либо как выход.
Рисунок 1. | Добавление MOSFET и соответствующих цепей к входному контакту MCLR микроконтроллера PIC превращает этот контакт в выход. |
В этой конструкции один контакт был необходим для аналогового ввода, а остальные три для вывода. Таким образом, в рассматриваемой схеме потребовался дополнительный выход. По этой причине вывод MCLR в этой схеме используется в качестве выхода. Для простоты на Рисунке 1 показана только одна выходная цепь, связанная с выводом GP3/MCLR. Чтобы вывод GP3/MCLR мог работать как выход, в схеме используются конфигурируемые слабые подтягивающие резисторы, имеющиеся в этом микроконтроллере. Контакт GP3/MCLR должен работать на вывод, для чего в слове конфигурации микроконтроллера следует установить бит глобальный слабой подтяжки. Хотя индивидуальное конфигурирование резисторов слабой подтяжки невозможно, это не является проблемой, поскольку все остальные контакты настраиваются как аналоговые входы или цифровые выходы.
Резисторы слабой подтяжки, в зависимости от напряжений питания, имеют сопротивления от 20 до 150 кОм, поэтому для управления более сильноточными нагрузками, такими как изображенный светодиод. в этой схеме используется транзистор Q1. Резистор R1 закрывает транзистор при отключении подтяжки. Поскольку затвор транзистора управляется сопротивлениями, максимальная частота переключения зависит от выбранного транзистора. Наихудшая ситуация возникает, когда транзистор Q1 нужно выключить. Время выключения транзистора Q1 определяется его емкостью затвор-исток и сопротивлением резистора R1.
Напряжения программирования для вывода MCLR равны примерно 12 В. Следовательно, транзистор Q1 должен выдерживать напряжение затвор-исток, превышающее это значение. Для выбранного MOSFET это напряжение составляет ±18 В. По этой причине не следует использовать в схеме цифровые MOSFET. Эту схему можно использовать и с другими микроконтроллерами PIC, а также почти со всеми микроконтроллерами семейства RS08KA компании Freescale.
Программирование микроконтроллеров PIC. Часть 6. Как перевести контроллер в режим программирования и залить в него прошивку
В предыдущих частях мы разобрались что представляет из себя контроллер, как он работает и как написать для него программу. Следующее, что нам нужно сделать — это залить полученную программу в память контроллера (или ещё говорят «прошить контроллер»). Для этого существуют специальные инструменты — программаторы.
Программатор состоит из аппаратной части (обычно в быту именно эту аппаратную часть и называют программатором, поэтому мы тоже в дальнейшем сузим термин «программатор» только до его аппаратной части) и программной части. Аппаратная часть предназначена для физической организации необходимых для программирования сигналов (с правильными уровнями и фронтами). Программная часть предназначена для управления аппаратной частью, она реализует правильные алгоритмы (последовательности и задержки включения и выключения различных сигналов аппаратной части), необходимые для записи программы в память контроллера. Чаще всего программная часть делается в виде компьютерной программы, а управление аппаратной частью она осуществляет через какой-либо компьютерный интерфейс, к которому подключается аппаратная часть (обычно RS-232, LPT или USB).
Различные схемы и программы для программирования контроллеров можно легко найти в сети интернет или даже придумать самому. Некоторые из таких схем и программ выложены у нас на сайте, их можно найти вот по этим ссылкам: схемы различных программаторов, программы для прошивки контроллеров.
Как вообще происходит прошивка всяких разных контроллеров? Сначала контроллер специальным образом переводится в режим программирования (то есть контроллеру сообщают, что его собираются программировать). Способы перевода есть различные: специальная последовательность сигналов на определённых ногах, специальные уровни напряжения (например, подача напряжения 12В на определённую ногу, вместо обычных 5 вольт) или и то и другое вместе. Обычно после перехода в режим программирования все неиспользуемые в процессе программирования ноги автоматически переводятся контроллером в высокоомное состояние. Далее в контроллер по последовательному или параллельному интерфейсу передаются команды (запись/чтение/стирание…) и, при необходимости, данные (если мы записываем прошивку, то мы передаём данные, если считываем — контроллер передаёт нам данные…). Подробнее о процессе программирования можно почитать в спецификациях по программированию, выпускаемых производителями контроллеров. Например, спецификации по программированию PIC-контроллеров можно скачать с сайта microchip.com (в разделе design support -> programming specifications). Спецификаций там очень много, поэтому мы вкратце обобщим размещённые в них сведения.
Итак, в микроконтроллерах PIC, фирмы Microchip, обычно реализовано программирование по последовательному интерфейсу. При этом две ноги контроллера используются для организации самого интерфейса (сигналы clock — тактирование и data — данные) и ещё одна или несколько ног используются для перевода контроллера в режим программирования и удержания его в этом режиме (Vpp, PGM…).
Различают два основных метода программирования: высоковольтное (HVP — high voltage programming) и низковольтное (LVP — low voltage programming). В первом методе для перевода контроллера в режим программирования дополнительно используется более высокое напряжение (Vpp — напряжение программирования) по сравнению с рабочим (Vdd). Во втором методе никаких дополнительных напряжений использовать не нужно. В контроллерах, в зависимости от модели, могут быть реализованы оба метода сразу, а может быть реализован только какой-то один из методов.
В обоих методах существуют различные алгоритмы перевода контроллера в режим программирования (опять же, в зависимости от конкретной модели). Более того, в контроллере может быть заложено сразу несколько таких алгоритмов.
Далее я попробую описать наиболее распространённые алгоритмы перевода контроллеров PIC в режим программирования из обоих методов.
1. High Voltage Programming, «Vpp-first». Суть метода: сначала на специальную ногу подаётся напряжение программирования (Vpp), потом, не раньше, чем через определённый промежуток времени (T1), подаётся питание (Vdd). Через определённый промежуток после этого (T2) контроллер перейдёт в режим программирования и можно будет начинать обмен данными (используя линии clock и data). На начальном этапе, всё то время, пока контроллер переводится в режим программирования, на интерфейсных ногах должен быть нулевой уровень. Ниже представлена диаграмма сигналов, соответствующая этому алгоритму:
2. High Voltage Programming, «Vdd-first». Суть метода: сначала подаётся рабочее напряжение (Vdd), потом, не раньше, чем через определённый промежуток времени (T1), на специальную ногу подаётся напряжение программирования (Vpp). Через определённый промежуток после этого (T2) контроллер перейдёт в режим программирования и можно будет начинать обмен данными (используя линии clock и data). Так же, как и в предыдущем алгоритме, на начальном этапе (всё то время, пока контроллер переводится в режим программирования) на интерфейсных ногах должен быть нулевой уровень. Ниже представлена соответствующая диаграмма сигналов:
3. Low Voltage Programming, «Special Sequence». Суть метода: через определённый промежуток времени (T1) после подачи рабочего напряжения (Vdd), контроллеру посылается специальный 32-х битный ключ, после чего контроллер переходит в режим программирования. При этом нога MCLR/Vpp должна быть притянута к общему проводу. Второй вариант этого же алгоритма (если рабочее напряжение уже приложено к контроллеру) заключается в следующем: нога MCLR/Vpp притягивается к общему проводу, через определённое время (T2) после этого контроллеру посылается специальный 32-х битный ключ, после чего контроллер переходит в режим программирования. Ниже представлены соответствующие диаграммы сигналов:
4. Low Voltage Programming, «Special Pin». Суть метода: при установке в слове конфигурации специального бита (LVP) один из выводов (PGM) контроллера начинает использоваться для перевода контроллера в режим программирования (соответственно, использовать этот пин в качестве цифрового входа/выхода уже нельзя). Так вот, в этом случае перевод контроллера в режим программирования осуществляется подачей высокого уровня (Vdd) на ногу PGM и через некоторое время после (T1) этого подачей высокого уровня (Vdd) на ногу (MCLR/Vpp). Ниже представлены соответствующие диаграммы сигналов:
При внимательном рассмотрении видно, что некоторые алгоритмы (2,3,4) позволяют перейти в режим программирования не снимая с контроллера рабочее напряжение питания. При специальной разводке платы эти алгоритмы позволяют программировать контроллер, что называется, «на лету». Способ, при котором контроллер программируется прямо в готовом изделии называется ICSP — in circuit serial programming (по-русски обычно говорят просто — внутрисхемное программирование).
На этом, пожалуй, и всё. Вот здесь можно найти таблицу контроллеров PIC фирмы Microchip, в которой указано, какие алгоритмы перевода в режим программирования поддерживают конкретные модели контроллеров, а также допустимые диапазоны значений Vpp (для контроллеров, поддерживающих HVP).
Mclr в pic что это
Решил освоить микроконтроллеры. Электроникой занимаюсь для удовольствия, ну и чтобы не быть совсем профаном при беседах с сотрудниками лаборатории, занимающимися разработкой новой электроники для систем диагностики газовых потоков.
Начал с простенького PIC16F84. Разработал небольшой проект в Протеусе. Написал прогу на ассемблере, засунул в Протеус, и, как ни странно, всё заработало.
Захотелось воплотить, так сказать, в железе.
Не отступая от традиций, решил собрать AN589 программатор. Ну и в азарте прикрутил к нему DC-DC преобразователь напряжения 5-›10…14 вольт (на MAX762), чтобы запитывать это всё от USB, т.к. толкового блока питания у меня нет. На макетке всё заработало. Вроде и PIC16F84A прошивался нормально.
Собрал всё на печатке и ВОТ НАЧАЛОСЬ:
Проблема №1: При подключении PIC16F84A (2 шт из разных партий), PIC16F877 напряжение на MCLR не превышает 10,5 вольт, хотя DC преобразователь выдаёт положенные 13,5. Греется транзистор VT2 по схеме.
Проблема №2: При подключении PIC16F877A напряжение на MCLR в норме, но чтение схемы идёт с ошибками (программатор подключён непосредственно к LPT). О программировании в таких условиях и говорить не приходится.
Проблема №3: И радость и разочарование. PIC16F874 и программируется и читается без проблем. И с кабелем LPT (1.5 м) и без него. MCLR в норме ничего не греется.
Подскажите, что может быть не так.
По форумам поискал. Путной информации нет.
Есть зацепки:
1. При понижении напряжения на MCLR ниже земли через контроллер может течь большой ток (до 80 мА), что может привести к большому падению напряжения на переходе транзистора и далее …. не знаю как это связано с моей схемой.
2. В новых контроллерах нужно отключать режим низковольтного программирования. Но PIC16F84A такого не имеет …. или я не прав.
3. Ещё есть, что-то с подачей питания на PIC и задержкой подачи напряжения программирования, в результате чего начинается исполнение программы и … далее непонятно.
Буду благодарен за любую помощь.
Схема программатора и печатной платы прилагается.
Последовательная связь в микроконтроллере PIC: руководство для начинающих
В данной статье мы рассмотрим организацию последовательной связи (UART) между микроконтроллером PIC и персональным компьютером. Несмотря на то, что в современных персональных компьютерах последовательный (COM) порт уже в явном виде не используется, во встраиваемой электронике он продолжает широко применяться.
В данном проекте мы рассмотрим последовательную связь в микроконтроллере PIC16F877A, который имеет модуль под названием USART (Addressable Universal Synchronous Asynchronous Receiver and Transmitter – универсальный синхронно-асинхронный приемопередатчик). USART представляет собой двухпроводную систему, в которой данные передаются последовательно. USART является полно дуплексным интерфейсом, что означает что данные в нем можно передавать и принимать одновременно.
USART может быть сконфигурирован для работы в следующих режимах:
- асинхронный (полный дуплекс);
- синхронный ведущий (Master) (полудуплекс);
- синхронный ведомый (Slave) (полудуплекс).
Также в USART существует еще два различных режима, которые называются 8-битный и 9-битный. В данном проекте мы сконфигурируем работу USART в 8-битном асинхронном режиме, как наиболее часто применяемом в системах встраиваемой электроники. Поскольку режим асинхронный, то в нем нет необходимости передавать сигнал тактовой частоты.
UART (Universal Asynchronous Receiver/Transmitter – универсальный асинхронный приёмопередатчик) использует две линии – для передачи (Tx) и приема (Rx) данных. Данный тип связи не имеет общей линии синхронизации, поэтому наличие общего провода (земли) крайне необходимо для работы подобной системы.
Структурная схема организации последовательной связи между микроконтроллером PIC16F877A и компьютером в нашем проекте приведена на следующем рисунке.
С компьютера мы с помощью последовательной связи будем передавать сигналы, которые будут включать/выключать светодиод, подключенный к микроконтроллеру PIC. А с микроконтроллера PIC на компьютер по последовательной связи будет передаваться информация о состоянии светодиода. Тестирование проекта мы будем осуществлять с помощью программы Hyper Terminal, запущенной на компьютере. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Необходимые компоненты
Аппаратное обеспечение
- Микроконтроллер PIC16F877A (купить на AliExpress).
- Модуль конвертера RS232 в USB.
- Программатор PICkit 3 (купить на AliExpress).
- Держатель микросхем на 40 контактов (купить на AliExpress).
- Кварцевый генератор 20 МГц (купить на AliExpress).
- Конденсатор 33 пФ – 2 шт. (купить на AliExpress).
- Светодиод (купить на AliExpress).
- Компьютер.
- Перфорированная плата.
Программное обеспечение
- MPLABX.
- HyperTerminal.
Конвертер RS232 в USB необходим для преобразования последовательных данных, поступающих от микроконтроллера PIC, в форму, удобную для считывания компьютером. Данный конвертер можно как купить готовым, так и сделать самому. Внешний вид конвертера RS232 в USB представлен на следующем рисунке.
Примечание : каждый конвертер RS232 в USB требует установки специального драйвера. Для большинства подобных конвертеров подобный драйвер устанавливается автоматически как только вы подключите конвертер к компьютеру. Но не для всех, поэтому обратите на этот вопрос особое внимание.
Программирование микроконтроллера PIC для работы с UART
Для программирования работы микроконтроллера PIC с использованием последовательной связи необходимо инициализировать USART модель микроконтроллера. Мы будем настраивать его для работы в 8-битном режиме. После настройки битов конфигурации можно приступать к настройке модуля UART.
Инициализация модуля UART микроконтроллера PIC
Линии последовательной связи Tx и Rx микроконтроллера PIC расположены на его контактах RC6 и RC7. Запрограммируем контакт TX для работы в качестве цифрового выхода, а контакт RX – в качестве цифрового входа.