Пример подключения кнопок. Подключение светодиодов к микроконтроллеру AVR Как подключить светодиод к микроконтроллеру

Распространенной задачей является подключение кнопок к микроконтроллеру. Несмотря на кажущуюся простоту, эта задача имеет некоторые, возможно неочевидные особенности.

Будем рассматривать наиболее простой и распространенный вариант кнопки, зачастую называемый тактовой кнопкой, имеющую два нормально разомкнутых контакта, замыкаемых при нажатии на кнопку.

Подключение кнопки к микроконтроллеру

Если мы подключим один из контактов, например, к общему проводу («земле»), а второй к выбранному выводу микроконтроллера, переключенного в режим входа, то выяснится, что такой метод не работает. При нажатии кнопки вывод микроконтроллера соединяется с землей, и программа будет считывать (с помощью функции digitalRead) логический 0 с этого вывода, но при отпущенной кнопке вывод микроконтроллера не будет соединен ни с какой линией, что часто называют «висит в воздухе». В таком режиме программа будет считать с вывода и 0 и 1 совершенно случайным образом.

Правильное подключение предполагает, что в разомкнутом состоянии вывод микроконтроллера должен быть соединен через резистор, например с шиной питания, а в замкнутом - с землей, либо наоборот. Сопротивление резистора не должно быть слишком маленьким, чтобы ток, текущий через него при замкнутых контактах кнопки не был слишком большим. Обычно используют значения порядка 10-100 кОм. Оба варианта подключения можно изобразить следующим образом:

Первый вариант предпочтительнее, поскольку подтягивающие к +5В резисторы уже есть внутри микроконтроллера – их нужно только программно включить. Кнопка будет либо соединять вывод микроконтроллера с землей, либо разъединять, и тогда он "притянется" резистором к +5В.

После того, как вывод микроконтроллера установлен в режим входа, чтобы включить на нем подтягивающий резистор нужно "записать" в него 1.

Пример программы, зажигающей светодиод на 13 выводе при нажатии кнопки на 2 выводе будет выглядеть примерно так:

Обращаем внимание на то, что значение, прочитанное с 2 вывода, инвертируется с помощью оператора «!», поскольку при нажатии на кнопку будет считываться «0», а при ее отпускании «1».

Дребезг контактов

На практике зачастую приходится бороться с таким явлением, как дребезг контактов, которое заключается в том, что при соприкосновении или расхождении контактов в механических переключающих устройствах, таких, как реле или кнопка, происходит многократное замыкание и размыкание. Схематично это может быть представлено следующим образом:

Чтобы микроконтроллер не обработал такую пачку переключений как множественное нажатие и отпускание кнопки нужно либо применить специальную схему, либо побороть дребезг программно. Идея программной борьбы проста – после того, как произошло переключение (от момента нажатия или отпускания кнопки), в течение некоторого защитного интервала времени игнорировать любые другие переключения.

Существует специальная библиотека Bounce, упрощающая борьбу с дребезгом контактов, и имеющая дополнительные возможности:

Как и в большинстве случаев, установка библиотеки сводится к распаковке архива в подпапку \hardware\libraries\ папки с ПО Arduino.

Полная документация на библиотеку может быть найдена на сайте разработчика, а здесь рассмотрим только наиболее важное.

Bounce – конструктор объекта

Bounce имя_объекта = Bounce(вывод, интервал);

Создает экземпляр класса Bounce, принимает номер вывода, с которого будет считываться сигнал, и длительность защитного интервала в миллисекундах. После создания объекта можно вызывать его методы.

Метод Bounce::update

имя_объекта.update()

Возвращает значение типа int – истину, если состояние вывода изменилось, ложь, если нет.

Метод Bounce::read

имя_объекта.read()

Возвращает значение типа int – состояние вывода.

Метод Bounce::rebounce

имя_объекта.rebounce(время_повтора)

Повторяет последнее произошедшее событие через заданное время в миллисекундах.

Рассмотрим исходный код программы, посылающей в последовательный порт сообщение «pressed» при нажатии кнопки, сообщение «released» при ее отпускании, и повторяющей сообщение «pressed» каждые пол секунды при удержании кнопки.

#include

Bounce bouncer = Bounce(2 , 40 ) ; //создаем экземпляр класса Bounce для 2 вывода

void setup()
{
pinMode(2 , INPUT) ; //переключаем 2 вывод в режим входа
digitalWrite(2 , 1 ) ; //включаем на нем подтягивающий резистор
Serial.begin (9600 ) ; //установка порта на скорость 9600 бит/сек
}

void loop()
{
if (bouncer.update () ) { //если произошло событие
if (bouncer.read () == 0 ) { //если кнопка нажата
Serial.println ("pressed" ) ; //вывод сообщения о нажатии
bouncer.rebounce (500 ) ; //повторить событие через 500мс
} else {
Serial.println ("released" ) ; //вывод сообщения об отпускании
}
}
}

Первым примером в изучении микроконтроллеров является подключение и управление светодиодом, это самый простой и наглядный пример. Этот пример стал классическим при изучении микроконтроллеров, как программа "Hello World!" при изучении прочих языков программирования.

Светодиоды могут использоваться для индикации в различных электронных устройствах. Отображать режимы работы устройства, выводить сообщения об ошибках, информацию о наличии или отсутствии управляющего сигнала и т.д.

Из документации на микроконтроллер мы знаем, что у микроконтроллеров AVR максимальный ток, который способна пропустить каждая линия порта ввода/вывода составляет 40 mA. Превышение этого значения выведет из строя вывода порта. Поэтому ток, протекающий через вывод микроконтроллера не должен превышать 30 mA , самым оптимальным будет ток 20 mA.

Подключить светодиод к микроконтроллеру можно двумя способами

1. Подключение маломощного светодиода

Если ток потребления светодиода в рабочем режиме не превышает 30 мА, а номинальное напряжение не превышает напряжения питания микроконтроллера, то мы можем подключать его к линии порта ввода/вывода.

Что бы ограничить ток, протекающий через ножку микроконтроллера нужно рассчитать номинал резистора R1 .

Сопротивление рассчитывается по формуле:

R = (Vs - Vd) / I

где Vs - напряжение источника питания, Vd - прямое напряжение светодиода, а I

R = (5 V - 2.5 V) / 0.020 A = 150 Om

Таким образом, мы нашли R1 = 150 Om и дальше подбирается ближайшее большее значение сопротивления.

Если не известно прямое напряжение светодиода, сопротивление можно рассчитать по закону Ома.

R = U / I

где U - напряжение источника питания, а I - номинальный ток светодиода.

R = 5 V / 0.020 A = 250 Om

Определив номинал резистора R1 , необходимо рассчитать мощность P , измеряемая в ваттах, которая будет выделяться в резисторе, в виде тепла при протекании тока в цепи.

P = I * U

где U - напряжение, приложенное к участку цепи, а I - номинальный ток светодиода

P = 0.020 A * 5 V = 0.1 W

Рассчитав выделяемую мощность на резисторе, выбираем ближайшее большее значение мощности резистора. Если рассеиваемой мощности резистора будет недостаточной, то он может выйти из строя.

Если светодиод используется для индикации потребляемый ток можно ограничить до 10 mA. Очень заметных изменений в свечении светодиода мы не заметим, а время работы источника питания увеличим, если это батарейки или аккумулятор.

2. Подключение мощного светодиода

Если значение номинального тока светодиода превышает предельное значению тока линии вывода, либо напряжение питания светодиода больше чем значение питания микроконтроллера, тогда для подключения светодиода необходимо использовать буферный элемент - транзистор в режиме ключа.

Таким образом, мы ушли от токовых ограничений вывода линии порта микроконтроллера. Резистор на базе - ограничительный. Может варьироваться в широких пределах 1-10 kOm, в любом случае транзистор будет работать в режиме насыщения. Использовать можно любой N-P-N транзистор. Коэффициент усиления, практически не имеет значения. Выбирается транзистор по току коллектора (нужный нам ток) и напряжению коллектор - эмиттер (напряжение которым запитывается нагрузка). Необходимо учитывать, что значение максимально допустимого тока коллектора транзистора должно быть больше чем значение номинального тока светодиода, а так же не забывать про рассеиваемую мощность транзистора.

Определившись со схемой подключения светодиода к микроконтроллеру ATmega8 нам нужно на чем-то эту схему собрать.

1. Собрать нашу схему в симуляторе Proteus. Этот способ хорош тем, что можно быстро собрать схему, не нужно тратить деньги на приобретение радиокомпонентов.

2. Собрать схему на макетной плате и прошить микроконтроллер программатором. Придется потратить деньги, но мы получим опыт подкрепленный практикой.

Собрав схему можно преступить к написанию программы в
Исходный код:

#include //Включаем библиотеку для работы с микроконтроллером ATMega8 #include //Включаем библиотеку для организации задержек #define led 10 //Создаем идентификатор led void main(void) { PORTC=0x00; //Выставляем все выходы порта C на 0, то есть, выключаем весь порт C DDRC=0xFF; //Делаем порт C, как выход, чтобы на выходах порта было напряжение 5В while (1) //Организовываем бесконечный цикл { PORTC.5=1; //Включаем светодиод на 5-м выходе порта C delay_ms(led); //Делаем задержку, в миллисекундах PORTC.5=0; //Выключаем светодиод на 5-м выходе порта C delay_ms(led); //Делаем задержку, в миллисекундах } }

Описание программы:

Директивой #include подключаем внешние файлы. Заголовочный файл используемого микроконтроллера mega8.h и функцию задержки delay.h . Перед компиляцией CodeWisioneAVR вставит вместо строки

#include

#include

Директивой

#define led 10

определяем идентификатор led . Перед компиляцией CodeWisioneAVR в тексте программы заменит led на значение 30 .

Объявляем основную функцию программы main строчкой

Void main(void)

Эта функция должна присутствовать в каждой программе и только одна. Она нечего не передает и не возвращает. В каком бы месте эта функция не находилась программа начнет выполняться именно с нее.

В выходной регистр порта C записываем ноли,

PORTC=0x00;

соответственно на всех ножках порта C будет напряжение 0 В.

В регистр направления данных порта C записываем единицы,

DDRC=0xFF;

порт будет работать как выход.

Организовываем бесконечный цикл оператором while . Оно будет выполняться до тех пор, пока значение в скобках истинно, т.е. не равно нулю.

В теле цикла записываем команды, которые будут устанавливать интервалы включения и выключения светодиода.

Нам нужно переключить только одну ножку порта C , для этого мы воспользовались побитным доступом к портам ввода/вывода микроконтроллера. Указав в регистр порта С бит в который мы запишем значение

PORTC.5 = 1; //(5 В)

PORTC.5 = 0; //(0 В)

мы включаем или отключаем наш светодиод.

Для организации интервалов между включением и выключением светодиодов мы используем функцию задержки,

Delay_ms(led)

которую подключили в начале программы файлом delay.h . Задержка генерируется в миллисекундах. Все идентификаторы led в программе будут заменены при компиляции на указанное значение 30 , т.е. задержки между интервалами включения и выключения будут по 30 миллисекунд.

В этой статье рассматриваются важные драйверы и правильные схемы, необходимые для безопасного подключения внешних устройств к вводу/выводу MCU (микроконтроллер, англ. - Microcontroller Unit, MCU).

Введение

Как только у вас возникнет идея для проекта, очень заманчиво перейти прямо к подключению Arduino к схемам и устройствам, таким как светодиоды, реле и динамики. Однако делать это без правильной схемы может оказаться фатальным для вашего микроконтроллера.

Многие устройства ввода/вывода потребляют много тока (> 100 мА), которые большинство микроконтроллеров не могут обеспечить в безопасном режиме, а когда они пытаются обеспечить такое количество тока, они часто ломаются. Здесь нам на помощь приходят специальные схемы, которые называются «драйверы» (англ. - drivers). Драйверы - это схемы, которые могут принимать небольшой слабый сигнал от микроконтроллера, а затем использовать этот сигнал для управления каким-либо энергопотребляющим устройством.

Для правильной работы микроконтроллеров с внешними устройствами иногда требуются специальные схемы. Эти внешние устройства включают:

  • Цепи драйвера
  • Схемы защиты входа
  • Схемы защиты выхода
  • Цепи изоляции

Итак, давайте посмотрим на некоторые из этих схем и на то как они работают!

Простой светодиодный (LED) драйвер

Эта простая схема удобна для управления светодиодами с высоким энергопотреблением с помощью микроконтроллеров, где выход микроконтроллера подключен к «IN».

Когда микроконтроллер выводит 0, транзистор Q1 отключается, а также светодиод D1. Когда микроконтроллер выводит 1, транзистор включается, и поэтому D1 также включается. Значение R1 зависит от выходного напряжения вашего микроконтроллера, но значения между 1KΩ ~ 10KΩ часто работают хорошо. Значение R2 зависит от размера нагрузки, которую вы питаете, и эта схема подходит для питания устройств до 1А и не более.

Простой релейный драйвер

Устройствам, которые потребляют более 1 А тока и будут включаться и выключаться раз в несколько секунд, лучше подойдут реле.

Хотя реле достаточно просты (небольшой электромагнит, который привлекает металлический рычаг для замыкания схемы), они не могут управляться непосредственно микроконтроллером.

Для обычных реле требуются токи около 60 мА ~ 100 мА, что слишком много для большинства микроконтроллеров, поэтому реле требуют схему с использованием управления транзистором (как показано выше). Однако вместо резистора, который необходимо использовать для ограничения тока, требуется обратный диод защиты (D1).

Когда микроконтроллер (подключенный к «IN»), выдает 1, тогда включается транзистор Q1. Это включает реле RL1, и в результате загорается лампа (R2). Если микроконтроллер выводит 0, то транзистор Q1 отключается, что отключает реле, и поэтому лампа выключается.

Реле очень часто встречаются в схемах, требующих переключения цепей электропитания переменного тока, и доступны для переключения 230В и 13А (подходит для тостеров, чайников, компьютеров и пылесосов).


Кнопки

При подключении кнопки к микроконтроллеру могут иногда возникнуть простые проблемы. Первая (и самая раздражающая проблема) возникает в виде отскока, когда кнопка посылает много сигналов при нажатии и отпускании.

Кнопки обычно представляют собой кусок металла, который при контакте соприкасается с каким-то другим металлом, но когда кнопки вступают в контакт, они часто отскакивают (хотя они чаще всего крошечные). Этот отскок означает, что кнопка соединяется и отключается несколько раз, прежде чем зафиксироваться, а в итоге - результат, который ненадолго выглядит случайным. Поскольку микроконтроллеры очень быстрые, они могут поймать этот отскок и выполнять события нажатия кнопки несколько раз. Чтобы избавиться от отскока, можно использовать схему ниже. Схема, показанная здесь, представляет собой очень тривиальную схему, которая хорошо работает и проста в построении.

Защита входа: напряжение

Не все устройства ввода будут дружественными к вашему микроконтроллеру, а некоторые источники могут даже нанести ущерб. Если у вас есть источники входного сигнала, которые поступают из окружающей среды (например, датчик напряжения, датчик дождя, человеческий контакт) или источники входного сигнала, которые могут вывести напряжения, превышающие то, что может обрабатывать микроконтроллер (например, цепи индуктора), тогда вам потребуется включать некоторую защиту ввода напряжения. Схема, показанная ниже, использует 5V стабилитронов для ограничения входных напряжений, так что входное напряжение не может превышать 5 В и ниже 0 В. Резистор 100R используется для предотвращения слишком большого тока, когда диод Зенера захватывает входное напряжение.


Защита ввода/вывода: ток

Входы и выходы микроконтроллеров иногда могут быть защищены от слишком большого тока. Если устройство, такое как светодиод, потребляет меньше тока, чем максимальный выходной ток от микроконтроллера, тогда светодиод может быть напрямую подключен к микроконтроллеру. Тем не менее, последовательный резистор будет по-прежнему необходим, как показано ниже, а общие значения последовательных резисторов для светодиодов включают в себя 470 Ом, 1 кОм и даже 2,2 кОм. Серии резисторов также полезны для входных контактов в редких случаях, когда неисправны контакты микроконтроллеров или входное устройство испытывает всплеск выходного тока.


Преобразователи уровня

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

Хотя многие радиолюбители предпочли бы использовать один уровень напряжения, правда состоит в том, что более старые 5-вольтовые части могут не работать на 3,3 В, в то время как более новые устройства 3,3 В не могут работать при более высоком напряжении 5 В. Если устройство 5V и устройство 3.3V хотят общаться, то требуется сдвиг уровня, который преобразует один сигнал напряжения в другой. Некоторые устройства с напряжением 3,3 В имеют 5 В "толерантность", что означает, что сигнал 5 В может напрямую подключаться к сигналу 3,3 В, но большинство устройств 5 В не могут переносить 3.3 В. Чтобы охватить оба варианта, приведенные ниже схемы показывают преобразование от 5 до 3,3 В и наоборот.


Изоляция: Оптоизолятор

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

Оптоизоляторы взаимодействуют с использованием света, когда одна цепь излучает свет, который затем обнаруживается другой схемой. Это означает, что оптоизоляторы не используются для аналоговой связи (например, уровни напряжения), но вместо этого для цифровой связи, где выход включен или выключен. Оптоизоляторы могут использоваться как для входов, так и для выходов на микроконтроллеры, где входы или выходы могут быть потенциально опасны для микроконтроллера. Интересно, что оптоизоляторы также могут использоваться для смещения уровня!


Мы провели эмуляцию схемы в программе Proteus, помигали светодиодом и научились прошивать наш виртуальный микроконтроллер. Наверняка многим из читателей пришла в голову мысль: “А можно ли помигать светодиодом, использую кнопку, подключенную к МК?

Да, разумеется, это возможно. Реализуется довольно легко. Причем можно сэмулировать кнопку как с фиксацией так и без фиксации. Причем в программе Proteus применить оба типа кнопок можно с помощью одного и того же одинакового макроса кнопки. В каких случаях это может быть полезно? Например, нам требуется осуществить выбор режимов работы устройства. Давайте разберем подробнее, как это реализовать с помощью микроконтроллера, и проведем эмуляцию в программе Proteus.


Для того, чтобы иметь наглядное представление, что у нас действительно выбор из двух режимов, мы соберем простенькую схемку на 4 светодиодах с управлением одной кнопкой. При первом варианте у нас поочередно загораются с первого по четвертый светодиоды. При втором варианте то же самое, но в обратной последовательнос ти, то есть с четвертого по первый. Единственное, что хочу уточнить, кнопка у нас опрашивается на нажатие или отжатие только перед началом эффекта. До тех пор, пока эффект не закончит свою работу, программа не реагирует на нажатие или отжатие кнопки.

Итак к делу. Так выглядит у нас наша схема в программе Proteus (кликните для увеличения):

В этой схеме мы уже видим отличия от той, которую собирали еще в прошлой статье. В левой части схемы мы видим обозначения кнопки и источника питания +5 вольт.

Как мы уже разобрали, питание и землю мы берем во вкладке “Терминал”. Обозначаются они у нас соответственно Power и Ground.

Обозначается у нас питание схемы треугольником с чертой, делящей его по высоте. Рядом, на рисунке, изображено обозначение кнопки. Справа от кнопки мы видим закрашенный красный круг с двухнаправленной стрелочкой. Если во время эмуляции нажать на него, то кнопка у нас зафиксируется и будет постоянно нажата. После повторного нажатия на него фиксация снимается.


Перед использованием нам нужно выбрать кнопку в библиотеке аналогично остальным деталям. Для этого нужно набрать в поле “Маска” слово “but”. Затем в поле “Результаты” слово “BUTTON”:


После этого кнопка появиться у нас в списке, вместе с выбранными деталями, применяемыми в проекте.

Какие порты у нас используются в проекте. Ниже на рисунке мы видим отходящие линии от портов РA0, РВ0, РВ1, РВ2 и РВ3. К порту В у нас подключены светодиоды, а к порту А – кнопка.

Итак, при нажатии, мы замыкаем цепь соединяющую +5 вольт с портом РА0 и верхним выводом резистора. Для чего у нас здесь вообще установлен резистор? Дело в том, что цепь кнопки должна быть замкнутой. После того как мы установили резистор, ток у нас течет от плюса питания через кнопку, резистор и дальше на землю.

Номинал резистора достаточно взять равным 200 Ом. Итак, когда мы нажимаем кнопку, мы соединяем порт РА0 с +5 вольт питания, и если мы опросим ножку РА0 на наличие напряжения или его отсутствие, мы сможем влиять на выполнение нашей программы.

Скрины с текстом нашей программы я привел ниже:


Итак отличия от прошлого проекта заключаются в том, что все 8 выводов порта РА мы конфигурируем на вход, выводы порта РВ0 – РВ3 мы конфигурируем на выход, а РВ4 – РВ7 на вход.


Затем мы используем в нашей программе проверку условия “ if”


Итак, мы видим в строчке после “if”, в скобках, условие выполнения. Код ниже выполняется, если на порту PA0 у нас присутствует логический ноль, или ноль вольт. Этот текст в скобках – сдвиг бита порта. Мы разберем в одной из следующих статей, а пока достаточно принять на веру, что этим мы опрашиваем кнопку на отжатие . Затем в фигурных скобках идет текст программы, который выполняется, если условие верно. Если условие не верно, программа продолжает выполняться дальше, пропустив текст в фигурных скобках.

Аналогично, с помощью условия “if” мы опрашиваем кнопку на нажатие . Обратите внимание, текст у нас в скобках изменился. Это означает что если на ножке РА0 у нас логическая единица, мы выполняем условие, то есть текст в фигурных скобках. То есть другими словами, у нас при отжатой кнопке, поочередно загораются и тухнут светодиоды с первого по четвертый, а при нажатии и удерживании, загораются и тухнут с четвертого по первый. Таким образом, мы можем влиять на выполнение программы, с помощью нажатия кнопки, опрашивая наличие на ней логического нуля, или логической единицы

Также , в котором находятся файл “сишник”, HEX и файл Протеуса.

А вот и видео

Существует два основных типа микроконтроллеров AVR. Первый из них предназначен для получения максимального быстродействия при высокой частоте, второй - для экономичной работы на небольших тактовых частотах. Маркировка микросхем второго типа отличается от первого тем, что на конце добавляется буква "L". Например, и , и .

Микроконтроллеры первой группы допускают питание в диапазоне от 4,5 до 5,5 вольт при тактовой частоте 0...16 МГц (для некоторых моделей - до 20 МГц, например или ), вторые - соответственно 2,7...5,5 вольт при частоте 0...8 МГц (для большинства моделей, у некоторых моделей диапазон может быть уже). Ток потребления у них также различается: микроконтроллеры с индексом "L" потребляют меньше электроэнергии.

Существуют также микроконтроллеры с возможностью понижения питания до 1.8 В, которые обычно маркируются буквой "V", например . При понижении питания соответствующим образом должна быть снижена и тактовая частота. Для ATtiny2313V при питании 1,8...5,5 В частота должна находиться в интервале 0...4 МГц, при питании 2,7...5,5 В - в интервале 0...10 МГц.

Такой подход может быть применим для экспериментального макетирования и любительских самоделок, но в промышленной автоматике может приводить к сбоям при помехах по питанию. В условиях сильных внешних помех сопротивление этого резистора (100-500 кОм) оказывается слишком большим, и при отсутствии на линии RESET сигнала высокого уровня может происходить случайный сброс микроконтроллера.

Существует несколько способов снижения риска непреднамеренного сброса. Один из самых простых - это подключить к линии RESET внешний подтягивающий резистор с рекомендуемым значением сопротивления от 4,7 до 10 кОм.

Для дополнительной защиты линии RESET от внешних помех рекомендуется также шунтировать ее на землю с помощью внешнего конденсатора емкостью около 0,1 мкф. Но при этом необходимо помнить, что вход внешнего сброса RESET может использоваться однопроводным интерфейсом debugWIRE при отладке программного обеспечения микроконтроллера. Наличие конденсатора, подключенного параллельно входу RESET, будет приводить к сбоям в работе этого интерфейса. Поэтому, если планируется отлаживать микроконтроллер на целевой плате с помощью debugWIRE, необходимо предусмотреть перемычку, чтобы отключать этот конденсатор на время отладки прикладного программного обеспечения.


Для поддержки режима высоковольтного программирования микроконтроллеры AVR не имеют стандартного внутреннего диода для защиты от избыточного напряжения на входе RESET. Поэтому, если высоковольтное программирование не используется, для защиты от помех рекомендуется подключать внешний диод, например 1N4148 между линией RESET и шиной питания микроконтроллера. Таким образом, типовая схема внешней "обвязки" для линии RESET будет выглядеть следующим образом.

Если же линия сброса не используется и внутрисхемное программирование не требуется, то в законченном устройстве вывод RESET может быть присоединен непосредственно к шине питания микроконтроллера.

Дополнительной мерой может служить шунтирование каждого контакта электродвигателя на его корпус или на "землю".

Емкость керамических конденсаторов С2 и С3 в этом случае также может лежать в диапазоне 0,01...0,1 мкф


При установке микроконтроллера в непосредственной близости от двигателей следует позаботиться о снижении риска возможных наводок на внешние цепи AVR. Так, цепь внешнего тактирования может служить транзитным путем для наводок. Чтобы устранить возможные сбои, рекомендуется конденсаторы С1 и С2 устанавливать как можно ближе к выводам XT1 и XT2, а их "земляные" обкладки подключать непосредственно к выводу GND микроконтроллера короткими проводниками. Кроме того, рекомендуется корпус кварцевого резонатора Q1 припаивать коротким проводом к цепи GND. Еще большую безопасность может обеспечить экранирующий контур на печатной плате вокруг кварцевого резонатора и конденсаторов.