Piano Hat (CAP1188) 사용하기

소개



스위치 사이언스 씨의 부스에서 보고, Pimoroni 라는 메이커의 피아노는 t 라는 보드를 구입했습니다. 외형대로, 피아노의 건반과 같은 형태를 하고 있으므로, 이 보드 하나로 소리가 나오는 것이라고 생각하고 있었습니다.

그러나 이 보드에는 음원이 탑재되어 있지 않습니다. Raspberry Pi와 같은 모함이 있으며, PianoHat에서 터치 이벤트를 감지하여 모함에서 소리를 내지 않습니다. 그래서 소리를 내는 것은 옆에 놓아두고, 우선은 이 보드의 구조를 공부하고 싶습니다. PianoHat 사양 16개의 정전 터치패드(13개의 피아노 건반, Octarve up/down, Instrument) 2x Microchip CAP1188 capacitive touch driver chips CAP1188( h tp // w w. 미 c로치 p. 코 m / w wp 로즈 cts / 엔 / 카 P1188 )은 8ch 정전 터치패드 입력 칩이므로 PianoHat의 16개의 정전 패드를 2개의 CAP1188로 캡처하고 있습니다.

CAP1188 초기화



레지스터는 취설을 보면서 조사합니다. 또, Arduino의 샘플 프로그램 가 있었으므로 이쪽을 보면서 공부해 보겠습니다.

CAP1188.ino
#define CAP1188_PRODID 0xFD
#define CAP1188_MANUID 0xFE
#define CAP1188_REV 0xFF

#define CAP1188_MTBLK 0x2A
#define CAP1188_LEDLINK 0x72
#define CAP1188_STANDBYCFG 0x41

void setup() {
  // put your setup code here, to run once:
  uint8_t i2c_addr = slaveAddress;
  Wire.begin();

  Serial.begin(9600);
  Serial.println("CAP1188 test!");

  //接続テスト
  Serial.print("Product ID: 0x");
  Serial.println(readRegister(CAP1188_PRODID), HEX);
  Serial.print("Manuf. ID: 0x");
  Serial.println(readRegister(CAP1188_MANUID), HEX);
  Serial.print("Revision: 0x");
  Serial.println(readRegister(CAP1188_REV), HEX);

  //初期設定
  // allow multiple touches
  writeRegister(CAP1188_MTBLK, 0); 
  // Have LEDs follow touches
  writeRegister(CAP1188_LEDLINK, 0xFF);
  // speed up a bit
  writeRegister(CAP1188_STANDBYCFG, 0x30);
}

연결 점검



먼저, 제대로 연결되어 있는지 확인하기 위해 일부 레지스터를 읽어 보겠습니다.


REGISTER ADDRESS
R/W
FUNCTION
REGISTER NAME
DEFAULT VALUE


FDh
R
제품 ID
Stores a fixed value that identifies each product
50h

FEh
R
Manufacturer ID
Stores a fixed value that identifies SMSC
5Dh

FFh
R
Revision
Stores a fixed value that represents the revision number
83h


초기 설정




REGISTER ADDRESS
R/W
FUNCTION
REGISTER NAME
DEFAULT VALUE


2Ah
R/W
Multiple Touch Configuration
Determines the number of simultaneous touches to flag a multiple touch condition
80h


00H를 설정. 최상위 비트를 지웁니다. multiple 터치 회로가 비활성화됩니다. 장치는 multiple 터치를 차단하지 않습니다. (매번 반응한다는 것이라고 생각됩니다.)


REGISTER ADDRESS
R/W
FUNCTION
REGISTER NAME
DEFAULT VALUE


72h
R/W
Sensor Input LED Linking
Controls linking of sensor inputs to LED channels
00h


FFH를 설정. 정전 터치패드의 센서를 LED 입력에 연결합니다. (터치하면 LED가 빛난다고 생각합니다.)


REGISTER ADDRESS
R/W
FUNCTION
REGISTER NAME
DEFAULT VALUE


41h
R/W
Standby Configuration
Controls averaging and cycle time while in standby
39h


30H를 설정. Standby Configuration은 이러한 센서 입력의 평균화와 사이클 시간을 제어합니다. 다소 채터링이 있어도, 신속하게 반응하는 설정이 되어 있습니다.
  • STBY_CY_TIME[B0:B1] NUMBER OF SAMPLES TAKEN PER MEASUREMENT [0,0]=1
  • STBY_SAMP_TIME[B2:B3] SAMPLING TIME [0,0]=320usec

  • 루프 프로그램



    CAP1188.ino
    #define CAP1188_SENINPUTSTATUS 0x3
    #define CAP1188_MAIN 0x00
    #define CAP1188_MAIN_INT 0x01
    
    uint8_t status=0;
    
    void loop() {
      uint8_t t = readRegister(CAP1188_SENINPUTSTATUS,slaveAddress2);
      if (t) {
        writeRegister(CAP1188_MAIN, readRegister(CAP1188_MAIN) & ~CAP1188_MAIN_INT);
      }
      if(status!=t){
         status=t;
         Serial.println(status, HEX);
      }
    }
    



    REGISTER ADDRESS
    R/W
    FUNCTION
    REGISTER NAME
    DEFAULT VALUE


    03h
    R
    Sensor Input Status
    Returns the state of the sampled capacitive touch sensor inputs
    00h

    00h
    R/W
    Main Control
    Controls general power states and power dissipation
    00h


    Sensor Input Status는 터치되면 1로, 되지 않으면 0이 되는 8비트 레지스터입니다.

    Main Control의 LSB는 인터럽트가 있음을 나타냅니다. 이 비트가 설정되면 ALERT# 핀이 어서트된다. 그렇기 때문에 터치 센서의 입력이 있을 때에는 이 비트를 클리어합니다.

    좋은 웹페이지 즐겨찾기