Библиотека DMD для STM32 + AVR с поддержкой Unicode шрифтов

Тема в разделе "Глядите, что я сделал", создана пользователем b707, 21 май 2019.

  1. b707

    b707 Гуру

    Добрый день!
    Предлагаю Вашему вниманию расширенную редакцию библиотеки DMD.h Решил выложить в разделе модули, потому что на готовый проект это вроде не тянет.

    Что это и для чего
    Библиотека DMD используется для работы с одноцветными LED матрицами P10 32х16 фирмы Freetronics. Матрицы можно соединять последовательно, получая длинные строки или большие панно: Матрицы широко используются для разных вывесок, баннеров, бегущих строк
    [​IMG]
    В стандартной библиотеке заявлена только поддержка контроллеров АВР, поэтому первоначально главной задачей я считал портировать библиотеку для работы на широко известной плате "блюпилл" с контроллером STM32F103.Отсюда и название библиотеки на Гитхабе: DMD_STM32
    Однако по ходу работы выяснилось. что эта задача давно решена и существует даже несколько библиотек DMD для STM32 разной степени законченности.

    Зато в ходе обсуждения с другими участниками всплыла проблема фонтов для DMD матриц. Оригинальная библиотека DMD поддерживает только фонты своего внутреннего формата, причем только 8-,битные ASCII символы. Для вывода букв национальных алфавитов энтузиасты нарисовали несколько фонтов, в том числе и кириллицу. но вообще выбор шрифтов очень узкий.

    Для устранения этих затруднений в предлагаемой версии библиотеки добавлена поддержка фонтов в распространенном формате Adafruit GFX. Формат выбран по двум причинам: во-первых, много уже готовых фонтов. Но главное - в этот формат можно почти одним движением сконвертить любой TTF шрифт c помощью фирменной утилиты fontconvert от Adafruit. Конвертация TTF фонтов открывает широкие возможности - фонтов в интернете сотни тысяч. для всех возможных национальных алфавитов. причем очень многие фонты бесплатны. Добавление новых функций привело к обратному портированию библиотеки на контроллеры АВР :) (пока только Атмега328)

    Из других отличий от стандартной библиотеки - на СТМ32 можно работать с двуми наборами матриц одновременно. В следующей версии планируется добавить вертикальную бегущую строку (см видео ниже)

    Примеры работы:

    Вывод надписи сконвертированным TTF фонтом



    Вертикальная строка:



    Две одновременные бегущие строки (только СТМ32)




    Код библиотеки на Гитхабе: https://github.com/board707/DMD_STM32
    Библиотека пока слабо документирована, синтаксис использования смотрите в примерах - они все работают.. И задавайте вопросы. Буду рад любым мнениям , замечаниям и предложениям
     
    issaom, DetSimen, Daniil и 3 другим нравится это.
  2. ИгорьК

    ИгорьК Оракул Модератор

    Эту ошибку я исправил :) Проект достойный раздела.
     
    DIYMan нравится это.
  3. b707

    b707 Гуру

    Обновление библиотеки - версия v0.3.2 (для СТМ32)
    (код на Гитхабе, ссылка в первом сообщении)

    Поправлена ошибка задания частоты шины SPI, добавлен вывод через DMA(пока синхронный, асинхронный планируется)

    Главное внешнее изменение - скорость вывода на матрицы выросла примерно в 10-12 раз, в режиме бегущей строки полностью исчезли все "притормаживания" текста. Судя по таймингам вывода, библиотека должна без проблем работать с 16 матрицами на канал без заметного замедления другого кода программы.
     
    issaom, Daniil и ИгорьК нравится это.
  4. b707

    b707 Гуру

    Обновление - версия v0.4.1 (для СТМ32)
    (ссылка на гит в первом сообщении)

    Основные изменения:

    - вывод данных на матрицы через DMA в асинхронном режиме, то есть почти без загрузки микроконтроллера
    - проведена работа по устранению мерцаний и паразитной засветки пикселей, для чего увеличена частота ШИМ регулировки яркости матриц
    - все настройки таймеров "убраны" внутрь библиотеки, пользователю не нужно ничего настраивать
    - восстановлена совместимость с АВР Атмега328(надеюсь :)

    Изменения повлекли за собой некоторые изменения в интерфейсе. Для СТМ32 при начале работы с матрицами обязательна функция dmd.init(), вызываемая в setup(). Яркость теперь регулируется от 0 до 255. Подробнее см. примеры.

    Важно: Пины n_OE теперь нужно выбирать только из числа тактируемых Timer3 - то есть PB0 PB1 PB5.
     
  5. b707

    b707 Гуру

    Библиотека нуждается в бета-тестерах :) В принципе, по таймингам на осциллографе последние версии выглядят очень неплохо. Теоретически :) на массовой плате blue pill STM32F103C8T6 библиотека должна работать с 30- 40 матрицами на каждом канале. К сожалению, у меня нет достаточного числа матриц, чтобы проверить это вживую. Так что если кто-то захочет сделать свой проект на моей библиотеке - обращайтесь, обещаю авторскую поддержку :)

    === технические детали, можно не читать ===
    Каждое сканирование матриц состоит из двух стадий - подготовки данных и передачи. На последней версии 0.4.1 подготовка занимает примерно 15 мкс (+ 3 мкс на каждую следующую панель), передача по SPI - примерно 30 мкс каждая панель (при частоте тактирования SPI 8МГц).
    При использовании асинхронного DMA вторая стадия (передача данных) происходит в фоновом режиме, не нагружая контроллер и оставляя его свободным для других задач. Таким образом, при подключении 30 матриц центральный контроллер будет занят около 100 мкс - при сканировании раз в 1мс это всего 10% процессорного времени.
    =================================

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

    Если у кого-то есть предложения - готов выслушать. Если нужно добавить в библиотеку двухцветные и полноцветные матрицы - готов заняться, если кто-то предоставит такие панели :)
     
  6. b707

    b707 Гуру

    Новости проекта

    Судя по тестам и отзывам пользователей версия 0.4 получилась реально быстрой.

    Юзер vtronicsautomation с Гитхаба написал мне, что запустил работу с 32 матрицами (16 на первом канале SPI и 16 на втором).
    А lean74 с форума ардуино.ру смог адресовать 42 матрицы на одном канале.

    Думаю, это далеко не предел, библиотека сможет работать и с большими цепочками панелей. К сожалению,чтобы проверить это практически - нужно иметь десятки и даже сотни матриц. Поэтому я обращаюсь ко всем, кто работает с подобными панелями - монтажникам, разработчикам, продавцам. Давайте протестируем библиотеку на ваших матрицах :) Подключим 60, 80, а то и 100 матриц к одному контроллеру - потянет ли?
     
    Daniil и ИгорьК нравится это.
  7. b707

    b707 Гуру

    DetSimen нравится это.