ESP8266 Аналоговая трансляция телевизионного интерфейса
Подключите антенну до gpio3/rx, настройте свой аналоговый телевизор на канал 3. Включите ESP!
Это использует автобус I2S так же, как проект ESP8266WS2812I2S. Разница в том, что это пробуждает выходной бод до 80 МГц. Мы настроили буферы DMA и позволяем процессору заполнять их, когда они проходят через одну линию за раз. Прерывание DMA заполняет буферы по одному слову за раз. Автобус I2S сдвигает эти буферы на 80 МГц!
Вы можете сказать: «Но Найквист говорит, что вы не можете передавать или получать частоты более чем на 1/2 показателя дискретиза (в этом случае 40 МГц). В той степени, которая правда. Некоторые люди думали, что это может быть обертором, но что происходит В действительности происходит что -то незнакомые. Это не идеально.
Мы храним немного рисунка в массиве «Premodulate_table». Он содержит бит -трипрои для различных сигналов, такие как уровень «синхронизации» или уровень «цветовой боли» или любой из визуальных цветов. Длина этой таблицы в 1408 бит на цвет была выбрана таким образом, чтобы при отправке по одному биту за один раз при 80 МГц она работает для ровного множителя частоты Chroma NTCS 315,0/88,0 МГц или 3,579545455 МГц. Вы можете рассчитать это, взяв 1408/80 МГц = 17,6уса * 3,579545 МГц = 63 цикла, точно. Удобно, что это также работает для даже множества 61,25 МГц, центра канала 3 Luma. 17,6US * 61,25 МГц = 1078 циклов, точно! Когда вы модулируете произвольные частоты, иногда циклы выходят очень неровными.
Чтобы генерировать Luma (черно -белая часть), мы модулируем 61,25 МГц. Если мы генерируем сильный сигнал, он рассматривается как очень «темный», а слабый сигнал очень «яркий». Это означает, что когда мы хотим отправить импульс синхронизации, мы модулируем его как можно громко ... когда хотим модулировать белый, мы вообще не выдвигаем сигнал. Одна вещь, которую вы заметите, это точка залить. Это потому, что сигнал, который мы посылаем, настолько ужасен. Сигнал Chroma очень грязный и имеет повторяющуюся схему интенсивности. В то время как Chroma выстраивается до повторяющегося паттена шириной 1408, общее количество пикселей на экране нет. Это вызывает созданные шаблоны, чтобы катать экран.
Чтобы генерировать цвет, нам необходимо модулировать в сигнале Chroma, 3,579 МГц выше базовой полосы. Хрома синхронизируется цветом в начале каждой линии. Это также устанавливает уровень для Chroma. Затем, во время линии, мы можем либо выбрать «цвет», который имеет высокий коэффициент на уровне Chroma, либо низкий. Это определяет, насколько яркий цвет. Мы можем изменить фазу, чтобы изменить оттенок цвета.
Это в основном 1-битный размышленный ЦАП, работающий на частоте ниже Nyquist, пытаясь кодировать Luma и цвет одновременно. Не удивляйтесь, что качество ужасно.
Таблицы для обработки машины состояния линии (сгенерированы/хранятся?) В Maycbtables.h/C, а аналогичные таблицы для создания кодирования сигнала на проволоке находятся в синтезаториях.c.
Функции для настройки передач DMA, заполните буферы, когда они становятся пустыми, и измените, какую строку следует отправлять на основе содержимого кадриста, содержится в video_broadcast.c. Эти функции обрабатывают всю модуляцию. Это устанавливает DMA и прерывание, которое вызывается, когда DMA заканчивает блок (равный одной линии). По завершении он использует CBTBALE, чтобы решить, какую функцию вызовут, чтобы заполнить линию. Прерывание заполняет следующую строку для DMA, которая продолжается.
FrameBuffer обновляется различными демонстрационными экранами, расположенными в user_main.c.
custom_commands.c содержит пользовательские команды, используемые для NTSC-специфических аспектов. Используя общий интерфейс WebSockets, есть две добавленные команды. К ним относятся «CO» и «CV», которые устанавливают режим работы (CO) и позволяют пользователям изменять таблицу модуляции из веб -интерфейса (CV).
Следующие демонстрационные экраны доступны. Обычно они отмечают один за другим (кроме того, после 10), если пользователь не отключает это в веб -браузере.
Веб -интерфейс заимствует веб -интерфейс у ESP8266WS2812I2S. Питание на ESP, подключитесь к нему, укажите свой веб -браузер на http://192.168.4.1. У него новая кнопка «NTSC». Это дает вам возможность позволить демонстрации продолжаться от экрана до экрана или заморозить на определенном экране. Вы можете указать экран. Кроме того, для радиочастотного тестирования вы можете пробить цвет. Всякий раз, когда цветовое джема устанавливается на что -то 0 или выше, он отключает всю логику чертежа линии и просто выводит этот цвет непрерывно. Это предотвратит его увидеть наборы телевизоров, однако вы можете увидеть его на другом радиочастотном оборудовании.
Он также имеет интерактивную систему веб -работников JavaScript, которая позволяет писать код, чтобы сделать новый цвет! Вы можете создать новый бит -стринг, который будет передаваться при ударе конкретного цвета. Вы можете редактировать код, и он эффективен при вводе. Он автоматически переиздает веб-работника каждый раз, когда вы его меняете.
Вы должны выводить только -1 или +1, так как это все, что может выводить ESP. Затем он запустит DFT с рандомизированным окном по выбранной вами частотной области. Увеличьте окно DFT, и это увеличит ваш Q (или точность). Уменьшить, это уменьшает ваш Q. Это следует помочь понять, как приемники, такие как телевизор, действительно понимают сигнал и помогите проиллюстрировать, насколько это дурацкое на самом деле.
Вы можете попробовать его в своем собственном браузере, используя эту ссылку: http://cnlohr.github.io/channel3/web/page/index.html Нажмите NTSC и перейдите в город.
Для всего 3D и текста я использую новую модифицированную версию моей библиотеки "Rawdraw" (http://github.com/cnlohr/rawdraw) для 3D я использую номера с фиксированной точками, с 256 в качестве значения единицы и нижние 8 битов являются дробным компонентом.
Чтобы разрешить трансляцию PAL, время в видео-лимии Video_Broadcast (ранее NTSC_BROWACT) были изменены. Поскольку я только хотел использовать это с черным белым телевизором, а цвет PAL на самом деле довольно сложно сделать в цифровом виде, я не модифицировал Broadcast_tables (SynthTables.c). Таким образом, библиотека транслирует совместимый с PAL B/W-сигналом с информацией о цвете NTSC (вроде NTSC50).
Чтобы включить вещание PAL, вам необходимо включить OPTS += -DPAL
в user.cfg.
Вот оригинальное видео на YouTube в этом проекте:
Вот новое видео (с цветом):