ESPr Developer 용 반사 형 컬러 액정을 MicroPython에서 사용

발매 조속히 입수한 "ESPr Developer 용 반사 형 컬러 액정" 몇 안 되는 출처인 데이터시트와 mbed용 C 샘플을 보면서 시행착오한 결과, 대체로 사용법을 알게 되었으므로 메모해 둔다.

사용하는 모듈



직접 이용하는 라이브러리는 machine.SPImachine.Pin . 타이밍 조정을 위해 utime.sleep_us도 가져옵니다.
from machine import SPI, Pin
from utime import sleep_us

결선



LPM013M126A에 데이터를 전송하려면 SPI를 사용합니다. 스위치 과학 사이트에 따르면 ESPr Developer의 GPIO와 LPM013M126A는 다음과 같이 연결됩니다.


GPIO
방향
커넥터 핀 번호
연결 대상
신호 설명


IO15
O
JP1 - 5
SCS(액정 커넥터)
액정 칩 선택

IO14
O
JP1-8
SCLK(액정 커넥터)
액정 시계

IO13
O
JP1 - 6
SI(액정 커넥터)
액정 데이터

IO0
O
JP1 - 3
DISP(액정 커넥터)
액정의 on/off 신호.”H”로 액정 표시

IO2
O
JP1 - 4
open
"SJ2"를 단락하면 EXTCOMIN (액정 커넥터)에 연결됩니다.

IO5
O
JP2 - 6
LED 패드(K)
조명용 LED(옵션) 출력

IO4
I
JP2 - 3
스위치(SW1)
범용 푸시 스위치


이 정보에 따르면, 다음과 같이 Pin을 사용하게 된다.
disp = Pin(0, Pin.OUT)
scs = Pin(15, Pin.OUT)
spi = SPI(-1, sck=Pin(14), mosi=Pin(13), miso=Pin(12))

SPI 의 데이터 수신은 없기 때문에 miso 는 사용하지 않지만, 지정하지 않으면 SPI 클래스의 생성자에 화가 되기 때문에 비어 있는 것을 적당하게 지정해 둔다.

(2017/01/30 추가)
그러나 분명히 하드웨어 SPI를 사용할 수 있도록 연결되어있는 것 같습니다. 그래서 다음과 같이 수정.
disp = Pin(0, Pin.OUT)
scs = Pin(15, Pin.OUT)
spi = SPI(1, baudrate=6000000)

액정의 ON/OFF



액정의 ON/OFF는 간단하다. 15핀을 H로 하면 표시, L로 하면 비표시이다.
disp.high() # 表示
disp.low() # 非表示

액정 클리어



전원을 연결한 직후에는 쓰레기가 표시되므로, 우선에는 액정의 표시를 모두 소거하는 것이 좋다. 이를 위해 ALL CLEAR MODE를 사용합니다.
scs.high()
sleep_us(6)
spi.write(b'\x20\x00') # ALL CLEAR MODE
sleep_us(6)
scs.low()

표시 데이터 전송



그런데, 본래 하고 싶은 그래픽의 표시이다. 괜찮은 커맨드는 준비되어 있지 않고, 어리석게 픽셀의 데이터를 송신한다.

기본은 UPDATE 모드에서 수평 라인 번호를 지정하여 R, G, B, dummy의 4 비트 열을 하나의 픽셀 픽셀 (176)로 전송합니다. 요약하면 라인 당 88 바이트입니다. dummy가 없는 3비트 모드나 멀티 라인 모드도 준비되어 있지만, 3피트라면 비트 연산이 번거롭고, 임베디드로 전송용으로 큰 버퍼 준비하는 것도 무엇이므로, 4비트 데이터의 싱글 라인 전송 가 자주 사용하는 것이다. (덧붙여서 흑백이면, 보다 전송량을 줄일 수 있는 모드도 있다)

4비트 데이터에서는 픽셀의 색을 R·G·B·dummy의 4비트로 나타내므로 이하와 같이 된다.


칼라
2진수치
16진수


블랙
0b0000
0x0

블루
0b0010
0x2

녹색
0b0100
0x4

시안
0b0110
0x6

레드
0b1000
0x8

마젠타
0b1010
0xa

황색
0b1100
0xc

화이트
0b1110
0xe


이하는 선두 1 라인째에 노란색의 선을 두는 코드.
cmd_buf = bytearray(92)
cmd_buf[0] = 0x90 # SINGLE LINE UPDATE MODE (4BIT-DATA MODE)
cmd_buf[1] = 1 # 水平ライン指定は1オリジン
for i in range(88): # 1ラインのピクセル数分
    cmd_buf[i+2] = 0xcc # 1バイトの上位4ビットと下位4ビットで2ピクセル分
cmd_buf[90] = 0
cmd_buf[91] = 0
scs.high()
sleep_us(6)
spi.write(cmd_buf)
sleep_us(6)
scs.low()

결과는 아래 사진과 같습니다.

좋은 웹페이지 즐겨찾기