Советы по программированию микроконтроллеров

Повышение квалификации

Как можно питать устройство на PICах от сети ~220 вольт без понижающего трансформатора?

Можно посоветовать достаточно простую схему питания устройства от сети ~220 вольт, которая обеспечивает ток нагрузки при указанных номиналах элементов до 100 мА, что бывает достаточно во многих случаях.

Резистор R2 должен быть рассчитан на рассеиваемую мощность не менее 0,5 Вт, R3 может быть любой. Конденсатор C1 обязательно должен быть рассчитан на напряжение не менее 250 В. Выходное напряжение определяется стабилитроном VS1. Диод VD1 средней мощности  КД209А можно заменить, например, на 1N4007 (распространенный импортный аналог).

ВНИМАНИЕ: Приведенная схема имеет гальваническую связь с сетью ~220 В, поэтому при наладке и установке устройства соблюдайте правила электробезопасности.

alt

 


 

Почему происходят сбои информации в EEPROM и как от них избавиться?

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

Если выключение питания происходит в моменты обращения к EEPROM, как внутренней (в микросхемах PIC16F84), так и внешней (типа 24CXX и т. п.) с шиной управления I2C, то тоже существует вероятность нарушения хранимой информации. Сбои могут происходить при проникновении импульсных помех через питающие цепи в процессе работы. Могу предложить несколько способов увеличения надежности сохранности данных: программный и схемотехнические.

В программном способе если приходится хранить всего одну-две ячейки, то можно записывать каждое значение три раза подряд. При считывании проверять попарно на равенство и, если значения отличаются, то сравнивать с третьим и, в зависимости от результатов, можно выявить в какой ячейки данные нарушены. При хранении области данных можно поступить так: во-первых хранить две одинаковых области данных (для восстановления одной в случае сбоя во второй), во-вторых, при каждом изменении данных подсчитывать контрольную сумму области и записывать ее в отдельных ячейках EEPROM. При чтении, чтобы удостовериться в целостности информации нужно тоже подсчитывать контрольную сумму и сверять результат со значением, хранящимся там же. Проделывать такую операцию можно во время инициализации после включения прибора один раз, а можно и всякий раз при чтении данных.

При схемотехническом способе решения проблемы можно добавить несколько элементов, как показано синим цветом на рисунке ниже, для контроля момента выключения или аварии напряжения питания для того, чтобы не производить чтение или запись в EEPROM. В принципе схемотехническое решение может быть любым, выполненным как по приведенной схеме, так и с использованием специализированных микросхем мониторов напряжения или другим способом.
Элементы нужно подобрать таким образом, чтобы при уменьшении питающего напряжения ниже порогового уровня на выводе PORTn микроконтроллера появлялся лог "0". А в подпрограммах обращения к EEPROM прежде чем начать цикл записи или чтения опрашивать этот вывод.

alt

Еще одно возможное решение этой проблемы, предложенное Ждановым Михаилом из Великого Новгорода, практически полностью исключает сбои. Это решение основано на дешевой микросхеме LP2951. Сигнал сброса поступает на PIC когда напряжение питания достигнет 5,7 вольта, а также и при выключении (задаётся диодом). Конденсатор на VCC PICа поддерживает питание некоторое время, срезая переходные процессы.

alt

Для надежного сброса микроконтроллера можно использовать схему на микросхеме DS1233 фирмы Dallas, приведенную ниже. Она надежно отслеживает питание, и запускает микроконтроллер PIC через 0,1 сек после установки номинального. Чтобы помехи по питанию не вызывали ложные сбросы м/с DS1233 включается через цепочку R1C1C2.

alt

Для уменьшения влияния внешних воздействий желательно неиспользуемые выводы микроконтроллера программировать как входы и подключать к шине питания или земли (это уменьшает и энергопотребление за счет отсутствия случайных переключений входных ключей портов). Еще можно оставить неиспользуемые выводы свободными, но при этом запрограммировать их как выходы. А при разводке печатной платы желательно разместить фильтрующий керамический конденсатор, емкостью 0,01-0,1 мкф, между выводами питания микроконтроллера. Обычно эти выводы расположены напротив друг друга. Цепи генератора тактовых импульсов (кварцевый резонатор, RC цепочка) и цепи сброса микроконтроллера лучше делать как можно короче. Вокруг печатной платы по периметру желательно провести шину земли. При такой конфигурации ни включение/выключение рядом силовых приборов, ни подключение осциллографа не вызовет ложных срабатываний или пересбросов процессора.
При разводке печатной платы следует учитывать некоторые моменты. Во-первых, входные сигналы следует вести "к" микроконтроллеру, а не "сквозь" него. Не доводя сигнал до ножки желательно поставить небольшой керамический фильтрующий конденсатор, чтобы короткая импульсная помеха уходила в землю. Затем, для ограничения тока можно поставить сопротивление. Во-вторых, не плохо обвести "землю" вокруг микроконтроллера.


Как получить напряжение отрицательной полярности?

Иногда для питания операционных усилителей или компараторов требуется напряжение отрицательной полярности. Получить его можно просто, используя один из портов микроконтроллера PIC, выдавая непрерывно последовательность импульсов. Схема представлена на рисунке ниже:

alt

Вот еще одна схема получения напряжения отрицательной полярности. Она проще, в ней отсутствует индуктивность. Выходное напряжение составляет примерно -3,5 Вольт при использовании кремниевых диодов. Данную схему можно применять там, где не требуется стабилизированное напряжение, например, для питания некоторых операционных усилителей или компараторов, или для подачи напряжения регулирования контрастности ЖКИ модулей. Иногда это требуется в моделях ЖКИ, рассчитанных на работу при отрицательных температурах.

alt


 

Как сделать сенсорную кнопку в устройстве на PICе?

Можно заменить в устройствах на PIC микроконтроллерах механическую кнопку на емкостную сенсорную. Схема подключения на рисунки ниже:

alt

ВАРИАНТ 1: Сенсорная площадка - любая металлическая пластина небольших размеров (1-2 кв. см.). Идея заключается в том, что при прикосновении к датчику увеличивается суммарная емкость и изменяется время заряда конденсатора C1. Это видно из представленных диаграмм:

alt

При программировании можно поступить таким образом: при включении устройства запрограммировать верхний по схеме вывод как выход и установить его в лог. "0", а нижний как вход. Через небольшую задержку установить на выводе, запрограммированном как выход лог. "1" и запустить таймер. Когда лог. "1" появится на нижнем выводе, запомнить показание таймера. Это будет константа для свободного сенсора. При опросе в процессе работы программы поступать таким же образом и сравнивать полученное значение с запомненным. Если полученное значение превышает константу, то считать, что есть прикосновение к датчику. Разница задержек установления лог. "1" на входе между свободным сенсором и нажатым составляет примерно 1-2 мкс.

ВАРИАНТ 2: схема работает аналогичным образом, только вместо двух портов используется один, который переключается с вывода на ввод. С состоянии ожидания вывод порта запрограммирован как выход и установлен в лог. "0". Конденсатор С2 разряжен. Конденсатор С1 служит для развязки потенциала тела человека и потенциала вывода микроконтроллера. При опросе вывод PICа переключается на ввод и измеряется время появления лог. "1" на этом выводе. Временная диаграмма соответствует той, что описывает в верхней схеме (вариант 1) вывод вход. После этого сравнивается измеренная величина и константа, запомненная и измеренная при инициализации (включении устройства) как в первом случае.

alt


Как сделать простой цифро-аналоговый преобразователь (ЦАП, DAC)?

Если большая точность ЦАП не требуется, то можно обойтись более дешевым способом, без использования специализированных дополнительных микросхем микросхем. Приведем способ 8-ми битного ЦАП с использованием матрицы резисторов R-2R. К недостаткам можно отнести то, что для реализации требуется 8 портов I/O. Ошибка составляет 1 младший разряд.

alt


 

Как упростить работу с отладочным кристаллом и продлить срок службы?

При использовании отладочных JW кристаллов большая часть времени уходит на его стирание. Да и каждое стирание уменьшает срок службы кристалла. На самом, деле стирать каждый раз кристалл нет необходимости, поскольку реальная программа обычно многократно помещается в его объеме. Нужно просто дописывать новые версии программы в старшие адреса, до заполнения ПЗУ. Команды перехода к новой версии записываются друг за другом, начиная с адреса сброса. Предыдущие команды замещаются командой NOP. Таким образом можно не только сократить время на отладку программы но и увеличить срок службы кристалла. Проверено!

Следует заметить, что некоторые кристаллы имеют страничную организацию памяти. Например, в 16C505 подпрограммы могут располагаться в первых 256 ячейках памяти программ (0x000 - 0x100). Связано это с тем, что в команде перехода к подпрограмме call присутствует только 8 бит адреса ячейки памяти начала подпрограммы, девятый бит теряется (устанавливается в "0"), а десятый берется из бита PA0 регистра STATUS. Правда замечено, что возможно вызывать подпрограммы из второй половины области памяти программ, расположенные в первых 256 ячейках этой половины. Тоесть, из области 0x200 - 0x3FF можно вызывать подпрограммы из области 0x200 - 0x2FF. Только при этом должен быть установлен в "1" бит PA0 регистра STATUS для правильного возврата из подпрограммы.


Есть PIC(+5В) и есть К561ИД1(Дешифратор +12В). Как согласовать логические уровни? Не сгорит ли PIC если попытаться подтянуть выходные линии PIC до 12В через резисторы?

Подтянуть не удастся потому, что практически все порты имеют полный КМОП драйвер при использовании портов как выходы. И еще, порты имеют защитные диоды на  землю и питание.

alt

В некоторых контроллерах есть порт (например в PIC16F84 это RA4), выполненный по схеме "открытый сток". Его можно подтянуть до 12В, но такой порт только один.

http://kazus.ru/articles/44.html