На такой матрице можно сделать интересный автомат световых эффектов, игрушку, или использовать как обычный индикатор. ?нтересно будет смотреться двигающаяся стрелка, указывающая направление, или трансформирующийся логотип. В статье я представлю светодиодную матрицу в качестве обычной бегущей строки. По идее, бегущую строку нужно мастерить на 2-х — N таких матрицах, но ситуации бывают разные, и после прочтения этой статьи, может быть, такие убеждения изменятся.
Для затравки можно посмотреть, как выглядит бегущая строка на матрице 8х8 в исполнении ATmega8515.
Если понравилось, читаем дальше и мотаем на ус.
Схематически матрица это… она… такая… эта…. Короче матрица она и есть матрица N строк на M столбцов, в узлах которой включены светодиоды. Её можно сделать и самому, но промышленная выполнена единым корпусом, красивая, и с пазами на сторонах этого корпуса для чёткого соединения в блоки. Такие матрицы бывают разных размеров: как по количеству светодиодов N x M, так и геометрических. Для формирования изображения на ней ( в моём случае — символов) я использую принцип динамической индикации, хорошо расписанный в десятках примеров в интернете. В двух словах принцип динамической индикации базируется на инертности человеческого глаза, и заключается в кратковременном поочерёдном отображении точек, составляющих изображение в течении некоторого времени. В результате изображение будет восприниматься как цельное.
Я воспользовался матрицей 8 на 8 размерами 37 на 37 мм. Схема макета представлена ниже:
А здесь готовое смакетированное устройство:
В качестве ключей — мои любимые 2n7000, теперь в smd исполнении. На строки — ограничивающие резисторы. Управляющий контроллер ATmega8515 — это совершенно не принципиально. Многие практикуют выполнение бегущей строки с использованием сдвиговых регистров — в общем это правильно. Но, если в контроллере хватает портов, вполне можно обойтись и без сдвиговых регистров. Например, на той же меге 8515 можно без напряга сделать бегущую строку 8х24, и ещё три разряда порта Е останутся для чего-нибудь. Я, вообще, приверженец использования ресурсов контроллера по максимуму, без добавления сторонних корпусов, насколько это возможно. Но это моё личное мнение, и к статье не имеет никакого отношения. Массив, формирующий символы мне составлять не пришлось, т.к. я использовал наработки по TFT-дисплею — принцип тот же. Посмотрите в исходник — комментарии разъяснят Вам непонятные моменты. Кусок кода для движения бегущей строки в обратном направлении закомментирован, при необходимости используйте его. Вот в общем и всё.
P.S. Кстати, многие небольшие магазинчики и торговые точки не прочь бы обзавестись бегущей строкой в качестве рекламы-вывески. Неплохой способ подзаработать своими знаниями.
Здравствуйте как добавить русский алфавит в прошивку?
Так вот же я объяснял принцип формирования символов. Можете таким образом закодировать любой символ и добавить в массив. Удачи!
Как добавить в масив я понял но это пол дела а чтоби они отображались на матрице тамжеж нужно подправить код или я чтото нетак понимаю?
http://max-energy-saving.info Энергосбережение Энергоэффективность Форум
Не понял зачем тут транзисторы? Ток ведь все равно течёт через микроконтроллер.
Не рабочий пример:((((
Проверял в Протеусе.
?сходник точно рабочий ? проверьте плиз…
«… Не рабочий пример:((((
Проверял в Протеусе….»
Та Вы шо !? А как по Вашему я снял видео? Специально запудриваю мозги читателям? ШПротеус фтопку.
«… ?сходник точно рабочий ? проверьте плиз …»
Уважаемый uZZZer, нерабочих и непроверенных лично мною исходников я на свой сайт не выкладываю.
Да понятно, что Протеус — это не самое лучшее, н пока только к нему имею доступ…
Вот файл проекта для Dot matrix.
http://www.fayloobmennik.net/4881545
А по этой схеме я подключал.
http://wmhost.ru/img/di-U24E.jpg
Подключал как на схеме, хрень какая то выводится… Аффтор ну напиши как ты это все сделал ? Схему подключения дай… А то я например только начал занимать МК и для меня это сложно !
Действительно, а напишите подробнее, как подключать матрицу к МК ?
Лады. В ближайшее время нарисую схему.
Олег, а плату с матрицей Вы какую используете?
Такую же, которую uZZZer выложил.
1. По приведённому Вами рисунку нет нумерации выводов, т.е. непонятно, где анод линии, а где катод. ?сходя их этого факта нужно проверить правильно ли распределены линии порта на выводы матрицы.
2. Не вижу токоограничительных резисторов. ?ли они имеются, но не нарисованы?
3. Если имеются, то каково их сопротивление?
У меня в схеме каждая колонка их 8-ми светодиодов (это байт порта С) коммутируется на «землю» для подсветки полевиками 2N7000 (порт А). Резисторы у меня выбраны 390 Ом (ток через разряд порта-светодиод приблизительно 10 мА), т.е. в случае, если порт С выдаёт 0b11111111 — все единицы, то ток колонки будет Iкол = 8 х 10 мА = 80 мА, что в два раза больше максимально допустимого через разряд. ?менно для этого у меня стоят транзисторы, которых у вас нет — это ответ для Dmitriy 11.05.2015.
Так вот пересчитайте токи в своей схеме подключения и проверьте соответствие выводов матрицы разрядам портов.
Вчера собрал макет, погонял разный текст — всё работает прекрасно.
А какой светодиод к какому выводу порта подключать ?
? как запускать схему ? Просто нет сигналов на выводах портов контроллера…
Посмотрите на моей схеме — там каждый разряд портов А и С подписаны номерами выводов матрицы.
Как запускать схему? Запрограммируйте контроллер и подайте питание.
Все дело в том, что на выходах этих портов всегда «0» у меня… Не могли бы вы модель в протеусе посмотреть ?
?звините за нескромный вопрос: «А Вы когда-нибудь раньше программировали МК? Ну, типа, светодиодом поморгать.» Успешно?
Да, было дело, светодиодом получалось поморгать. Вполне успешно.
Ну, тогда Вы должны понимать, что, если МК прошился, то он должен работать. Проверьте без подключения матрицы. Может Вы порты МК пожгли без токоограничительных резисторов.
Да нет все нормально вроде…
Может глупо: А скиньте рабочую прошивку… У меня как то было такое, что не работало по причине глючности компилятора.
Я макет просто сейчас собрать не могу, имею доступ только к Протеусу.
Так ведь рабочая прошивка лежит в статье а архиве ))) ? всегда там лежала. Протеус фтопку.
Так привет всем трезвенникам !
Ну во первых, что бы схема работала, нужно ее правильно собрать:) Вот так хотя бы: http://rghost.ru/8df5gdqCJ
Собственно, вопрос к автору: Что такого особенного в Меге 8515 ? Почему на ней твоя программа работает безупречно, а например на 8535 или atmegs32 не работает ? ?ли я не ту траву курю ?
Если я все правильно понимаю, то отличия от 8535 и 8515 минимальны. Одна из них приспособлена для работы со внешней памятью, а к другой прикручен 12ти разрядный АЦП или 8515 какая то особая, типа мега-арийская ? Просто собрал сегодня за ночь три макета с камнями: 8515, 8535, 16 и 8. 8515 — работает на ура ! с остальными камнями работать на отрез оказывается ! А так спасибо большее очень хороший и красивый пример:)
П.С. Аффтор, попробуй собрать макет с восьмеркой или 8535, могу даже тебе выслать почтой эти камни или оплатить расходы.
О. аффтор, сорри ! Это я дебилко ! Там биты TOIE0 в TIMSK разные у всех камней !
Короче для 8535 надо писать TIMSK=0x01, а не TIMSK=0x02 как у тебя для 8515 и будет все пахать как Папа Карло. Для 8, 16 и 32 Мег, соответственно свои значения битиков выставлять. В общем освети это в своем опусе, а то для новичков это трудно самому догадаться !
Здравствуйте !
А объясните пожалуйста, из каких соображений вычисляются значения:
1. for(j=0; j<(sizeof(string)-2);
2. q_1 = string[j] -32; и q_2 = string[j+1] — 32;
3. for(i=0; i<8; i++) array_q_1[i] = pgm_read_byte(&simbols[i+q_1*8]); и for(i=0; i<8; i++) array_q_2[i] = pgm_read_byte(&simbols[i+q_2*8]);
4. for(i=0; i<8; i++) line[i] = (array_q_1[i]<>(8-a));
В общем расскажите по подробнее про основной цикл программы.
for (;;)//бесконечный цикл для движения строки справа налево
{
for(j=0; j<(sizeof(string)-2);j++)//цикл для длины бегущей строки
{
q_1 = string[j] -32;//номер массива пикселей "левого" знака строки
q_2 = string[j+1] — 32;//номер массива пикселей "правого" знака строки
for(i=0; i<8; i++) array_q_1[i] = pgm_read_byte(&simbols[i+q_1*8]);//массив пикселей "левого" знака строки
for(i=0; i<8; i++) array_q_2[i] = pgm_read_byte(&simbols[i+q_2*8]);//массив пикселей "правого" знака строки
for(a=0; a<8; a++)
{
for(i=0; i<8; i++) line[i] = (array_q_1[i]<>(8-a));_delay_ms(500);
}
}
}
А что нужно изменить, что бы переписать программу программу под матрицу 5х7 ?
Olesya , скажите ЧТО конкретно непонятно в приведённом коде?