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.