ESP8266上的模拟电视台

2020-12-07 19:03:30

将天线挂在GPIO3 / RX上,将模拟电视调谐到频道3。打开ESP!

此方法与esp8266ws2812i2s项目相同的方式使用I2S总线。区别在于它将输出波特率提高到80 MHz。我们设置了DMA缓冲区,并让CPU一次通过一行填充它们。 DMA中断一次填充一个字。 I2S总线将这些缓冲器移出80 MHz!

您可能会说,但奈奎斯特说您不能以超过采样率1/2的频率发送或接收频率(在这种情况下为40 MHz)。在一定程度上是对的。有人认为这可能是泛音,但现实中发生的事情却有些陌生。您传输的所有内容实际上都被镜像为采样率(40 MHz)的1/2左右。因此,在80 MHz的位时钟上发送60 MHz会在60和20处产生一个波形。这不是完美的。一些频率高达80 MHz,而另一些则不然。

我们将位模式存储在" premodulated_table"中。数组。它包含各种信号的比特流,例如" sync"级别或" colorbust"级别或任何视觉颜色。选择该表的每种颜色的长度为1408位,以便当在80 MHz的频率下一次发送一位时,它等于NTCS色度频率315.0 / 88.0 MHz或3.579545455 MHz的偶数倍。您可以通过精确地采用1408 / 80MHz = 17.6us * 3.579545 MHz = 63个周期来计算。方便地,它也可以算出通道3的亮度中心61.25 MHz的偶数倍。准确地说是17.6us * 61.25 MHz = 1078个周期!当您调制任意频率时,有时周期会变得非常不均匀。

为了产生亮度(黑色和白色部分),我们调制61.25 MHz。如果我们生成一个强信号,则它被视为非常暗,而一个弱信号则被视为非常亮。这意味着当我们要发送同步脉冲时,我们将其调制得尽可能大...当我们要调制白色时,我们几乎不会发出任何信号。您会注意到的一件事是点浇。这是因为我们发送的信号太可怕了。色度信号非常脏,并且具有重复的强度模式。当色度排列到1408位宽的重复图案时,屏幕上的像素总数却没有。这将导致创建的图案向下滚动屏幕。

为了产生颜色,我们需要在基带以上3.579MHz的色度信号中进行调制。在每行的开头,色度通过发色同步。这也设置了色度的水平。然后,在该行中,我们可以选择" color"在色度水平上系数较高或较低的系数。这决定了颜色的鲜艳程度。我们可以改变相位来改变颜色。

这基本上是一个1位的抖动DAC,工作频率低于奈奎斯特频率,试图同时编码亮度和色彩。不用担心质量太差了。

在MayCbTables.h / c中(用于生成/存储行缓冲状态机的表)在(生成/存储吗?)中,用于创建在线信号编码的类似表在synthtables.c中。

用于设置DMA传输,在缓冲区为空时重新填充缓冲区以及根据帧缓冲区内容更改应发送哪种行的函数位于ntsc_broadcast.c中。这些功能处理所有调制。这将设置DMA,并在DMA完成一个块(等于一行)时调用一个中断。完成后,它将使用CbTable来决定要调用的函数以填充行。中断将继续执行DMA的下一行。

custom_commands.c包含用于NTSC特定方面的自定义命令。使用通用的websockets界面,添加了两个命令。其中包括" CO"和" CV"设置操作模式(CO)并允许用户从Web界面(CV)更改调制表。

以下演示屏幕可用。除非用户在网络浏览器中禁用此功能,否则它们通常会一个接一个地打勾(10个之后除外)。

帧缓冲区复制测试的介绍和完成。当心,长时间运行此屏幕会导致崩溃。

Web界面从esp8266ws2812i2s借用了Web界面。接通ESP的电源,连接到它,然后将Web浏览器指向http://192.168.4.1。它具有一个新按钮" NTSC。"这使您可以选择允许演示在屏幕之间继续进行或冻结在特定屏幕上。您可以指定屏幕。此外,对于RF测试,您可以堵塞一种颜色。每当卡纸设置为0或更高时,它就会关闭所有线条绘制逻辑,并简单地连续输出该颜色。这样可以防止电视机看到它,但是,您可以在其他RF设备上看到它。

它还具有一个交互式Javascript Webworker系统,可让您编写代码以产生新的颜色!您可以创建一个新的比特流,当命中特定颜色时将传输该比特流。您可以编辑代码,并且在键入时有效。每次更改时,它都会自动重新启动Webworker。

您只应输出-1或+1,因为这是ESP可以输出的全部。 然后,它将在您选择的频率区域上运行带有随机窗口的DFT。 增加DFT窗口,它将增加q(或精度)。 减少,它减少您的q。 这是为了帮助您了解电视等接收器如何真正理解信号,并帮助说明这是多么的古怪。 您可以使用此链接在自己的浏览器中尝试它:http://cnlohr.github.io/channel3/web/page/index.html单击NTSC并转到城镇。 对于所有3D和文本,我使用的是我的" rawdraw"的新修改版。 3D I&m的库(http://github.com/cnlohr/rawdraw),使用定点数,单位值为256,低8位是小数部分。