4x4x4 LED cube,



… или история о том, как делать не надо.



Все началось с того, что порядком времени назад один из товарищей, посещающих мой кружок, изъявил желание делать кубик 4х4х4. «Хм, а почему бы и мне не сделать такой же?» — подумал я. В самом деле, ведь прикольная штука. Следующим же вечером я откопал мешок со светодиодами, припрятанный на черный день, отсчитал ровно шестьдесят четыре штуки, просверлил шестьдесят четыре дырки в шаблоне и начал паять.







Через пару часов матрицы были готовы и спаяны в кубик. Ничто не предвещало приключений…



Приключения начались на следующий день, когда я стал обдумывать схему управления. Ну, ясное дело, все стандартно: МК, дальше сдвиговые регистры, потом ключи и сами матрицы диодов. В качестве же ключей прогрессивное человечество обычно использует сборки ULN2003. Однако еще утром того же дня выяснилось, что по какой-то неясной причине куб был спаян с общим катодом:



И поэтому, ясное дело, ULN2003 тут не подойдут, ибо состоят из NPN ключей, а потому умеют замыкать только на землю. Наивно веря в закон всемирной симметрии, я полез гуглить комплементарный аналог ULN. Поиски показали, что, скорее всего, такого в природе нет и, видимо, не было, а если и есть или был, то так далеко или давно, что о таком не знает даже гугл. С коммутацией выводов Z на землю проблем вроде как не намечалось, так как запасы IRLML2803 у меня еще не иссякли. Тем не менее, впереди маячила перспектива запаивать шестнадцать транзисторов.

Утешив себя тем, что тридцать лет назад люди запаивали и по сотне транзисторов, и дискретный подход это Ъ-олдскул, я начал обдумывать схему ключей. Конечно, наиболее очевидна классическая схема PNP-ключа:



Однако ее выбор означает перспективу руками паять еще тридцать два резистора. Потому из своей природной лени я решил ее немного оптимизировать:



Относительно R1 это эмиттерный повторитель. Поэтому, во-первых, отпадает необходимость ставить резистор в базу, а, во-вторых, светодиод получает источник тока (со стороны коллектора), который лучше резистора. И, что самое главное, в такой конфигурации на шестнадцать резисторов меньше! Правда, отличная идея? В тот момент мне тоже так казалось…

Одним словом, я остановился на втором варианте. Нарисовал все в DipTrace, развел плату, вытравил и спаял.

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

Все из-за того, что я выбрал вторую схему! А разгадка в том, что управляющая логика и силовая часть питаются от одного источника и имеют одну землю. Транзистор формирует эмиттерный повторитель относительно резистора. Ключевое слово – повторитель. В этом случае при подаче логического нуля на базу к резистору оказывается приложено почти все напряжение питания (за вычетом падения на переходе база-эмиттер), ибо CMOS-микросхема 74HC595 выдает в качестве нуля практически землю. Т.е., светодиоду остается всего лишь то самое напряжение база-эмиттер, да еще и за вычетом напряжения насыщения. Рисунок ниже иллюстрирует ситуацию:



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

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



Однако тут возникает еще одна проблема, а именно, управление полевыми транзисторами, переключающими слои. Изначально они управлялись непосредственно от ножек МК – отпирались единицей, запирались нулем. Но теперь ноль МК имеет потенциал не менее трех вольт относительно истока транзисторов! Т.е., при непосредственном управлении закрыть их будет невозможно. Потому видна явная необходимость в дополнительных цепях согласования:



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

Таким образом, для спасения проекта была сделана управляющая плата-костыль, которая обеспечивает двухуровневое питание с необходимым сдвигом напряжений и по совместительству содержит управляющий МК. С ней, кстати, тоже вышла печальная история. Подключив программатор после сборки, я обнаружил, что контроллер не шьется. И так пробовал, и этак – ни в какую. В общем, я решил, что спалил его при пайке. Срезал микросхему скальпелем и со всеми мерами предосторожности запаял новую. Но новый МК тоже не откликался. Не буду томить читателя, дело оказалось в неправильном ключе AVRdude. Как известно, МК ATmega48 поставляется с завода настроенным на тактирование от внутреннего генератора на частоте 1МГц. Для стандартных опций программатора этой частоты маловато. Потому, чтобы AVRdude нашел МК, необходимо снизить тактовую частоту программирования, что достигается отдельным ключом – латинской буквой «бэ». Большой буквой! –B! А я по памяти писал маленькую. Которая, по странной прихоти автора оной софтины, тоже ключ, но имеющий другое значение. Странный подход – называть разные действия одинаковой буквой… Так что я отправил в мусорку новый контроллер. Хэппи-энд, конечно, я со всем разобрался, но обидно.

Финальная схема питания выглядит так:



В этом включении все работает корректно.

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

В общем, оно работает. Однако на то, что можно было бы сделать за два-три дня, я затратил около месяца с учетом всех раздумий. Правда, работа велась с перерывами, ибо процесс совпал с зачетной неделей и сессией, а затем с праздниками и кучей других дел, но все же. Мораль: никогда не собирайте кубики с общим катодом…

Напоследок, бонусом для тех, кто дочитал, фото и видео.











Файлов проекта не выкладываю, ибо конструкцию к повторению не рекомендую.
  • +5
  • 25 января 2012, 21:28
  • _YS_

Комментарии (18)

RSS свернуть / развернуть
Такая же бодяга с потенциалами была когда в динамике управлял Вакуумными люминесцентными индикаторами…
0
Гы-гы, ютуб сказал, что в моем видео может быть контент, на который распространяется копирайт. :) Доменико Скарлатти ушел в мир иной в 1757 г. от Р.Х., какой копирайт? :D
0
  • avatar
  • _YS_
  • 25 января 2012, 21:47
Дело может быть в том, что копирайт распространяется на само воспроизведение мелодии, а не на её саму. То есть если ты сам сыграл мелодию и включил в видео — проблем нет, а если взял чужое — то ©…
0
Копирасты, одно слово. :)
0
Кстати, KID65783AP в вашем случае очень бы помог=)
Или UDN2982A TD62783AP
+1
Это да. :)

Спасибо за микросхему, запомню.
0
Или MAX7219. Как раз на 64 диода с общим катодом.
+1
Гм. Я что-то не понял, а нафига вообще в анодах ключи? Там же ток 20мА в каждом, можно цеплять прямо на МК или регистр. Ключ, ИМХО, нужен только в общем катоде — там ток 320мА.
Которая, по странной прихоти автора оной софтины, тоже ключ, но имеющий другое значение. Странный подход – называть разные действия одинаковой буквой…

Ага. Однако довольно распространенный. Линуксово-сишный, у них там регистр везде значение имеет, включая имена файлов. Возник видимо потому, что буковок всего 26, а ключиков бывает много. GCC тоже такой — скажем, -o задает имя файла, а -O — режим оптимизации.
+2
  • avatar
  • Vga
  • 25 января 2012, 23:16
Там же ток 20мА в каждом, можно цеплять прямо на МК или регистр.


И МК, и регистры имеют ограничение по общему току VСС — GND. Вот его и не хватает — у 74HC595 всего 70мА, по-моему. Одна ножка 20мА потянет, а вот если включить все сразу — выходим за допустимый режим в два раза.

у них там регистр везде значение имеет, включая имена файлов.


Ну линуксоиды, ну затейники!
0
Гм. Мона было правда еще программно извратиться — например, засвечивать каждый слой в 4 приема. Правда, это бы вчетверо уменьшило скважность тока через СИДы.
0
Там и так скважность 1/4, вообще было бы не видно.
0
Ну было бы 1/8 (можно одновременно 8 диодов обрабатывать — по 4 на каждый регистр). Вдвое меньше яркость — но из-за логарифмической характеристики глаза визуально яркость уменьшится менее чем вдвое.
А вообще в проектах бегущих строк, которые тут выкладывали, аноды вполне себе спокойно цепляли к регистрам и оно работало, несмотря на превышение параметров.
0
Таки да, работает и так. Но не по даташиту делать не Ъ как-то…
0
У моего скважность была 1/16 и по 0,8 мА на светодиодик. Ничего, вполне видно (а ночью кубик неплохо освещает комнату). Правда, светодиодики очень яркие.
0
У меня-то светодиоды обычные индикаторные…
0
Тем не менее, 10 мА при скважности 1/4 более чем достаточно.
0
А я вот в очередной раз поражаюсь _YS_! На сей раз настойчивости!
Молодец, что еще сказать! (Абсолютно без иронии.)
0
Да ладно Вам, это не настойчивость, это лень. Ну лень же все сначала начинать, когда кубик уже спаян. :) Да и диодов потраченных жалко. :)
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.