Меню

Бегущая дорожка на ATtiny2313

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

Все начинали изучать AVR c мигания светодиода. Мы даже делали целую гирлянду из 4 светодиодов в этой статье. Но что, если 4 светодиодов нам мало, и мы хотим чего-то большего? Ну раз хочется, то давайте сделаем!

«Подопытным кроликом» у нас будет старый добрый МК ATtiny2313

Долго не думая, находим в интернете на него даташит и смотрим цоколевку

Так как я хочу навесить на него кучу светодиодов и сделать из них что-то подобие бегущей дорожки, для нас важно рассмотреть, какие пины (выводы МК) позволят мне это сделать. Что мне здесь надо найти? Это, конечно же, порты ввода/вывода. В ATtiny2313 их три группы: порт А, порт В и порт D. В группе порта А у нас три пина — это PA0, PA1,PA2. В группе порта В их уже восемь (PB0…PB7) и в группе порта D семь пинов (PD0…PD6). Итого в сумме 18 пинов, на каждый из которых можно навесить по светодиоду. То есть теоретически, наш МК может управлять 18 светодиодами, которые могут светится независимо друг от друга. Про порты ввода/вывода можно подробно прочитать на сайте easyelectronic по этой ссылке.

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

Не забываем, что светодиоды делятся на индикаторные и осветительные. Индикаторные светодиоды обладают слабым свечением и используются для индикации каких-либо процессов, происходящих в электронной цепи. Для них характерно слабое свечение и малый ток потребления

Ну и осветительные светодиоды — это те, которые используются в ваших китайских фонариках, а также в LED-лампах

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

Поэтому подключать их напрямую к МК с питанием в 5 Вольт запрещено. Для них это обернется летальных исходом. В первую очередь сгорят те, кто требует для своей работы небольшого напряжения: красные, желтые и оранжевые светодиоды. Сгореть могут как светодиоды, так и выход МК. Чтобы такого не произошло, надо последовательно со светодиодом ставить токоограничивающий резистор. Лучше всего такой резистор подобрать с помощью магазина сопротивления, либо с помощью потенциометра, включенного по схеме реостата. После того, как мы добились умеренного свечения светодиода, замеряем наше сопротивление и ставим постоянный резистор близкий к измеренному номиналу.

Если такой возможности нет, то делаем простейший расчет.Например, у вас в арсенале имеются желтые светодиоды. Питание нашего МК 5 Вольт, следовательно, напряжение логической единички также 5 Вольт. Так как на желтом светодиоде у нас падение напряжения составляет примерно 2 Вольта, значит, на токо-ограничивающем резисторе должно упасть 3 Вольта. Ток через светодиод берем в среднем 15-20 мА. Исходя из закона Ома высчитываем значение сопротивления: I=U/R ——> R=U/I=3/15=0,2 килоома или 200 Ом. На практике, резистора, номиналом в 200-500 Ом, хватает за глаза.

Также есть два способа включения светодиода на порт МК:

а) Это прямой способ, при котором включение светодиода происходит при наличии высокого логического уровня, то есть единички на выходе порта МК:

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

Умеренно-светящийся светодиод потребляет силу тока в 15-20мА. То есть если запитать одновременно все светодиоды с помощью нашего МК, то скорее всего он не выдержит такого издевательства и испустит белый дымок сгоревшего кремния. Значит, если мы сразу зажжем 18 светодиодов и каждый будет кушать по 15-20 мА, то у в сумме наш МК должен выдать 360 мА. В даташите на него пишут, что максимум, что с него можно «выжать»  — это 200 мА (строка в самом низу)

Индикаторные светодиоды, в зависимости от исполнения (SMD или штырьковые), потребляют при номинальном свечении ток от 2-3 мА и до 20-30 мА. Поэтому, все зависит от того, какие светодиоды мы выберем для нашего эксперимента. Но помните, что сумма токов питания светодиодов не должна превышать максимальное значение МК. В нашем случае это 200 мА. Ну а так для повышения надежности долговременной работы радио-электронной аппаратуры (РЭА) рекомендуется использовать нагрузку по мощности 70% от номинала, а по напряжению и току — 80% от номинала. Поэтому, если номинальный ток светодиода 20 мА, то мы будем его пытать на токе 0.7 * 20 = 14 мА. Применимо к МК — это 160 мА вместо 200 мА.

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

Почти та же схема, но включение происходит при логическом нуле на выходе МК. Здесь обратите внимание на то, что при таком инверсном включении +Uпит не должно превышать напряжение питания МК.

Важный момент применимый к обеим схемам — питание нагрузки. Если питаемся от напряжения МК, то схема примитивна: в базовой цепи один резистор (RБ). Если же нагрузку питаем от внешнего источника питания, например 40 Вольт, то еще добавляем в схему резистор Rбэ . Чаще всего его номинал берут в 1 килоом.

Расчет резистора базы для режима насыщения

Как же рассчитать примерно значение резистора базы? Есть нехитрые формулы. Для того, чтобы их разобрать, рассмотрим вот такую схемку:

Для начала можно найти ток базы:

где

IБ — это базовый ток, в Амперах

kНАС  — коэффициент насыщения. В основном берут в диапазоне от 2-5. Он уже зависит от того, насколько глубоко вы хотите вогнать ваш транзистор в насыщение. Чем больше коэффициент, тем больше режим насыщения.

I— коллекторный ток, в Амперах

βкоэффициент усиления тока транзистора, для расчетов берут минимальное значение в даташите

Ну  а дальше дело за малым

Ну что же, давайте рассчитаем наш базовый резистор для этой схемы в режиме насыщения

Воспользуемся формулами, приведенными выше:

Так как в прошлом опыте я зажигал лампочку, то ток коллектора мы знаем из нашего опыта. Он равен 0,22 Ампера.

Коэффициент β мы берем из даташита самый минимальный, то есть 20.

kНАС лучше взять равным 3.

Теперь считаем:

Берем ближайший резистор из ряда на 150 Ом 😉. Более подробно можно прочитать в этой статье.

Для управления какой-либо мощной нагрузкой, можно применить схему с транзистором и реле:

Ножка PA2 может выполнять функцию не только вывода порта А, но и также участвует при программировании МК. Если с помощью фьюза «RSTDISBL» мы разрешим  этому выводу «притвориться» выходом, то потом не сможем перепрограммировать данный МК с помощью ISP программатора, а другой программатор, я к сожалению, пока еще не приобрел. Но если вы собираетесь делать эту  конструкцию навека, то можете без проблем поставить галочку на фьюз «RSTDISBL» и повесить на этот вывод светодиод). Поэтому, я не буду задействовать эту ножку МК как выход. То есть в сумме у меня будет 17 светодиодов, вместо 18. Жертвуя одни светиком, я даю себе право использовать многократно свой МК, не прибегая к помощи другого программатора.

Далее открываем программу AtmelStudio 6 и начинаем писать программу. Эта  программа написана для новичков, чтобы они уловили суть всего процесса.

Для тех, кто уже не первый год изучает AVR, приведу оптимизированный код этой же самой программы:

Давайте разберем наш первый простой код.

Так как я особо не силен в языке С, то разбор кода постараюсь объяснить своими словами.

Итак, первая строка:

это заголовочный файл, который подключает определения ввода/вывода для устройства в данном проекте

здесь мы указываем компилятору, с какой частотой будет работать наш МК. Как вы видите, я взял частоту в 8 Мегагерц.

подключаем библиотеку задержек, то есть это могут быть функции, как _delay_ms(), _delay_us()

тело программы

Все выводы порта В выставляем как выходА

Изначальное состояние всех выводов порта В равно логическому нулю

Аналогично устанавливаем порты А и D.

Зацикливаем тело программы в бесконечном цикле while

Здесь все просто, достаточно рассмотреть, как выглядят пины в МК с точки зрения самого МК. «0b» говорит о том, что мы записываем команду в двоичной системе счисления, что очень удобно в некоторых случаях для наглядности процесса, особенно для новичков.

Итак, если в ячейке ноль, следовательно, этот вывод будет выдавать логический ноль. Если в ячейке единица, то и вывод будет выдавать логическую единичку. Значит, в нашей записи PORTB=0b00000001 у нас картина будет выглядеть следующим образом:

В этом случае у нас на PB0 будет логическая единица, то есть 5 Вольт. А если эти 5 Вольт подать на светодиод через токоограничивающий резистор, то светодиод загорится.

Пример для закрепления. Строка кода выглядит вот так:

Какие пины МК будут выдавать логическую единичку?

Вспоминаем нашу структуру и загоняем в нее наши биты:

Ответ: пины PB0, PB1, PB2 и PB3.

То есть в данном кусочке кода пины PB0, PB1, PB2 и PB3 одновременно выдадут логическую единичку, то бишь 5 Вольт.

Ну и задержка в миллисекундах:

В данном случае это 50 миллисекунд

Далее, нам надо создать HEX-файл. Как скомпилировать нашу программку и создать HEX-файл, читаем  в этой статье.

После того, как у нас создался HEX-файл, мы его загружаем в наш виртуальный МК и запускаем процесс эмуляции в программе Proteus. Более подробно в этой статье.

Как мы видим, наша программка отлично работает в виртуальном МК.

Раз уж все так хорошо, почему бы не прошить реальный МК? О том, как прошивать МК AVR читайте в этой статье.

Ну и вот результат всей работы в железе:

Зачем я вообще собрал эту схему бегущих огней? Чтобы ставить ее на новогоднюю елочку? Конечно же нет! Целью этой статьи была работа с портами ввода/вывода. В данной статье мы настраивали пины на выход для управления какой-нибудь нагрузкой. Вы без проблем можете поменять программу и решить для себя, как доработать эту «гирлянду». Меняя биты и задержки по времени, вы  без труда сможете сделать различные эффекты и даже управлять какой-либо нагрузкой, подключив транзисторный ключ в паре с реле.

Кстати, такие готовые релейные модули вы без труда можете купить на Алике

Выбирайте на вкус и цвет!

Для промышленного оборудования стараются использовать программные логические контроллеры (ПЛК,PLC) которые идут в связке с модулями входов/выходов

Посмотреть, как они выглядят, можно по этой ссылке https://tehprivod.su/katalog/kontrollery-siemens

 

Файлы проекта «бегущая дорожка» вы можете скачать здесь.

При участии Jeer




Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *