SH1,SH2が出力されない故障したOPZ YM2414 を使えるようにする方法
How to make a failed OPZ YM2414 that does not output SH1 and SH2 usable.
注意:このサイトの内容を鵜呑みにし、事故や損失を招いた場合でも当方は一切の責任は負いかねます。自己責任でお願いします。
かなり前にFM音源ガチャでゲットしたYM2414 (OPZ)が故障により使えずしばらく放置していたのですが、どうにか使えるようにしてみました。
この記事では、YM2414のΦM(マスタークロック), Φ1(サンプルデータクロック), SH1, SH2 (サンプルホールド)の詳しいタイミングとSH1,SH2の生成方法を示します。
特にリセット開始からリセット解除直後の動作についてちょっとだけ説明します。
・故障したYM2414の症状
・この故障したYM2414BをTX81Zに入れても音が出ない。
・正常なYM2414Bと比較してSH1とSH2のみ正常に出力されない。レジスタ入力の結果は反映されており、SOは正常に出力している。
・SH1とSH2のレベルの状態がLまたはHのどちらかを取っているが、レベル変化がほとんど起きず、まれに変化する。特にICのパッケージに指などを近づけるとSH1とSH2のレベル変化が起きやすくなる。(SH2はプルアップされた状態での現象)
他にこのような故障例は見たことが無いため、この故障例はまれだと思います。
YM2151などの有名どころはよく偽物が出回っています。しかし、YM2414の偽物は出回っているイメージが無いので、中古で出回っている動かないYM2414は少なからずこの症状があるのかもしれませんね。
SH1とSH2のみ正常に出力しないのであれば、外部でSH1とSH2を生成してあげればよいということになります。
この手のLSIはロジック回路の塊、もっと言うと同期回路なので、SH1とSH2の生成回路の作成はそれほど難しくありません。
・正常なOPZ(YM2414)のΦM、Φ1、SH1、SH2の出力波形
まずは正常なYM2414のΦMにクロックを与えた時のΦ1、SH1、SH2の出力波形を取ってみました。
SH1とΦ1の出力波形(遅延の確認)
赤:YM2414のΦ1の出力
黄(上):YM2414のΦ1の出力
黄(下):YM2414のΦMに与えた入力
0μsで/ICをH→L、2μs付近で/ICをL→H
ΦMのクロック周波数:1.8432MHz
SH1の出力は入力クロックΦMの立ち上がりに同期している
※原則としてSH1、SH2の状態は、Φ1がLのときかつΦMの立ち上がりで変化します。
SH1、SH2の状態変化の遅延はΦMに対して80ns~100nsほど?
イニシャライズ端子/ICがH→Lになった時(イニシャライズ開始)の挙動
/IC:H→Lの瞬間、Φ1・SH1・SH2生成用分周カウンタの初期化が行われます。
以降、ΦMの立ち下がりでΦ1生成用分周カウンタがカウントします。
同時にΦ1の状態はΦMの立ち下がりで変化します。
Φ1の状態変化の遅延はΦMに対して60ns~90nsほど?
イニシャライズ端子/ICがLの期間、Φ1は上記に従いクロックが出力されます。
また、SH1とSH2は原則※に従った状態でHが出力されます。ただし、SH1・SH2生成用カウンタは動作している状態です。
SH1・SH2生成用分周カウンタの詳しい挙動は不明ですが、
Φ1がHのときかつΦMの立ち上がりでカウントしていると思われます。
Φ1端子の出力
Φ1とΦMの出力波形➀
赤:YM2414のΦ1の出力
黄:YM2414のΦMに与えた入力
0.0μsで/ICをH→L
ΦMのクロック周波数:3.579545MHz
Φ1とΦMの出力波形➁
赤:YM2414のΦ1の出力
黄:YM2414のΦMに与えた入力
0.0μsで/ICをH→L
ΦMのクロック周波数:3.579545MHz
Φ1とΦMの出力波形➂
赤:YM2414のΦ1の出力
黄:YM2414のΦMに与えた入力
0.0μsで/ICをH→L
ΦMのクロック周波数:3.579545MHz
Φ1とΦMの出力波形④
赤:YM2414のΦ1の出力
黄:YM2414のΦMに与えた入力
0.0μsで/ICをH→L
ΦMのクロック周波数:3.579545MHz
Φ1とΦMの出力波形⑤
赤:YM2414のΦ1の出力
黄:YM2414のΦMに与えた入力
0.0μsで/ICをH→L
ΦMのクロック周波数:3.579545MHz
Φ1とΦMの出力波形⑥
赤:YM2414のΦ1の出力
黄:YM2414のΦMに与えた入力
0.0μsで/ICをH→L
ΦMのクロック周波数:3.579545MHz
イニシャライズ端子/ICがL→Hになった時の挙動
イニシャライズ端子/ICがHの期間、SH1とSH2端子は、SH1・SH2生成用カウンタの状態が反映されます。(原則※に従う)
ただし、イニシャライズ端子/ICがLの期間、SH1とSH2端子は原則※に従った状態でHが出力されます。
ここでの「カウント目」は、SH1・SH2生成用分周カウンタ(Φ1がHのときかつΦMの立ち上がりでカウントしているカウンタ)のカウント値を示しています。
また、「原則※のタイミング」は、Φ1がLのときかつΦMの立ち上がりのタイミングです。
SH1端子の出力
➀/IC:H→Lの瞬間以降、16+1カウント目の原則※のタイミングでHとなります。
➁さらに8カウント目の原則※のタイミングでLとなります。➂さらに24カウント目の原則※のタイミングで再びHとなります。
④以降➁と➂を繰り返します。
SH1とΦ1の出力波形➀
赤:YM2414のSH1の出力
黄:YM2414のΦ1の出力
0.0μsで/ICをH→L、6μs付近で/ICをL→H
ΦMのクロック周波数:3.579545MHz
SH1とΦ1の出力波形➁
赤:YM2414のSH1の出力
黄:YM2414のΦ1の出力
0.0μsで/ICをH→L、6μs付近で/ICをL→H
ΦMのクロック周波数:3.579545MHz
SH1とΦ1の出力波形➂
赤:YM2414のSH1の出力
黄:YM2414のΦ1の出力
0.0μsで/ICをH→L、6μs付近で/ICをL→H
ΦMのクロック周波数:3.579545MHz
SH2端子の出力
➀/IC:H→Lの瞬間以降、0+1カウント目の原則※のタイミングでHとなります。
➁さらに8カウント目の原則※のタイミングでLとなります。➂さらに24カウント目の原則※のタイミングで再びHとなります。
④以降➁と➂を繰り返します。
SH1とΦ2の出力波形➂
赤:YM2414のSH2の出力
黄:YM2414のΦ1の出力
0.0μsで/ICをH→L、6μs付近で/ICをL→H
ΦMのクロック周波数:3.579545MHz
ここまでをまとめると、
・イニシャライズ端子/IC:H→Lの瞬間、Φ1・SH1・SH2生成用分周カウンタの初期化
・イニシャライズ端子/ICの状態にかかわらずSH1・SH2生成用カウンタが動作し続ける
・SH1とSH2端子は、イニシャライズ端子/ICがHの期間のみSH1・SH2生成用分周カウンタの値が反映され、/ICがLの期間ではHが出力される。
・SH1とSH2端子は8 Φ1クロックの間Hを出力、24 Φ1クロックの間Lを出力し、これを繰り返す。ただし、SH1とSH2の位相は16 Φ1クロックずれている。
・イニシャライズ端子/IC:H→Lの瞬間のみ、上記の周期が+1 Φ1クロックずれこむ。
少し複雑な挙動ですが上記に従う回路を作ることで、ΦM、Φ1、/ICからSH1とSH2の信号を得ることができそうです。
・外部でSH1とSH2を生成する回路
SH1、SH2生成回路➀
ΦMと/ICはYM2414と共通、Φ1はYM2414から持ってきます。
回路は2種類あり、いまのところ上の回路でしか試していませんが基本同じ動作をするはずです。
同期カウンタは74HC161 / 74HC163どちらでもOKです。
SH2の出力はYM2414のオープンドレイン相当なるようにダイオードとコンデンサを付けていますが、別になくてもかまいません。
この回路のSH1とSH2の変化タイミングは、本家のYM2414のSH1とSH2より若干速くなっていますが、実用上あまり問題ないと思います。
本家YM2414のSH1と作成した回路のSH1の比較
赤:YM2414のSH1の出力
黄:SH1・SH2生成回路のSH1の出力
0.0μsで/ICをH→L、6μs付近で/ICをL→H
ΦMのクロック周波数:3.579545MHz
・使用上の注意
この回路をマイコン等で使用する場合は、イニシャライズ端子/ICでのYM2414の初期化を2回(H→L→H→L→H)行うようにしてください。
YM2414の内部ではイニシャライズ端子/ICがH→Lの瞬間、Φ1・SH1・SH2生成用分周カウンタの初期化を行っています。
リセット回路によっては、電源投入時のイニシャライズ端子/ICの入力はゆっくりとL→Hとなる場合があります。この場合、端子/ICがLとHのちょうど中間のレベルに達した時の挙動がYM2414と74ロジックICで組んだ上記回路とでは異なる可能性が高く、Φ1・SH1・SH2生成用分周カウンタの初期化のタイミングがずれると思います。
Φ1・SH1・SH2生成用分周カウンタの初期化のタイミングがずれると、雑音が出力されます。
対策は、ニシャライズ端子/ICでのYM2414の初期化を2回(H→L→H→L→H)行うまたは、
ニシャライズ端子/ICがHになるまで、ΦMにクロックを供給せずにL固定にしておく、別途リセット回路を追加するなどの方法があります。
マイコン等でこの壊れたYM2414をどうしても使いたい場合は、ニシャライズ端子/ICでのYM2414の初期化を2回(H→L→H→L→H)行うのが手軽です。
YM2414を搭載しているYAMAHAのTX81Z等では、おそらくこの回路のままでは使用できないと思うので、もう少し回路を工夫する必要があります。
TX81Zの場合、リセットICはPST518B-2が使われています。
リセット回路はPST518B、RC充電、74HC14、74HC04を使ったシンプルな構成(パワーオンディレイ回路)です。
電源電圧が0V~Vs[V](PST518Bのしきい電圧)までは、PST518Bが働き、YM2414のニシャライズ端子/ICにはLが入力されます。PST518Bが働いている間はコンデンサCの電荷は放出されます。
電源電圧がVsに達した以降は、PST518Bが働かず、RC充電回路によってコンデンサに充電されます。
コンデンサCの電圧が74HC14のしきい値に達すると、リセットが解除されYM2414のニシャライズ端子/ICにはHが入力されます。
先に説明した通り、YM2414はイニシャライズ端子/ICがH→Lの瞬間、Φ1・SH1・SH2生成用分周カウンタの初期化を行っています。
つまりTX81Zのリセット回路では、Φ1・SH1・SH2生成用分周カウンタの初期化が行われていない可能性があります。レジスタの初期化は行われていなければ実用上問題がありますが、Φ1・SH1・SH2の未初期化は実用上問題ないということなのでしょうか?
TX81Z等でこのSH1・SH2生成回路を使用したい場合は、追加でリセット回路を組み込む必要があります。
もう一つの注意点は、YM2414のレジスタアクセスでのイニシャライズを行った場合の挙動です。
YM2414のテストレジスタの中には、Φ1・SH1・SH2生成用分周カウンタを停止させる機能をもつものがあります。(未検証)
もし、そのようなレジスタビットを操作した場合、SH1・SH2の生成タイミングがずれてしまい、雑音が出力されます。
得体の知れないテストレジスタへのアクセスは控えた方が良いかもしれません。
[おまけ]YM2414 OPZの出力メモ
※R+L出力の条件
$0A_bit2=1かつ$15_bit0=1のとき
$30+ch bit0=1で強制ステレオ
$30+ch bit0=0の場合、$20+chのビット7がRL出力選択ビットとなる
$0A_bit2=0かつ$15_bit0=1
$15=0x01
$30+chのbit1,0の値→音程+0~3
//////////////////////////////////////////
$0A テストレジスタ?
bit0:1にするとサンプルホールド出力が無効
bit1:不明(未調査)
bit2:1にするとステレオ出力ができるようになる※
bit3:1にすると音割れみたいな癖のある音
bit4~7:不明(未調査)
//////////////////////////////////////////
$15
bit0:1にするとステレオ出力ができるようになる。※対象レジスタ選択ビット?
bit1:1にするとパラメータ変更時に異常がある?キーオン・キーオフ関係?
bit2~7:不明(未調査)
0 件のコメント:
コメントを投稿