115-SD Card Showing Device-делаем глазки!

Автор: | 22.04.2015

Опубликованное в свое время устройство SD Card Talking Device (Говорилка) приобрело у Вас, читателей блога, определенную популярность. Я давно собирался сделать (и сделаю в свое время) более серьезный вариант Говорилки с возможностью настройки устройства под свои нужды и более качественным звуком, (возможно с поддержкой SD-карт больше 2 Гиг). Но пока не сделал апдейт, решил немного поэксплуатировать плату Говорилки в другом устройстве.

Устройство сегодняшней статьи собрано (вернее работает) на плате Говорилки, но предназначено не для озвучивания Ваших проектов, а для их визуализации. Если есть Говорилка, почему бы не заиметь Показывалку!

 

На видео продемонстрирован один из вариантов применения – «оживление» глаз робота (планирую использовать в своем роботе Бендере). Кроме этого, применения могут быть более серьезные – различные динамические указатели, информационные вывески и т.д.

 

 

Показывалка (SD Card Showing Device) проигрывает avi-файлы сохраненные на SD-карте на двух светодиодных матрицах 8х8. Матрицы управляются, в свою очередь, микросхемами-драйверами MAX7219. Существуют готовые модули матрица+MAX7219 для Arduino, ими я и воспользовался.

MAX7219-MAX7221.pdf (1446 Загрузок)

Если у Вас уже есть Говорилка, то при наличии таких модулей, Вы получите новое устройство без пайки!  Чуть позже сделаю вариант Показывалки с применением более простых микросхем — сдвиговых регистров 74HC595 и вариант с большим разрешением.

Принцип воспроизведения файлов перекочевал из Говорилки  без изменений. В Говорилке воспроизводились несжатые wav-файлы, а в Показывалке – несжатые avi-файлы. Также действуют особые правила создания этих файлов и запись их на карту – об этом ниже.

Кардинально изменился способ управления. Теперь упор сделан на самостоятельность устройства – стали возможны автоматические циклические воспроизведения вперед, назад, случайные воспроизведения файлов и автономный Live-режим, при котором файлы воспроизводятся случайно с разной вероятностью (на видео выше именно он и продемонстрирован).

Дальше идет описание сборки Показывалки.
Это почти полный копипаст статьи про Говорилку – кто уже читал, можно пропускать кусками.

 

1 Карта памяти.

В устройстве используется SD карта памяти. О причинах выбора я уже писал. В данном устройстве поддерживаются SD карты размером до 2 Гб, включительно. Все что выше (SDHC и SDXC) – работать не будет.

Для устройства нет разницы, в каком форм-факторе карта (SD, MiniSD или MicroSD), но Вы должны правильно ее подключить, согласно распиновки карты.

 

2 Файловая система.

В устройстве работают карты, имеющие файловую систему FAT16. Эта система как нельзя лучше подходит для устройств подобных нашему, так как проста и легко реализуемая (FAT12 и FAT32, в принципе, тоже не сложно реализовать, но это нецелесообразно, в виду отсутствия каких либо достоинств по сравнению с FAT16).

Нет особых требований по форматированию карты – ее можно отформатировать в любом доступном устройстве. Стандартное форматирование Windows вполне подходит для этих целей.

Для корректной работы устройства видео файлы, расположенные на SD карте, должны соответствовать определенным требованиям:
а) Формат файла должен быть — несжатым avi. Я пользовался для преобразования в avi программой virtualdub. Если у Вас некорректно воспроизводятся файлы, возможно, они имеют другую разметку. В этом случае пересохраните Ваши файлы при помощи virtualdub (об этом дальше раскажу).

b) Файлы должны быть названы особым образом (для того чтобы устройство знало очередность файлов) первый символ имени файла должен быть заглавной буквой латинского алфавита (A-первый, B- второй …), остальная часть названия, как и расширение файла — игнорируется.

Например, корректными будут следующие названия файлов:
А_no_smoking.avi                   – первый трек
B-Это второй трек.avi             – второй трек
С Warning! Error!.avi               – третий трек

c) Для использования дополнительных возможностей устройства, файлы могут располагаться в двух папках с именами «1» и «2». Устройство имеет переключатель для выбора активной папки, то есть одна и та-же команда запуска воспроизведения может запускать файлы из папки «1» или «2». Если одной из папок (или сразу обеих) не существует, файлы воспроизводятся из корневого каталога.

d) Ввиду малого объема SRAM у ATtiny2313 невозможно создать буфер для предварительного чтения данных, поэтому данные из файла напрямую выдаются на матрицу. Соответственно, нет возможности (не хватает времени) выполнять поиск фрагментов файла по таблице FAT. Другими словами, файлы, записанные на карту, должны быть не фрагментированы.

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

 

3 Схема. Печатная плата.

Сама базовая схема почти идентична Говорилке:

Схема драйвера:

339.pdf (1565 Загрузок)

Схема устройства максимально проста (конечно, если не считать две платы с матрицами). Фактически, кроме самого микроконтроллера и SD карты, в ней ничего нет. Для себя я сделал печатку под SMD компоненты, но можно собрать схему и на макетке в DIP варианте. В случае макетки, сборка устройства займет у Вас, от силы, 15 минут. Допустимое напряжение питания для SD карты от 2.7 до 3.6 вольт. В этом промежутке нормально работает и микроконтроллер, поэтому нет необходимости применять какие либо согласующие компоненты. В качестве кардхолдера для microSD я использовал адаптер, подпаявшись прямо к его контактам. Если нужны габариты поменьше лучше использовать настоящий кардхолдер для microSD.

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

Небольшая галерея готового устройства:

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

 

4 Управление воспроизведением. Реализация автоматических режимов.

Устройство имеет всего один сигнальный выход и несколько входов. Выход имеет двойное назначение:
— индикация проигрывания файла
— реализация автоматических режимов работы.

При первом старте устройства автоматически воспроизведет (или попытается воспроизвести – если такого файла нет) А-файл. Это сделано, во-первых, для начальной инициализации матриц каким либо изображением (или очистки их), во-вторых, для старта автоматических режимов.

 

Выход On_Show:

— На все время воспроизведения файла выход устанавливается в 1 и сбрасывается в 0 по окончании воспроизведения. Посредством этого выхода реализуются автоматические режимы работы устройства. Еще этот вывод может управлять устройством отображения (его выбора или включения в момент начала воспроизведения файла). При попытке воспроизведения несуществующего файла, выход кратковременно устанавливается в 1 после чего снова возвращается в 0.

Выход реализован под «монтажное или» — это значит, что выход можно в любое время прижать к «земле» без риска сжечь его.

 

Set-входа
— имеют активный уровень низкий (действуют пока вывод прижат к «земле»):

Set_Dir — Состояние этого входа указывает из какой папки на SD-карте будут воспроизводится файлы. Вход прижат к «земле» — папка «2», отпущен — папка «1». Если какой либо из папок не существует воспроизведение будет из корня карты.

Set_Live — При замкнутом на «землю» устройство начинает работать в автоматическом «Живом» режиме. В этом режиме, со случайной периодичностью, запускаются на проигрывание случайные файлы с активной папки. А-файл запускается гораздо чаще остальных.

Set_Off — При удержании Set_Off прижатым к «земле» отображающее устройство отключено.

 

Do-входа
— работают по спаду (момент перехода от высокого уровня к низкому)

Do_Next — По спаду запускается следующий файл с SD-карты. После последнего файла «Z» запустится первый «А». При соединении этого входа с выходом On_Show реализуется непрерывное проигрывание всех файлов в папке по кругу «А» —> «Z».

Do_Prev — По спаду запускается предыдущий файл с SD-карты. После первого файла «А» запустится последний — «Z». При соединении этого входа с выходом On_Show реализуется непрерывное проигрывание всех файлов в папке по кругу «Z» —> «A».

Do_RND — По спаду запускается случайный файл с SD-карты. При соединении этого входа с выходом On_Show реализуется случайное непрерывное проигрывание всех файлов в папке.

Do_Last — По спаду запускается на воспроизведение последний, воспроизведенный до этого файл (после старта или сброса устройства – это A-файл). При соединении этого входа с выходом On_Show реализуется непрерывное проигрывание текущего файла.

 

5 Управление по UART

При запуске устройство в UART передает символы инициализации:
! — метка начала инициализации
@ — метка удачной инициализации карты памяти
& — метка поддерживаемой файловой системы
$ — метка отсутствия папки «1»
% — метка отсутствия папки «2»
^ — метка окончания инициализаций и перехода в режим ожидания воспроизведения файла

Например, при удачной инициализации устройство отправит по UART строку «!@&$%^A0». Символ А – выдается, так как устройство автоматически при старте запустит А-файл. 0 (ноль) выдается по окончанию воспроизведения файла.

В момент начала воспроизведения файла в UART выдается заглавная буква этого файла (“A”, “B” …). Если предпринята попытка воспроизвести несуществующий файл в UART выдается прописная буква этого файла (“a”, “b” …). По окончанию воспроизведения файла выдается символ «0» (ноль).

Для запуска определенного файла нужно послать в UART заглавную букву этого файла.

При приеме цифры «0» (ноль) устройство прекратит проигрывание файла.

 

6 Создание AVI-файлов для Показывалки

Для того, чтобы видео файлы правильно проигрывались на матрицах они должны иметь определенный формат: несжатый цветной AVI c разрешением 16х8 пикселей, частотой кадров 10Гц, без звука.
Формат AVI довольно сложная структура, так как, по сути, является контейнером, который может «наполнятся» различными форматами видео и аудио данных с возможностью применения различных кодеков сжатия.  В виду этого довольно сложно работать с этим форматом полноценно, раскладывая все «по полочкам» средствами небольшого МК ATtiny2313. В устройстве используется очень упрощенный алгоритм извлечения кадров анимации для матриц и из-за этого возможно некоторые программы создающие AVI (или конвертирующие в AVI) будут создавать непонятные для устройства файлы. При создании устройства я ориентировался на формат AVI-файла создаваемый программой virtualdub. Поэтому, в случае проблем с воспроизведением, попробуйте переконвертировать видео при помощи virtualdub (http://www.virtualdub.org/)

Вообще, удобно создавать файлы для матрицы в программах для создания анимированных gif (во многих даже есть вариант сохранения прямо в AVI). Эти программы предоставляют возможности раскадровки, различные эффекты анимации, средства для работы с текстовыми строками и много чего интересного.
Бесплатно можно пользоваться хорошей программой RealWorld Paint http://www.rw-designer.com/image-editor Большой набор инструментов, русский язык, плагины. Жаль нет вывода в AVI (я пользовался  virtualdub для конвертации gif-to-avi)
Еще одна программка с неплохим функционалом, но давно не поддерживаемая автором
Atani-4.5.zip (1747 Загрузок)
Довольно неплохо получается делать гифки при помощи Фотошопа, но тут нужны некоторые навыки.

В случае если программа кроме гифок не умеет сохранять в AVI, то воспользуйтесь  virtualdub — он умеет конвертировать из Gif в AVI. Более того у virtualdub есть инструменты для обрезки, изменения размеров и т.д., что позволяет создавать необходимые AVI файлы из сторонних гифок и даже обычных видеофайлов.

115-SDC_Showing.zip (1513 Загрузок)
Архив с материалами для создания устройства содержит кроме всего и примеры видеофайлов и их варианты в гифе.

Не забываем, что на форуме есть специальный раздел для модификаций устройств, где можно посмотреть, показать_свои или попросить_изменить  варианты этого устройства.

 

(Visited 5 332 times, 2 visits today)

115-SD Card Showing Device-делаем глазки!: 41 комментарий

  1. GetChiper Автор записи

    Возможно и так.

  2. valivass

    Ваши примеры воспроизводятся нормально, а сделал свое avi оно перевернутое, пришлось перевернуть его в редакторе RWPaint чтобы воспроизводилось нормально.

  3. GetChiper Автор записи

    Может причина в матрице? Выводы по другому выведены.

  4. valivass

    Подскажите, почему изображение на матрице может быть перевернутым, проигрыватель воспроизводит avi нормально.

  5. GetChiper Автор записи

    Он прижимает линию Load к «земле».

  6. valivass

    Для чего в схеме резистор 5к

  7. GetChiper Автор записи

    Почему нельзя? Можно!
    Ведь Вы можете подготовить АВИ в каком нибудь редакторе как Вам удобно (например перевернув изображение или его отзеркалив).

  8. se

    Подскажите а можно выводить напрямую с карты потоком в max7219. Просто буфер для 8х16 около 400 плюс ещё для переворота матриц столько же, тогда на большие матрицы памяти не хватит. Мои действия сейчас считываю кадр, переворачиваю его и только потом загрузка в матрицу.

  9. se

    Вот добился, хотя могли бы подсказать что в кадре чередование двух половинок, полдня убил на это.
    https://yadi.sk/i/WTTK0zu63KRfnT

  10. GetChiper Автор записи

    Формат несжатого ави хоть и простой но просто вот так взять и сказать что «я» — это светлая точка — не получится. Почитайте описание AVI — там все расписано как описываются пиксели. Там много нюансов которые Вы должны учесть для именно вашего устройства (например, размер кадра влияет на то как описываются пиксели). Ну а после того как Вы получите последовательность пикселей их нужно просто вывести на Ваше устройство (опять таки, способ вывода зависит от того как и на чем собрано Ваше устройство).

  11. se

    Вот кадр размер 8х8 одна точка в углу.
    LISTМ movi00dbА яяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя яяяяяяяяяяяяяяяяяяяяяidx1 00db
    Извините что в двоичном виде но суть понятна как это перевести в графику.

  12. se

    Да я понял уже ищем в файле LIST move , дальше 00db это наверное начало кадра. А данные то как там понять ,00 FF но картинку я сложить не могу. Как их правильно перевести. Не пойму алгоритм чтения кадров. Нарисовал простой квадрат однако в файле мешанина и квадрат никак невидно.

  13. GetChiper Автор записи

    Каждый кадр в ави-файле начинается с ключевого слова (от него я и отталкиваюсь). Дальше идут последовательно данные о пикселях кадра.
    Это на пальцах не объяснить — почитай описание несжатого ави и сравни с моей программой.

  14. se

    А подскажите как выводить , читать и заносить в массив? Я просто не совсем понимаю как вы вычисляете кадры меня интересует вот этот вопрос. Видел в вашей программе какой то алгоритм поиска определенных слов в ави файле. Вот интересно как это реализовать в атмел. В программировании очень слаб и так постоянно поиск по форумам. Вот хотел в свои часики анимацию добавить ,но места катастрофически не хватает ,поэтому в атмел полез, показалось места больше будет но надо правильно код писать, мой очень неэкономный
    https://www.youtube.com/watch?v=8hO3k_zQ6k4

  15. GetChiper Автор записи

    Не сжатые АВИ — это по сути набор картинок — кадров. Они никак не сжаты — просто бери данные и загоняй на устройство отображения. Но нужно знать как эти данные располагаются в файле. Почитайте про формат ави — это поможет правильно выводить данные.

  16. se

    Здравствуйте. Пытался я разобраться в вашей пргограмме но ума не хватает. Хочу сделать похожее на 328 атмеге, но слегка освоил только атмел студио. Вот выкладываю что сделано https://yadi.sk/d/xiYSo-9v3KLJMo
    программа может читать тхт файл и выводить поразному (задел под часики с анимацией). Но как правильно читать ави из Вашего примера я не понял. Поглядите пожалуйста может что посоветуете. Или может накидаете для 328й атмеги только в атмел студио.

  17. shur66

    Да, возможно дело в том что, третья кнопка была подключена для «кольца», но если её оставить для выборки, то глюки исчезают почти полностью…???

  18. shur66

    Да я и осциллографом смотрел, ресет железный на первой ноге, и при подаче питания, и вручную…Был подозрительный момент, один раз оставил на ночь, утром всё зависло, может где-то не контачит? А как правильно подключать? У меня лучше запускается с подключённой картой, т.е. при каждом включении, срабатывает RC-рессет, может кнопка глючная, попробую заменить, но она тоже с RC-цепями… И врядли сильно дребезжит…

  19. GetChiper

    Сброс на первой ноге он аппаратный — должен работать железно. Что то там не то …

  20. shur66

    Ну не хочется напрягать, но вопрос задам …:)После всех пертурбаций, т.е. изменения фьюзов , паршивки, форматки … Всё стало гораздо глючнее…Т.е. рессет по проводу на первую ногу не рессетит, Приходится щёлкать вкл., пока не начнётся …Причём, не угадаешь, что лучше. и матрицу подключаешь к 3,3в, но кренка греться начинает.. Но если удалось работает сутками. У меня посылка пришла с ардуинками, дисплеем ТФТ с тачом и картридером в придачу, Развязка на HC245 , я разберусь в схеме, но с оформлением возникнут трудности….т.е. грешу на картридер, т.к. флэша сейчас полноформатная, а на мини переходить в падло, пошукал , а всё в сборке с СИМками идёт, не комильфо, а со своей разборки то же самое

  21. GetChiper Автор записи

    Да, 100мс — это 10 Гц.
    с частотой 10Гц считываются кадры с карты (частота работы с самой картой гораздо выше и с частотой кадров никак не связана)

    Для упрощения алгоритма чтения AVI-файла с карты (объемы ATtiny2313 не позволяют реализовать полноценную работу с AVI-файлами)подразумевается, что кадры идут с частотой 10Гц. Если частота в файле будет больше, кадры все равно будут воспроизводится с частотой 10Гц и, соответственно, анимация будет замедлена и наоборот.

    По моим наблюдениям все конверторы gif-to-avi не умеют работать с длительностью показа кадра гифки (для всех кадров длительность устанавливается одинаковой). Поэтому, если нужно показать какойто кадр дольше его нужно продублировать нужное количество раз.

  22. shur66

    И ещё вопрос… В рекомендациях по созданию AVI, Вы указали частоту кадров 10Гц, а предложенные программы просят длительность кадра, т.е. 100 ms ? Это частота опроса карты? А если больше или меньше? Не будет читаться, или спешить-тормозить?
    Мне больше понравилась Atani, но не как рисовалка, а как конвертер… А рисую в привычном для меня SPlan 7, потом буду переводить в графический формат, который понимает Atani… А вопрос-то в том, что нужно сделать для увеличения длительности одного кадра в этой программе… Проиграть его два-три раза или есть настройка длительности покадрово…?

  23. shur66

    Спасибо, так и было. Из-за руссификатора текст в строке не умещается, я и не заметил…

  24. shur66

    Собрал на макетке, всё сразу заработало с Вашими примерами, но на видео живенько так моргает, а у меня как тормоз. Что может быть? Программер USBASP, Прога Sina, насколько я в ней разобрался, пытаясь связать с ней рисунок фьюзов, частота выставлена 8МГц от внутреннего генератора (но там их три таких!), карта на 256Мб, отформатирована в FAT. Куда смотреть?

  25. GetChiper Автор записи

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

  26. shur66

    А возможен ли симбиоз показывалки и говорилки ? Если конкретно, то что бы каждой фразе соответствовали разные выражения глаз. Всё это на одной СД-карте, ну и Мега8 или 32, а то у меня как раз случайно «заказались» индикаторы с драйверами :), хотя я без них просил, хочу для внука что-то этакое сотворить, ну и самому для тренировки и учёбы.

  27. Juris

    @superkotmail
    За такое — расстрел на месте. А потом принудительный просмотр всей «Футурамы».

  28. superkotmail

    @GetChiper
    Вы не поверите. Я никогда не смотрел Футураму )))))

  29. GetChiper Автор записи

    @bondrogeen
    Ага, это то что нужно — жаль у меня в таком варианте не было — их проще встраивать!

    @superkotmail
    Это музыкальная тема из Футурамы. Правда не знали? о_О
    Futurama Start Theme (Extended Version)

  30. superkotmail

    Напишите пожалуйста что за трек звучит в вашем видео)

  31. GetChiper Автор записи

    Да, и такое можно прикрутить к Показывалке.

  32. kulverstukas

    По сути тоже самое,просто как пример того что уже реализовано

  33. Juris

    Забавная вещица! Можно небольшие непристойные клипы показывать… 😀 😀 Шучу. Про развитие, хмм, у меня вот пять «голых» RGB матриц в коровочке ждут своего часа… 😉

  34. GetChiper Автор записи

    1 Если получится на 74HC595, то мах7219 будут не нужны. Но не факт что у меня получится вместить активную часть работы с 74HC595 в МК (пока не начну писать не скажу точно, но вроде должно влезть)
    2 Размеры не имеют значения когда памяти много (в 2 гига можно поместить очень много авишек разрешением 16х8)
    3 Данное устройство уже работает с цветными AVI, выдавать на цветную матрицу в общем не проблема. Но только нужно понимать, что RGB матрица гораздо дороже, плюс требует под себя уже 3 мах7219.

  35. kulverstukas

    Спасибо! То чего ждал. Вопросы такие 1. на 74HC595 вы сделаете без применения MAX7219? Думаю заказать «голые» матрицы или с микросхемой мах7219. 2. Не сильно расточительно использовать avi? Хотя по опыту знаю что гиф обычно не меньше avi. и еще вопрос расширения 3. Будет ли расширение модуля до RGB матрицы? Скорее всего это конечно другой более сложный можуль, но всё же….

  36. aleks0306

    aleks0306 :
    норм в игрушку засунуть
    еще бы схему Драйвер LED матрицы

    смотрю в книгу вижу фигу
    вролде смотрел не видел щас увидел

  37. aleks0306

    норм в игрушку засунуть
    еще бы схему Драйвер LED матрицы

Добавить комментарий