Hiển thị hiệu quả văn bản / đồ họa đơn giản trên màn hình LCD màu của ARM


12

Khi thiết kế một thiết bị dựa trên ARM sẽ hiển thị đồ họa đơn giản trên màn hình LCD màu, cách tốt nhất là nên thiết kế mọi thứ để cho phép cập nhật nhanh, tốt nhất là không bị ràng buộc với một nhà cung cấp ARM hoặc LCD cụ thể? Dự án hiện tại của tôi sử dụng màn hình đen trắng có thể được điều khiển nhanh như chớp bằng cổng SPI trên PIC (vẽ lại màn hình phức tạp trong 1/60 giây). Có vẻ như màn hình LCD màu phổ biến có cổng SPI, nhưng thậm chí lấp đầy màn hình LCD 160x120 bằng màu đơn sắc sẽ mất 30ms và 320x240 sẽ có trường hợp tốt nhất 120ms (đồng hồ thay đổi 10 MHz).

Nếu người ta có thể sử dụng chân điều khiển, chế độ song song có thể tốt hơn, nhưng tôi không biết bất kỳ phương tiện nào độc lập với gia đình để kết nối giao diện song song mà không yêu cầu ba hướng dẫn lưu trữ bộ nhớ riêng cho mỗi pixel (một để đặt dữ liệu, một để đặt đầu ra đồng hồ ở mức cao và một để đặt ở mức thấp). Một số chip ARM có giao diện bus bộ nhớ, nhưng chúng thường muốn thực hiện những việc như địa chỉ và dữ liệu ghép kênh hoặc cam kết nhiều chân để xuất ra các bit địa chỉ không liên quan (LCD sẽ chỉ cần một bit địa chỉ).

Nhìn vào ILI9320 của ILITEK hoặc HD66789 của Renesas, một cách tiếp cận có vẻ thú vị là sử dụng CPLD để chuyển đổi SPI thành dữ liệu song song và bao gồm chế độ tạo ra pixel trên mỗi bit. Nhìn vào bảng dữ liệu Renesas, có thể có được ghi pixel trên mỗi bit với phần cứng tối thiểu (không yêu cầu CPLD) bằng cách tạo tất cả các bit dữ liệu cổng song song theo dõi pin dữ liệu nối tiếp, sử dụng chế độ nối tiếp cho mọi thứ trừ pixel ghi và sử dụng các hàm so sánh / mặt nạ để các pixel toàn bộ số 0 sẽ trong suốt và các pixel tất cả sẽ đặt các bit được chọn trong GRAM hoặc các pixel tất cả sẽ trong suốt và các pixel toàn bộ sẽ xóa các bit được chọn. Phần "tính năng" của bảng dữ liệu IKITEK cho thấy rằng nó có chức năng tương tự, nhưng bản đồ đăng ký không '

Giả sử mã sẽ chủ yếu hiển thị văn bản và đồ họa có màu đặc, cách tiếp cận lý tưởng dường như là sử dụng CPLD để giao tiếp cổng SPI của ARM với cổng song song của màn hình và cho phép CPLD được tải với màu nền trước / nền. Điều này sẽ đặc biệt tốt nếu người ta có một phương tiện để viết các pixel "trong suốt". Đưa ra một phông chữ dưới dạng bitmap hai màu, người ta có thể chỉ cần tải dữ liệu phông chữ trực tiếp vào cổng SPI; điều này sẽ cho phép dữ liệu phông chữ được hiển thị ở tốc độ một pixel mỗi hai đồng hồ ARM. Mặt khác, một CPLD đủ để xử lý một tác vụ kiểm soát hiển thị như vậy sẽ có giá khoảng 2 đô la.

Cách tốt nhất để giao diện ARM với màn hình LCD màu, nếu mục tiêu chủ yếu là hiển thị văn bản màu đơn sắc hoặc đồ họa đơn giản (ví dụ 16 màu hoặc 64 màu)?

Biên tập

Tôi đã thực hiện nhiều dự án hiển thị LCD, với nhiều loại LCD, bao gồm LCD ở chế độ ký tự, dựa trên phân đoạn đa kênh 3: 1 tùy chỉnh bằng phương pháp ổ đĩa của riêng tôi, LCD đồ họa đen trắng với bộ điều khiển tích hợp và đen -có màn hình LCD mà tôi đã thiết kế bộ điều khiển dựa trên CPLD của riêng mình để giao tiếp với DMA cho mục đích chung của vi điều khiển (cung cấp cả thang độ xám bốn cấp). Tôi tự hào về việc hiển thị zippy. Một trong những bộ điều khiển đồ họa là một con chó cần khoảng 1/10 giây để làm mới toàn màn hình ngay cả khi ghi dữ liệu không đổi, nhưng hầu hết các màn hình của tôi có thể hiển thị ngay cả một hình ảnh khá phức tạp trong dưới 1/50 giây.

Nhiều dự án tôi làm là chạy bằng pin, vì vậy hiện tại là một vấn đề. Bộ điều khiển hiển thị dựa trên DMA tôi đã làm việc tốt, nhưng nó dành cho một dự án hỗ trợ dòng. Tôi tin rằng cách duy nhất để có được kết quả hiện tại hợp lý từ màn hình LCD đồ họa là sử dụng bộ điều khiển kết hợp bộ đệm hiển thị và trình điều khiển cột. Gửi nhiều màn hình giữa các chip mỗi khung hình sẽ lãng phí rất nhiều năng lượng ngay cả trên một màn hình bit trên mỗi pixel; trên màn hình màu với mười sáu bit trên mỗi pixel, nó sẽ tệ hơn nhiều.

Tôi chỉ bắt đầu nhìn vào bảng dữ liệu LCD màu; nhiều màn hình dường như sử dụng bộ điều khiển tương tự ILITEK ILI9320, mặc dù tất cả các bảng dữ liệu tôi tìm thấy cho các bộ điều khiển dựa trên thiết kế chung đó đã được đánh dấu là "sơ bộ". Một số người như ILITEK tuyên bố có các tính năng che giấu và minh bạch nhưng không liệt kê bất kỳ đăng ký nào cho họ; Tôi không biết liệu các chip thực sự có các tính năng như vậy hay không nhưng các bảng dữ liệu "sơ bộ" đã bỏ qua việc bao gồm chúng hoặc liệu chúng có bỏ qua các tính năng này mà quên không đề cập đến việc đề cập đến chúng. Nếu trong thực tế tất cả các chip như vậy có các tính năng trong suốt, có vẻ hợp lý khi thiết kế cho chúng; nếu không, không.

Tôi hy vọng rằng đối với hầu hết các dự án, một màn hình thông thường sẽ bao gồm văn bản được đặt tùy ý với số lượng phông chữ màu có kích thước tùy ý vừa phải. Phông chữ rất có thể sẽ được lưu trữ dưới dạng dữ liệu bit trên mỗi pixel. Sử dụng Cortex-M3, nếu tôi muốn viết màn hình với dữ liệu song song, "vòng lặp bên trong" của mã để viết hai pixel có thể sẽ kết thúc giống như:

  rol r0, r0, # 2; Nhận một bit trong C, cái còn lại ở N
  itcs
  strhcs r1, [r3, # DATA_OFS]; Viết dữ liệu
  strhcc r2, [r3, # DATA_OFS]; Viết dữ liệu
  strb r4, [r3, # CLOCK_SET_OFS]; Đặt đồng hồ cao
  strb r4, [r3, # CLOCK_CLR_OFS]; Đặt đồng hồ ở mức thấp
  itmi
  strhmi r1, [r3, # DATA_OFS]; Viết dữ liệu
  strhpl r2, [r3, # DATA_OFS]; Viết dữ liệu
  strb r4, [r3, # CLOCK_SET_OFS]; Đặt đồng hồ cao
  strb r4, [r3, # CLOCK_CLR_OFS]; Đặt đồng hồ ở mức thấp

Không chính xác là điều nhanh nhất trên thế giới. Loại bỏ việc ghi vào các hướng dẫn thiết lập / xóa đồng hồ sẽ có ích. Tôi đoán là sẽ không có cách nào độc lập với kiến ​​trúc để loại bỏ cả ghi đồng hồ, nhưng có thể có một cách khá phổ biến cho phép loại bỏ một (ví dụ: nhiều chip có thể có bộ đếm / PWM có thể tạo ra xung đầu ra ngắn gọn để đáp ứng với một hoạt động lưu trữ bộ nhớ duy nhất).

Sử dụng cổng SPI và thêm phần cứng để đồng hồ một pixel mỗi bit sẽ tăng tốc độ truy cập hiển thị lên rất nhiều. Nếu sử dụng màn hình mà không che khuất và trong suốt, CPLD sẽ phải bao gồm bộ đếm địa chỉ và đối với mỗi pixel, đồng hồ có một từ dữ liệu pixel hoặc nếu không thì lệnh đặt địa chỉ cho vị trí pixel sau (sẽ cần bộ đếm ). Ngược lại, nếu một màn hình có mặt nạ và độ trong suốt, tất cả những gì tôi cần làm là có CPLD hỗ trợ chế độ sau khi nó có xung nhịp 16 bit, mỗi bit bổ sung sẽ hiển thị một từ dữ liệu ra màn hình với LSB theo dõi chân SDI (có thể không cần sử dụng CPLD - chỉ cần một vài chip logic thông thường). Tôi sẽ đặt màu trong suốt thành màu tôi muốn viết nhưng với LSB được lật.

Tôi không muốn đưa ra một thiết kế đẹp dựa trên mặt nạ và độ trong suốt và sau đó khám phá ra rằng các màn hình duy nhất có các tính năng như vậy có thời gian chờ 30 tuần. Mặt khác, nếu các màn hình như vậy có khả năng và vẫn có sẵn rộng rãi từ nhiều nhà cung cấp, tôi không muốn để hoang tưởng về tính khả dụng thúc đẩy tôi sử dụng một thiết kế kém hơn.


1
Không phải là câu trả lời vì các yêu cầu của bạn bao gồm không bị ràng buộc với một nhà cung cấp ARM cụ thể, nhưng họ vi điều khiển LPC LH754xx bao gồm trình điều khiển LCD tích hợp.
Kevin Vermeer

@reemrevnivek: Có một số chip ARM có trình điều khiển LCD nhỏ; Tôi không thể tưởng tượng bất kỳ con chip nào có trình điều khiển phù hợp với bất kỳ màn hình đồ họa kích thước hữu ích nào xuất hiện trong một gói có thể sử dụng được trong bất kỳ điều gì khác ngoài kịch bản chip-on-glass. Một con chip có thể có bộ điều khiển, nhưng màn hình LCD với bộ điều khiển chip trên kính có vẻ tiết kiệm điện hơn và dễ làm việc hơn. Tuy nhiên, tôi sẽ kiểm tra con chip mà bạn đề cập - có thể rất thú vị.
supercat

@supercat - Tôi đang nghĩ về màn hình LCD có giao diện RGB: đồng hồ pixel, đồng bộ khung và các dòng điều khiển đồng bộ hóa dòng, với một bus dữ liệu pixel song song. Bạn đang mong đợi sử dụng màn hình được kiểm soát COG?
Kevin Vermeer

1
@reemrevnivek: Đó là những gì tôi đã nghĩ. Chúng dường như khá phổ biến, vì chúng được sử dụng trong rất nhiều thiết bị chạy bằng pin di động như điện thoại di động. Một màn hình COG với bộ điều khiển tích hợp sẽ tiết kiệm năng lượng hơn nhiều so với màn hình yêu cầu dữ liệu RGB có xung nhịp liên tục.
supercat

@reemrevnivek: Tôi vừa cập nhật câu hỏi của tôi với nhiều chi tiết hơn.
supercat

Câu trả lời:


7

Vấn đề với việc sử dụng vi điều khiển để điều khiển LCD là LCD đòi hỏi phải chú ý liên tục. Điều này có thể được giảm thiểu bằng CPLD được điều khiển qua SPI (tất nhiên là sử dụng DMA), nhưng sau đó bạn gặp phải vấn đề khác: LCD màu đòi hỏi rất nhiềuDữ liệu. 320x240 màu đen và trắng là cận biên ở mức 9,6KB, nhưng làm cho nó có màu 24 bit và đột nhiên bạn cần cung cấp 230KB dữ liệu trong 1/60 giây. (Tuy nhiên, đừng quên rằng bạn có thể có được điều khiển 4 bit, 16 màu chỉ bằng cách buộc 20 bit thấp vào một cài đặt). Bộ đệm khung 24 bit không còn phù hợp với RAM trên bo mạch trên hầu hết các bộ vi điều khiển và có lẽ bạn không có thời gian để đọc từ chip RAM ngoài, đồng hồ hết dữ liệu và vẫn xử lý khác. Cố gắng thực hiện điều này với CPLD (hoặc một GPU) và chip RAM giúp bạn vượt qua mức giá 2 đô la khiến bạn chùn bước trong câu hỏi của mình.

Giải pháp truyền thống để kết nối vi điều khiển với màn hình LCD màu là bộ điều khiển hiển thị như SSD1963. Đây là một sơ đồ khối rất đơn giản:

Các thanh ghi và bộ đệm MCU sang RAM, và từ đó đến giao diện LCD

Nhập song song vào bộ đệm khung RAM lớn (Dịch: Hơn 2 đô la) giao tiếp với giao diện LCD song song có thể định cấu hình đăng ký. Đầu vào song song thường tương thích với giao diện bus bộ nhớ.

Thị trường LCD màu không phải lúc nào cũng dễ dàng tìm thấy trên web, thường chỉ là miền của các OEM, với phần còn lại mua màn hình từ các công ty tích hợp bộ điều khiển với màn hình. Tài nguyên tốt nhất tôi tìm thấy là Crystal Fontz, cụ thể là trang này về việc chọn LCD đồ họa . Cuộn xuống phía dưới cho các bộ điều khiển, bao gồm các tùy chọn sau (lưu ý: Không phải tất cả đều là bộ điều khiển màu):

  • Bảng in mực Epson S1D13521B01 E (1 mô-đun)
  • Epson S1D13700 (11 mô-đun)
  • Tương thích Epson SED1520 (8 mô-đun)
  • Tương thích với Himax HX8345 (1 mô-đun)
  • Tương thích ILITek ILI9325 (3 mô-đun)
  • Tương thích KS0107 / KS0108 (26 mô-đun)
  • Novatek NT7534 (14 mô-đun)
  • Công nghệ Orise OTM2201A (1 mô-đun)
  • Công nghệ Orise SPFD5420A (1 mô-đun)
  • RAiO RA8835 (1 mô-đun)
  • Sanyo LC7981 (13 mô-đun)
  • Sino Wealth SH1101A (2 mô-đun)
  • Sitronix ST7920 (29 mô-đun)
  • Solomon SSD1303 (1 mô-đun)
  • Solomon SSD1305 (9 mô-đun)
  • Solomon SSD1325 (2 mô-đun)
  • Solomon SSD1332 (1 mô-đun)
  • Solomon SSD2119 (2 mô-đun)
  • ST STV8105 (1 mô-đun)
  • Toshiba T6963 (23 mô-đun)

@reemrevnivek: Tôi đã nghĩ đến màn hình LCD màu với bộ điều khiển tích hợp. Chúng có vẻ khá phổ biến, nhưng những cái mà tôi nhìn thấy dường như mong đợi CPU sẽ có xung nhịp nhiều bit trên mỗi pixel mặc dù một kịch bản hiển thị phổ biến là hiển thị văn bản màu đơn sắc. Tôi đã triển khai bộ điều khiển LCD thang độ xám 4 cấp dựa trên DMA một lần bằng cách sử dụng CPLD và nó hoạt động rất độc đáo, nhưng đó là một thiết bị hỗ trợ dòng.
supercat

1
@supercat - Rất ít bộ điều khiển LCD mong muốn CPU có xung nhịp nhiều bit trên mỗi pixel cho mỗi khung hình. Họ thường mong đợi phần cứng đồ họa chuyên dụng sẽ làm điều này. Về cơ bản, một khi bạn có màn hình RGB khá lớn (tức là> 128 * 128), công suất xử lý cần thiết để tạo hình ảnh cho màn hình đủ lớn để một GPU chuyên dụng thuộc loại nào đó (ngay cả khi được tích hợp vào MCU) Khá nhiều luôn có mặt.
Sói Connor

1
@supercat - Nhưng những gì bạn mô tả, một CPLD chuyên dụng thực hiện ASCII để chuyển đổi raster, về cơ bản là phần cứng đồ họa chuyên dụng (tùy chỉnh) . Về cơ bản, tôi nói rằng không phát minh lại bánh xe, và có thể dễ dàng hơn và tiết kiệm chi phí hơn khi chỉ mua MCU với giao diện video tích hợp sau đó tự thiết kế.
Sói Connor

1
Dù sao, nếu bạn thực sự muốn tự mình sử dụng, tôi sẽ nói rằng hãy sử dụng một vài IC SRAM cổng kép và sử dụng một cổng để xuất ra LCD và cổng còn lại cho MCU. Điều này cho phép MCU thay đổi nội dung bộ nhớ ở bất kỳ tốc độ nào nó muốn và LCD có thể chạy ở tốc độ làm mới.
Sói Connor

1
Tên @Fake: Sẽ không phải là ASCII để chuyển đổi raster. Về cơ bản, nó sẽ là bit-per-pixel để chuyển đổi multibit-per-pixel. Tôi nghĩ bạn đang hiểu nhầm những gì tôi đang nhìn. Tôi không tìm kiếm màn hình chỉ có trình điều khiển , nhưng màn hình bao gồm trình điều khiển và bộ điều khiển , vì vậy chúng chỉ cần được cung cấp dữ liệu khi nội dung trên màn hình thay đổi.
supercat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.