PCF8574를 사용한 스위치 보드, Remote 8bit I/O Expander I2C Bus

DSC00066

스위치 보드를 만들었다. 뮤트 버튼 테스트용인데, 가지고 있는 버튼 종류가 부족했다.만들다 보니 QLab용으로 만들어도 좋겠다 싶었다. 그래서 QLab용으로 쓸 수 있게 배치했다.

I2C 버스로 I/O를 확장할 수 있는 PCF8574 칩을 사용했다. 기봉이가 저렴하게 구해주었다. SSOP 타입이라 변환기판을 사용했다. 스위치는 단독으로 쓸 수 있도록 별도의 단자를 마련했다. 풀업저항을 연결했기 때문에 누르면 그라운드와 연결되는 Active Low 타입으로 만들었다. 보드 왼쪽의 Male 커넥터는 I2C 연결을 위한 단자로 만들었다.

DSC00064

뒷면 모습. 회로도를 그리지 않고 만들어도 이정도는 나온다. 예전에 비하면 많이 깔끔해졌다.

아두이노 Wire 라이브러리로 테스트했다. 몇줄 안되지만 잘 동작한다.
버튼 디바운스나 계속눌림을 방지하기 위해 코드를 추가했다.

/*
 * PCF8574
 * 8 bit Input - I2C Bus
 * Arduino Sketch 2015.08.18
 * AudioCookie.com
 * JongHoe Koo (idnine@gmail.com)
 */
#include <Wire.h>

unsigned char newData;
int releaseChk = 1;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  Serial.println("\nButton Read Test Start");
}

void loop() {
  Wire.requestFrom(32, 1);    // Address 0, 1 Byte Request
  if (Wire.available() && (releaseChk == 1)) {
    newData = Wire.read();
    unsigned char buff = ~newData;
    if(buff & 0x02) Serial.println("Button 1 Pressed");
    if(buff & 0x04) Serial.println("Button 2 Pressed");
    if(buff & 0x08) Serial.println("Button 3 Pressed");
    if(buff & 0x10) Serial.println("Button 4 Pressed");
    if(buff & 0x20) Serial.println("Button 5 Pressed");
    if(buff & 0x40) Serial.println("Button 6 Pressed");
    if(buff & 0x80) Serial.println("Button 7 Pressed");
    releaseChk = 0;
  }
  Wire.requestFrom(32, 1);
  if(Wire.available() == 0) releaseChk = 1;
  delay(50);
}

MIDI OUT 테스트 보드를 Arduino로 작업하고 있다.

실제 프로젝트에 아르두이노를 사용해 보기는 처음인 것 같다.
최종까지 아르두이노를 사용하는 것은 아니지만 구입한 이후에 처음으로 유용하게 쓰는 느낌이랄까.

아르두이노 보드가 통신부분의 기본세팅이 잘 되어 있으 테스트하기에는 적합하다.
프로그래밍이 단순하고, 확실하게 동작한다는 보장이 있으니 믿을만하다.
MIDI 출력을 아르두이노 보드로 테스트한 다음 마이크로 프로세서로 넘어가려고 한다.

오늘은 MIDI 단자를 만능기판에 붙이고, 출력단의 기본회로를 꾸몄다.
꾸민다고 해봤자 저항하나 달아주는 것이긴 해도 이런저런 구상에 시간이 좀 지났다.
테스트를 위한 스위치도 보드에 하나 달았다.
아르두이노 보드와 점퍼선을 연결할 때 간편하게 하기위해서다.

시간이 늦었으니, 나머지 테스트는 내일 또 계속~