สารบัญ:

จอแสดงผลกระจก: 8 ขั้นตอน
จอแสดงผลกระจก: 8 ขั้นตอน

วีดีโอ: จอแสดงผลกระจก: 8 ขั้นตอน

วีดีโอ: จอแสดงผลกระจก: 8 ขั้นตอน
วีดีโอ: เปิดเผยการลอกกระจกทุกขั้น แบบไหนลอกกระจกได้ แบบไหนต้องเปลี่ยนจอชุด ดูคลิปนี้จบรู้เลย !! 2024, กรกฎาคม
Anonim
จอแสดงผลกระจก
จอแสดงผลกระจก
จอแสดงผลกระจก
จอแสดงผลกระจก
จอแสดงผลกระจก
จอแสดงผลกระจก

เป้าหมายของโครงการนี้คือการสร้างฟังก์ชันการแสดงรูปภาพของ Smart Mirror กระจกสามารถแสดงการคาดการณ์ (แดดจัด แดดจัดเป็นบางส่วน เมฆมาก ลมแรง ฝน ฟ้าคะนอง และหิมะ) และค่าอุณหภูมิตั้งแต่ -9999° ถึง 9999° ค่าพยากรณ์และอุณหภูมิมีฮาร์ดโค้ดเสมือนว่าจำลองค่าที่แยกวิเคราะห์จาก API สภาพอากาศ

โปรเจ็กต์นี้ใช้บอร์ด Zynq-Zybo-7000 ที่ใช้งาน FreeRTOS และใช้ Vivado 2018.2 เพื่อออกแบบและตั้งโปรแกรมฮาร์ดแวร์

อะไหล่:

Zynq-Zybo-7000 (พร้อม FreeRTOS)

จอแอลซีดี 19 (640x480)

สาย VGA

กระจกอะคริลิค 12" x 18"

ขั้นตอนที่ 1: กำหนดค่า Vivado

การกำหนดค่า Vivado
การกำหนดค่า Vivado
การกำหนดค่า Vivado
การกำหนดค่า Vivado

ดาวน์โหลด Vivado 2018.2 จาก Xilinx และใช้ใบอนุญาต Webpack เปิดตัว Vivado และ "สร้างโครงการใหม่" และตั้งชื่อ จากนั้นเลือก "โครงการ RTL" และเลือก "ไม่ต้องระบุแหล่งที่มาในเวลานี้" เมื่อเลือกชิ้นส่วน ให้เลือก "xc7z010clg400-1" และกด "Finish" ในหน้าถัดไป

ขั้นตอนที่ 2: บรรจุ IP ไดรเวอร์ VGA

บรรจุภัณฑ์ VGA ไดร์เวอร์ IP
บรรจุภัณฑ์ VGA ไดร์เวอร์ IP
บรรจุภัณฑ์ VGA ไดร์เวอร์ IP
บรรจุภัณฑ์ VGA ไดร์เวอร์ IP

เพิ่มไฟล์ vga_driver.sv ไปยัง Design Sources จากนั้น คลิก "เครื่องมือ" และเลือก "สร้างและจัดแพ็คเกจ IP ใหม่" เลือก "จัดแพ็คเกจโครงการปัจจุบันของคุณ" จากนั้นเลือกตำแหน่ง IP และ "รวมไฟล์.xci" คลิก "ตกลง" ในป๊อปอัปแล้วคลิก "เสร็จสิ้น"

ใน "ขั้นตอนการบรรจุ" ไปที่ "ตรวจสอบและบรรจุภัณฑ์" และเลือก "IP ของแพ็คเกจ"

ตอนนี้ vga_driver ควรพร้อมใช้งานเป็นบล็อก IP

ขั้นตอนที่ 3: Zynq IP

Zynq IP
Zynq IP
Zynq IP
Zynq IP
Zynq IP
Zynq IP
Zynq IP
Zynq IP

ในส่วน "IP Integrator" ให้เลือก "สร้างการออกแบบบล็อก" เพิ่ม "ระบบประมวลผล ZYNQ7" และดับเบิลคลิกที่บล็อก คลิก "นำเข้าการตั้งค่า XPS" และอัปโหลดไฟล์ ZYBO_zynq_def.xml

ถัดไป ภายใต้ "การกำหนดค่า PS-PL" ให้เปิดเมนูแบบเลื่อนลงสำหรับ "การเปิดใช้งาน AXI Non Secure" และเลือก "อินเทอร์เฟซ M AXI GP0"

ถัดไป ภายใต้ "การกำหนดค่า MIO" ให้เปิดเมนูแบบเลื่อนลงสำหรับ "Application Processor Unit" และทำเครื่องหมายที่ "Timer 0" และ "Watchdog"

สุดท้าย ภายใต้ "การกำหนดค่านาฬิกา" ให้เปิดเมนูแบบเลื่อนลงสำหรับ "PL Fabric Clocks" และทำเครื่องหมายที่ "FCLK_CLK0" และที่ 100 MHz

ขั้นตอนที่ 4: GPIO IP

GPIO IP
GPIO IP
GPIO IP
GPIO IP

เพิ่มสองบล็อก GPIO ให้กับการออกแบบบล็อก GPIO จะถูกใช้เพื่อควบคุมที่อยู่พิกเซลและส่วนประกอบ RGB ของพิกเซล กำหนดค่าบล็อกตามที่แสดงในภาพด้านบน เมื่อคุณเพิ่มและกำหนดค่าทั้งสองบล็อกแล้ว คลิก "เรียกใช้การเชื่อมต่ออัตโนมัติ"

GPIO 0 - ช่อง 1 ควบคุมที่อยู่พิกเซลและช่อง 2 ควบคุมสีแดง

GPIO 1 - ช่อง 1 ควบคุมสีเขียวและช่อง 2 ควบคุมสีน้ำเงิน

ขั้นตอนที่ 5: บล็อกหน่วยความจำ

บล็อกหน่วยความจำ
บล็อกหน่วยความจำ
บล็อกหน่วยความจำ
บล็อกหน่วยความจำ
บล็อกหน่วยความจำ
บล็อกหน่วยความจำ

เพิ่ม IP ตัวสร้างหน่วยความจำบล็อกให้กับการออกแบบบล็อกและกำหนดค่าดังที่แสดงด้านบน สีพิกเซลจะถูกเขียนไปยังที่อยู่หน่วยความจำซึ่งไดรเวอร์ VGA จะอ่าน บรรทัดที่อยู่ต้องตรงกับจำนวนพิกเซลที่ใช้ ดังนั้นต้องเป็น 16 บิต ข้อมูลในยังเป็น 16 บิตเนื่องจากมีบิตสี 16 บิต เราไม่สนใจเกี่ยวกับการอ่านบิตรับทราบ

ขั้นตอนที่ 6: IP อื่น

pdf ที่แนบมาแสดงการออกแบบบล็อกที่เสร็จสมบูรณ์ เพิ่ม IP ที่ขาดหายไปและเชื่อมต่อให้สมบูรณ์ นอกจากนี้ "สร้างภายนอก" สำหรับเอาต์พุตสี VGA และเอาต์พุตการซิงค์แนวตั้งและแนวนอน

xlconcat_0 - เชื่อมแต่ละสีเข้าด้วยกันเพื่อสร้างสัญญาณ RGB 16 บิตที่ป้อนเข้าไปใน Block RAM

xlconcat_1 - เชื่อมสัญญาณคอลัมน์และแถวจากไดรเวอร์ VGA และป้อนเข้าในพอร์ต B ของ Block RAM ซึ่งช่วยให้ไดรเวอร์ VGA อ่านค่าสีพิกเซลได้

VDD - Constant HIGH เชื่อมต่อกับการเปิดใช้งานการเขียนของ Block RAM เพื่อให้เราสามารถเข้าถึงมันได้ตลอดเวลา

xlslice_0, 1, 2 - สไลซ์ใช้เพื่อแยกสัญญาณ RGB ออกเป็นสัญญาณ R, G และ B แต่ละตัวที่สามารถป้อนลงในไดรเวอร์ VGA

เมื่อการออกแบบบล็อกเสร็จสมบูรณ์ ให้สร้างแรปเปอร์ HDL และเพิ่มไฟล์ข้อจำกัด

*Block Design อิงจากบทช่วยสอนที่เขียนโดย benlin1994*

ขั้นตอนที่ 7: SDK

รหัสที่เรียกใช้การออกแบบบล็อกนี้รวมอยู่ด้านล่าง Init.c มีฟังก์ชันที่จัดการการวาด (การคาดการณ์ ตัวเลข สัญลักษณ์องศา ฯลฯ) ลูปหลักใน main.c คือสิ่งที่รันเมื่อตั้งโปรแกรมบอร์ด ลูปนี้ตั้งค่าการคาดการณ์และอุณหภูมิ จากนั้นเรียกใช้ฟังก์ชันการวาดใน init.c ปัจจุบันมีการวนซ้ำการคาดการณ์ทั้งเจ็ดและแสดงทีละรายการ ขอแนะนำให้เพิ่มจุดพักที่บรรทัดที่ 239 เพื่อให้เห็นภาพแต่ละภาพ รหัสถูกแสดงความคิดเห็นและจะให้ข้อมูลเพิ่มเติมแก่คุณ

ขั้นตอนที่ 8: สรุป

เพื่อปรับปรุงโครงการปัจจุบัน เราสามารถอัปโหลดภาพการคาดการณ์ล่วงหน้าในรูปแบบของไฟล์ COE ไปยัง Block Memory Generators ดังนั้น แทนที่จะวาดการคาดการณ์ด้วยตนเองเหมือนที่เราทำในโค้ด C เราอาจมีการอ่านรูปภาพ เราพยายามทำเช่นนี้แต่ไม่สามารถทำงานได้ เราสามารถอ่านค่าพิกเซลและส่งออกได้ แต่มันสร้างภาพที่ยุ่งเหยิงซึ่งไม่เหมือนกับที่เราอัปโหลดไปยัง RAM แผ่นข้อมูล Block Memory Generator มีประโยชน์ในการอ่าน

โปรเจ็กต์นี้เป็นเพียงครึ่งหนึ่งของสมาร์ทมิเรอร์เนื่องจากขาดการเชื่อมต่ออินเทอร์เน็ต การเพิ่มสิ่งนี้จะทำให้ Smart Mirror สมบูรณ์

แนะนำ: