เมื่อออกแบบอุปกรณ์ที่ใช้ ARM ซึ่งควรแสดงกราฟิกที่เรียบง่ายบน LCD สีวิธีที่ดีที่สุดในการออกแบบสิ่งต่าง ๆ เพื่อให้สามารถอัปเดตอย่างรวดเร็วโดยไม่ต้องเชื่อมโยงกับผู้จำหน่าย ARM หรือ LCD โดยเฉพาะ โครงการปัจจุบันของฉันใช้จอแสดงผลขาว - ดำซึ่งสามารถขับเคลื่อนสายฟ้าได้อย่างรวดเร็วโดยพอร์ต SPI บน PIC (วาดใหม่จอแสดงผลที่ซับซ้อนใน 1/60 วินาที) ดูเหมือนว่าหน้าจอ LCD สีทั่วไปนั้นมีพอร์ต SPI แต่ถึงกระนั้นการเติม 160x120 LCD ด้วยสีทึบจะใช้เวลา 30ms และ 320x240 จะใช้ 120-case ที่ดีที่สุด (10MHz shift clock)
ถ้าใครสามารถสำรองพินคอนโทรลเลอร์ได้โหมดแบบขนานอาจดีกว่า แต่ฉันไม่รู้วิธีการเชื่อมต่อแบบขนานโดยไม่ต้องอาศัยครอบครัวโดยไม่ต้องใช้คำแนะนำในการเก็บหน่วยความจำสามชุดสำหรับแต่ละพิกเซล (หนึ่งเพื่อตั้งค่าข้อมูล หนึ่งเพื่อตั้งค่าเอาต์พุตนาฬิกาสูงและอีกหนึ่งนาฬิกาเป็นนาฬิกาต่ำ) ชิป ARM บางตัวมีอินเทอร์เฟซบัสหน่วยความจำ แต่ผู้ที่มักต้องการทำสิ่งต่าง ๆ เช่นมัลติเพล็กซ์และข้อมูลหรือส่งพินจำนวนมากเพื่อส่งบิตที่อยู่ที่ไม่เกี่ยวข้อง (LCD ต้องการบิตที่อยู่หนึ่งอัน)
การดู ILI9320 โดย ILITEK หรือ HD66789 โดย Renesas วิธีหนึ่งที่น่าสนใจก็คือการใช้ CPLD ในการแปลง SPI เป็นข้อมูลแบบขนานและรวมโหมดที่จะส่งออกพิกเซลต่อบิต การดูแผ่นข้อมูล Renesas อาจเป็นไปได้ที่จะได้รับการเขียนพิกเซลต่อบิตด้วยฮาร์ดแวร์น้อยที่สุด (ไม่จำเป็นต้องมี CPLD) โดยการทำให้บิตข้อมูลพอร์ตขนานพอร์ตทั้งหมดติดตามบิตข้อมูลอนุกรมโดยใช้โหมดอนุกรมสำหรับทุกอย่างยกเว้นพิกเซล เขียนและใช้ฟังก์ชั่นเปรียบเทียบ / หน้ากากเพื่อให้พิกเซลทั้งหมดเป็นศูนย์จะโปร่งใสและพิกเซลทั้งหมดจะตั้งบิตที่เลือกใน GRAM หรือพิกเซลทั้งหมดจะโปร่งใสและพิกเซลทั้งหมดจะล้างบิตที่เลือก ส่วน "คุณสมบัติ" ของแผ่นข้อมูล IKITEK แสดงให้เห็นว่ามันมีฟังก์ชั่นที่คล้ายกัน แต่การลงทะเบียนแมปไม่ได้
สมมติว่ารหัสส่วนใหญ่แสดงข้อความและกราฟิกสีทึบวิธีที่ดีที่สุดน่าจะเป็นการใช้ CPLD เพื่อเชื่อมต่อพอร์ต SPI ของ ARM ไปยังพอร์ตขนานของจอแสดงผลและอนุญาตให้โหลด CPLD ด้วยสีพื้นหน้า / พื้นหลัง นี่จะดีเป็นพิเศษหากมีวิธีเขียนพิกเซลแบบ "โปร่งใส" เมื่อกำหนดแบบอักษรเป็นบิตแมปสองสีเราสามารถโหลดข้อมูลแบบอักษรลงในพอร์ต SPI ได้โดยตรง สิ่งนี้จะทำให้สามารถแสดงข้อมูลตัวอักษรในอัตราพิกเซลหนึ่งตัวทุกนาฬิกา ARM สองนาฬิกา ในทางกลับกัน CPLD เพียงพอที่จะจัดการกับงานควบคุมการแสดงผลจะมีราคาประมาณ $ 2
วิธีที่ดีที่สุดในการเชื่อมต่อ ARM กับ LCD สีคืออะไรหากวัตถุประสงค์หลักคือเพื่อแสดงข้อความสีทึบหรือกราฟิกที่เรียบง่าย (เช่น 16 สีหรือ 64 สี) กราฟิก?
แก้ไข
ฉันได้ทำโครงการแสดงผล LCD หลายแห่งด้วย LCD หลายประเภทรวมถึง LCD โหมดตัวละคร, เซ็กเมนต์แบบมัลติเพล็กซ์แบบ 3: 1 ที่กำหนดเองโดยใช้วิธีการขับเคลื่อนของฉันเอง, แอลซีดีกราฟิกขาวดำที่มีคอนโทรลเลอร์ในตัวและดำและ - LCD สีขาวที่ฉันออกแบบตัวควบคุมที่ใช้ CPLD ของฉันเองเพื่อเชื่อมต่อกับ DMA ที่ใช้งานทั่วไปของไมโครคอนโทรลเลอร์ (ให้ระดับสีเทาสี่ระดับ) ฉันภูมิใจในการทำให้การแสดงมีกำลังใจ หนึ่งในคอนโทรลเลอร์กราฟิกคือบิตของสุนัขที่ต้องใช้เวลาประมาณ 1/10 วินาทีในการรีเฟรชแบบเต็มหน้าจอแม้ในขณะที่เขียนข้อมูลคงที่ แต่หน้าจอส่วนใหญ่ของฉันสามารถแสดงภาพที่ค่อนข้างซับซ้อนภายในเวลาไม่ถึง 1/50 วินาที
หลายโครงการที่ฉันทำใช้พลังงานจากแบตเตอรี่ดังนั้นการวาดปัจจุบันจึงเป็นปัญหา คอนโทรลเลอร์จอแสดงผลที่ใช้ DMA ฉันทำงานได้ดี แต่มันเป็นโปรเจ็กต์ที่ขับเคลื่อนด้วยสาย ฉันเชื่อว่าวิธีเดียวที่จะได้รับกระแสไฟที่สมเหตุสมผลจากกราฟิก LCD คือการใช้คอนโทรลเลอร์ที่รวมบัฟเฟอร์การแสดงผลและไดรเวอร์คอลัมน์ การส่งการแสดงผลจำนวนมากระหว่างชิปทุกเฟรมจะทำให้สิ้นเปลืองพลังงานมากแม้แต่ในการแสดงผลบิตต่อพิกเซล บนหน้าจอสีที่มีสิบหกบิตต่อพิกเซลมันจะแย่กว่ามาก
ฉันเริ่มดูแผ่นข้อมูล LCD สีเท่านั้น จอแสดงผลจำนวนมากดูเหมือนจะใช้คอนโทรลเลอร์คล้ายกับ ILITEK ILI9320 แม้ว่าแผ่นข้อมูลทั้งหมดที่ฉันพบสำหรับคอนโทรลเลอร์ตามการออกแบบทั่วไปนั้นจะมีการทำเครื่องหมายว่า "เบื้องต้น" บางอย่างเช่น ILITEK หนึ่งอ้างว่ามีคุณสมบัติการปกปิดและความโปร่งใส แต่ไม่แสดงรายการการลงทะเบียนใด ๆ สำหรับพวกเขา ฉันไม่ทราบว่าชิปจริงมีคุณสมบัติดังกล่าวหรือไม่ แต่แผ่นข้อมูล "เบื้องต้น" ถูกละเลยไม่ให้รวมพวกเขาหรือว่าพวกเขาละทิ้งคุณลักษณะ แต่ลืมที่จะกล่าวถึงพวกเขา หากในทางปฏิบัติชิปดังกล่าวทั้งหมดมีคุณสมบัติที่โปร่งใสดูเหมือนว่าสมเหตุสมผลในการออกแบบสำหรับพวกเขา ถ้าไม่ไม่
ฉันคาดหวังว่าสำหรับโครงการส่วนใหญ่หน้าจอทั่วไปจะประกอบด้วยข้อความที่วางโดยพลการในขนาดฟอนต์สีทึบตามอำเภอใจในระดับปานกลาง แบบอักษรน่าจะถูกจัดเก็บเป็นข้อมูลบิตต่อพิกเซล การใช้ Cortex-M3 ถ้าฉันต้องการเขียนจอแสดงผลด้วยข้อมูลแบบขนานรหัส "วงใน" ในการเขียนสองพิกเซลน่าจะเป็นสิ่งที่ต้องการ:
rol r0, r0, # 2; รับหนึ่งบิตใน C, อีกอันใน N ITCS strhcs r1, [r3, # DATA_OFS]; เขียนข้อมูล strhcc r2, [r3, # DATA_OFS]; เขียนข้อมูล strb r4, [r3, # CLOCK_SET_OFS]; ตั้งนาฬิกาสูง strb r4, [r3, # CLOCK_CLR_OFS]; ตั้งนาฬิกาต่ำ ITMI strhmi r1, [r3, # DATA_OFS]; เขียนข้อมูล strhpl r2, [r3, # DATA_OFS]; เขียนข้อมูล strb r4, [r3, # CLOCK_SET_OFS]; ตั้งนาฬิกาสูง strb r4, [r3, # CLOCK_CLR_OFS]; ตั้งนาฬิกาต่ำ
ไม่ใช่สิ่งที่เร็วที่สุดในโลก การกำจัดการเขียนลงในคำแนะนำการตั้งค่า / ล้างนาฬิกาจะช่วยได้ ฉันเดาว่าจะไม่มีวิธีสถาปัตยกรรมที่เป็นอิสระที่ดีในการกำจัดการเขียนทั้งสองนาฬิกา แต่อาจมีวิธีที่ค่อนข้างธรรมดาที่จะอนุญาตให้กำจัดหนึ่ง (เช่นชิปจำนวนมากอาจมีเคาน์เตอร์ / PWM ที่สามารถทำให้ชีพจรเอาท์พุท สั้น ๆ เพื่อตอบสนองการทำงานของหน่วยความจำเดียว)
การใช้พอร์ต SPI และการเพิ่มฮาร์ดแวร์เข้ากับนาฬิกาหนึ่งพิกเซลต่อบิตจะช่วยเพิ่มความเร็วในการเข้าถึงการแสดงผลอย่างมาก หากใช้จอแสดงผลโดยไม่ปิดบังและโปร่งใส CPLD จะต้องรวมตัวนับที่อยู่และสำหรับแต่ละพิกเซลจะแสดงคำของข้อมูลพิกเซลหรือสำหรับคำสั่ง set-address สำหรับตำแหน่งพิกเซลต่อไปนี้ (ซึ่งต้องใช้ตัวนับ ) ในทางตรงกันข้ามหากจอแสดงผลมีการปิดบังและความโปร่งใสสิ่งที่ฉันต้องทำก็คือให้ CPLD รองรับโหมดที่หลังจากที่มีการโอเวอร์คล็อกใน 16 บิตแต่ละบิตเพิ่มเติมจะรับสัญญาณข้อมูลไปยังจอแสดงผลด้วย LSB ติดตามพิน SDI (อาจไม่จำเป็นต้องใช้ CPLD - เพียงแค่ชิปลอจิกทั่วไปบางตัว) ฉันจะตั้งค่าความโปร่งใสของสีเป็นสีที่ฉันต้องการเขียน แต่เมื่อ LSB พลิก
ฉันไม่ต้องการมาด้วยการออกแบบที่สวยงามซึ่งอาศัยการปกปิดและความโปร่งใสแล้วพบว่าจอแสดงผลที่มีคุณสมบัติดังกล่าวเท่านั้นมีเวลานำ 30 สัปดาห์ ในทางกลับกันถ้าจอแสดงผลดังกล่าวเหมาะสมและพร้อมใช้งานอย่างกว้างขวางจากผู้ขายหลายรายฉันไม่ต้องการให้ความหวาดระแวงเกี่ยวกับความพร้อมใช้งานทำให้ฉันใช้การออกแบบที่ด้อยกว่า