ESP8266アナログ放送テレビインターフェイス
AntennaをGPIO3/RXに接続し、アナログテレビをチャンネル3にチューニングします。ESPをオンにしてください!
これは、ESP8266WS2812I2Sプロジェクトと同じ方法でI2Sバスを使用します。違いは、出力ボーを80 MHzにクランクすることです。 DMAバッファーをセットアップし、CPUが一度に1つのラインを通過するときにそれらを埋めさせます。 DMA割り込みは、バッファーに一度に1つずつ入力します。 I2Sバスは、これらのバッファーを80 MHzでシフトします!
「しかし、ナイキストは、サンプルレート(この場合は40 MHz)で1/2以上で周波数を送信または受信できないと言います。それは真実です。実際には、あなたが送信するものはすべて、サンプルレートの約1/2(40 MHz)をミラーリングします。これは完璧ではありません。
「Premodulated_table」アレイに少しパターンを保存します。これには、「同期」レベルや「カラーバスト」レベル、または視覚色など、さまざまな信号のビットストリームが含まれます。このテーブルの1色あたり1408ビットの長さが選択されたため、80 MHzで一度に1ビットずつ送信すると、315.0/88.0 MHz、または3.579545455 MHzのNTCSクロマ周波数の均等な乗数になります。これは、1408/80MHz = 17.6US * 3.579545 MHz = 63サイクルを正確に撮影することで計算できます。便利なことに、61.25 MHzのチャンネル3のLumaセンターの均等な乗数にもなります。 17.6US * 61.25 MHz = 1078サイクル、正確に!任意の周波数を変調すると、サイクルが非常に不均一になります。
LUMA(黒と白の部分)を生成するために、61.25 MHzを変調します。強い信号を生成すると、それは非常に「暗い」と見なされ、弱い信号は非常に「明るい」と見なされます。これは、同期パルスを送信したいときに、できる限り大音量で変調することを意味します...白を変調したいときは、まったく信号を出しません。気付くのはドットの注ぎです。これは、私たちが送信している信号がとてもひどいからです。クロマ信号は非常に汚れており、繰り返し強度パターンがあります。クロマは1408ビット全体の繰り返しパッテンまで並んでいますが、画面上のピクセルの総数はそうではありません。これにより、作成されたパターンが画面をロールダウンします。
色を生成するには、ベースバンドの上にある3.579MHzのクロマ信号で変調する必要があります。クロマは、各ラインの先頭にカラーバーストによって同期されます。これにより、クロマのレベルも設定されます。次に、ライン中に、クロマレベルで高い係数を持つ「色」を選択するか、低いものを選択できます。これは、色がどれほど鮮明であるかを決定します。色の色合いを変更するために位相を変更できます。
これは基本的に1ビットのディザリングDACであり、ナイキスト以下の周波数で動作し、ルーマと色を同時にエンコードしようとしています。品質がひどいことに驚かないでください。
ラインバッファ状態マシンを処理するためのテーブルは、MayCbtables.h/cで(生成/保存されていますか?)。
DMA転送をセットアップし、空になったときにバッファーを補充し、FrameBufferコンテンツに基づいて送信されるラインを変更する機能を変更します。これらの関数は、すべての変調を処理します。これにより、DMAがセットアップされ、DMAがブロックを終了したときに呼び出される割り込みが設定されます(1行に等しい)。完了すると、CBTABLEを使用して、どの関数を呼び出してラインに記入するかを決定します。割り込みは、続き続けるDMAの次の行を埋めます。
FrameBufferは、user_main.cにあるさまざまなデモ画面によって更新されます。
custom_commands.cには、NTSC固有の側面に使用されるカスタムコマンドが含まれています。 Common WebSocketsインターフェイスを使用して、2つの追加コマンドがあります。これらには、操作モード(CO)を設定し、ユーザーがWebインターフェイス(CV)から変調テーブルを変更できる「CO」と「CV」が含まれます。
次のデモ画面が利用可能です。通常、ユーザーがWebブラウザーでこれを無効にしない限り、次々に(10以降を除く)。
Webインターフェイスは、ESP8266WS2812I2SからWebインターフェイスを借用しています。 ESPに電源を入れて、それに接続してから、Webブラウザにhttp://192.168.4.1に向けます。新しいボタン「NTSC」があります。これにより、デモが画面から画面まで続くか、特定の画面でフリーズできるようにするオプションが提供されます。画面を指定できます。さらに、RFテストでは、色を詰めることができます。カラージャムが0以上のものに設定されるたびに、すべてのライン描画ロジックをオフにし、その色を連続的に出力するだけです。これにより、テレビがそれを見ることができなくなりますが、他のRF機器で見ることができます。
また、インタラクティブなJavaScript Webworkerシステムもあり、新しい色を作成するコードを作成できます!特定の色がヒットしたときに送信される新しいビットストリームを作成できます。コードを編集でき、入力すると効果的です。あなたがそれを変更するたびに、それは自動的にウェブワーカーを再起動します。
ESPが出力できるのはすべてであるため、出力-1または+1のみが必要です。次に、選択した周波数領域にランダム化されたウィンドウを使用してDFTを実行します。 DFTウィンドウを増やすと、Q(または精度)が増加します。減少し、Qを減少させます。これは、テレビのようなレシーバーが信号を本当に理解していることを確認し、これがどれほど奇抜であるかを示すのに役立ちます。
このリンクを使用して、独自のブラウザで試すことができます:http://cnlohr.github.io/channel3/web/page/index.html ntscをクリックして町に移動します。
すべての3Dとテキストについて、3Dに「RawDraw」ライブラリ(http://github.com/cnlohr/rawdraw)の新しい変更バージョンを使用しています。固定点番号を使用しています。 、そして下部8ビットは分数コンポーネントです。
PAL放送を可能にするために、Video_Broadcast-Library(以前のNTSC_BROADCAST)のタイミングが変更されました。私はこれを黒の白いテレビでのみ使用したかったので、実際にはデジタルで行うのが非常に複雑であるため、broadcast_tables(synthtables.c)を変更しませんでした。したがって、ライブラリは、NTSCカラー情報(NTSC50のような種類)を備えたPAL準拠のB/W-SINALをブロードキャストします。
PALブロードキャストを有効にするには、user.cfgでOPTS += -DPAL
有効にする必要があります。
このプロジェクトのオリジナルのYouTubeビデオは次のとおりです。
これが新しいビデオです(色付き):