ESP8266 อินเตอร์เฟสโทรทัศน์อะนาล็อก
เชื่อมต่อเสาอากาศสูงถึง GPIO3/RX ปรับแต่งทีวีอะนาล็อกของคุณเป็นช่อง 3 เปิดใช้งาน ESP!
สิ่งนี้ใช้บัส I2S ในลักษณะเดียวกับโครงการ ESP8266WS2812I2S ความแตกต่างคือมันบีบเอาท์พุท baud ถึง 80 MHz เราตั้งค่าบัฟเฟอร์ DMA และปล่อยให้ CPU เติมเต็มเมื่อพวกเขาผ่านหนึ่งบรรทัดในแต่ละครั้ง การขัดจังหวะ DMA เติมในบัฟเฟอร์ทีละคำ รถบัส I2S เลื่อนบัฟเฟอร์เหล่านั้นออกไปที่ 80 MHz!
คุณอาจพูดว่า "แต่ Nyquist บอกว่าคุณไม่สามารถส่งหรือรับความถี่ได้มากกว่า 1/2 อัตราตัวอย่าง (40 MHz ในกรณีนี้) ในระดับที่เป็นจริงบางคนคิดว่ามันอาจจะเป็นเสียงหวือหวา แต่สิ่งที่เกิดขึ้น ในความเป็นจริงสิ่งที่แปลกประหลาดเกิดขึ้น ไม่สมบูรณ์แบบ
เราเก็บรูปแบบบิตในอาร์เรย์ "premodulated_table" สิ่งนี้มีบิตสตรีมสำหรับสัญญาณต่าง ๆ เช่นระดับ "ซิงค์" หรือระดับ "colorbust" หรือสีใด ๆ ความยาวของตารางนี้คือ 1408 บิตต่อสีได้รับการคัดเลือกดังนั้นเมื่อส่งออกทีละครั้งที่ 80 MHz มันจะเป็นตัวคูณที่สม่ำเสมอของความถี่ NTCS chroma ที่ 315.0/88.0 MHz หรือ 3.579545455 MHz คุณสามารถคำนวณสิ่งนี้ได้โดยใช้ 1408/80MHz = 17.6us * 3.579545 MHz = 63 รอบแน่นอน สะดวกสบายนอกจากนี้ยังมีตัวทวีคูณที่เพิ่มขึ้น 61.25 MHz, Luma Center ของ Channel 3 17.6us * 61.25 MHz = 1078 รอบแน่นอน! เมื่อคุณปรับความถี่ตามอำเภอใจบางครั้งรอบจะออกมาไม่สม่ำเสมอมาก
เพื่อสร้าง LUMA (ส่วนขาวดำ) เราปรับ 61.25 MHz หากเราสร้างสัญญาณที่แข็งแกร่งมันจะถูกมองว่าเป็น "มืด" มากและสัญญาณที่อ่อนแอนั้นเป็น "สว่าง" มาก ซึ่งหมายความว่าเมื่อเราต้องการส่งชีพจรซิงค์ออกเราจะปรับมันให้ดังที่สุดเท่าที่จะทำได้ ... เมื่อเราต้องการปรับสีขาวเราจะวางสัญญาณใด ๆ เลย สิ่งหนึ่งที่คุณจะสังเกตเห็นคือ dot p นี่เป็นเพราะสัญญาณที่เราส่งนั้นแย่มาก สัญญาณ Chroma สกปรกมากและมีรูปแบบความเข้มซ้ำ ๆ ในขณะที่ chroma เส้นสูงถึง 1408 บิตซ้ำ patten จำนวนพิกเซลทั้งหมดบนหน้าจอไม่ได้ สิ่งนี้ทำให้รูปแบบที่สร้างขึ้นเพื่อม้วนหน้าจอ
ในการสร้างสีเราจำเป็นต้องปรับเปลี่ยนในสัญญาณ chroma, 3.579MHz เหนือเบสแบนด์ Chroma ถูกซิงโครไนซ์โดย colorburst ที่จุดเริ่มต้นของแต่ละบรรทัด นอกจากนี้ยังกำหนดระดับสำหรับ chroma จากนั้นในระหว่างบรรทัดเราสามารถเลือก "สี" ที่มีค่าสัมประสิทธิ์สูงในระดับ chroma หรือต่ำ สิ่งนี้กำหนดว่าสีสดใสแค่ไหน เราสามารถเปลี่ยนเฟสเพื่อเปลี่ยนสีของสี
นี่คือ DAC แบบ 1 บิตที่ทำงานที่ความถี่ต่ำกว่า Nyquist พยายามเข้ารหัส Luma และสีในเวลาเดียวกัน อย่าแปลกใจที่คุณภาพแย่มาก
ตารางสำหรับการจัดการเครื่องสถานะ line-buffer คือ (สร้าง/จัดเก็บ?) ใน maycbtables.h/c และตารางที่คล้ายกันสำหรับการสร้างการเข้ารหัสสัญญาณแบบลวดอยู่ใน synthtables.c
ฟังก์ชั่นในการตั้งค่าการถ่ายโอน DMA เติมบัฟเฟอร์เมื่อพวกเขาว่างเปล่าและเปลี่ยนสายประเภทใดที่ควรส่งตามเนื้อหา Framebuffer อยู่ใน Video_Broadcast.c ฟังก์ชั่นเหล่านี้จัดการการมอดูเลตทั้งหมด สิ่งนี้ตั้งค่า DMA และการขัดจังหวะที่เรียกว่าเมื่อ DMA เสร็จสิ้นบล็อก (เท่ากับหนึ่งบรรทัด) เมื่อเสร็จสิ้นจะใช้ CBTable เพื่อตัดสินใจว่าจะเรียกใช้ฟังก์ชันใดเพื่อเติมเต็มในบรรทัด การขัดจังหวะเติมเส้นถัดไปสำหรับ DMA ซึ่งดำเนินต่อไป
FrameBuffer ได้รับการอัปเดตโดยหน้าจอตัวอย่างต่างๆที่อยู่ใน user_main.c
Custom_Commands.c มีคำสั่งที่กำหนดเองที่ใช้สำหรับแง่มุมเฉพาะของ NTSC การใช้อินเทอร์เฟซ WebSockets ทั่วไปมีคำสั่งเพิ่มสองคำ เหล่านี้รวมถึง "CO" และ "CV" ซึ่งตั้งค่าโหมดการทำงาน (CO) และอนุญาตให้ผู้ใช้เปลี่ยนตารางการปรับจากเว็บอินเตอร์เฟส (CV)
มีหน้าจอสาธิตต่อไปนี้ ปกติแล้วพวกเขาจะทำเครื่องหมายผ่านอีกครั้ง (ยกเว้นหลังจาก 10) เว้นแต่ผู้ใช้จะปิดการใช้งานสิ่งนี้ในเว็บเบราว์เซอร์
เว็บอินเตอร์เฟสกำลังยืมเว็บอินเตอร์เฟสจาก ESP8266WS2812I2S เปิดใช้งาน ESP เชื่อมต่อกับมันแล้วชี้เว็บเบราว์เซอร์ของคุณไปที่ http://192.168.4.1 มีปุ่มใหม่ "NTSC" สิ่งนี้จะช่วยให้คุณมีตัวเลือกในการอนุญาตให้สาธิตต่อจากหน้าจอไปยังหน้าจอหรือแช่แข็งที่หน้าจอเฉพาะ คุณสามารถระบุหน้าจอ นอกจากนี้สำหรับการทดสอบ RF คุณสามารถติดขัดสีได้ เมื่อใดก็ตามที่มีการตั้งค่าแยมสีเป็นสิ่งที่ 0 หรือสูงกว่าจะปิดตรรกะการวาดเส้นทั้งหมดและเพียงแค่ส่งออกสีนั้นอย่างต่อเนื่อง สิ่งนี้จะป้องกันไม่ให้ทีวีไม่เห็นมันคุณสามารถเห็นได้ในอุปกรณ์ RF อื่น ๆ
นอกจากนี้ยังมีระบบ webworker JavaScript แบบโต้ตอบที่ให้คุณเขียนโค้ดเพื่อสร้างสีใหม่! คุณสามารถสร้างบิตสตรีมใหม่ที่จะส่งเมื่อมีการตีสีเฉพาะ คุณสามารถแก้ไขรหัสและมีประสิทธิภาพเมื่อคุณพิมพ์ มันเริ่มต้นใหม่โดยอัตโนมัติบนผู้ไปพบเว็บทุกครั้งที่คุณเปลี่ยน
คุณควรเอาต์พุต -1 หรือ +1 เท่านั้นเนื่องจาก ESP ทั้งหมดสามารถส่งออกได้ จากนั้นจะเรียกใช้ DFT ด้วยหน้าต่างแบบสุ่มเหนือพื้นที่ความถี่ที่คุณเลือก เพิ่มหน้าต่าง DFT และจะเพิ่ม Q (หรือความแม่นยำ) ของคุณ ลดลงลดลง q ของคุณ นี่คือการช่วยดูว่าผู้รับเช่นทีวีเข้าใจสัญญาณได้อย่างไรและช่วยแสดงให้เห็นว่าสิ่งนี้แปลกประหลาดเพียงใด
คุณสามารถลองใช้ในเบราว์เซอร์ของคุณเองโดยใช้ลิงค์นี้: http://cnlohr.github.io/channel3/web/page/index.html คลิก NTSC และไปที่เมือง
สำหรับ 3D และข้อความทั้งหมดฉันใช้ไลบรารี "RawDraw" เวอร์ชันใหม่ของฉัน (http://github.com/cnlohr/rawdraw) สำหรับ 3D ฉันใช้หมายเลขจุดคงที่โดย 256 เป็นค่าหน่วย และส่วนล่าง 8 บิตเป็นส่วนประกอบเศษส่วน
เพื่ออนุญาตให้มีการออกอากาศ PAL การกำหนดเวลาใน Video_Broadcast-Library (เดิมชื่อ NTSC_Broadcast) ได้รับการแก้ไข เนื่องจากฉันแค่ต้องการใช้สิ่งนี้กับทีวีสีขาวสีขาวและสี PAL นั้นค่อนข้างซับซ้อนในการทำแบบดิจิทัลฉันจึงไม่ได้แก้ไข Broadcast_Tables (synthtables.c) ดังนั้นห้องสมุดจึงออกอากาศ B/W-Signal ที่สอดคล้องกับ PAL พร้อมข้อมูลสี NTSC (ชนิดของ NTSC50)
ในการเปิดใช้งานการแพร่ภาพ PAL คุณต้องเปิดใช้งาน OPTS += -DPAL ใน user.cfg
นี่คือวิดีโอ YouTube ดั้งเดิมในโครงการนี้:
นี่คือวิดีโอใหม่ (พร้อมสี):