Главная » Микроконтроллеры
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Воспроизведение видео на ЖК от Nokia с помощью Atmega32

SD Card + ATmega32 + цветной ЖК-дисплей NOKIA = Видео плеер!

В этой статье описано создание видеоплеера с использованием микроконтроллера ATmega32 и цветного ЖК-дисплея Nokia. Я взял цветной ЖК-дисплей на 65 тысяч цветов из старого телефона  Nokia 6030. Припаял 10 тонких проводов прямо на тонкую гибкую печатную плату подключения ЖК-дисплея площадью 0.5 см и припаял эти провода на другую плату. Для меня это было самой сложной частью проекта, потому что у меня нет маленького жала для паяльника и ЖК-разъема 5x2.

После этого я связал ЖК с atmega32 по SPI. Далее я инициализировал дисплей и отобразил на нем некоторые цвета для проверки его работы.

Потом я попробовал отобразить на нем неподвижное изображение. Я использовал Image library (Библиотеку изображений) для python,  чтобы извлечь информацию о пикселях из любого графического файла (JPEG, PNG и т.д.). Эта информация передавалась на AVR микроконтроллер через UART и отображалась на ЖК-дисплее с глубиной цвета 16 бит.

Припаивание штырьков к дисплею

После этого я использовал SD карту для хранения этой информации (132x132 * 2) байт/изображение. SD карта также соединена с ATmega32 по SPI. Использовалась  файловая система FAT16. Работа с SD картой не является проблемой для меня, потому что я уже делал несколько проектов на SD/MMC картах и в этом проекте я использовал свой предыдущий код.

Подключение SD карты

Таким образом, после вывода неподвижного изображений, я решил сделать слайд-шоу. Для этого я написал скрипт на Python для конвертации всех изображений в папке на компьютере в файлы 132x132x2, а это не что иное, как информация о пикселях. Я скопировал преобразованные файлы на SD карту (file.lcd) и отображал их в режиме слайд шоу с паузой между кадрами 1 секунда.

Я успешно сделал слайд-шоу, и внезапно меня посетила идея сделать видео плеер. Видео это не что иное, как слайд-шоу с высокой частотой кадров.

Тогда я начал искать в Google, как конвертировать видео в кадры. Я узнал о программе FFmpeg. Я использую Linux в качестве операционной системы. Я скачал FFmpeg и преобразовал образец видео с частотой 15 кадров в секунду и разрешением 132x65. После, я использовал свой Python скрипт для конвертации каждого кадра в информацию о пикселях. Вместо того, чтобы использовать много небольших файлов, я просто собрал всю информацию обо всех кадрах в один файл my_video.lcd. Я скопировал этот файл на карту памяти и изменил программу AVR микроконтроллера для него. В этой программе реализован доступ к файловой системе FAT16, поиск *.lcd файлов, при нахождении которых возвращается начальный адрес кластера этого файла, а затем он воспроизводится на ЖК-дисплее. Сейчас видео воспроизводится (без звука). Половину проекта можно считать завершенной.

Подключение дисплея

Микширование аудио

Я проигрывал видео с частотой 15 кадров в секунду и глубиной цвета 16 бит на ЖК-дисплее. Видео должно иметь звук. Я начал думать, как подключить звук. Я использовал FFmpeg для извлечения 8 битного моно звука в формате WAV из видео файлов. С несжатым звуком в WAV-формате  легко справляется микроконтроллер с аппаратным ШИМ. Тогда я изменил свой Python скрипт. Я просто открывал WAV файл и пропускал первые 44 байта (WAV header), а затем я считывал образец аудио байт за байтом и вводил его между видеоинформацией согласно некоторым расчетам (см. ниже), связанным с битрейтом аудио и видео.

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

Сейчас я разработал свой формат видео "video_with_audio.vin". При помощи микроконтроллера AVR, мне нужно извлечь аудио и видео, отправить аудио в кольцевой буфер, который будет отправлять ШИМ сигнал с помощью прерывания таймера и видео непосредственно на ЖК-дисплее. Если есть несоответствие байтов видео и аудио, то всё рухнет.  Я изменил программу AVR микроконтроллера для работы по описанному выше принципу и получил видео со звуком!

Принципиальная схема подключения дисплея и SD карты

 

Немного математики

Скорость видео = 9 кадров / сек = 9 * 132 * 65 * 2 = 154440 байт / сек
Скорость аудио = 11000 байт / сек
Дискретизация видео/аудио = 154440/11000 = 14,04
Это значит, что после каждых 14 байт видео, нужно вставить байт аудио.
Это хорошо, но есть небольшая проблема - 14,04. Из за 0,04 будут накапливаться ошибки, которые будут плохо влиять на качество синхронизации аудио и видео, и особенно это будет заметно в длинных видео. Чтобы предотвратить это, я должен пропустить добавление оригинального аудио после каждых (1/.04) * 14 = 350 байт видео и добавить аудио. Таким образом, звук не будет обгонять видео в связи с 0.04 и, следовательно, синхронизация аудио и видео достигнута!

Вот ссылка где есть хорошая документация о ЖК-дисплеях.

Контролер ЖК-дисплея

В ЖК-дисплее, который я взял из оригинального телефона Nokia в качестве контролера ЖК-дисплея используется Philips PCF8833. Я разрабатывал программу ориентируясь на его документацию. В некоторых примерах кода и документации написано, что необходимо инвертировать команды, но я не знаю почему, но мне этого делать не пришлось.

Примечание:
Скрипт на Python написан для ОС Linux в Python 2.x. Перед запуском должна быть установлена Python image library и FFmpeg.
AVR C код написан в AVR-GCC компиляторе для Linux.

Скачать исходник и скрипт Python вы можете ниже

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

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
МК AVR 8-бит
ATmega32
1 Поиск в FivelВ блокнот
Конденсатор0.1 мкФ3 Поиск в FivelВ блокнот
Конденсатор22 пФ1 Поиск в FivelВ блокнот
Резистор
330 Ом
1 Поиск в FivelВ блокнот
Резистор
2.2 кОм
7 Поиск в FivelВ блокнот
Резистор
3.3 кОм
7 Поиск в FivelВ блокнот
Резистор
10 кОм
1 Поиск в FivelВ блокнот
Кварцевый резонатор16 МГц1 Поиск в FivelВ блокнот
Тактовая кнопка3 Поиск в FivelВ блокнот
LCD-дисплей132x132 nokia color LCD1 Дисплей с телефона NOKIA 6030Поиск в FivelВ блокнот
Слот для карты памяти SD/MMC1 Поиск в FivelВ блокнот
Добавить все

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

Оригинал статьи

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

Теги:

Касьянов А. Опубликована: 2012 г. 0 0
Я собрал 0 0
x

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

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

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

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

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Паяльная станция Hakko 936 Raspberry Pi 2
вверх