ユニバーサル基板の方はSWの押し下げでGNDと導通します
ブレッドボードの方はSWのON/OFFをLEDで視認できるように組みました
Arduinoからの出力がHになるとLEDが発光します。
Arduinoのスケッチ
void setup() { for (int i = 2; i < 8; i++) { pinMode(i, INPUT_PULLUP); } Serial.begin(9600); Serial.println("Seaquence Input Test Start"); } void loop() { for (int i = 2; i < 8; i++) { int v = digitalRead(i); if (v == 0) { digitalWrite(i + 6, HIGH); } else { digitalWrite(i + 6, LOW); } Serial.print(v > 0 ? i : 0); Serial.print("\t"); } Serial.print("\n"); /* for (int i = 8; i < 14; i++) { digitalWrite(i, HIGH); } */ delay(100); }
ArduioのSerialクラスを使うとArduinoのD0,D1はシリアル通信と干渉するようです。(Arduinoの基板にもRX/TXと書いてあります)
なので、0と1はとばして2から処理するようにしました。
スイッチの押し下げとLEDの発光が連動するようになりました。
PB6とPB7も水晶発振でつぶされているので、AruduinoではポートB、ポートDともに6bitしか使えないみたいです
ポートCはもともと6こしかないです。
リズムマシンの入力デバイスをどうするか
シフトレジスタ(74HC595)を使えば2線のシリアルから8線のLEDを制御できそうです。
ですが、逆方向にパラレルの入力をまとめてシリアルにするロジックICは見つかりませんでした。(LED発光より入力用のスイッチのON/OFFの方が大事)
パラレル入力をまとめてシリアルにするには・・・と考えると単純な論理回路では実現できそうにないです。
なので、マイコンの方がいいかなと思ってPIN数が多くて値段が安いマイコンを探すと
AVRマイコン ATmega88V-10PU
http://akizukidenshi.com/catalog/g/gI-03655/
がヒットしました。
ざっと見た感じではATMega328PとPINは互換のようです。
スペックはほとんどどうでもよくてPIN数が稼げてコスト優先でATmega88はプラス加点
28Pあるので電源系は予約して、UARTと水晶のPINをあければIN:8bit(SW用)、OUT:8bit(LED用)はいけるかな?
ATmegaだから外部との通信もI2Cが使えそうです。I2CはPortCなのでなんとかぎりぎりいけるかな?
ホントは16個のスイッチを使いたいので、8個のSWで済まそうと思うと切り替え用のスイッチがあと1個いるのか・・・
悩ましいです(^q^;
0 件のコメント:
コメントを投稿