Бегущая строка на atmega168

Бегущая строка на atmega168

Бегущая строка STX-4

Основные характеристики устройства:
– макс. разрешение(W*H): 200 x 24 точек;
– информационная емкость: 10000 знаков (5 текстовых банков, каждый по 2000 знаков);
– количество шрифтов: 6 ;
– встроенный редактор текста с подключаемой компьютерной АТ-клавиатурой, язык и режим выводятся на ее светодиоды;
– загрузка текста с компьютера через интерфейсы: RS-232 (COM-порт), RS-485;
– датчик температуры;
– встроенные часы/календарь;
– датчик освещенности(яркость табло от времени суток);


Присланные фотографии:

Схема устройства.
Схема собрана на микроконтроллере Atmega64.
Полная схема контроллера.

Облегченная схема контроллера табло с минимумом функционала(просто бегущая строка).

Микроконтроллер Atmega64, Atmega64A(но Atmega64L не подойдет – маленькая частота) содержит достаточно внутренней памяти для хранения программы, шрифтов и выводимой текстовой информации. Во внутренней памяти МК может храниться 1 текстовый банк (2000 символов). Если потребуется текст большей длины или нужно хранить несколько сообщений, то на плату устанавливается микросхема дополнительной памяти U3 24C64. В этом случае общая длина текста может быть до 10000 знаков (1 банк в МК + 4 банка во внешней памяти).
Чтобы не падала яркость экрана светодиодная матрица делится на 3 блока по 8 горизонтальных строк каждый(но может быть подключено 1 или 2 блока – на 8 или 16 точек в высоту). Т.о. время свечения каждой строки составляет около 1/8 от общего времени – стандартное значение для большинства подобных устройств. Микросхема U8 включена как демультиплексор и коммутирует тактовый сигнал модуля SPI(выход SCK) на один из трех блоков. На адресные входы A и B подается номер этого блока. Выдвигаемые байты данных с SPI(выход MOSI) подаются на все блоки одновременно, но захват данных происходит только тем блоком на который сейчас поступают тактовые импульсы. Скорость потока данных – 1Мбит, при частоте регенерации свыше 80Гц – 2Мбит/с.
Микросхемы U9, U10 и U11 74НС245 являются буферными усилителями, специально разработаны для работы на тяжелую нагрузку(шина данных с относительно большой емкостью). Резисторы R23. R36 – “антизвонные”, немного затягивают фронты и исключают ложные срабатывания сдвиговых регистров. Для подключения контроллера к табло рекомендуется использовать ленточный кабель, где сигнальные линии чередуются с земляными.
Яркость табло определяется освещенностью фоторезистора R38, сигнал с него поступает на вход АЦП и регулирует коэффициент заполнения ШИМ. ШИМ с МК (разъем J7 LED_PWM) поступает на входы разрешения /OE сдвиговых регистров матрицы. Пределы регулировки яркости: 10. 100%. Если авторегулировка яркости не используется, то входы /OE сдвиговых регистров подключаются на землю, а фоторезистор можно не устанавливать. Имеющийся в наличии фоторезистор и конкретные условия освещенности могут потребовать подбор значения R21. Датчик освещенности целесообразно смонтировать в трубке, которую направить вверх на небо. Так исключается боковая засветка от фонарей уличного освещения и других нежелательных источников света.
Транзисторы Q9 и Q10 образуют выход с открытым коллектором для клавиатурного интерфейса. В подпрограмме работы с клавиатурой используются таймауты, поэтому “горячее” переподключение клавиатуры не будет вызывать ошибок приема как это происходило в первой и второй версиях устройства.
Транзисторы Q1-Q8 коммутриуют анодные строки светодиодной матрицы на плюс питания. Если матрица длинная и кушает много тока, то на строки каждого блока ставится свой транзистор: К контакту J2 LED_PWR подключается мощный источник питания +5V, он питает всю светодиодную матрицу. Т.к. светодиодная матрица потребляет много тока, то следует использовать достаточно толстые провода, особенно это касается земляных проводников.
Микросхема U4 MAX232 преобразует 12-вольтовые уровни интерфейса RS-232 (от COM-порта) в стандартные уровни ТТЛ. Микросхема U5 SN75176 является приемопередатчиком дифференциального интерфейса RS-485. Существует большое количество ее аналогов у разных производителей (например, MAX485, SP485 и т.д.), но некоторые микросхемы несовместимы по расположению выводов. Поэтому перед установкой аналога следует свериться с документацией производителя(посмотреть на ее datasheet).
Во избежание конфликта выходов, одновременно на плату не следует устанавливать обе микросхемы MAX232 и SN75176 (т.е. надо ставить только одну из них).
Диод D1 для установки не обязателен. Он просто защищает схему контроллера от случайной переполюсовки питания.
Через разъем J3 МК программируется по интерфейсу JTAG. Я выбрал нестандартную распиновку JTAG т.к. она упрощает разводку платы. Atmega64 также может программироваться через ISP. Но надо иметь в виду что у нее в режиме программирования ISP используются другие ноги(не SPI !) : MOSI=PE0, MISO=PE1, SCK=PB1(см. даташит, раздел SPI Serial Programming Pin Mapping). FUSE-биты для AVR Studio, CVAVR.

Плата разведена в одном слое + 9 перемычек(красный цвет). Все элементы – выводные типа Through Hole. Единственный компонент в корпусе для поверхностного монтажа – МК Atmega64. На плате предусмотрено место под держатели трехвольтовой батарейки CR2032 с вертикальной и горизонтальной установкой. Термодатчик U6 DS18S20(DS1820) и фоторезистор R38 могут быть выносными.

Плата обработана Топором, чем и объясняется нестандартная форма дорожек. Большая часть платы покрыта земляным полигоном. Это позволяет экономно расходовать травящий раствор и уменьшить уровень наводок на компоненты. С другой стороны, такая плата может представлять некоторую трудность при домашнем изготовлении с помощью утюговой технологии. Поэтому в архив также включена плата где земля в виде сеточки.

Светодиодная матрица может быть собрана по нескольким схемам. Соответственно, под каждую схему включения имеется своя прошивка.
Первый вариант . Строки матрицы являются общими анодами. Сборка транзисторных ключей ULN2803 умощняет выходы сдвиговых регистров 74HC595 и позволяет нагрузить до 500мА на каждый выход(т.е. столбец). Резисторы столбцов подбираются исходя из желаемой яркости и характеристик светодиодов. Примерный диапазон сопротивления резисторов: 50. 100 Ом. Если предполагается устанавливать в каждый пиксел по несколько светодиодов параллельно, то каждый диод снабжается своим собственным токоограничивающим резистором. Данный вариант обладает достаточно высокой яркостью свечения матрицы и может быть использован на улице.
Если на табло в некоторых местах мерцают точки, то значит сдвиговые регистры ловят наводки. Попробуйте использовать более толстые земляные проводники. Землю от микросхем ключей ULN2803(выводы №9) пустить отдельным проводником, который соединить с землей контроллера на клемме питания.
Второй вариант похож на первый, но здесь вместо дискретных светодиодов используются готовые матрицы FYM-12881. Это матрицы 8*8 точек с общим катодом на строках(столбцы – аноды). Но т.к. матрица квадратная, то эта характеристика условна и она может быть включена в схему как матрица с общим анодом с поворотом на 90 градусов. Производитель выпускает матрицы с различной маркировкой и разным цветом свечения. Например:
FYM-12881ASG-11 – в каждой точке находятся два отдельных светодиода – красный и зеленый;
FYM-12881ASG0-11 – установлены только красные диоды;
FYM-12881AS0G-11 – установлены только зеленые светодиоды.
Здесь используются красные или красно-зеленые матрицы, зеленые светодиоды подключены к другим выводам и могут быть задействованы если переразвести плату под них. Матрицы поворачивать я не стал т.к. плата бы не развелась в одном слое, поэтому просто изменил в программе алгоритм вывода информации.
Этот вариант я использовал для создания макета и отладки программы.
Третий и самый простой вариант . Матрица с общими катодами на строках, заместо КТ973 на плате контроллера ставятся NPN транзисторы КТ972. Сдвиговые регистры напрямую питают светодиодные столбцы и поэтому яркость может быть невысокая, т.е. годится для использования внутри помещения. Схема матрицы такая же как у STX-1.

Читайте также:  Фотоэлемент для включения света

Схема подключения контроллера к светодиодным блокам.

Схема подключения если не используется регулировка яркости.

Программа устройства.
Программа написана так, что ненужные функции можно не подключать. Например, одному не нужны часы, другому температура.
На плату можно не устанавливать:
– микросхему памяти 24С64;
– микросхему датчика температуры DS1820;
– микросхему часов DS1307.
Эти функции настраиваются через меню устройства(по умолчанию они отключены).
Также на плату можно не устанавливать:
– фоторезистор/датчик освещенности(см. выше схему подключения если не используется регулировка яркости);
– микросхемы связи с компьютером MAX232 и SN75176.

Через меню настраиваются:
– шрифт температуры, шрифт времени и шрифт даты;
– системный шрифт;
– наличие датчика температуры, микросхемы часов и наличие микросхемы внешней памяти;
– частота регенерации табло(50. 100Гц);
– длина табло(64. 200 точек).
Высота табло определяется загруженными шрифтами.

Программа загрузки текстов
Программа загрузки текстов для ПК включает в себя простой редактор для набора текстов с функциями вставки управляющих команд и симулятор бегущей строки.
При загрузке в устройство текст может быть размещен в одном из пяти банков EEPROM, либо во временном банке. При выборе временного банка текст записывается в ОЗУ (RAM) и можно указать количество повторов сообщения(от 1 до бесконечности) после которых устройство начнет воспроизводить текст из EEPROM. Функция временного банка полезна для вывода “быстрых” сообщений, например, “Магазин закрывается через 5 минут.” Симулятор позволит увидеть текст еще до загрузки в устройство.
*Скорость прокрутки текста в симуляторе может не совпадать со скоростью бега текста на реальном устройстве.

Для связи компьютера с устройством используются следующие интерфейсы:
– RS-232, контроллер табло соединяется с компьютером прямым модемным кабелем(2-2, 3-3, 5-5);
– RS-485. Обычно используется для передачи информации на значительные расстояния и в условиях сильных электромагнитных помех. Кабель на малые расстояния можно скрутить из обычной “лапши”, но при работе в тяжелых условиях или на значительные расстояния используйте готовую экранированную витую пару. Для переключения направления передачи данных программа STX4 Control использует линию DTR. Схема преобразователя RS-232 -> RS-485.

Программа редактора шрифтов
Часто бывает так, что пользователь не может на словах объяснить какие именно шрифты хочется увидеть в табло. В таком случае может быть полезна программа редактора шрифтов. Эта утилита позволит самостоятельно подготовить нужный набор шрифтов. Для упрощения этой процедуры имеется возможность захвата шрифтов ОС Windows. В настоящий момент смена шрифтов в устройстве производится через смену прошивки Atmega64 (требуется перекомпиляция программы контроллера).

STX4 Control – программа загрузки текстов в табло

Binary Font Editor V2 – программа создания своих шрифтов. Файлы для обновления программы здесь(добавлена возможность захвата казахских и узбекских шрифтов).

FAQ (PDF) – ответы на часто задаваемые вопросы

Прошивки микроконтроллера – демонстрационная версия, описание ограничений см. в архиве

Урок 16.1. Бегущая строка на русском языке. Arduino и MAX7221.

Сегодня в уроке научимся выводить текст на русском языке на матрицу MAX7221. Для более быстрой смены текста в бегущей строке «научим» Arduino выводить на матрицу полученный текст из монитора порта . Как подключать матрицу MAX7221 к Arduino, рассказывал в предыдущем уроке: Подключаемматрицу Max72xx (MAX7219) к Arduino. Простая анимация.

Подключение светодиодной матрицы 8×8 на MAX7219 к Arduino.

Для выполнения Arduino урока нам понадобится:

Для подключения необходимо пять проводов, которые чаше всего идут в комплекте с матрицей. Подключаем вывод CLK (MAX7219 ) к выводу 13 (Arduino), вывод CS подключаем к выводу 9, вывод DIN подключаем к выводу 11. Питание подключается VCC к +5В и GND к GND.

Схема подключения модуля с 4 матрицами к Arduino UNO .

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO будет вот такой.


Установка библиотек Adafruit_GFX и Max72xxPanel. И настройка для вывода русского текста.

Существует несколько библиотек, доступных для управления матрицей на драйвере MAX7219 . В этом уроке я буду использовать две библиотеки: Adafruit_GFX и Max72xxPanel .

Для установки этих библиотек выполните следующие действия.
1. Откройте Arduino IDE и перейдите в раздел Скетч > Подключить библиотеку > управление библиотеками .

Должен открыться менеджер библиотек.

2. Укажите “ GFX” в поле поиска, выберете из списка и установите библиотеку от Adafruit GFX.

3. Библиотеку Max72xxPanel можно установить из zip архива. Для этого скачайте архив с библиотекой отсюда или внизу урока из раздела «Файлы для скачивания». В Arduino IDE перейдите в раздел Скетч > Подключить библиотеку > Добавить .ZIP библиотеку . Выбираете архив с библиотекой.

4. Скачать файл glcdfont.c и заменить его в библиотеке Adafruit-GFX. Библиотека находится C:UsersUSERDocumentsArduinolibrariesAdafruit_GFX_Library. У вас путь до библиотеки может отличаться. Вы также можете скачать библиотеку Adafruit-GFX подготовленную для работы с русским текстом внизу статье есть раздел с материалами для урока.

5. В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно в самом низу кода.

6. После установки библиотек перезагрузите среду разработки Arduino.

Пример вывода русского текста на матрицу MAX7221.

Пример 1. Выводим русский текст на матрицу. Текст хранится в переменной. Для смены текста нужно постоянно загружать скетч в Arduino.

В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно в самом низу кода.

При выводе русского текста использовать функцию utf8rus() .

Как видно, вывод на матрицу не сильно отличается от вывода русского текста на SSD1306 OLED-диспл ей: SSD1306OLED-дисплей, вывод текста на русскомязыке в Arduino IDE

Пример 2. Выводим на матрицу русский текст, полученный из монитора порта.

За основу возьмем первый пример. Добавим в него функцию, которая посимвольно считывает значения с монитора порта. Сохраним полученный результат в переменную для вывода значения на MAX7221. А остальная часть кода остается без изменений.

Для проверки работы откроем монитор порта в Arduino IDE. И напишем нужный текст.

После чего нужно нажать кнопку « Отправить». Вот, что получается.

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

Матрицу можно сделать гораздо больше , и на нее выводить текст с анимацией из предыдущего урока. Пишите в комментарии, какой проект на Arduino вы бы хотели увидеть с использованием матриц MAX7221 и Arduino.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

Понравилась статья? Поделитесь ею с друзьями:

Как быстро запрограммировать контроллер AVR ( > Дата публикации: 17 марта 2010 .

Программатор PonyProg является свободно распространяемой GNU-программой с открытым исходным кодом и предназначен для программирования flash-микросхем с последовательным доступом. PonyProg написан итальянцем Клаудио Ланконелли (Claudio Lanconelli) и существует в Windows (9x/ME/NT/2000/XP) и Linux версиях.

Имеет поддержку русского языка. Может использовать параллельный порт (LPT) или стандартный последовательный порт (COM).

Читайте также:  Цепь с параллельным соединением нескольких ветвей

Поддерживаемые PonyProg микроконтроллеры семейства AVR.

AT90S1200, AT90S2313, AT90S2323, AT90S2343, AT90S4414, AT90S4434, AT90S8515, AT90S8535, AT90S2323, AT90S2343, AT90S2333, AT90S4433, AT90S4434, AT90S8535, AT90S8534
ATmega103, ATmega161, ATmega163, ATmega323, ATmega128, ATmega8, ATmega16, ATmega64, ATmega32, ATmega162, ATmega169, ATmega8515, ATmega8535, ATmega44, ATmega88, ATmega168, ATmega164, ATmega324, ATmega644, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATtiny12, ATtiny15, ATtiny26, ATtiny2313, ATtiny13, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861 , AT90can32, AT90can64, AT90can128.

PonyProg поддерживает ряд популярных программаторов, в том числе STK200/300, JDM/Ludipipo, EasyI2C и DT-006 AVR от Dontronics.

С помощью PonyProg можно загружать данные в микроконтроллеры Atmel AVR и MicroCHIP PicMicro, а также программировать микросхемы памяти с последовательным доступом (I2C Bus, Microwire, SPI eeprom).

Найти полный список программируемых микросхем и скачать программу можно на сайте PonyProg Помимо всего вышеперечисленного, PonyProg предоставляет возможность редактирования текста программы на уровне изменения значения байтов.

Загрузка программы с помощью PonyProg

Чтобы загрузить уже готовую программу с помощью PonyProg в микроконтроллер AVR, можно воспользоваться упрощенным вариантом программатора STK200. Это устройство состоит из 25-контактного разъема для параллельного (LPT) порта, 4-х резисторов (150 Ом) и соединительного кабеля, длина которого не должна превышать 1,5 метра.

Схема простого программатора AVR

Разъем, подключаемый к параллельному порту ПК, показан со стороны пинов
Один из самых простых программаторов состоит из 25-контактного разъема для параллельного (LPT) порта, 4-х резисторов (150 Ом) и соединительного кабеля, длина которого не должна превышать 1,5 метра. Резисторы необходимы для предохранения параллельного порта в случае неправильного монтажа и некоторых других неприятностей.

Схема получила свое название от отладочных плат Atmel для быстрого начала работы с микроконтроллерами AVR. Если вы хотите, чтобы ваш программатор почти в точности соответствовал классическому программатору STK200, то следует поставить перемычку для определения программатора программным обеспечением. Перемычка должна соединять выводы 2-12.

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

Рассмотрим последовательность действий по загрузке программы в микроконтроллер на примере ATmega8.

При первом запуске PonyProg попросит произвести калибрацию и указать тип используемого программатора с помощью двух предупреждающих сообщений.

Сделаем так, как он просит. Зайдем в меню “Setup” и выберем пункт “Calibration”.

При появлении предупреждения убедимся, что, кроме PonyProg, у нас не запущено никаких приложений, загружающих процессор и жесткий диск.

После чего нажмем “Yes” и подождем несколько секунд. После выполнения процесса калибрации появится сообщение об успешном завершении.

Если что-то пошло не так, калибрацию стоит провести заново.

Теперь выберем в меню “Setup” пункт “Interface Setup. “.

В появившемся окне выберем параллельный порт и способ работы с этим портом (в Windows2000/XP мы должны выбрать “AVR ISP I/O” и использовать стандартный LPT-порт).

Внимание! Не указывайте порт, к которому подключен модем: это может вывести его из строя.

Указать тип микроконтроллера можно, воспользовавшись меню “Device” – “AVR micro”.

Когда все приготовления выполнены, загрузим в PonyProg файл с откомпилированной программой.

Подсоединим шлейф программатора STK200 к программируемому микроконтроллеру, убедимся, что все подключено правильно, и подадим питание. Если корпус ATmega8 не начал заметно нагреваться, можно загружать подготовленную программу во FLASH-память микроконтроллера. В меню “Command” выберем пункт “Write Program (FLASH)” и дождемся успешного завершения загрузки.

Программатор PonyProg позволяет также загружать данные в EEPROM-память, считывать данные из памяти микроконтроллера, стирать память и программировать FUSE-биты.

Изменение частоты ШИМ (PWM) Ардуино

Широтно-импульсная модуляция Arduino ► выполняется с частотой 488,28 Гц с помощью функции analogWrite на аналоговых выводах, но частоту ШИМ можно изменить.

Широтно-импульсная модуляция (ШИМ) Arduino UNO и NANO работает на аналоговых выходах 3, 5, 6, 9, 10, 11 с частотой 488,28 Гц. С помощью функции analogWrite частота ШИМ изменяется в диапазоне 0 до 255 и соответствует коэффициенту заполнения импульса от 0 до 100 %. Для многих устройств частота PWM Arduino NANO слишком мала, поэтому ее требуется увеличить. Рассмотрим, как это правильно сделать.

Широтно-импульсная модуляция Arduino

ШИМ, по-английски Pulse-Width Modulation (PWM) — это управление мощностью на нагрузке с помощью изменения скважности (ширины) импульсов при постоянной частоте и амплитуде сигнала. На следующем графике видно, что при разных значениях в функции analogWrite , амплитуда импульсов остается постоянной, но меняется ширина импульсов. Мощность сигнала определяет коэффициент заполнения импульса.

График. Параметры сигнала, коэффициент заполнения ШИМ

Можно выделить две области применения широтно-импульсной модуляции:

1. PWM используется в источниках питания, регуляторах мощности и т.д. Применение ШИМ на Arduino Nano позволяет значительно упростить управление яркостью источников света (светодиодов, LED-ленты) и скоростью вращения двигателей.

2. PWM используется для получения аналогового сигнала. Цифро-аналоговый преобразователь (ЦАП) на Ардуино прост в реализации, так как требует минимума радиоэлементов — достаточно одной RC цепочки из резистора и конденсатора.

Изменение частоты ШИМ Ардуино (разрядности)

Платы Arduino Uno и Arduino Nano на базе ATmega168/328 имеют 6 аппаратных ШИМ модуляторов на аналоговых портах 3, 5, 6, 9, 10, 11. Управление ШИМ сигналом осуществляется с помощью функции analogWrite , которая генерирует на выходе аналоговый сигнал и задает коэффициент заполнения импульса. Arduino устанавливает на выводах частоту 488,28 Гц и разрешение 8 разрядов (от 0 до 255).

Схема. Широтно-импульсная модуляция для чайников

В Arduino на базе ATmega168/328 для ШИМ используются три таймера:

Таймер 0 — выводы 5 и 6
Таймер 1 — выводы 9 и 10
Таймер 2 — выводы 3 и 11

ШИМ Ардуино определяется интегральными компонентами, называемыми таймерами. Каждый таймер в платах Arduino Uno и Nano на базе микроконтроллера ATmega168/328 имеет по два канала, подключенных к выходам. Для изменения частоты PWM сигнала требуется изменение таймера, к которому он подключается. При этом PWM изменится и на аналоговых выходах, подключенных параллельно к этому же таймеру.

Как увеличить частоту и разрядность ШИМ Ардуино

Не существует способа изменить частоту ШИМ Arduino без прямого управления памятью на низком уровне. Рассмотрим далее, как изменить режим работы таймера, чтобы увеличить частоту (frequency) ШИМ Ардуино. Таймер 0 используется для расчета времени, т.е. функции delay и millis. Увеличение частоты на Таймер 0 приведет к нарушению функций сохранения времени, которые могут использоваться в скетче.

Чтобы увеличить разрядность Ардуино на 9 и 10 аналоговом выходе, изменим частоту Таймера 1 без библиотеки. Максимальная частота PWM может достигать на платах Ардуино Уно и Нано — 62 500 Гц. Для этого в процедуре void setup() необходимо добавить соответствующую команду из таблицы, которая приведена далее.

РазрешениеЧастота ШИМКоманды установки режима
8 бит62 500 ГцTCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
7 812,5 ГцTCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0a;
976,56 ГцTCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0b;
244,14 ГцTCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0c;
61,04 ГцTCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0d;

Максимальная частота ШИМ Ардуино (Arduino PWM Frequency) — 62 500 Гц.

Бегущая строка на LED матрице 8×8 и AVR + MAX7219

Спроектированное устройство обладает рядом преимуществ перед аналогичными. Если сравнить его с ближайшим «собратом» на 74HC595, плюсы налицо: использование всего одной микросхемы без внешних гасящих резисторов.
Даже использование микросхемы в корпусе DIP-24 допускает спроектировать плату по размеру матрицы, что позволяет сделать каскадирование (наращивание количества) матриц.

Читайте также:  Hid клавиатура на микроконтроллере

Преимущества:
1.
Минимум деталей.
2. Масштабируемость.
3. Универсальный интерфейс.
Микросхема MAX7219 — драйвер 7-ми сегментного индикатора с общим катодом (при включении в соответствии с даташитом). Конечно, можно применить индикаторы с общим анодом — тогда нужно просто транспонировать матричные данные на программном уровне.

Итого, мы имеем микросхему, у которой есть 8×8 выводов с уровнями напряжений, допускающими непосредственное подключение светодиодов, данные передаются с помощью стандартного SPI-интерфейса.

Для использования MAX7219 в качестве драйвера матрицы, нужно инициализировать микросхему: 1. Записать в регистр 0xX9 (Mode Decode) значение 0x00
2. Записать в регистр 0xXB (Scan Limit) «порядок матрицы» — 1. В нашем случае это 8-1=7.
3. Записать в регистр 0xXA (Intensivity) значение интенсивности свечения от 0x00 до 0xFF.
4. Записать в регистр 0xXC (Power) значение 0x01 — включить матрицу.
А потом через SPI записывать в регистры 16-ти битное слово, которое, соответственно, подает в X-столбец (аналог DIG, катод) 8 бит (аналог SEGA-F,DP, анод).

Далее мы итеративно сдвигаем данные на 1 влево и дописываем в начало новые.
К примеру, буква «K».

Представляется как матрица 6×8
0b11111110, 0b00010000, 0b00101000, 0b01000100, 0b10000010, 0b00000000
Алгоритм отображения:
1. В столбец X0 пишется i-ое число 0b11111110.
2. Сдвиг всех столбцов на 1 влево.
3. В столбец X0 пишется i+1-ое число 0b00010000.
И так далее по кругу.

Пример кода для Atmega8:

#define F_CPU 1000000UL
#include «max7219.h» int main(void)
<
uint8_t words[] =
< 0b11111110, 0b00010000, 0b00101000, 0b01000100, 0b10000010, 0b00000000,//K
0b11111110, 0b10010010, 0b10010010, 0b10010010, 0b10000010, 0b00000000,//E
0b11111110, 0b10010000, 0b10010000, 0b10010000, 0b01101110, 0b00000000,//R
0b11111110, 0b01000000, 0b00100000, 0b00010000, 0b11111110, 0b00000000,//N
0b11111110, 0b10010010, 0b10010010, 0b10010010, 0b10000010, 0b00000000,//E
0b11111110, 0b00000010, 0b00000010, 0b00000010, 0b00000010, 0b00000000,//L
0b00000010, 0b00000000, //.
0b11111110, 0b10010000, 0b10010000, 0b10010000, 0b01100000, 0b00000000,//P
0b11111110, 0b10010000, 0b10010000, 0b10010000, 0b01101110, 0b00000000,//R
0b01111100, 0b10000010, 0b10000010, 0b10000010, 0b01111100, 0b00000000,//O
0b00000000, 0b00000000, 0b00000000, 0b00000000
>;
uint8_t count_matrix = 1;//количество матриц
uint8_t wh_matrix = 8;//размерность матрицы
uint8_t buf_lenght = count_matrix*wh_matrix;//длина буфера
uint8_t buf[buf_lenght];//буфер хранения (кольцевой)
MAX7219_init(MAX7219_MANUAL, wh_matrix, count_matrix); while(1) <
MAX7219_passNullDisplay();
for (uint8_t x = 0; x

for (uint8_t pos_clmn = 0; pos_clmn
<
MAX7219_LOAD0;
for (uint8_t num_mtrx = 0; num_mtrx
<
MAX7219_write_customData(wh_matrix-(pos_clmn), buf[pos_clmn+(wh_matrix*num_mtrx)]);
>
MAX7219_LOAD1;
#ifdef HWSPI
_delay_ms(15);
#endif
>
>
> >

Видео работы собранного устройства
(камера «ловит» послесвечение из-за своей инерционности, на самом деле этого нет.)
Печатная плата
Вид со стороны расположения деталей

Вид со стороны печатных проводников

Печатная плата в формате BMP Печатная плата в формате CAMtastic Даташит на MAX7219 Даташит на матрицу LD-1088BS — аналог BL-M12B881 Скомпилированная прошивка для Atmega8 (HW SPI) . Фьюзы — по умолчанию.

Бегущая строка на atmega168

Микросхема MAX7219 — готовый драйвер для семисегментных и матричных светодиодных индикаторов. В семисегментном индикаторе я уже использовал ее в контроллере вентилятора и погодной станции. В этой статье я напишу о применении готовых светодиодных модулей с MAX7219.

Модули 8×8 с MAX7219 продаются поштучно либо готовыми сборками 8×32. Я брал отдельные модули 8×8 с ценой чуть больше доллара за штуку. Так как при количестве больше 1 шт получалась платная доставка, не поленился, сделал 8 заказов.

В комплекте платка с микросхемой, сам индикатор, разъемы для индикатора и для соединения каждой платы.

Размеры индикатора 3.2 см Х 3.2 см. Подключение к микроконтроллеру по SPI «в один конец» по трем проводам. Модули подключаются каскадно — DIN->DOUT. Все остальные выводы запаралелены.
Подключив один модуль к ардуинке (фоток не осталось) решил сразу собирать дисплей.
Из двух конфигураций 8×64 и 16×32 выбрал вторую, так как решил в конечном итоге делать часы.
Первая же это классическая «бегущая строка».
Чтобы меньше возиться с проводами, развел плату под дисплей (и чего бы на нее сразу контроллер не установить было?)

Готовый собранный экран подключил к ESP8266.
Для таких модулей обычно используется ардуиновская библиотека LedControl . Но мне больше приглянулся драйвер для модулей MAX7219 к графической библиотеке AdafruitGFX.
В отличие от LedControl, где с каждому модулю обращаются по номеру, Max72xxPanel позволяет работать со всеми модулями, как с едиными пиксельным дисплеем.
К ESP8266 подключение такое:

  • DIN -> GPIO13 (MOSI)
  • SCK -> GPIO14 (SCK)
  • CS -> GPIO16 (к любому свободному)

В конструкторе объекта матрицы определяем PinCS, а также количество модулей по вертикали и по горизонтали

В секции SETUP программы нужно сконфигурировать наш дисплей, то есть задать последовательность подключения модулей и ориентацию каждого модуля.

Микросхема MAX7219 поддерживает 16 градаций яркости светодиодов. Ставим максимальную:

Дисплей превращается в яркий красный фонарь

мощностью более 12Вт

К тому же довольно ощутимо нагревающийся

Собственно удивляться нечему — все написано в даташите на MAX7219, Максимальный ток на всех сегментах одного модуля — 330мА, что при умножении на 8 и дает 2.6А. Минимальный ток — 1/16 от этой цифры. В нашем случае около 160мА. При установке интенсивности ток будем меняться с шагом 1/16 от максимального.
При такой яркости дисплея не вижу смысла устанавливать значение интенсивности больше 7.
С током разобрались, перейдем к выводу информации на наш дисплей.
В примерах к библиотеке Max72xxPanel есть простенькая программа — вывод бегущей строки. По умолчанию, строка выдается стандартным шрифтом библиотеки GFX 5×7.
Русификация данной библиотеки подробно рассмотрена здесь.
Суть сводится к тому, что нужно скачать по ссылке архив, взять оттуда русский фонт и положить его в папку AdafruitGFX-master. Остальные файлы, это примеры, как перекодировать константы, введенные в среде Arduino в UTF-8 в кодировку фонта 1251.
Там есть для этого функция utf8rus

Небольшое отступление про кодировку русских букв в среде Ардуино

Тут должно быть много русского мата. Про всех родственников этого итальянца.
Сперва я долго возился с выводом русских слов, введенных в редакторе Arduino IDE на дисплей. Выяснил, что в функции utf8rus нужно смещать на 1 меньше. Как я радовался получив «Привет» на экран. Но в какой то момент времени вместо внятных слов опять получалась белиберда. Смещение в кодировки было то на 1, то на 2 символа. Причем, во вновь созданном скетче все было нормально. До поры, до времени.
Я уже было решил хранить русские константы в отдельном файле либо кодировать в виде ‘234’. Пока не стал открывать программу в редакторе NotePad++. Тот определял кодировку UTF8, то UTF8 без BOM.
Путем натурального эксперимента было определено, что если брать файл, и преобразовывать его в UTF без BOM, то следующая сборка проходит нормально и русские константы нормально отображаются.
Документированный «баг» стал «фичей».

С отображением текста теперь все ясно. Но дисплей у на ГРАФИЧЕСКИЙ. Значит без отображения графики, хотя бы статической, никуда.
Чтобы подсунуть графику библиотеке GFX, нужно запихнуть ее в байтовый массив.
Для этого можно воспользоваться онлайн-сервисом
Рисуем картинку или иконку в любом редакторе, подсовываем ее этому сервису. Шаманим с параметрами, если нужно и получаем готовый массив

Теперь если скормить этот массив функции drawBitmap, то получаем ее на дисплее

Рейтинг
( Пока оценок нет )
Загрузка ...
Adblock
detector