การแสดงข้อความ / กราฟิกอย่างง่าย ๆ บนจอ LCD สีโดย ARM


12

เมื่อออกแบบอุปกรณ์ที่ใช้ 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 สัปดาห์ ในทางกลับกันถ้าจอแสดงผลดังกล่าวเหมาะสมและพร้อมใช้งานอย่างกว้างขวางจากผู้ขายหลายรายฉันไม่ต้องการให้ความหวาดระแวงเกี่ยวกับความพร้อมใช้งานทำให้ฉันใช้การออกแบบที่ด้อยกว่า


1
ไม่ใช่คำตอบเนื่องจากความต้องการของคุณรวมถึงไม่ได้ผูกติดอยู่กับผู้ขาย ARM แต่ไมโครคอนโทรลเลอร์ตระกูล LPC LH754xx มีตัวควบคุมแอลซีดีในตัว
Kevin Vermeer

@reemrevnivek: มีชิป ARM พร้อมไดรเวอร์ LCD ขนาดเล็กจำนวนหนึ่ง ฉันนึกภาพไม่ออกว่าชิปตัวใดที่มีไดรเวอร์ที่เหมาะสมกับจอแสดงผลกราฟิกขนาดใด ๆ ที่มีประโยชน์ซึ่งปรากฏอยู่ในแพ็คเกจที่สามารถใช้งานได้ในสิ่งอื่นนอกเหนือจากสถานการณ์แบบชิปบนกระจก ชิปอาจมีตัวควบคุม แต่จอแอลซีดีที่มีตัวควบคุมแบบเศษบนกระจกจะดูมีประสิทธิภาพด้านพลังงานและใช้งานได้ง่ายขึ้น ฉันจะตรวจสอบชิปที่คุณพูดถึง - อาจน่าสนใจ
supercat

@supercat - ฉันกำลังคิดถึงแอลซีดีที่มีอินเตอร์เฟซ RGB: นาฬิกาพิกเซล, ซิงค์เฟรมและบรรทัดควบคุมการซิงค์บรรทัดด้วยบัสข้อมูลพิกเซลแบบขนาน คุณคาดหวังที่จะใช้จอแสดงผลที่ควบคุมด้วย COG หรือไม่?
Kevin Vermeer

1
@reemrevnivek: นั่นคือสิ่งที่ฉันคิด พวกเขาดูเหมือนจะค่อนข้างธรรมดาเนื่องจากใช้ในอุปกรณ์พกพาแบตเตอรี่เช่นโทรศัพท์มือถือ จอแสดงผล COG พร้อมคอนโทรลเลอร์ในตัวกำลังจะมีประสิทธิภาพการใช้พลังงานมากกว่าจอภาพที่ต้องการข้อมูล RGB แบบต่อเนื่อง
supercat

@reemrevnivek: ฉันเพิ่งอัปเดตคำถามของฉันพร้อมรายละเอียดเพิ่มเติม
supercat

คำตอบ:


7

ปัญหาในการใช้ไมโครคอนโทรลเลอร์เพื่อขับ LCD คือ LCD ต้องการความสนใจอย่างต่อเนื่อง สิ่งนี้สามารถลดลงได้ด้วย CPLD ที่ขับเคลื่อน SPI (โดยใช้ DMA แน่นอน) แต่จากนั้นคุณก็พบปัญหาอื่น ๆ : LCD สีต้องการมากของข้อมูล 320x240 ในสีดำและสีขาวอยู่ที่ 9.6KB แต่ทำให้เป็นสี 24 บิตและในทันทีที่คุณต้องส่งข้อมูล 230KB ใน 1/60 วินาที (อย่าลืมว่าคุณสามารถรับการควบคุม 4 บิต 16 สีเพียงแค่ผูกค่าบิตต่ำ 20 ต่อการตั้งค่าเดียว) บัฟเฟอร์เฟรมแบบ 24 บิตไม่เหมาะกับ onboard RAM บนไมโครคอนโทรลเลอร์ส่วนใหญ่อีกต่อไปและคุณอาจไม่มีเวลาอ่านจากชิปแรมภายนอกนาฬิกาข้อมูลออกและยังคงทำการประมวลผลอื่น ๆ การพยายามทำสิ่งนี้ด้วย CPLD (หรือ FPGA) และชิป RAM ทำให้คุณได้ราคาดีกว่า $ 2 ที่ทำให้คุณต้องหยุดชะงักในคำถามของคุณ

โซลูชันดั้งเดิมในการเชื่อมต่อไมโครคอนโทรลเลอร์กับจอ LCD สีเป็นตัวควบคุมการแสดงผลเช่น SSD1963 นี่คือไดอะแกรมบล็อกที่ง่ายมาก:

บัฟเฟอร์ MCU และ RAM และการลงทะเบียนจากนั้นไปยังอินเตอร์เฟส LCD

อินพุตขนานกับบัฟเฟอร์เฟรม RAM ขนาดใหญ่ (แปล: มากกว่า $ 2) เชื่อมต่อกับอินเตอร์เฟส LCD แบบขนานที่กำหนดค่าได้ อินพุตแบบขนานมักจะเข้ากันได้กับอินเตอร์เฟสบัสหน่วยความจำ

ตลาด LCD สีไม่ใช่เรื่องง่ายที่จะค้นหาบนเว็บโดยทั่วไปจะเป็นโดเมนของ OEM เท่านั้นโดยส่วนที่เหลือจะซื้อจอแสดงผลจาก บริษัท ที่รวมตัวควบคุมกับหน้าจอ ทรัพยากรที่ดีที่สุดที่ฉันได้พบได้รับคริสตัล Fontz เฉพาะหน้านี้เกี่ยวกับการเลือกแอลซีดีกราฟิก เลื่อนไปที่ด้านล่างสำหรับตัวควบคุมซึ่งรวมถึงตัวเลือกต่อไปนี้ (หมายเหตุ: ไม่ใช่ตัวควบคุมสีทั้งหมด):

  • Epson S1D13521B01 E Ink Broadsheet (1 โมดูล)
  • Epson S1D13700 (11 โมดูล)
  • Epson SED1520 ใช้ร่วมกันได้ (8 โมดูล)
  • รองรับ Himax HX8345 (1 โมดูล)
  • ILITek ILI9325 เข้ากันได้ (3 โมดูล)
  • เข้ากันได้ KS0107 / KS0108 (26 โมดูล)
  • Novatek NT7534 (14 โมดูล)
  • Orise Technology OTM2201A (1 โมดูล)
  • Orise Technology SPFD5420A (1 โมดูล)
  • RAiO RA8835 (1 โมดูล)
  • Sanyo LC7981 (13 โมดูล)
  • Sino Wealth SH1101A (2 โมดูล)
  • Sitronix ST7920 (29 โมดูล)
  • โซโลมอน SSD1303 (1 โมดูล)
  • โซโลมอน SSD1305 (9 โมดูล)
  • โซโลมอน SSD1325 (2 โมดูล)
  • โซโลมอน SSD1332 (1 โมดูล)
  • โซโลมอน SSD2119 (2 โมดูล)
  • ST STV8105 (1 โมดูล)
  • Toshiba T6963 (23 โมดูล)

@reemrevnivek: ฉันกำลังคิดถึง LCD สีที่มีคอนโทรลเลอร์ในตัว พวกเขาดูค่อนข้างธรรมดา แต่สิ่งที่ฉันเคยเห็นโดยทั่วไปดูเหมือนจะคาดหวังว่า CPU จะนาฬิกาในหลายบิตต่อพิกเซลแม้ว่าสถานการณ์การแสดงผลทั่วไปคือการแสดงข้อความสีทึบ ฉันใช้ตัวควบคุม LCD ระดับสีเทา DMA แบบ 4 ระดับเมื่อใช้ CPLD และมันก็ใช้งานได้ดีมาก แต่นั่นก็เป็นอุปกรณ์ที่ขับเคลื่อนด้วยสาย
supercat

1
@supercat - คอนโทรลเลอร์จอแอลซีดีน้อยมากคาดว่าซีพียูจะนาฬิกาหลายบิตต่อพิกเซลในแต่ละเฟรม พวกเขาคาดหวังว่าฮาร์ดแวร์กราฟิกเฉพาะจะทำสิ่งนี้ โดยทั่วไปเมื่อคุณได้รับการแสดงผลที่ค่อนข้างใหญ่ (เช่น> 128 * 128) RGB พลังการประมวลผลที่จำเป็นในการสร้างภาพสำหรับหน้าจอนั้นใหญ่พอที่ GPU เฉพาะบางประเภท (แม้ว่าจะรวมอยู่ใน MCU) คือ ค่อนข้างมากอยู่เสมอ
Connor Wolf

1
@supercat - แต่สิ่งที่คุณอธิบายเป็น CPLD พิเศษที่ไม่ ASCII ไปสู่การแปลงแรสเตอร์โดยทั่วไปคือ (กำหนดเอง) เฉพาะฮาร์ดแวร์กราฟิก โดยทั่วไปฉันกำลังพูดว่าอย่าคิดค้นวงล้อใหม่และอาจจะง่ายกว่าและประหยัดกว่าหากคุณซื้อ MCU ด้วยอินเทอร์เฟซวิดีโอในตัวแล้วออกแบบด้วยตัวเอง
Connor Wolf

1
อย่างไรก็ตามถ้าคุณต้องการจะม้วนด้วยตัวคุณเองฉันจะใช้ไอซี SRAM สองพอร์ตและใช้พอร์ตหนึ่งพอร์ตสำหรับส่งออกไปยังจอ LCD และอีกตัวสำหรับ MCU สิ่งนี้ช่วยให้ MCU เปลี่ยนเนื้อหาหน่วยความจำในทุกสิ่งที่ต้องการความเร็วและ LCD สามารถทำงานได้ที่อัตราการรีเฟรช
Connor Wolf

1
@ ชื่อปลอม: มันจะไม่เป็น ASCII ในการแปลงแรสเตอร์ โดยทั่วไปจะเป็นการแปลงแบบบิตต่อพิกเซลเป็นการแปลงแบบหลายไบต์ต่อพิกเซล ฉันคิดว่าคุณเข้าใจผิดในสิ่งที่ฉันกำลังมอง ฉันไม่ได้กำลังมองหาจอภาพที่มีไดรเวอร์เท่านั้นแต่จอแสดงผลที่มีไดรเวอร์และตัวควบคุมดังนั้นพวกเขาจึงจำเป็นต้องป้อนข้อมูลเมื่อมีการเปลี่ยนแปลงบางอย่างบนหน้าจอเท่านั้น
supercat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.