Skip to main content

Светодиодная сосулька на микроконтроллере: ATtiny13 и 20 светодиодов

  • Теоретическое отступление.

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

Вывод микроконтроллера может находится в трех состояниях: вход, выход с лог. 0 и выход с лог. 1. Вот как раз режим входа без подтяжки (высокоимпедансное состояние) и позволяет подключить к каждой паре выводов по два встречно-параллельно включенных светодиода. Фактически, вывод переведенный в Z-состояние ведет себя как не подключенный к схеме, и никакого влияния на нее не оказывает. Такое подключение получило название «Чарлиплексинг», по имени ее создателя  Чарли Аллена. Впрочем, этим методом пользовались и ранее.

На упрощенной схеме показана суть работы:

Рис. 1 Чарлиплексинг

При таком подключении возможное количество светодиодов рассчитывается по простой формуле: K = N * (N-1), где N — количество выводов.


  • Практическая часть.

С теорией разобрались, самое время применить эти знания на практике. У контроллера ATtiny13 восемь выводов. Из них два — питание, и еще один — RESET. Значит, под нашу затею остается 5 выводов. Считаем количество подключаемых светодиодов по уже известной формуле:

количество светодиодов = 5 * (5-1) = 20

Мы можем подключить 20 светодиодов, что довольно неплохо, но хотелось бы еще использовать кнопку для переключения эффектов. Но если мы выделим отдельный пин для кнопки, то количество светодиодов сразу сократится до 12 (4 * (4-1)), что слишком расточительно. Потому немного схитрим, и подключим кнопку к выводу RESET.

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

А пока рисуем схему:

Рис. 2 Схема.

Схема проста до безобразия, между каждой парой выводов подключены встречно-параллельно светодиоды. Например, для того чтобы зажечь светодиод HL14 необходимо сконфигурировать выводы PB1 и PB0 как выходы (а все остальные как входы) и подать на вывод PB1 лог. 1 а на вывод PB0 лог. 0.

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

С остальными флагами разберемся в другой раз, а сейчас нас интересует бит EXTRF — External Reset Flag. Этот бит выставляется в 1 в том случае, если причиной перезагрузки был низкий уровень на выводе RESET. Отлично, это нам и нужно. При каждом запуске будем проверять этот бит, и если он выставился в 1, то значит была нажата кнопка, и можно менять скорость/режимы.

Всего режимов работы пять (каждый режим имеет три скорости):

  1. Метеор (бегущий светодиод с затухающим шлейфом).
  2. Заполнение и растворение.
  3. Бегущий огонь.
  4. Бегущая тень.
  5. Мерцающие звезды.

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


Видео.


Фьюзы.

В заводских фьюзах необходимо лишь отключить деление тактовой частоты на 8 (CKDIV8).

High Fuse: 0xFF
Low Fuse: 0x7A


Загрузки.

2 комментарии в “Светодиодная сосулька на микроконтроллере: ATtiny13 и 20 светодиодов”

  1. Отличная работа. Случайно наткнулся в инете, но это как раз то что мне надо. Сможете помочь мне советом? Делаю свой проект, но пока многого не понимаю.Если ДА, напишите в личку, пожалуйста.

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

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