ESP8266 Analog Siaran Antarmuka Televisi
Hubungkan antena hingga GPIO3/RX, tentukan TV analog Anda ke saluran 3. Power the ESP On!
Ini menggunakan bus I2S dengan cara yang sama seperti proyek ESP8266WS2812I2S. Perbedaannya adalah engkol output baud hingga 80 MHz. Kami mengatur buffer DMA dan membiarkan CPU mengisinya saat mereka melewati satu baris pada satu waktu. DMA interupsi mengisi buffer satu kata sekaligus. Bus I2S menggeser buffer -buffer itu pada 80 MHz!
Anda mungkin mengatakan "tetapi Nyquist mengatakan Anda tidak dapat mengirimkan atau menerima frekuensi pada lebih dari 1/2 laju sampel (40 MHz dalam kasus ini). Untuk tingkat yang benar. Beberapa orang berpikir itu mungkin nada, tetapi apa yang terjadi Pada kenyataannya sesuatu yang orang asing terjadi. tidak sempurna.
Kami menyimpan sedikit pola dalam array "premodulated_table". Ini berisi bitstream untuk berbagai sinyal, seperti level "sinkronisasi" atau "warna -warna", atau warna visual apa pun. Panjang meja ini 1408 bit per warna dipilih sehingga ketika dikirim satu bit pada satu waktu pada 80 MHz, ia bekerja dengan pengali yang bahkan dari frekuensi kroma NTCS 315.0/88.0 MHz, atau 3.579545455 MHz. Anda dapat menghitung ini dengan mengambil 1408/80MHz = 17.6US * 3.579545 MHz = 63 siklus, tepatnya. Nyaman, ini juga bekerja untuk pengganda yang bahkan 61,25 MHz, Luma Center Channel 3. 17.6US * 61.25 MHz = 1078 siklus, tepatnya! Saat Anda memodulasi frekuensi sewenang -wenang, kadang -kadang siklus keluar sangat tidak merata.
Untuk menghasilkan luma (bagian hitam dan putih) kami memodulasi 61,25 MHz. Jika kita menghasilkan sinyal yang kuat, itu dipandang sebagai "gelap", dan sinyal lemah sangat "cerah." Ini berarti ketika kami ingin mengirimkan pulsa sinkronisasi, kami memodulasikannya sekeras yang kami bisa ... ketika kami ingin memodulasi putih, kami mengeluarkan hampir semua sinyal sama sekali. Satu hal yang akan Anda perhatikan adalah dot pour. Ini karena sinyal yang kami kirim sangat mengerikan. Sinyal chroma sangat kotor dan memiliki pola intensitas berulang. Sementara garis kroma hingga 1408 bit-bit mengulangi patten, jumlah total piksel di layar tidak. Ini menyebabkan pola yang dibuat untuk menggulung layar.
Untuk menghasilkan warna, kita perlu memodulasi sinyal chroma, 3,579MHz di atas baseband. Chroma disinkronkan oleh colorburst di awal setiap baris. Ini juga menetapkan level untuk kroma. Kemudian, selama garis, kita dapat memilih "warna" yang memiliki koefisien tinggi di tingkat kroma, atau yang rendah. Ini menentukan seberapa jelas warnanya. Kita dapat mengubah fase untuk mengubah rona warna.
Ini pada dasarnya adalah DAC 1-bit, yang beroperasi pada frekuensi di bawah Nyquist, mencoba mengkodekan luma dan warna pada saat yang sama. Jangan kaget bahwa kualitasnya mengerikan.
Tabel untuk menangani mesin status buffer garis (dihasilkan/disimpan?) Di maycbtables.h/c, dan tabel serupa untuk membuat pengkodean sinyal on-wire ada di synthtables.c.
Fungsi untuk mengatur transfer DMA, mengisi ulang buffer ketika mereka menjadi kosong, dan mengubah jenis jalur apa yang harus dikirim berdasarkan konten Framebuffer di video_broadcast.c. Fungsi -fungsi ini menangani semua modulasi. Ini mengatur DMA, dan interupsi yang disebut ketika DMA menyelesaikan blok (sama dengan satu baris). Setelah selesai, ia menggunakan CBTable untuk memutuskan fungsi apa yang akan dipanggil untuk mengisi garis. Interupsi mengisi baris berikutnya untuk DMA yang terus berjalan.
Framebuffer diperbarui oleh berbagai layar demo yang terletak di user_main.c.
custom_commands.c berisi perintah khusus yang digunakan untuk aspek khusus NTSC. Menggunakan Antarmuka Websockets Umum Ada dua perintah tambahan. Ini termasuk "CO" dan "CV" yang mengatur mode operasi (CO) dan memungkinkan pengguna untuk mengubah tabel modulasi dari antarmuka web (CV).
Layar demo berikut tersedia. Mereka biasanya mencentang satu demi satu (kecuali yang setelah 10), kecuali pengguna menonaktifkan ini di browser web.
Antarmuka web meminjam antarmuka web dari ESP8266WS2812I2S. Power pada ESP, sambungkan ke sana, lalu arahkan browser web Anda ke http://192.168.4.1. Ini memiliki tombol baru "NTSC." Ini memberi Anda opsi untuk memungkinkan demo melanjutkan dari layar ke layar, atau membekukan di layar tertentu. Anda dapat menentukan layar. Selain itu, untuk pengujian RF, Anda dapat membuat warna menjadi warna. Setiap kali selai warna diatur ke sesuatu yang 0 atau lebih, itu mematikan semua logika gambar garis, dan hanya menghasilkan warna itu secara terus menerus. Ini akan mencegah perangkat TV melihatnya, namun, Anda dapat melihatnya di peralatan RF lainnya.
Ini juga memiliki sistem webworker JavaScript interaktif yang memungkinkan Anda menulis kode untuk membuat warna baru! Anda dapat membuat bitstream baru yang akan ditransmisikan saat warna tertentu dipukul. Anda dapat mengedit kode dan efektif saat Anda mengetik. Secara otomatis memulai kembali WebWorker setiap kali Anda mengubahnya.
Anda hanya harus output -1 atau +1 karena itu semua output ESP. Ini kemudian akan menjalankan DFT dengan jendela acak di atas area frekuensi yang Anda pilih. Tingkatkan jendela DFT, dan itu akan meningkatkan Q (atau presisi) Anda. Berkurang, itu mengurangi q Anda. Ini untuk membantu melihat bagaimana penerima seperti TV benar -benar memahami sinyal dan membantu menggambarkan betapa anehnya hal ini.
Anda dapat mencobanya di browser Anda sendiri menggunakan tautan ini: http://cnlohr.github.io/channel3/web/page/index.html klik NTSC dan pergi ke kota.
Untuk semua 3D dan teks, saya menggunakan versi baru yang dimodifikasi dari perpustakaan "Rawdraw" saya (http://github.com/cnlohr/rawdraw) untuk 3D saya menggunakan nomor poin tetap, dengan 256 sebagai nilai unit unit , dan 8 bit bawah adalah komponen fraksional.
Untuk memungkinkan siaran PAL, timing dalam video_broadcast-library (sebelumnya NTSC_Broadcast) telah dimodifikasi. Karena saya hanya ingin menggunakan ini dengan TV hitam putih, dan warna PAL sebenarnya cukup rumit untuk dilakukan secara digital, saya tidak memodifikasi siaran_tables (synthtables.c). Jadi perpustakaan menyiarkan sinyal b/w yang sesuai dengan informasi warna NTSC (seperti NTSC50).
Untuk mengaktifkan penyiaran PAL, Anda perlu mengaktifkan OPTS += -DPAL
di user.cfg.
Berikut adalah video YouTube asli di proyek ini:
Ini adalah video baru (dengan warna):