Делаю проигрывание видео с SD-карты на ЖКИ от сименса (см. пост выше), на пропеллере. Just for fun
Если все получится - будет видеобудильник
Получилось сделать 20 FPS , 16-битный цвет. Звук - 16 битный PCM, 16 кГц.
Подумалось - а получится ли сделать то же самое на контроллере попроще, например atmega? Попробую прикинуть...
SPI интерфейс у нас только один, поэтому надо читать кусок кадра в буфер и затем выплевывать его на экран. Программный SPI совместно с аппаратным и два буфера думаю можно не рассматривать - получится всяко медленнее, кроме того придется задействовать прерывания - возникнут проблемы со звуком. Для вывода одного кадра надо считать с карты 176*132*2 = 46464 байт, и выплюнуть их на экран. Цикл записи на экран будет примерно такой:
- Код: Выделить всё • Развернуть
loop:
ld Z+, R16 ; 2
out SPDR, R16 ; 1
sbiw R12, 1 ; 1
breq done ; 2
wait:
sbis SPSR, SPIF ; 1/2
rjmp wait ; 2
rjmp loop ; 2
done:
В лучшем случае 23 такта на байт (16 - на передачу на максимальной скорости, 7 - оверхед цикла). Пусть тактовая частота 20 МГц. Тогда 46464 байта будет выведено за 53 мс.
Если применить реализацию файловой системы от Elm Chan, то судя по его бенчмаркам, максимально можно получить чтение 740 КБ/сек при буфере в 2048 байт, то есть 62 мс на кадр. Итого 62+53=115 мс на кадр, или чуть более 8 кадров в секунду, реально меньше, так как кроме вывода на экран собственно видео надо еще рисовать текущее время. Делать это надо в памяти, до вывода считанного куска кадра на экран, чтобы не было мерцания. В буфер 2048 байт поместится 11 строк кадра. Цифры надо выводить большие (я использовал шрифт 16x32), то есть придется прорисовывать текст кусками - сначала верхнюю часть, потом среднюю, затем нижнюю. И чтобы смотрелось красиво, надо делать не черные цифры на фоне белого прямоугольника, а рисовать цифры одним цветом, а вокруг ободок другого, контрастного цвета. Кроме того, надо еще выводить звук, делать это придется в прерывании, и надо его еще прочитать с карты. В итоге думаю получится максимум (оптимистично) 5-6 FPS. Маловато будет. Да и звук будет скорее всего 8-битный.
Вот такие вот дела
Пропеллер рулез
Ежели взять какой-нибудь ARM, то наверно получиться достичь таких же параметров что и с пропеллером. Кто в армах шарит - можете прикинуть? Только не надо всякие ARM9 на 400 МГц рассматривать - с ними все очевидно