ARM의 컬러 LCD에 간단한 텍스트 / 그래픽을 효율적으로 표시


12

컬러 LCD에 간단한 그래픽을 표시해야하는 ARM 기반 장치를 설계 할 때 특정 ARM 또는 LCD 공급 업체에 묶이지 않고 빠른 업데이트를 수행 할 수 있도록 설계하는 방법은 무엇입니까? 현재 프로젝트는 흑백 디스플레이를 사용합니다.이 디스플레이는 PIC의 SPI 포트로 번개처럼 빠르게 구동 할 수 있습니다 (복잡한 디스플레이를 1/60 초에 다시 그리기). 일반적인 컬러 LCD 디스플레이에는 SPI 포트가있는 것처럼 보이지만 160x120 LCD를 단색으로 채우는 데 30ms가 걸리고 320x240은 120ms가 가장 좋습니다 (10MHz 시프트 클럭).

컨트롤러 핀을 절약 할 수 있다면 병렬 모드가 더 좋을 수 있지만 각 픽셀에 대해 세 개의 별도 메모리 저장 명령 (데이터 설정, 하나는 클럭 출력을 높게 설정하고 다른 하나는 클럭을 낮게 설정합니다. 일부 ARM 칩에는 메모리 버스 인터페이스가 있지만 종종 멀티 플렉스 주소 및 데이터와 같은 작업을 수행하거나 관련없는 주소 비트를 출력하기 위해 많은 핀을 사용합니다 (LCD에는 하나의 주소 비트 만 필요).

ILITEK의 ILI9320 또는 Renesas의 HD66789를 보면, CPLD를 사용하여 SPI를 병렬 데이터로 변환하고 비트 당 픽셀을 출력하는 모드를 포함시키는 것이 흥미로울 것입니다. Renesas 데이터 시트를 보면 모든 병렬 포트 데이터 비트가 직렬 데이터 핀을 추적하도록하면서 픽셀 이외의 모든 장치에 대해 직렬 모드를 사용하여 최소 하드웨어 (CPLD 필요 없음)로 비트 당 픽셀 쓰기를 얻을 수 있습니다. 쓰기 및 비교 / 마스크 기능을 사용하여 모든 0 픽셀은 투명하고 1 픽셀은 GRAM에서 선택된 비트를 설정하거나 모든 1 픽셀은 투명하며 모든 0 픽셀은 선택된 비트를 지 웁니다. IKITEK 데이터 시트의 "기능"섹션은 유사한 기능을 가지고 있지만 레지스터 맵은 그렇지 않다는 것을 나타냅니다.

코드가 주로 단색 텍스트와 그래픽을 표시한다고 가정하면 이상적인 방법은 CPLD를 사용하여 ARM의 SPI 포트를 디스플레이의 병렬 포트에 인터페이스하고 CPLD를 전경 / 배경색으로로드하는 것입니다. "투명한"픽셀을 쓰는 수단이 있다면 특히 좋을 것입니다. 글꼴을 2 색 비트 맵으로 지정하면 글꼴 데이터를 SPI 포트에 직접로드 할 수 있습니다. 이것은 2 ARM 클럭마다 1 픽셀의 비율로 폰트 데이터를 보여줄 수있게합니다. 반면, 이러한 디스플레이 제어 작업을 처리하기에 충분한 CPLD는 약 $ 2입니다.

단색 텍스트 또는 간단한 (예 : 16 색 또는 64 색) 그래픽을 표시하는 것이 목표라면 ARM을 컬러 LCD와 인터페이스하는 가장 좋은 방법은 무엇입니까?

편집하다

문자 모드 LCD, 자체 드라이브 방식을 사용하는 사용자 지정 3 : 1 멀티 플렉스 세그먼트 기반 컨트롤러, 내장 컨트롤러가있는 흑백 그래픽 LCD, 흑백 마이크로 컨트롤러의 범용 DMA (4 단계 그레이 스케일 제공)와 인터페이스하도록 자체 CPLD 기반 컨트롤러를 설계 한 백색 LCD. 나는 디스플레이를 깔끔하게 만드는 것에 자부심을 느낍니다. 그래픽 컨트롤러 중 하나는 일정한 데이터를 쓸 때도 전체 화면을 새로 고치는 데 약 1/10 초가 소요되는 약간의 개 였지만 대부분의 디스플레이는 1/50 초 이내에 상당히 복잡한 이미지를 렌더링 할 수 있습니다.

내가하는 많은 프로젝트는 배터리로 구동되므로 전류 소모가 문제입니다. DMA 기반 디스플레이 컨트롤러는 훌륭하게 작동했지만 라인 기반 프로젝트에 적합했습니다. 그래픽 LCD에서 합리적인 전류를 얻는 유일한 방법은 디스플레이 버퍼와 열 드라이버를 결합한 컨트롤러를 사용하는 것입니다. 매 프레임마다 칩 사이에 많은 디스플레이를 보내면 픽셀 당 단일 비트 디스플레이에서도 많은 에너지를 낭비하게됩니다. 픽셀 당 16 비트의 컬러 디스플레이에서는 훨씬 나빠질 수 있습니다.

컬러 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]; 시계를 낮게 설정
  이 트미
  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는 주소 카운터를 포함해야하며 각 픽셀에 대해 픽셀 데이터의 워드를 클럭하거나 다음 픽셀 위치에 대한 주소 설정 명령 (카운터가 필요함) ). 반대로, 디스플레이에 마스킹과 투명성이 있다면 CPLD가 16 비트로 클럭킹 한 후 각 추가 비트가 디스플레이에 데이터 워드를 클럭킹하는 모드를 지원하도록해야합니다. SDI 핀을 추적하는 LSB 투명도 색상을 쓰고 싶은 색상으로 설정하지만 LSB는 뒤집 었습니다.

나는 마스킹과 투명도에 의존하는 아름다운 디자인을 만들고 싶지 않고 그런 기능을 가진 유일한 디스플레이에 30 주 리드 타임이 있음을 발견합니다. 반면에, 그러한 디스플레이가 많은 공급 업체로부터 널리 보급되어 이용 가능하다면 가용성에 관한 편집증으로 인해 열등한 디자인을 사용하게하고 싶지 않습니다.


1
요구 사항에는 특정 ARM 공급 업체와 연결되지 않은 것이 포함되어 있지만 LPC LH754xx 마이크로 컨트롤러 제품군에는 통합 LCD 드라이버가 포함되어 있습니다.
Kevin Vermeer

@reemrevnivek : 작은 LCD 드라이버가있는 ARM 칩이 많이 있습니다. 칩온 글래스 시나리오 이외의 다른 용도로 사용할 수있는 패키지에 나타나는 유용한 크기의 그래픽 디스플레이에 적합한 드라이버가있는 칩을 상상할 수 없습니다. 칩에는 컨트롤러가있을 수 있지만 칩온 글래스 컨트롤러가 장착 된 LCD는보다 전력 효율적이며 작업하기가 더 쉽습니다. 그래도 언급 한 칩을 확인하겠습니다. 재미있을 수 있습니다.
supercat

@ supercat-병렬 픽셀 데이터 버스를 사용하여 픽셀 인터페이스, 프레임 동기화 및 라인 동기화 제어 라인과 같은 RGB 인터페이스가있는 LCD를 생각하고 있습니다. COG 제어 디스플레이를 사용 하시겠습니까?
케빈 베르메르

1
@ reemrevnivek : 그게 내가 생각한 것입니다. 그들은 휴대 전화와 같은 많은 휴대용 배터리 구동 장치에서 사용되기 때문에 꽤 일반적 인 것 같습니다. 컨트롤러가 내장 된 COG 디스플레이는 지속적으로 클럭되는 RGB 데이터를 필요로하는 것보다 훨씬 전력 효율적입니다.
supercat

@ reemrevnivek : 방금 질문을 더 자세하게 업데이트했습니다.
supercat

답변:


7

LCD를 구동하기 위해 마이크로 컨트롤러를 사용할 때의 문제는 LCD에 지속적인주의가 필요하다는 것입니다. SPI를 통해 구동되는 CPLD (물론 DMA 사용)로 완화 할 수 있지만 다른 문제가 발생합니다. 컬러 LCD에는 많은 비용이 필요합니다데이터 흑백의 320x240은 9.6KB에서 한계가 있지만 24 비트 색상으로 만들면 갑자기 1/60 초에 230KB의 데이터를 제공해야합니다. (단, 낮은 20 비트를 하나의 설정으로 묶는 것만으로 4 비트, 16 색 제어를 얻을 수 있음을 잊지 마십시오). 24 비트 프레임 버퍼는 대부분의 마이크로 컨트롤러에서 온보드 RAM에 더 이상 맞지 않으며 외부 RAM 칩에서 읽고 데이터를 클럭킹하며 다른 처리를 수행 할 시간이 없을 것입니다. CPLD (또는 FPGA) 및 RAM 칩을 사용하여이 작업을 시도하면 2 달러의 가격으로 문제를 해결할 수 있습니다.

마이크로 컨트롤러와 컬러 LCD를 인터페이싱하는 기존 솔루션은 SSD1963과 같은 디스플레이 컨트롤러입니다. 다음은 매우 간단한 블록 다이어그램입니다.

MCU-RAM 버퍼 및 레지스터, 그리고 LCD 인터페이스

레지스터 구성 가능 병렬 LCD 인터페이스와 인터페이스 된 대형 RAM 프레임 버퍼 (번역 : 2 달러 이상)에 대한 병렬 입력. 병렬 입력은 일반적으로 메모리 버스 인터페이스와 호환됩니다.

컬러 LCD 시장은 웹상에서 항상 쉽게 찾을 수있는 것은 아니며, 일반적으로 OEM의 도메인이며 컨트롤러와 디스플레이를 통합 한 회사의 나머지 디스플레이를 구매합니다. 내가 찾은 최고의 자료는 Crystal Fontz, 특히 그래픽 LCD 선택에 관한이 페이지입니다 . 컨트롤러의 하단으로 스크롤하면 다음 옵션이 포함됩니다 (참고 : 모든 색상 컨트롤러는 아님).

  • Epson S1D13521B01 E 잉크 브로드 시트 (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 모듈)
  • 도시바 T6963 (23 모듈)

@ reemrevnivek : 컨트롤러가 내장 된 컬러 LCD를 생각하고있었습니다. 그것들은 꽤 일반적으로 보이지만 일반적인 디스플레이 시나리오가 단색 텍스트의 디스플레이이지만 일반적으로 CPU가 픽셀 당 많은 비트로 클럭 할 것으로 예상하는 것 같습니다. CPLD를 사용하여 DMA 기반 4 레벨 그레이 스케일 LCD 컨트롤러를 한 번 구현했는데 매우 훌륭하게 작동했지만 라인 전원 장치였습니다.
supercat

1
@supercat- CPU 가 각 프레임에 대해 픽셀 당 많은 비트를 클럭 할 것으로 예상하는 LCD 컨트롤러는 거의 없습니다 . 이들은 일반적으로 전용 그래픽 하드웨어 가이를 수행 할 것으로 기대 합니다 . 기본적으로 RGB 디스플레이가 상당히 커지면 (예 : 128 * 128 이상) 화면에 이미지를 생성하는 데 필요한 처리 성능이 크기 때문에 전용 MCU가 MCU에 통합되어 있어도 거의 항상 존재합니다.
코너 울프

1
@supercat-그러나 ASCII에서 래스터로 변환하는 특수 CPLD는 기본적으로 (맞춤형) 특수 그래픽 하드웨어 입니다. 기본적으로 바퀴를 재발 명하지 말고 비디오 인터페이스가 내장 된 MCU를 구입 한 다음 직접 설계하는 것이 더 쉽고 비용 효율적일 수 있습니다.
코너 울프

1
어쨌든, 직접 롤링하고 싶다면 두 개의 이중 포트 SRAM IC를 사용하고 한 포트를 사용하여 LCD에 출력하고 다른 하나를 MCU에 출력한다고 가정합니다. 이를 통해 MCU는 원하는 속도로 메모리 내용을 변경할 수 있으며 LCD는 화면 주사율로 실행할 수 있습니다.
코너 울프

1
@ 가짜 이름 : ASCII에서 래스터로 변환되지 않습니다. 기본적으로 픽셀 당 비트에서 픽셀 당 멀티 비트로 변환됩니다. 내가보고있는 것을 오해하고 있다고 생각합니다. 드라이버 만 있는 드라이버 는 아니지만 드라이버 와 컨트롤러 가 포함 된 디스플레이를 찾고 있으므로 화면의 내용이 변경 될 때만 데이터를 공급하면됩니다.
supercat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.