Esp8266 Interface de televisão de transmissão analógica
Prenda uma antena até GPIO3/RX, ajuste sua TV analógica ao canal 3. Power o ESP ON!
Isso usa o barramento I2S da mesma maneira que o projeto ESP8266WS2812I2S. A diferença é que aumenta a saída de 80 MHz. Configuramos os buffers DMA e deixamos a CPU preencher -os à medida que eles passam por uma linha de cada vez. A interrupção do DMA preenche os buffers uma palavra de cada vez. O ônibus i2S muda esses buffers a 80 MHz!
Você pode dizer "mas Nyquist diz que não pode transmitir ou receber frequências a mais de 1/2 da taxa de amostra (40 MHz neste caso). Na realidade, algo estranho acontece. Perfeito.
Armazenamos um padrão um pouco na matriz "pré -modulada_table". Isso contém transmissões de bits para vários sinais, como o nível de "sincronização" ou o nível "colorbust" ou qualquer uma das cores visuais. O comprimento desta tabela de 1408 bits por cor foi escolhido para que, quando enviado um pouco de cada vez a 80 MHz, ela se esforça para um multiplicador uniforme da frequência do croma NTCS de 315,0/88,0 MHz ou 3.579545455 MHz. Você pode calcular isso tomando 1408/80MHz = 17,6us * 3.579545 MHz = 63 ciclos, exatamente. Convenientemente, também funciona com um multiplicador de 61,25 MHz, o Luma Center do canal 3. 17.6us * 61,25 MHz = 1078 ciclos, exatamente! Quando você modula as frequências arbitrárias, às vezes os ciclos ficam muito irregulares.
Para gerar Luma (porção em preto e branco), modulamos 61,25 MHz. Se gerarmos um sinal forte, ele é visto como um "escuro", e um sinal fraco é muito "brilhante". Isso significa que, quando queremos enviar um pulso de sincronização, modulamos o mais alto possível ... quando queremos modular o branco, colocamos quase nenhum sinal. Uma coisa que você notará é o ponto do ponto. Isso ocorre porque o sinal que estamos enviando é muito terrível. O sinal do Chroma é muito sujo e tem um padrão de intensidade repetindo. Enquanto o Chroma se alinha até o Patten repetido de 1408 bits, o número total de pixels na tela não. Isso faz com que os padrões criados para descer a tela.
Para gerar cores, precisamos modular em um sinal de Chroma, 3,579MHz acima da banda base. O Chroma é sincronizado por uma explosão de cores no início de cada linha. Isso também define o nível para o Chroma. Então, durante a linha, podemos escolher uma "cor" que tenha um coeficiente alto no nível do croma, ou um baixo. Isso determina o quão vívida é a cor. Podemos mudar a fase para alterar o tom da cor.
Este é basicamente um DAC de 1 bits, operando a uma frequência abaixo do Nyquist, tentando codificar Luma e colorir ao mesmo tempo. Não se surpreenda que a qualidade seja terrível.
As tabelas para manusear a máquina de estado-buffer de linha são (geradas/armazenadas?) Em Maycbtables.h/c, e tabelas semelhantes para criar a codificação de sinal de fio estão em synthtables.c.
Funções para configurar as transferências DMA, reabastecer os buffers quando eles ficarem vazios e alterar que tipo de linha deve ser enviada com base no conteúdo do FrameBuffer em video_broadcast.c. Essas funções lidam com toda a modulação. Isso configura o DMA e uma interrupção chamada quando o DMA termina um bloco (igual a uma linha). Após a conclusão, ele usa o CBTable para decidir qual função chamar para preencher a linha. A interrupção preenche a próxima linha para DMA, que continua.
O Framebuffer é atualizado por várias telas de demonstração localizadas em user_main.c.
Custom_Commands.c contém os comandos personalizados usados para os aspectos específicos do NTSC. Usando a interface Websockets comuns, existem dois comandos adicionados. Isso inclui "CO" e "CV", que definem o modo de operação (CO) e permitem que os usuários alterem a tabela de modulação de uma interface da Web (CV).
As seguintes telas de demonstração estão disponíveis. Eles normalmente marcam um após o outro (exceto os depois de 10), a menos que o usuário desative isso no navegador da web.
A interface da Web está emprestando a interface da Web da ESP8266WS2812I2S. Energia no ESP, conecte -se a ele e, em seguida, aponte o navegador da web para http://192.168.4.1. Ele tem um novo botão "NTSC". Isso oferece a opção de permitir que a demonstração continue da tela para a tela ou congele em uma tela específica. Você pode especificar a tela. Além disso, para testes de RF, você pode tocar uma cor. Sempre que o congestionamento de cores é definido como algo 0 ou superior, ele desliga toda a lógica de desenho de linha e simplesmente produz a cor continuamente. Isso impedirá que os aparelhos de TV o vejam, no entanto, você pode vê -lo em outros equipamentos de RF.
Ele também possui um sistema interativo de webworker JavaScript que permite escrever código para criar uma nova cor! Você pode criar um novo stream de bits que será transmitido quando uma cor específica for atingida. Você pode editar o código e é eficaz à medida que digita. Ele recomenda automaticamente o webworker toda vez que você o altera.
Você deve produzir apenas -1 ou +1, pois isso é tudo o que o ESP pode gerar. Em seguida, ele executará um DFT com uma janela randomizada sobre uma área de frequência que você escolher. Aumente a janela DFT e aumentará seu q (ou precisão). Diminua, diminui o seu q. Isso é para ajudar a ver como os receptores como a TV realmente entendem o sinal e ajudam a ilustrar o quão maluco isso realmente é.
Você pode experimentar em seu próprio navegador usando este link: http://cnlohr.github.io/channel3/web/page/index.html Clique em NTSC e vá para a cidade.
Para todo o 3D e o texto, estou usando uma nova versão modificada da minha biblioteca "RawDraw" (http://github.com/cnlohr/rawdraw) para 3D estou usando números de ponto fixo, com 256 como o valor unitário e os 8 bits inferiores são o componente fracionário.
Para permitir as transmissões PAL, foram modificados os horários da Library Video_broadcast (anteriormente NTSC_BROADCAST). Como eu só queria usar isso com uma TV branca preta, e a cor do PAL é realmente bastante complicada de fazer digitalmente, não modifiquei o Broadcast_Tables (synthtables.c). Portanto, a biblioteca transmite um sinalizador B/W compatível com PAL com informações de cores NTSC (como o NTSC50).
Para ativar a transmissão PAL, você precisa ativar OPTS += -DPAL
no user.cfg.
Aqui está o vídeo original do YouTube neste projeto:
Aqui está o novo vídeo (com cores):