Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 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 Поиск в магазине ОтронВ блокнот
Конденсатор0.1 мкФ3 Поиск в магазине ОтронВ блокнот
Конденсатор22 пФ1 Поиск в магазине ОтронВ блокнот
Резистор
330 Ом
1 Поиск в магазине ОтронВ блокнот
Резистор
2.2 кОм
7 Поиск в магазине ОтронВ блокнот
Резистор
3.3 кОм
7 Поиск в магазине ОтронВ блокнот
Резистор
10 кОм
1 Поиск в магазине ОтронВ блокнот
Кварцевый резонатор16 МГц1 Поиск в магазине ОтронВ блокнот
Тактовая кнопка3 Поиск в магазине ОтронВ блокнот
LCD-дисплей132x132 nokia color LCD1 Дисплей с телефона NOKIA 6030Поиск в магазине ОтронВ блокнот
Слот для карты памяти SD/MMC1 Поиск в магазине ОтронВ блокнот
Добавить все

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

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

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

Теги:

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

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

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

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

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

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

Программатор Pickit3
Программатор Pickit3
Набор для сборки - УНЧ 2х60 Вт на TDA7294 Raspberry Pi 2
вверх