Реклама ⓘ
Главная » Световые эффекты
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Светодиодный дисплей 7x7 на микроконтроллере AVR

Статья познакомит Вас с созданием интересного проекта, который при большом желании и небольшом умении Вы сможете воссоздать и модернизировать! Основная идея данной статьи была взята из этого источника, однако концепция и принципиальная схема были переработаны. Так же хочется отметить, что данная статья (в моих позитивных планах) будет иметь продолжение и рассказывать о создании полноценного дисплея, способного отображать разные изображения.

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

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

Теперь поподробнее о схеме:

Для опытных радиолюбителей схема не требует пояснений, для новичков поясню. Основным элементом управления является микроконтроллер ATmega8, компании Atmel. Именно он, в совокупности с загруженной программой, и позволяет реализовывать эффекты динамического отображения изображений на дисплее. В качестве питания схемы используется гальванический элемент типа «крона» на 9В. Элемент питания подключается к основной схеме через стабилизатор напряжения LM7805 (отечественный аналог КР142ЕН5). Конденсаторы C1 и С2 необходимы для сглаживания пульсаций и помех (фильтры). Резистор R1 необходим для установления логического состояния 1 на линии reset, с целью запуска микроконтроллера. Резисторы R2 – R8, номиналами по 100 Ом каждый, являются токоограничивающими, т.е. предотвращают протекание большого тока через светодиоды. Резисторы R9 – R15 служат для задания необходимого напряжения на затворах транзисторов VT1 – VT7. Светодиоды HL1 – HL49 являются элементами дисплея. В моем девайсе я использовал красные светодиоды (напряжение 3 В, размер 3 мм). Но тут уж как говорится дело вкуса…

Дальше идем к процессу и особенностям сборки:

Для платы используется фольгированный двусторонний текстолит FR4, габаритными размерами 50 * 50 мм. В виду особенностей конструкции таких заготовок понадобится 2 штуки. Далее стандартная процедура:

1. Обработка и чистка текстолита. В начале механическая – обрабатываем мелкозернистой наждачной бумагой, затем химическая – тщательно моем столовой содой или чистящим средством для посуды.

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

Подготовка фотошаблона

3. Далее чистую плату кладем на салфетку или лист бумаги оборачиваем другой стороной и немного прогреваем утюгом (10 – 15 секунд). После чего кладем трафарет на текстолит и тщательно прижимаем утюгом (в таком состоянии ждем 25 – 30 секунд).

Процесс переноса рисунка на печатную плату

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

Удаление излишков бумаги

5. Используя любой сверлильный инструмент (коловорот, маленькая самодельная дрель, сверлильный станок и т.д.) проделываем несколько контрольных отверстий, которые послужат метками для нанесения рисунка второй стороны (это необходимо для идеального совмещения рисунков с обоих сторон).

Сверление маркировочных отверстий

6. После чего повторяем вышеописанные процедуры для второй стороны.

7. Точно таким же путем делаем заготовку второй платы.

8. Далее отправляем обе платы в емкость с хлорным железом или персульфатом аммония для травления. Водичку лучше постоянно подогревать на водяной бане с целью уменьшения времени травления. После чего лудим заготовки (я предпочитаю покрывать печатные платы сплавом Вуда. Вторую плату не лудил в виду отсутствия времени).

 

9. Затем наступает самое интересное – монтаж компонентов. Для металлизации отверстий используются металлические проволочки, которые с лихвой остаются после монтажа светодиодов. Сами светодиоды монтируются с отступом 5 – 7 мм от платы (связано с особенностями конструкции).

Монтаж компонентов

10. Припаяв и подключив наш девайс к программатору загружаем прошивку. Фьюз биты оставляем заводскими – они вполне устраивают.

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

Готовое изделие

Готовое изделие

К особенностям сборки добавлю то, что платы вставляются друг в друга посредством штырей PLS и их ответных частей. Крепеж довольно надежный. Оформлять коробочку – тоже дело творческое и к электронике мало относится.

Дерзайте, господа! Успехов в этом нелегком деле…

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
CPU1 МК AVR 8-бит
ATmega8A-AU
1 Поиск в магазине ОтронВ блокнот
DD1 Линейный регулятор
LM7805
1 Поиск в магазине ОтронВ блокнот
VT1-VT7 MOSFET-транзистор
2N7002
7 Поиск в магазине ОтронВ блокнот
C1 Конденсатор0.1 мкФ1 SMD 1206Поиск в магазине ОтронВ блокнот
C2 Конденсатор1 мкФ1 SMD 1206Поиск в магазине ОтронВ блокнот
R1 Резистор
10 кОм
1 SMD 1206Поиск в магазине ОтронВ блокнот
R2-R8 Резистор
100 Ом
7 SMD 1206Поиск в магазине ОтронВ блокнот
R9-R15 Резистор
4.7 кОм
7 SMD 1206Поиск в магазине ОтронВ блокнот
SA1 Кнопка (с фиксацией)1 Поиск в магазине ОтронВ блокнот
HL1-HL49 Светодиод3 мм, 3В49 Поиск в магазине ОтронВ блокнот
BUS1-BUS14 ШтыриPLS072 Поиск в магазине ОтронВ блокнот
BUS1-BUS14 Ответная часть штырейPBS072 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 1
Я собрал 0 3
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 3 чел.

Комментарии (22) | Я собрал (0) | Подписаться

+1
Dr. Alex #
Жаль что автор не оставил исходник. Хоть-бы одним глазком взглянуть
Ответить
0

[Автор]
hq4u #
Привет Dr. Alex. Завтра обязательно выложу часть исходника (ведь должно же быть место загадке).
Ответить
0

[Автор]
hq4u #
Функция реализующая вывод питания на соответствующие порты строк матрицы (порты только не совпадают с реальной схемой, это из предыдущих наработок)

int Stroka(int a, int b, int c, int d, int e, int f, int g)
{
if (a == 1) PORTD.2 = 1;
else PORTD.2 = 0;
if (b == 1) PORTD.1 = 1;
else PORTD.1 = 0;
if (c == 1) PORTD.0 = 1;
else PORTD.0 = 0;
if (d == 1) PORTC.5 = 1;
else PORTC.5 = 0;
if (e == 1) PORTC.4 = 1;
else PORTC.4 = 0;
if (f == 1) PORTC.2 = 1;
else PORTC.2 = 0;
if (g == 1) PORTC.3 = 1;
else PORTC.3 = 0;
return 0;
};

Аналогично для столбцов:

int Stolbec(int a, int b, int c, int d, int e, int f, int g)
{
if (a == 1) PORTB.0 = 1;
else PORTB.0 = 0;
if (b == 1) PORTB.7 = 1;
else PORTB.7 = 0;
if (c == 1) PORTB.6 = 1;
else PORTB.6 = 0;
if (d == 1) PORTB.1 = 1;
else PORTB.1 = 0;
if (e == 1) PORTD.7 = 1;
else PORTD.7 = 0;
if (f == 1) PORTD.6 = 1;
else PORTD.6 = 0;
if (g == 1) PORTD.5 = 1;
else PORTD.5 = 0;
return 0;
};

Далее пишем в теле программы функции с необходимыми параметрами:

int Serdce(int time)
{
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
Stolbec(1,0,0,0,0,0,0);
Stroka(0,0,1,1,0,0,0);
delay_ms(time);
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
Stolbec(0,1,0,0,0,0,0);
Stroka(0,1,0,0,1,0,0);
delay_ms(time);
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
Stolbec(0,0,1,0,0,0,0);
Stroka(0,1,0,0,0,1,0);
delay_ms(time);
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
Stolbec(0,0,0,1,0,0,0);
Stroka(0,0,1,0,0,0,1);
delay_ms(time);
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
Stolbec(0,0,0,0,1,0,0);
Stroka(0,1,0,0,0,1,0);
delay_ms(time);
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
Stolbec(0,0,0,0,0,1,0);
Stroka(0,1,0,0,1,0,0);
delay_ms(time);
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
Stolbec(0,0,0,0,0,0,1);
Stroka(0,0,1,1,0,0,0);
delay_ms(time);
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
return 0;
};

Отключение портов необходимо для устранения светового дребезга, а функции задержки для "синхронизации" с глазами)))
Ответить
+1
gamebox #
Эх и перемудрено. Можно было использовать целиком порта для развертки по строками и столбцам и не пришлось бы городить эти функции, а просто выводить.
PORTB=0b11111111
PORTC=0b0000001;
PORTB=0b11000011
PORTC=0b0000010;
..............
А если делать правильно, то изображение загонять в байтовый массив во флеш и циклом выводить без всяких if else. Столько места экономится для любых надписей и анимаций.
Ответить
0

[Автор]
hq4u #
Доброго времени суток! Абсолютно с Вами соглашусь, так действительно проще. Нужно отметить только одно НО... Если Вы внимательнее посмотрите на принципиальную схему, то увидите, что свободных портов ЦЕЛИКОМ там просто нет. И в данном проекте программный продукт затачивался под схему - не наоборот
Ответить
+2
#
Эта проблема решается элементарно благодаря ссылочным переменным, если вы слышали о них:
uchar *data_bus_port[8]={(uchar*)&PORT_bus_0, (uchar*)&PORT_bus_1, (uchar*)&PORT_bus_2, (uchar*)&PORT_bus_3,
(uchar*)&PORT_bus_4, (uchar*)&PORT_bus_5, (uchar*)&PORT_bus_6, (uchar*)&PORT_bus_7};
uchar data_bus_pin[8]={PIN_bus_0, PIN_bus_1, PIN_bus_2, PIN_bus_3, PIN_bus_4, PIN_bus_5, PIN_bus_6, PIN_bus_7};

Эт так, для примера. А то, что ваш программный продукт затачивался под схему-изучайте программирование. Мало того, что не очень приятный глазу код написали, так ещё и жадничаете выложить исходник. Нехорошо, сударь
Отредактирован 06.11.2014 17:52
Ответить
-2

[Автор]
hq4u #
1. Интеллектуальную собственность еще никто не отменял - код мой, что хочу то и делаю, ИМХО!
2. Ссылки мне знакомы, только я не совсем понял смысл их использования - результат один и тот же получается.
3. На счет изучения программирования - я это делаю постоянно на протяжении последних 5 лет (твердо знаю 3 языка программирования и никак не могу освоить ассемблер, времени никак не хватает!).
4. Код глазу не приглянулся потому что никакому человеку или программисту в частности не нравится чужой код! Это закон такой неписанный. Мне проще переписать код, чем в чужом разбираться
Спасибо за коммент
Ответить
-3
#
Раз за 5 лет Вы не поняли смысл использования ссылочных переменных-сомневаюсь в твёрдости Ваших "знаний" трёх языков. А насчёт ассемблера-то Ваш код больше похож на ассемблерный, а не на код языка высокого уровня. Смысл языка высокого уровня в том и заключается, что одной функцией, оператором и т.д вы избавляете себя от рутинной работы написания множества ассемблерных строк, если бы писали на ассемблере. В этом и заключается "хороший" стиль программирования, который приятен глазу. По-этому, тут вы не правы про "чужой код". Весь этот листинг, который вы привели, можно заменить несколькими строками "хорошего" стиля программирования: для первой функции-один цикл for с двумя строками в его теле; аналогично для второй функции и третьей, за исключением того, что в третьей константы забить в массив. Ко всему прочему-зачем параметры функций обьявлены типа int ? на этот тип резервируется в 2 раза больше памяти МК (2 байта, если быть точным), которые для передачи параметра 0 или 1-попросту лишняя нецелесообразная трата ресурсов. И этот возврат значений-какой от него смысл? опять же лишняя трата ресурсов. Надеюсь, вы восприняли здоровую критику
Ответить
+1

[Автор]
hq4u #
Полемику здесь разводить не стоит, не Вам судить о моих знаниях. Тем более, это противоречит правилам сайта!
1. На счет программного кода - как я уже говорил "любому программисту проще переписать код". Точно так же и Вам проще использовать свой код.
2. Память в данном случае меня мало интересует - ее хватает с избытком
3. Если Вы думаете, что в СВОЕМ коде я не использую функции или другие прелести Сей или что я буду выкладывать СВОЙ код, то ОЧЕНЬ сильно заблуждаетесь!
4. Статья направлена на людей с желанием творить, так же как и здесь. Моя только чуть интереснее
Ответить
+2
gamebox #
Изучил схему, порты B и D позволяют реализовать вплоть до 8х8, ибо не заняты ничем другим, кроме вывода.
Ответить
0

[Автор]
hq4u #
Привет. +1 к вниманию! Ты совершенно прав, можно с легкостью сделать и 8 * 8. Матрица мне необходима была 7 * 7, именно из этого и исходил. Буквы для меня выводить лучше на нечетное количество строк
Ответить
+1
TiC #
Скажите как измениться программа и схема если задействовать для вывода только порты B и D?
Ответить
0

[Автор]
hq4u #
Привет! Подумаю над Вашим вопросом и отпишусь на выходных!
Ответить
0

[Автор]
hq4u #
Ну вот собственно файл с печатной платой, плата индикации не изменилась ни чуть - чуть. С программой пока ничего не ясно, попытаюсь отписаться попозже
Прикрепленный файл: Печатная_плата_управления.lay6
Ответить
0

[Автор]
hq4u #
Доброго времени суток! Я наконец-то нашел время и сделал программу под вышеописанную плату (извиняюсь за столь поздний срок).
Прикрепленный файл: bin_scheme.hex
Ответить
+1
TiC #
Спасибо, хоть и с опозданием
Ответить
+2
shokko #
Вообще клёвая штука. Такую девушке собрать - вообще афигенно будет!
Ответить
0
Panda #
Классная вещь. Знал пару ребят которую подобную делали. Даже продавали потом.
Ответить
0
didgit_fox #
Вот ещё один вариант -
http://vk.com/video?z=video167448095_166927385%2F29cfa28d9b5d7842d1%2Fpl_updates
Ответить
0
didgit_fox #
Правда эффект тут один - "бегущая" строка с отображением времени и температуры
Ответить
0
oleg5d75 #
Зачем городить кучу светодиодов, если за копейки можно купить готовые матрицы и выглядят они более эстетично и схему можно собрать безо всяких печаток за полчаса на ардуине
Ответить
-1
Александр #
Автор молодец. Все работает, это главное. А уж как это реализовано - не собачье дело всяких умников.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Набор для сборки - LED лампа
Набор для сборки - LED лампа
Конструктор УНЧ 60 Вт на LM3886 Осциллограф DSO138
вверх