Бегущие огни на ATtiny2313

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

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

Выбор микроконтроллера

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

ATtiny2313

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

ATtiny2313 распиновка

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

Характеристики светодиодов

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

Бегущие огни на ATtiny2313

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

Бегущие огни на ATtiny2313

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

Бегущие огни на ATtiny2313

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

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

Способы подключения светодиода на порт МК

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

Бегущие огни на ATtiny2313

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

Это самый простой расчет без всяких заморочек. Более подробно читайте в этой статье .

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

Бегущие огни на ATtiny2313

О фьюзе RSTDISBL

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

Читайте сопротивление проводника .

Пишем программу для чайников

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

Программа для профи-программистов

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

Разбор кода в программе для чайников

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

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

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

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

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

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

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

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

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

наглядности процесса, особенно для новичков.

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

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

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

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

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

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

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

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

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

Эмуляция программы в Proteus и реальная работа гирлянды

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

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

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

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

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

Бегущие огни на ATtiny2313Бегущие огни на ATtiny2313

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

Бегущие огни на ATtiny2313

EnglishRussianUkrainian