ฉันมักจะมองหาการเพิ่มคุณภาพในห้องทดลองของฉันที่จะเคารพงบประมาณที่เข้มงวดของฉัน เมื่อเร็ว ๆ นี้ฉันพบว่าตัวเองผลักดันสิ่งกีดขวางเฮิร์ตซ์กับทุกโครงการที่ฉันทำและต้องการขอบเขตแบนด์วิดธ์สูง น่าเสียดายที่เมื่อเร็ว ๆ นี้มีเพียง 70 MHz ถึง 100 MHz กลายเป็นราคาไม่แพงจริงๆในขณะที่ออสซิลโลสโคป Quad Channel ใหม่ในช่วง 500 MHz ถึง 1 GHz ยังคงมีค่าใช้จ่ายโชค ตัวเลือกเดียวของฉันคือการหาปาฏิหาริย์ที่แน่นอนในรูปแบบของขอบเขตแบนด์วิดท์สูงเก่า
ดูเหมือนว่าเทพเจ้าของมือฉันมือสองกำลังยิ้มให้ฉันเมื่อฉันพบถังขยะนี้ลิขิต HP 54542C ดูเหมือนว่าจะอยู่ในรูปทรงที่ดีของนางฟ้าและเป็นสุนัขชั้นนำในวันนั้น แต่สิ่งที่ต้องแตกสลาย? แน่นอนว่าหน้าจอมีความผิดพลาดอย่างชัดเจนและอ่านไม่ออก ต้องการที่จะรู้ว่าฉันแก้ไขได้อย่างไร ตัวอักษรสี่ตัว: FPGA
ปัญหา
การวิจัยตื้น ๆ บางอย่างในขอบเขตนี้เผยให้เห็นถึงประวัติศาสตร์ที่น่าสนใจ นี่เป็นขอบเขตสุดท้ายของ HP ที่มีจอแอลซีแอล LCD และเป็นสารตั้งต้นของ Scopes ของ Scopes ที่จะดำเนินการต่อไปยังหลักเกณฑ์ในตลาด จอแอลซีดีรู้สึกเหมือนอยู่ในภายหลัง ขอบเขตมีตัวแปรที่คล้ายกันคล้ายกันกับจอแสดงผล CRT และรุ่นที่ฉันได้รับเพียงแค่มีทางเดินอาหารหลัก CRT กำจัดและ LCD สีที่ติดตั้งโดย HP ฉันหวังว่าจอแอลซีดีจะผิดพลาดและไม่ใช่การขับขี่ของ ASIC ซึ่งดูเหมือนว่าเป็นเดิมพันที่ดีเนื่องจากการแตะที่อ่อนโยนในบางกรณีนำหน้าจอกลับมามีชีวิต!
ฉันเริ่มตรวจสอบสาเหตุของรากและเริ่มต้นด้วยการแยก LCD ฉันพบของเหลวบางอย่างได้รับการรั่วไหลไปทั่วมัน ไม่มีอะไรที่สึกกร่อน แต่การทำความสะอาดและการติดตั้งใหม่ไม่ได้สร้างความแตกต่างใด ๆ การรวมขอบเขตด้วยถังขยะไม่ใช่ตัวเลือกเพราะนอกเหนือจากจอแอลซีดีขอบเขตที่รู้สึกเหมือนเป็นขุมทรัพย์ที่แน่นอน แม้ว่าคณะกรรมการคนขับรถของจอแอลซีดีจะไร้ประโยชน์อย่างสมบูรณ์ในตอนนี้ แต่ก็มาจากช่วงเวลาที่อุตสาหกรรมยังไม่ได้ย้ายเข้าสู่สนาม Pin Subatomic บนตัวเชื่อมต่อแบบลวดต่อบอร์ด นี่หมายความว่าฉันสามารถบัดกรีได้อย่างสะดวกบนเคเบิลทีวีริบบิ้น 26 พินแบบธรรมดาเพื่อแตะสัญญาณที่ต้องการทั้งหมดและเริ่มต้นกระบวนการของวิศวกรรมย้อนกลับในการใช้งาน
วิศวกรรมย้อนกลับโปรโตคอล LCD
เคเบิลริบบิ้นทีวีบัดกรีที่ด้านบนของขั้วต่อที่มีอยู่
ขั้นตอนแรกของกระบวนการคือการระบุสัญญาณบนขั้วต่อ ฉันกำลังมองหาชุดสัญญาณทั่วไปที่จำเป็นในการขับ LCD ใด ๆ สิ่งนี้ควรรวมถึงสัญญาณเป็นระยะอย่างเคร่งครัดสองสามเป็นสัญญาณที่ค่อนข้างสุ่มและนอกระบบและพื้นดินทั่วไป สัญญาณเป็นระยะ ๆ อาจเป็นนาฬิกาพิกเซลและสัญญาณการซิงโครไนซ์ซึ่งจะทำเครื่องหมายจุดเริ่มต้นของบรรทัดใหม่และกรอบ ในทางตรงกันข้ามสัญญาณที่ดูแบบสุ่มจะเป็นข้อมูลพิกเซลที่แท้จริงที่จะแสดง การตัดสินโดยอายุที่คาดว่าจะเป็นโปรโตคอลที่ค่อนข้างง่าย แนะนำโดยสัญชาตญาณนี้ฉันเริ่มตรวจสอบขั้วต่อและในไม่ช้าฉันก็มีสัญญาณทั้งหมด 25 สัญญาณที่คิดออกมา
ฉันพบเพียงสองสัญญาณเป็นระยะ ๆ : หนึ่งสัญญาณที่ค่อนข้างต่ำ 31.25 KHZ ที่มีรั้วรอบขอบชิดที่น่าสงสัย 60 Hz และอีกคลื่นวิทยุ 25 MHz อดีตต้องเป็นสัญญาณการซิงโครไนซ์แบบบูรณาการ 60 เฮิร์ตซ์เป็นของแถมที่ตายแล้วตามที่สอดคล้องกับอัตราเฟรมเล็กน้อย สัญญาณพื้นฐาน 31.25 KHz ควรสอดคล้องกับอัตราบรรทัดแนวนอนภายในกรอบ ในที่สุดสัญญาณ 25 MHz จะต้องเป็นนาฬิกาสำหรับระบบทั้งหมดในความเป็นจริงมันเป็นนาฬิกาพิกเซล
ต่อไปฉันต้องเข้าใจสัญญาณที่ดูสุ่มซึ่งเห็นได้ชัดว่าเป็นข้อมูลพิกเซล ประการแรกความต้องการของขั้วต่อ 25 พินได้อย่างชัดเจนถึงการกำหนดค่า RGB แบบขนานอย่างชัดเจน โดยรวมแล้วฉันพบสัญญาณดังกล่าวเก้าสัญญาณที่แบ่งด้วยสามอย่างได้อย่างสมบูรณ์แบบและปิดที่ LCD ใช้เก้าบิตต่อพิกเซลและสามบิตต่อช่องสี R, G และ B ตามลำดับ
ตัวอย่าง: โครงการ VGA Patio
การหารูปแบบและการปักหมุดเป็นส่วนหนึ่งของความท้าทาย อาจเป็นสิ่งจำเป็นมากขึ้นคือการหาเวลาที่ใช้ในการใช้งาน เกือบทุกครั้งสัญญาณการแสดงผลดิบมีสิ่งที่เรียกว่า “Porches” สิ่งเหล่านี้สามารถคิดได้ว่าเป็นภูมิภาคภายในแต่ละเฟรมที่ไม่สามารถเขียนข้อมูลได้ สิ่งเหล่านี้เกิดขึ้นในวันของ CRT ที่ลำแสงทางกายภาพของอิเล็กตรอนใช้เวลาในการกวาดจากจุดสิ้นสุดของเส้นกลับไปที่จุดเริ่มต้นของอีกหรือแม้กระทั่งจากด้านล่างของหน้าจอไปด้านบน แม้ว่าจะเด่นชัดน้อยกว่าในหน้าจออิเล็กทรอนิกส์ที่ทันสมัยภูมิภาคเหล่านี้ยังคงมีอยู่เนื่องจากตัวควบคุม LCD ใช้เวลาในการประมวลผลและการสับข้อมูลที่เข้ามา
การกำหนดการกำหนดเวลา
ในการแยกการกำหนดเวลาฉันพยายามที่จะเชื่อมโยงข้อมูลพิกเซลกับสัญญาณการซิงโครไนซ์ ฉันกำลังค้นหาภูมิภาคใด ๆ ที่พิกเซลไม่มีการเอาใจใส่อย่างต่อเนื่อง
การกำหนดเวลาแนวนอน
หลังจากจ้องมองที่ข้อมูลสักพักแล้วมันก็ชัดเจนว่าจอแอลซีดีใช้รูปแบบนอกชานที่เรียบง่ายเดี่ยวทั้งในแนวนอนและแนวตั้งของสัญญาณการซิงค์แบบบูรณาการ นี่เป็นเรื่องง่ายที่จะระบุเพราะพิกเซลถูกตั้งค่าให้ทั้งสูงหรือต่ำทั้งหมดในช่วงเวลานี้ เมื่อฉันระบุภูมิภาคเหล่านี้ฉันใช้เคอร์เซอร์เพื่อวัดระยะเวลาของพวกเขาและแปลเวลานั้นเป็นจำนวนพิกเซลที่เทียบเท่า
นี่เป็นข้อมูลสำคัญที่จะรับประกันการสืบพันธุ์ที่มั่นคงและเหมาะสมกับจอภาพ VGA แผนคือการป้อนค่าเหล่านี้เป็นค่าคงที่เป็น Verilog และใช้ตัวนับเพื่อ “การเดินทาง” ตรรกะที่สอดคล้องกันเพื่อให้บรรลุรูปคลื่นที่ต้องการ
เวลาในแนวตั้ง
สุดท้ายความละเอียดของ LCDS จะต้องระบุเนื่องจากฉันจะต้องเรียกใช้จอมอนิเตอร์ทดแทนที่การตั้งค่าเดียวกัน สิ่งนี้ทำโดยเพียงแค่วัดช่วงเวลาที่ใช้งานต่าง ๆ และเปรียบเทียบกับสัญญาณอื่น ๆ เช่นนาฬิกาพิกเซลที่มีช่วงเวลา 40 น. เวลาที่ใช้งานในแนวนอนถูกกำหนดให้อยู่ที่ประมาณ 25.7 เราจึงมีจำนวน 642.5 พิกเซลและในทำนองเดียวกันในระยะเวลาที่ใช้งานในแนวดิ่งคือ 15.42 ms และมีระยะเวลาในแนวนอน 30 US ซึ่งสอดคล้องกับ 481 บรรทัด เห็นได้ชัดว่านี่เป็นจอแสดงผล 640 x 480 แบบธรรมดาที่มีอัตราการฟื้นฟู 60 Hz
การค้นหาสิ่งทดแทนที่สามารถทำได้
พระผู้ช่วยให้รอด 8 นิ้ว
ดังนั้นจอแสดงผลที่มีอยู่ [กลายเป็น] ค่อนข้างธรรมดาในตอนท้ายและการเปลี่ยนดูเหมือนจะเป็นไปได้อย่างสิ้นเชิง น่าเสียดายที่ขนาดค่อนข้างแปลก ง่ายต่อการค้นหาหน้าจอเจ็ดนิ้ว แต่แปดหรือไม่ แม้ว่าฉันจะไม่พบการเปลี่ยนสินค้าที่ค่อนข้างมีราคาเท่ากันบนเว็บขนาดที่เพิ่งเกิดขึ้นจะเหมือนกับที่ใช้โดยการติดตั้ง LCD ที่ทันสมัยในตลาดรถยนต์ เหล่านี้เป็นหน้าจอคุณภาพสูง “Eyoyo” ที่มีค่าใช้จ่ายต่ำ (£ 50) และยอมรับการพัฒนาวิดีโอทั้งหมดอย่างแท้จริงจากอะนาล็อกทั้งหมดไปยัง VGA และแม้แต่ HDMI พวกเขายังสนับสนุนความละเอียดที่สูงขึ้นมากถึง 1024 * 768 ฉันประหลาดใจที่หน้าจอนี้ไม่เป็นที่นิยมอย่างมากในชุมชน Raspberry Pi
ในที่สุดทุกอย่างดูเหมือนจะคลิกด้วยกัน ไม่เพียง แต่ฉันจะเปลี่ยนจอแอลซีดีด้วยจอภาพ VGA นี้มันจะพอดีกับขอบเขตที่มีพื้นที่เพียงพอสำหรับ CRT!
ดังนั้นอย่างแน่นอนว่ามีการแปลง LCD เป็น VGA อย่างไร ด้วย FPGA แน่นอน!
การแปลงสัญญาณ
ณ จุดนี้สิ่งเดียวที่ยืนอยู่ระหว่างฉันกับขอบเขตการทำงาน 500 MHz ได้รับการแปลงสัญญาณ LCD ที่กล่าวถึงก่อนหน้านี้เป็น VGA เป็นที่ชัดเจนว่าการประมวลผลที่ค่อนข้างรวดเร็วสามารถทำได้ใน FPGA เท่านั้น แต่ยังเป็นแบบไหน? วัตถุประสงค์ของฉันคือในบางจุดทิ้ง FPGA ไว้ในขอบเขตด้วยหน้าจอดังนั้นฉันต้องการบางสิ่งเล็ก ๆ และราคาถูก โชคดีที่ eBay ดูเหมือนจะมีกระดานพัฒนา Altera Cyclone II เก่าเหล่านี้เป็นจำนวนมากสำหรับใจที่เหลือเชื่อ 10 ปอนด์! เหล่านี้ค่อนข้างมีความสามารถของ FPGA ถือองค์ประกอบตรรกะ 4K และเหมาะสมที่สุดสำหรับโครงการขนาดเล็กเช่นนี้
วิธีทั่วไปการแปลงจอแสดงผลเหล่านี้จะทำคือการใช้เฟรมบัฟเฟอร์ ความคิดคือการบัฟเฟอร์ทั้งเฟรมดำเนินการแปลงและถ่มน้ำลายออกไปที่ปลายอีกด้านหนึ่ง น่าเศร้าที่การเรียกนี้สำหรับ RAM ภายนอกขนาดที่น่านับถือบน FPGA บอร์ด FPGA เหล่านี้มีชื่อเสียงในการไม่มี RAM ภายนอกใด ๆ ดังนั้นรูปแบบนี้จึงไม่อยู่ในคำถาม หลังจากคิดเล็กน้อยฉันเกี่ยวข้องกับการตระหนักว่าสัญญาณ LCD และ VGA นั้นไม่เหมือนกันหลังจากทั้งหมด จะเกิดอะไรขึ้นถ้าฉันสามารถแปลงจากที่หนึ่งเป็นหนึ่งไปยังพื้นฐานบรรทัดออนไลน์และหลีกเลี่ยงความต้องการบัฟเฟอร์เฟรมทั้งหมด?
การเปรียบเทียบ: VGA VS LCD แผนภาพนี้ใช้กับทั้งเซ็กเมนต์แนวนอนและแนวตั้ง
สรุป:
LCD มี:
นาฬิกาพิกเซล
สัญญาณการซิงโครไนซ์แบบรวม
หน้าเฉพาะ
ในขณะที่ VGA มี:
ไม่มีนาฬิกาพิกเซล
สัญญาณการซิงโครไนซ์แยกต่างหาก
ลานด้านหน้าและด้านหลังพร้อมช่วงเวลาการซิงโครไนซ์
สัญญาณการซิงโครไนซ์แบบบูรณาการ
จะมีรายละเอียดว่างาน VGA อยู่นอกเหนือขอบเขตของบทความนี้ แต่ฉันจะแก้ไขในภายหลัง สำหรับตอนนี้ถ้าเราเพียงแค่ตรวจสอบสเก็ตช์ Timing เราจะเห็นว่าความแตกต่างเพียงอย่างเดียวระหว่างสัญญาณทั้งสองคือจำนวนการเกิดขึ้นและตำแหน่งของระเบียงและตำแหน่งของข้อมูลที่ถูกต้อง
ภาพร่างทำให้การแปลงดูง่าย แต่ใช้ได้เฉพาะเมื่อสองเฟรมอยู่ในซิงค์ที่สมบูรณ์ เพื่อบอก FPGA เพื่อเริ่มผลิตกรอบจอแอลซีดีที่สอดคล้องกันมากกว่า VGA เราควรระบุจุดเริ่มต้นของเฟรมใหม่ที่มาจากตัวเชื่อมต่อ LCD เพื่อให้เราสามารถซิงค์กับมันได้ นี่เป็นส่วนที่ยากที่สุดของกระบวนการเพราะเพียงตรวจสอบขอบของสัญญาณการซิงโครไนซ์แบบบูรณาการจาก LCD ไม่เพียงพอ
เราควรวัดเวลาระหว่างสองขอบและตั้งค่าสถานะการเกิดขึ้นของเฟรมใหม่ ส่วนที่เหลือเป็นชุดประตูตรรกะที่ค่อนข้างตรงไปตรงมาที่สร้างแผนภาพการจับเวลาข้างต้น สุดท้ายเนื่องจากจอแอลซีดีไม่มีลานด้านหลังหรือซิงค์ชีพจรข้อมูล RGB ที่เข้ามาควรจะสมดุลในเวลาที่ใช้ FIFO เล็ก ๆ เพื่อให้สอดคล้องกันอย่างสมบูรณ์แบบที่จอภาพ VGA คาดหวังไว้ เมื่อเทียบกับ verilog ข้างต้นเสร็จสมบูรณ์ฉันดำเนินการจัดการกับฮาร์ดแวร์
การตั้งค่าฮาร์ดแวร์
การตั้งค่าฮาร์ดแวร์
การกำหนดค่าฮาร์ดแวร์โชคดีที่เรียบง่ายมาก HP ไม่ได้ใช้ LCD ที่มีศักยภาพอย่างเต็มที่ การตรวจสอบแต่ละบิตของ eช่อง ACH เปิดเผยความซ้ำซ้อนจำนวนมาก: บิตต่าง ๆ นั้นเหมือนกันเสมอแสดงให้เห็นถึงการใช้จานสีเก้าบิตที่ตื้นมาก สิ่งนี้ไม่น่าตกใจเมื่อ HP ส่วนใหญ่ใช้เฟิร์มแวร์จากรุ่น CRT ของรุ่น CRT ทั้งหมดนี้บอกเป็นนัยว่าฉันได้รับเพียงแค่เชื่อมต่อ MSB ของแต่ละช่องสีด้วยการสูญเสียในภาพสุดท้าย สิ่งนี้ช่วยให้ฉันได้รับความทรงจำที่มีค่ามากขึ้นบน FPGA
ปัญหาที่สำคัญที่สุดคือ LCD ใช้สัญญาณ TTL 5 V FPGA สามารถยอมรับได้ที่สัญญาณ 3.3 V ที่ดีที่สุดดังนั้นจึงต้องทำการแปลงระดับ ฉันเลือกที่จะใช้ประโยชน์จากไดโอดหนีบอินพุตในบัฟเฟอร์ตรรกะซีรีส์ 74HC เพื่อดำเนินการแปลงนี้ สิ่งนี้มีแนวโน้มที่จะทำลายการเพิ่มขึ้น / ล้มลงอย่างมากแม้ว่า ตัวอย่างเช่น 74HC4050 แม้จะมีตัวต้านทานโพลีซิลิคอนในซีรีส์ที่มีไดโอดในการตายแทนที่ความต้องการตัวต้านทานซีรีย์ภายนอก ฉันเล่นให้ปลอดภัยและเพิ่มตัวต้านทานซีรีย์ 1 kωต่ออินพุตของบัฟเฟอร์เหล่านี้และเอาท์พุทถูกป้อนเข้าสู่ FPGA เอาต์พุตของเอาท์พุต HSYNC และ VSync ของ FPGA ถูกเชื่อมต่อโดยตรงกับจอภาพในขณะที่บรรทัด RGB เชื่อมโยงผ่านตัวต้านทาน 330 ω
ความสำเร็จ
ความสำเร็จ!
หลังจากฝึกฝนนาฬิกาพิกเซล 25 MHz ให้ทำงานบนเขียงหั่นขนมและเชื่อมต่อ FPGA กับภายนอกใหม่
พอร์ต VGA ของจอภาพขอบเขตถูกนำกลับไปสู่สง่าราศีอย่างเป็นทางการ! แม้ว่าทุกอย่างทำงานได้อย่างสมบูรณ์แบบการตั้งค่านี้ค่อนข้างคว่ำบาตร สิ่งที่ฉันต้องทำตอนนี้คือการสร้าง PCB และให้การตรวจสอบ VGA เป็นที่อยู่อาศัยถาวรภายในขอบเขต
แล้วคุณถามอะไรต่อไป ขณะนี้วิธีเดียวที่จะบันทึกภาพหน้าจอคือผ่านฟลอปปี้ไดรฟ์วันที่ แต่ตอนนี้เรามีข้อมูล LCD ที่ผ่าน FPGA แล้วทำไมไม่เขียนถึงการ์ด SD