컬러 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 주 리드 타임이 있음을 발견합니다. 반면에, 그러한 디스플레이가 많은 공급 업체로부터 널리 보급되어 이용 가능하다면 가용성에 관한 편집증으로 인해 열등한 디자인을 사용하게하고 싶지 않습니다.