Меню

Как подключить светодиодную матрицу к микроконтроллеру avr

Как подключить светодиодную матрицу к микроконтроллеру avr

Чтобы понять, что такое динамическая индикация, и для чего она нужна, нужно рассмотреть для примера промышленный индикатор GNM-7881AUE.

В матрице GNM-7881AUE 64 красных светодиода. Если выводить из матрицы контакты всех светодиодов для управления каждым по отдельности, то понадобится как минимум 65 внешних контактов на корпусе матрицы, а также микроконтроллер с 64 портами вывода. Несомненно, это технологически реализовать очень трудно (и нецелесообразно). Поэтому на заводе светодиоды объединили в 8 групп по строкам и столбцам, и соединили их в матрицу следующим образом:

Светодиод слева вверху зажжется, если микроконтроллер на порт PA0 выставит лог. 1 (+5 вольт), а на PB3 лог. 0 (0 вольт). Такое управление светодиодами, когда логические сигналы во время отображения какого-то изображения не меняются, называется статическим. Как Вы уже наверное догадались, чтобы иметь возможность управлять всеми светодиодами, то нужно подключить остальные выводы строк и столбцов матрицы к микроконтроллеру:

ОК, все очень красиво, но как, например, зажечь один светодиод в центре матрицы, оставив остальные при этом выключенными? Или, как, наоборот, зажечь все светодиоды, кроме одного-двух в центре? Понятно, что при такой схеме включения невозможно этого добиться простой подачей на выходные порты ноликов и единичек (с помощью статической индикации). Тут на помощь как раз и приходит динамическая индикация.

[Динамическая индикация]

Название «динамическая» происходит от того, что формирование изображения происходит не статически, а в динамике, т. е. сначала, например, показывают только первый столбец изображения (все остальные столбцы погашены), на втором шаге показывают только второй столбец, и так далее до 8-столбца. Если это делать быстро (с периодом прокрутки всех шагов не меньше 20 мс), то человеческий глаз не воспримет переключения между столбцами, и ему будет казаться, что отображается сразу вся картинка. Такое последовательное отображение элементов изображения называется разверткой. Для того, чтобы изображение не мерцало и яркость всех точек была одинакова, необходимо выполнение следующих условий:

1. Длительность отображения каждого столбца постоянна, одинакова для всех столбцов.
2. Частота смены столбцов не меняется.

Почему необходимо отображать картинку по столбцам, а не по строкам? Потому что в данной схеме мы подключили токоограничительные резисторы к линиям строк. Чтобы обеспечить одинаковую яркость свечения каждой точки, нам нужно обеспечить одинаковый средний ток через каждый светодиод, что возможно при такой схеме только при развертке по столбцам (когда по столбцам-анодам пробегает лог. 1). Если бы у нас резисторы были подключены не к катодам (не к строкам), а к анодам (к столбцам), то тогда развертку изображения надо было делать не по столбцам, по строкам (у нас бежал бы по строкам лог. 0).

Для примера приведу алгоритм отображения цифры 2 (на рисунке светодиоды, которые надо зажигать, я закрасил красным цветом), столбцы и строки нумеруются от 1 до 8:

1. Отображение столбца 1. Для этого на PA0 подаем лог. 1, на PA1..PA7 подаем лог. 0. На порты PB3, PB4, PD0, PD1, PD3, PD5..PD7 также лог. 1. Держим матрицу с таком состоянии 2.5 мс.
2. Отображение столбца 2. Для этого на PA1 подаем лог. 1, на PA0, PA2..PA7 подаем лог. 0. Подаем лог. 1 на PB3, PB4, PD1, PD3, PD7, подаем лог. 0 на PD0, PD5, PD6. Держим матрицу с таком состоянии 2.5 мс.
3. Отображение столбца 3. Для этого на PA2 подаем лог. 1, на PA0, PA1, PA3..PA7 подаем лог. 0. Подаем лог. 1 на PB3, PD0, PD1, PD5, PD7, подаем лог. 0 на PB4, PD3, PD6. Держим матрицу с таком состоянии 2.5 мс.
4. Отображение столбца 4. Все то же самое, что и на шаге 3, только подаем лог. 1 не на PA2, а на PA3. Держим матрицу с таком состоянии 2.5 мс.
5. Отображение столбца 5. Все то же самое, что и на шаге 4, только подаем лог. 1 не на PA3, а на PA4. Держим матрицу с таком состоянии 2.5 мс.
6. Отображение столбца 6. Все то же самое, что и на шаге 5, только подаем лог. 1 не на PA4, а на PA5. Держим матрицу с таком состоянии 2.5 мс.
7. Отображение столбца 7. Для этого на PA6 подаем лог. 1, на PA0..PA5, PA7 подаем лог. 0. Подаем лог. 1 на PB3, PB4, PD0, PD3, PD5, PD7, подаем лог. 0 на PD0, PD1, PD6. Держим матрицу с таком состоянии 2.5 мс.
8. Отображение столбца 8. Все то же самое, что и на шаге 1, только подаем лог. 1 не на PA0, а на PA7. Держим матрицу с таком состоянии 2.5 мс.

Читайте также:  Как подключить длинный платный номер

Цикл шагов 1..8 занял ровно 20 мс (2.5+2.5+2.5+2.5+2.5+2.5+2.5+2.5). При непрерывном чередовании шагов 12345678123. получится отображение символа 2 без видимого мерцания. По похожему принципу работают все «взрослые» системы индикации в автобусах, электричках, турникетах, рекламных табло.

[Пример управления матрицей LED8X8]

Потом проект оброс возможностью отображения бегущей строки и вывода картинок BMP, что позволяет делать забавную анимацию. В качестве знакогенератора используется набор символов от ZX-Spectrum, дополненный русскими символами.

[Что внутри проекта LED8x8]

Проект собран на основе статьи [1]. Скачанный пример дополнен командами, и в главный цикл main добавлена процедура динамической индикации, отображающая символы, бегущую строку или анимацию из картинок BMP. Питается и конфигурируется устройство от USB. Когда активен интерфейс USB, то возможно мерцание отображаемой картинки, так как на программную поддержку протокола (библиотека V-USB) тратится большая доля процессорного времени.

В память можно занести любое количество текстов и картинок (пока хватит места в EEPROM), они сохраняются в памяти после выключения питания. Управление и конфигурирование осуществляется через текстовую консоль, подключенную к виртуальному COM-порту (через любую консоль типа Hyperterminal, Terraterm или putty), интерфейс управления имеет систему подсказок. Вот пример сеанса работы с управляющей консолью проекта:

Тексты можно вводить командой TXT, а BMP-картинки в черно-белом формате 8×8 пикселов можно загрузить по протоколу XMODEM (моя любимая консоль SecureCRT умеет это делать). И тексты, и картинки добавляются в общий пул, и проигрываются по команде RUN в том порядке, в каком Вы их занесли в память — поэтому при желании можно сочинить очень сложную поздравительную комбинацию. Скорость бегущей строки и смены картинок меняется командой SPEED (от 1 до 10). Доступны также некоторые отладочные команды.

[Применение матричных индикаторов 5×7 точек]

Для светодиодной матрицы можно применить не только индикаторы 8×8 точек, но также и индикаторы 5×7 точек, которые иногда проще найти и купить. К примеру, есть индикаторы TFB2457C, TFB2757C, которые хороши тем, что их можно стыковать друг с другом для получения матрицы любого размера. Вот пример организации матрицы 7×10 точек:

[Применение силовых ключей на транзисторах]

Для подключения матрицы из нашего примера понадобится 8 транзисторов IRLML6401, затворы которых подключены к портам PA0..PA7 микроконтроллера ATmega32A, истоки к +5V питания, а стоки к соответствующим столбцам анодов матрицы. Нагрузочные резисторы, которые подключены к катодам матрицы, можно уменьшить для нашего примера до номинала 75 ом.

Источник

Подключение светодиодов к микроконтроллеру AVR

В статье будет рассмотрено подключение светодиодов к микроконтроллеру, работа с портами и написание программы на СИ. Статья, прежде всего, предназначена новичкам, которые только взялись за микроконтроллеры AVR.

Для начала нужно выбрать микроконтроллер. В моем случае это ATmega8535. В данном случае микроконтроллер можно брать любой, так как данная задача легко реализуется под любой МК. Писать программу для микроконтроллера можно на Ассемблере, СИ, Pascal-е и Bascom. Я использовал язык СИ, все эти языки разные.
Конкретную разницу между Си и Паскалем можно увидеть ниже.

Читайте также:  Как подключить фронтальную камеру к зеркалу с монитором

Программу я писал в CodeVisionAVR V2.60 Evaluation, она получилась самой примитивной, но зато простой. Вот некоторые фрагменты программы:

Эта часть кода мигает каждым светодиодом по очереди:

Функция switch (FCV_A1) <…>приводит в действие одну из частей программы(case 1 или default ) в зависимости от положения выключателя A1.

Функция
if (FCV_OP1) < >
else < … >
или
if (FCV_OP2) < >
else< … >
следит за положением выключателя OP1 или OP2, если включен, выполняется один из 2 кусков кода подпрограмм case 1 или default, а если выключен то иначе, в зависимости от положения выключателя A1.

Остальные части программы не требуют объяснения, так как построены аналогично.

Светодиоды можно включить и по другому:

В этой схеме на 1 порт подключаются сразу два светодиода через транзистор. В этом случае транзистор работает как ключ.

Здесь светодиод подключается через токоограничивающий резистор. При подключении светодиода на землю, он будет гореть тогда когда на выходе порта будет логическая 1, а при подключении на +, на выходе порта должен быть 0.

Еще можно подключить так:

PX – это ножка используемого порта.

Кнопку или выключатель можно подключить еще и так:

Микроконтроллер тактируется от внутреннего генератора на 8МГц

Байты конфигурации:
0xE4 LOW
или
LOW SUT0 CKSEL3 CKSEL1 CKSEL0 отмечены запрограммированные фьюзы
HIGH трогать не надо
запрограммированный фьюз=0, а не запрограммированный=1.
Перед выставлением фьюзов, их нужно сначала считать с МК. Потом выставить нужные фьюзы, например, в программе Khazama AVR Programmer незапрограммированные фьюзы помечаются галочкой.

Питание схемы не должно превышать 5 вольт, лучше на вход питания поставить стабилизатор 7805.

Светодиоды любые маломощные. Для мощных светодиодов использовать схему с транзисторными ключами и сделать раздельные питание, то есть МК питается от одного стабилизатора 7805, а светодиоды от другого, например L7805 (1.5А). Стабилизатор и ключевые транзисторы следует выбирать в зависимости от мощности светодиодов.

Ниже вы можете скачать исходники, прошивку, проект в Proteus и Flowcode

Источник

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

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

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

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

Читайте также:  Как подключить смартфон nokia к компьютеру через usb

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

Для опытных радиолюбителей схема не требует пояснений, для новичков поясню. Основным элементом управления является микроконтроллер 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 и их ответных частей. Крепеж довольно надежный. Оформлять коробочку – тоже дело творческое и к электронике мало относится.

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

Источник