curious4dev

中国旅行、Arduinoなどを使った電子工作、その他色々。

*

YMZシールドの基板設計

 

お疲れ様です。

前に基板化したYMZ294をさらにシールド化したい事をPOSTしましたが、何も考えずに半田付けを開始してしまうと、線の取り回しやら、部品の位置やら、後工程になって色々と大変になる事が想定できます。

なので、事前に問題が無いことを確認する意味も込めて、基板の図を書いてみました。

シールド基板の図

基板は、普通の60円のC型片面ユニバーサル基板を使います。これをシールドとして使うため、下記2つのサイトを参考にさせてもらいます。

左上にYMZ294、右上に4MHz水晶、左下にLM386、そして右下に半固定抵抗を置いてます。あとはコンデンサと抵抗を少々。どう頑張っても線が線を飛び越えてしまう箇所が出来てしまいます。

2015022201

あと、シールドの下の部分にステレオジャックをくっつけようと思います。

どう頑張っても、接触してほしくない線と線が交差してしまうため、結構な数のジャンパーが必要になります。こんな時のためにエナメル線を買っておけば良かったと後悔。

部品の配置、配線、基板のサイズだけ与えると、最短の配線と最小のジャンパで自動生成されるツールが欲しいです。

 

ライブラリの改造

上記の配線では、Arduinoのデジタルポート0~7番をYMZの11番~18番に挿す事になりますが、元々のArduinoのデジタルポート0~7番は、YMZの18番~11番に、逆に繋げていました。よって、これだとおそらく正常に動作しません。

ライブラリを見てみると、最終的にデジタルポート0~7番を操作しているのは、このあたりです。

void YMZ294::set_register(byte addr, byte value)
{
 // addr
 digitalWrite(WRCS_PIN, LOW);
 digitalWrite(A0_PIN, LOW);
 PORTD = addr;
 digitalWrite(WRCS_PIN, HIGH);

 // value
 digitalWrite(WRCS_PIN, LOW);
 digitalWrite(A0_PIN, HIGH);
 PORTD = value;
 digitalWrite(WRCS_PIN, HIGH);
}

この PORTD という所にビット配列を流すことで、パラレルに0~7番を使っていると思われます。PORTDという定数は、Arduino 日本語リファレンスによるとやはりデジタルポートの0番~7番を指し示しているようです。

今までは0~7という順番が前提で各種プログラムが動いていましたが、最後の最後、このメソッドのPORTDへの書き込みの所だけ、ビットの順番を逆にすれば動くはずです。

という訳で、下のような感じで、「B10011111 を与えると、B11111001が返ってくるメソッド」準備し、

int bitReverse(int a)
{
 int b = a;
 a = a & 0x55555555;
 b = b ^ a;
 a = a << 2;
 a = a | b;

 b = a;
 a = a & (0x33333333<<1);
 b = b ^ a;
 a = a <<4;
 a = a | b;

 b = a;
 a = a & (0x0f0f0f0f<<3);
 b = b ^ a;
 a = a <<8;
 a = a | b;

 a = a >> 7;
 return a;
}

それを

void YMZ294::set_register(byte addr, byte value)
{
 // addr
 digitalWrite(WRCS_PIN, LOW);
 digitalWrite(A0_PIN, LOW);
 PORTD = bitReverse(addr);
 digitalWrite(WRCS_PIN, HIGH);

 // value
 digitalWrite(WRCS_PIN, LOW);
 digitalWrite(A0_PIN, HIGH);
 PORTD = bitReverse(value);
 digitalWrite(WRCS_PIN, HIGH);
}

こんな感じに仕込めば行けるはず。

以上、よろしくお願い致します。

 - 電子工作

  関連記事

音階LED表示器の実体配線図を書いてみた。

お疲れ様です。高橋です。 前に「音階に合わせてLEDを光らせてみた。」で実験した …

iPhoneでルンバを操作してみたい

お疲れ様です。高橋です。 突然ですがiPhoneでルンバを操作したいと思います。 …

YMZ294のMIDI音源化と、YMZのピン数圧縮

お疲れ様です。高橋です。 YMZで使うピン数を11本から6本に減らす事によって、 …

クオーツ時計を100倍速&リバースモード付きに改造してみた。

お疲れ様です。高橋です。 今日、奥さんから壊れた時計を貰いました。電池を入れ替え …

マウスを入力I/Fとして使うのを断念してみた。

お疲れ様です。高橋です。 先日の「マウスを分解してみた」でマウスを分解し、ケーブ …

マウスを分解してみた。

お疲れ様です。高橋です。 壊れたマウスを貰った 先日、壊れたマウスを貰いました。 …

4桁7セグLEDを基板に実装 完成

お疲れ様です。高橋です。 大失敗 前回、実体配線図を書いたこれ。 こんな感じに頑 …

YMZシールドの作成 #2

お疲れ様です。高橋です。 先日から作っていたYMZシールドですが、本日完成しまし …

マウスを分解してみた(リベンジ)

お疲れ様です。高橋です。 壊れたマウスを貰った 本日、壊れたマウスを貰いました。 …

aitendoで買った375円のバックライト付きI2C LCDで文字を表示してみた。

お疲れ様です。高橋です。 ちょっと前にaitendoで買ったバックライト付きのL …