본문 바로가기

아/티/이/야/기

아두이노 TFT LCD(SPI lil9340,9341) 색표현 코드에 관하여

사실 아두이노 , TFT LCD이런거 잘 모릅니다. 대학때  만져본 z80  7-segment 정도가 전부입니다.

최근 공짜로 얻은 아두이노를 만져보다 날씨를 Display 하는 기기가 하나 필요해서 만들려고 LCD 선택할 필요하게 되었습니다.

굳이 LCD TFT-LCD를 선택하게 된 것은 저 큰 사이즈 컬러를 화면을 선택하는데  상대적으로 매우저렴하기 때문이었습니다.

OLED는 2인치상되는것은 매우 비싸더군요 

저는 저는 혹시모를 향후를 생각해 2.8인치의 터치패널이 달린 제품을  7.5불 정도에 구입했습니다.

이정도를 OLED로 구입하려면 6-70불(터치포함) 줘야 하더군요 ...



어째든 제가 구입한 제품은 일반적으로 아두이노에는 사용이 어렴운 spi  (LIL9341)칩셋을 사용한 제품이었습니다.

(레벨시프트 회로가 없어 신호 전압이  5V인 아두이노에는 맞지가 않았습니다. )

결국 회로를 간단히할겸  겸사겸사 메인 기기를 NODEMCU로  변경해야만 했습니다.

(사실 esp8266-01 통신칩이 죽었습니다 ㅠㅠ왜 죽었는지 잘 모르겠습니다. SerialtoUSB로도 해봤는데도 연결이 안됩니다 혹시 살리는 방법을 아시는 분은 쫌 부탁드립니다 )

스케치를 처음 접해서 우왕좌왕하긴 했지만 정말 작업하면서 감탄을 연발했습니다.

max 232로  시리얼 통신 납땜해서 만들고 연결하고 그것도 잘안되고 플래시 업해야 햇는데  

왜 아두이노 아두이노 하는지 알겟더군요  (사실 그전에는 롬라이터로 구웠죠 ㅡㅡ; )

암튼 각설하고  LIL 9341은 UNIT_16 코드로 색을 정의하는데 이게  좀 특이하더 군요

처음에는 그냥 rgb hex인줄 알았는데 전혀 아니었습니다.   잘모르겟어서 검색을 좀 해봤습니다.

음 ... 대충 원리는 서브 샘플링과 같은것 같았습니다.

서브샘플링의 동작 원리
인간의 시각 계통이 루미넌스(밝기차)보다 색의 움직임과 자리 이동에 덜 민감하기 때문에[1] 대역폭은 색의 자세한 부분보다 밝기의 부분을 더 많이 저장함으로써 최적화할 수 있다. 일반적인 시차에서 낮은 레이트에서 색의 자세한 부분을 샘플링함으로써 입는 손실은 눈에 띄지 않는 정도이다. 비디오 시스템에서 색차 컴포넌트를 사용하면서 이를 달성할 수 있다. 신호는 루마 (Y') 컴포넌트와 두 개의 색차 컴포넌트(크로마)로 나뉜다

 

 

간단히 설명하자면 사람의 눈으로 구분하기 어려운 컬러를 샘플링과정중에 버리는 것이죠

(제가 잘못이해했다면 댓글 부탁드립니다.)

그럼 설명 코드를 보시죠

설명을 워낙 잘해놔서 딱히 해석을 안붙혔습니다. 그래도 혹시어려우실까봐

간단히  순서를 보자면

unit-8코드 표현

각자리별 이진화  > 각색별 뒤 2자리 버림  >  남은 각자리 6비트코드를  하나로 합침 >  뒤에서 4비트씩 끊음   >  16진수 화    

unit-16 코드 표현

각자리별 이진화  > 각색별 뒤 2-1-2 자리로 버림  >  남은 각자리 코드(5-6-5)를  하나로 합침 >  4비트씩 끊음   >  16진수 화

이정도면 설명이면 코드화 하기 어렵지 않으실겁니다.

이를 간단히 웹으로 구현해 보았습니다.  -> http://smksky.asuscomm.com/unit16_converter.php