2011年4月18日月曜日

MAX395

最近はPS3のgt5もあんまりやってないのですが、、、(´・ω・`)

PS3のハードウェアハックを考えるに、何もxfpsを経由しなくても直接DualShock3のボタンのオンオフを電気的にコントロールしてしまえばいいんじゃないのってのはすぐに(というか真っ先に)思いつくわけで。

でも、コントローラを改造するのは躊躇するため、手を出せずにいました。が、思い切ってやってしまいました。























L1, R1のタクトスイッチから配線を引っ張り出しました(´ε` )

こいつらの導通/非導通を制御出来ればいいんですよね。
では、どうするか。

ちょっと古い教科書的解答ですと、1チップマイコンのDigitalOutをトランジスタ等を介してリレーにつなぎ(1チップマイコンのDigitalOutでは直接リレー駆動できるだけの電流を流せないから)、リレーをオンオフする、なんでしょうけど、今や便利なICがあります。

MAXIMって会社は面白い半導体製品を色々作ってますね。MAX395は、SPI接続で計8個のオンオフスイッチを制御できます(・∀・)
ただし、導通時の抵抗がMAX100Ω(仕様値)、実測で95Ωほどあるのですが、100ΩくらいならDS3側で十分オンオフを判別できました。

本当は、AVスイッチ用のMAX4573が欲しかったのですが(こっちはMAX35Ω)、小売ではDigiKeyでしか見つけられず、高いし送料かさむし、ということで、RSでも売ってたMAX395を入手しました。

このMAX395をArduinoに接続します。






















なんとも、単純な配線で済ませることができます(・∀・) 抵抗とかコンデンサとか使わないし~。ただ、MAX395にV+とGNDをつなぎ、SPI用の4本の配線(MOSI, MISO, SCKと、SlaveSelect)をつないで、MAX395の8つ分のスイッチ配線組をピンヘッダーに引き出しただけで完成!
ArduinoはNanoをおごりました。

Arduino側のプログラム(サンプル)はたったこれだけだし。( ´ー`)y-~~
1つのスイッチのオンオフが1ビットに対応していて、8つのスイッチ=8bit=1byteのデータをSPIで送るだけです。

#include
const int slaveSelectPin=10;

void setup(){
  Serial.begin(115200);
  SPI.begin();
}

void loop(){
  if(Serial.available()>0){
    int inByte=Serial.read();
    if(inByte=='0'){
      int max395_value=0x00;
      digitalWrite(slaveSelectPin, LOW);
      SPI.transfer(max395_value);
      digitalWrite(slaveSelectPin, HIGH);
      Serial.println("All Off");
    }
    if(inByte=='1'){
      int max395_value=0x01;
      digitalWrite(slaveSelectPin, LOW);
      SPI.transfer(max395_value);
      digitalWrite(slaveSelectPin, HIGH);
      Serial.println("#0 ON");
    }
  }
}
これだけ簡単に複数のスイッチのオンオフ制御ができるとなると、夢広がりんぐですw

0 件のコメント:

コメントを投稿