I2C에 연결된 LED Matrix 밝기 제어
sensehat 모듈에 LED matrix가 i2c로 설치, 연결되어 있다. LED2472G가 각 연결된 LED를 제어하는데, AVR이 i2c로 라즈베리 파이와 LED2472G 를 중계한다. LED를 제어한다고 LED2472G datasheet를 찾으면 별 도움이 안된다. AVR로 led를 어떻게 제어하는지 잘 공개되지 않은 듯 하다. 아무리 찾아도 c로 작성한 코드를 찾을 수 없다. i2c 0x46에 0~191까지 밝기를 전송하면 led 밝기를 제어할 수 있다. 아래 game of life python 코드를 보면 대충 어떻게 돌아가는지 알 수 있다.
shell로 i2cset으로 한 개씩 램프를 껐다. 0x46번은 LED matrix 노드 번이고, 0 ~ 191까지 led 램프 위치를 말하는 듯 하다. 뒤에 255, 0은 밝기다. 컬러 코드를 넣는 방법이 있는데, 아직 잘 모르겠다.
pi@raspberrypi:~/rasp/sense_temperature $ i2cset 1 0x46 1 255 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will write to device file /dev/i2c-1, chip address 0x46, data address 0x01, data 0xff, mode byte. Continue? [Y/n] y pi@raspberrypi:~/rasp/sense_temperature $ i2cset 1 0x46 1 0 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will write to device file /dev/i2c-1, chip address 0x46, data address 0x01, data 0x00, mode byte. Continue? [Y/n] y pi@raspberrypi:~/rasp/sense_temperature $ i2cdetect 1 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-1. I will probe address range 0x08-0x77. Continue? [Y/n] y 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- 1c -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- 46 -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- 5c -- -- 5f 60: -- -- -- -- -- -- -- -- -- -- 6a -- -- -- -- -- 70: -- -- -- -- -- -- -- --
shell로 0부터 191까지 해보면 led가 꺼지지 않는데 루프를 만들어 돌리면 한 번에 꺼진다. 구매 5일만에 led를 껐다.
고수는 frame buffer를 만들어서 하는 것 같은데, 아직 잘 모르겠다. 정말 필요한지도 모르겠다.
참조 사이트