Interface télévisée de diffusion analogique ESP8266
Accrochez une antenne jusqu'à GPIO3 / RX, réglez votre téléviseur analogique à la chaîne 3. Alitez l'ESP ON!
Cela utilise le bus I2S de la même manière que le projet ESP8266WS2812I2S. La différence est qu'il groute le baume de sortie à 80 MHz. Nous avons configuré des tampons DMA et laissé le processeur les remplir lorsqu'ils traversent une ligne à la fois. L'interruption DMA remplit les tampons un mot à la fois. Le bus I2S déplace ces tampons à 80 MHz!
Vous pouvez dire "mais Nyquist dit que vous ne pouvez pas transmettre ou recevoir des fréquences à plus de la moitié du taux d'échantillonnage (40 MHz dans ce cas). Dans une mesure, c'est vrai. Certaines personnes pensaient que ce peut être des connotations, mais que se passe-t-il En réalité, quelque chose d'étranger se produit. n'est pas parfait.
Nous stockons un motif un peu dans le tableau "prémodulé_table". Cela contient des courants de bits pour divers signaux, tels que le niveau "Sync" ou le niveau "ColorBust", ou l'une des couleurs visuelles. La longueur de cette table de 1408 bits par couleur a été choisie de sorte que lorsqu'elle est envoyée un bit à la fois à 80 MHz, elle fonctionne à un multiplicateur uniforme de la fréquence de chroma NTCS de 315,0 / 88,0 MHz, ou 3,57954555 MHz. Vous pouvez calculer ceci en prenant 1408/80 MHz = 17,6Us * 3,579545 MHz = 63 cycles, exactement. Idéalement, cela correspond également à un multiplicateur uniforme de 61,25 MHz, Luma Center de Channel 3. 17,6us * 61,25 MHz = 1078 cycles, exactement! Lorsque vous modulez les fréquences arbitraires, les cycles sortent parfois très inégaux.
Afin de générer de la LUMA (la partie noire et blanche), nous moduisons 61,25 MHz. Si nous générons un signal fort, il est considéré comme un très "sombre", et un signal faible est un très "brillant". Cela signifie que lorsque nous voulons envoyer une impulsion de synchronisation, nous la modulons aussi forte que possible ... lorsque nous voulons moduler le blanc, nous éteignons à peine n'importe quel signal. Une chose que vous remarquerez est le point pour. En effet, le signal que nous envoyons est si terrible. Le signal de chroma est très sale et a un schéma d'intensité répétitif. Alors que le chroma se rapproche de la patten répétitive à l'échelle de 1408 bits, le nombre total de pixels à l'écran ne le fait pas. Cela fait que les motifs créés baissent l'écran.
Afin de générer de la couleur, nous devons moduler dans un signal de chroma, 3,579 MHz au-dessus de la bande de base. Le chroma est synchronisé par un coup de couleurs au début de chaque ligne. Cela définit également le niveau du chrome. Ensuite, pendant la ligne, nous pouvons soit choisir une "couleur" qui a un coefficient élevé au niveau du chroma, soit un "bas. Cela détermine à quel point la couleur est vive. Nous pouvons changer de phase pour changer la teinte de la couleur.
Il s'agit essentiellement d'un DAC de trempage 1 bits, fonctionnant à une fréquence sous le Nyquist, essayant de coder Luma et Color en même temps. Ne soyez pas surpris que la qualité soit terrible.
Les tableaux de gestion de la machine d'état de bouffée de ligne sont (générés / stockés?) Dans MayCbtables.h / c, et des tables similaires pour créer le codage du signal sur fil sont en synthtables.c.
Fonctions pour configurer les transferts DMA, remplir les tampons lorsqu'ils deviennent vides et modifier le type de ligne qui doit être envoyé en fonction du contenu FrameBuffer dans Video_Broadcast.c. Ces fonctions gèrent toute la modulation. Cela configure le DMA et une interruption qui est appelée lorsque le DMA termine un bloc (égal à une ligne). Une fois terminé, il utilise CBTABLE pour décider de la fonction à appeler pour remplir la ligne. L'interruption remplit la ligne suivante pour DMA qui continue.
Le framebuffer est mis à jour par divers écrans de démonstration situés dans user_main.c.
Custom_commands.c contiennent les commandes personnalisées utilisées pour les aspects spécifiques au NTSC. À l'aide de l'interface Websockets commune, il existe deux commandes ajoutées. Ceux-ci incluent "CO" et "CV" qui définissent le mode de fonctionnement (CO) et permettent aux utilisateurs de modifier la table de modulation à partir d'une interface Web (CV).
Les écrans de démonstration suivants sont disponibles. Ils vivent normalement les uns après les autres (sauf un après 10), sauf si l'utilisateur le désactive dans le navigateur Web.
L'interface Web emprunte l'interface Web à ESP8266WS2812I2S. Alimentation sur l'ESP, connectez-vous, puis pointez votre navigateur Web à http://192.168.4.1. Il a un nouveau bouton "NTSC". Cela vous donne la possibilité de permettre à la démo de continuer de l'écran à l'écran ou de geler à un écran spécifique. Vous pouvez spécifier l'écran. De plus, pour les tests RF, vous pouvez bloquer une couleur. Chaque fois que le confiture de couleur est réglé sur quelque chose 0 ou plus, il désactive toute logique de dessin de ligne et produit simplement cette couleur en continu. Cela empêchera les téléviseurs de le voir, cependant, vous pouvez le voir sur d'autres équipements RF.
Il dispose également d'un système interactif JavaScript Webworker qui vous permet d'écrire du code pour créer une nouvelle couleur! Vous pouvez créer une nouvelle bande de bits qui sera transmise lorsqu'une couleur spécifique est touchée. Vous pouvez modifier le code et il est efficace lorsque vous tapez. Il redémarre automatiquement le travailleur Web à chaque fois que vous le modifiez.
Vous devez uniquement sortir -1 ou +1 car c'est tout ce que l'ESP peut sortir. Il exécutera ensuite un DFT avec une fenêtre randomisée sur une zone de fréquence que vous choisissez. Augmentez la fenêtre DFT et augmentera votre Q (ou précision). Diminuez, il diminue votre Q. C'est pour aider à voir comment les récepteurs comme le téléviseur comprennent vraiment le signal et aider à illustrer à quel point c'est vraiment farfelu.
Vous pouvez l'essayer dans votre propre navigateur en utilisant ce lien: http://cnlohr.github.io/channel3/web/page/index.html cliquez sur NTSC et allez en ville.
Pour tout le 3D et le texte, j'utilise une nouvelle version modifiée de ma bibliothèque "Rawdraw" (http://github.com/cnlohr/rawdraw) pour 3D J'utilise des numéros de point fixe, avec 256 comme valeur unitaire et les 8 bits inférieurs sont la composante fractionnée.
Pour permettre des émissions de PAL, les horaires de la vidéo_broadcast-bibrary (anciennement NTSC_Broadcast) ont été modifiés. Comme je voulais seulement l'utiliser avec un Black et une télévision blanche et que la couleur PAL est en fait assez compliquée à faire numériquement, je n'ai pas modifié le Broadcast_Tables (synthtables.c). La bibliothèque diffuse donc un signal B / W conforme à PAL avec des informations sur les couleurs NTSC (un peu comme NTSC50).
Pour activer la diffusion PAL, vous devez activer OPTS += -DPAL
dans user.cfg.
Voici la vidéo YouTube originale de ce projet:
Voici la nouvelle vidéo (avec couleur):