R2/05/31:改稿CD-ROMドライブのコントローラをPICで作りました。
◎パソコン内蔵のCD-ROMドライブを単体で動かすコントローラです。
※Ver.1を16F877Aで作り、これは改良版です。
- 動作するCD-ROMドライブは、一昔前のATA(IDE)/ATAPI規格のものです。(40Pのコネクタ)
- また、CD-ROMドライブだけでなくDVD-ROMドライブも対象範囲ですが、必ずしもどれでも動くとは限りません。
- このコントローラはCD-ROMドライブをコントロールして、音声出力(アナログ or デジタル)を得るもので、D/Aコンバータは含みません。
- ドライブによっては、デジタル出力のないものもあります。
- ソースコードは、hitech_Cです。UENOさんが公開されていたAVRアセンブラを真似してPIC(Hitech_C)に書き換えました。
- 回路図は、水魚堂のbsch3vというフリーソフトで書きました。バス部分などは見よう見まねなので、誤表記があるかも知れません。
- Hi-Tech-c のソースは、あまりC言語らしくない形式です。1100行を超えてしまって見難いですが、ご自分で試してみようという方の参考になれば・・・という程度です。
- 参考図書:改訂版『ATA(IDE)/ATAPIの徹底研究』CQ出版社
[主な部品]
- PIC:16F887 LCD:SC1602BS IDEコネクタ(40P)
- タクトスイッチ(5個) 抵抗 シリコンダイオード
- ユニバーサル基板(共立電子のストリップボード)を利用しました。
- コントローラとCD_ROMドライブをつなぐコード
(パソコンの中で繋いでいるコード)- テストでCD_ROMドライブを駆動するために、12v 1A と 5v1.5A 程度の電源とIDEドライブ用の電源コネクタが必要です。(パソコン用のATX電源があれば問題なく使えます。)
液晶表示と説明[ボタン(タクトスイッチ)の動作]
- 立ちあがりは、CDの有無を確認して(CDが入っていなければ)『Push<Eject>/No disc』と表示
- RA7(Eject/Close/Stop)を押してトレーを出し、CDをセットして、再びRA7を押すとトレーは引き込まれる。
- 初期化およびDisc checking の後、自動的に演奏が開始される。
- 演奏中のRA4(play/pause)ボタンは一時停止、および途中再開の動作をする。
- RA6(Forward)およびRA5(Back)は次の曲および一つ前の曲へ飛ぶ。
- 演奏中のRA7は停止して、もう一度押せば、トレーオープン、RA4(Play)を押せばその曲の初めからの再開になる。
- 液晶の表示は、全9曲中の1曲目で、5:03の長さの中の49秒付近を示す。
回路図:
[プログラム・コードの見直し、修正・変更]
※リンクが切れていて、ご迷惑をかけてしまいました。
- send_atapi_commnd_packet 中のミスの修正とdelay部分を変更しました。
- メディア・チェックの回数を20から30回に増やしました。
- Pause中でもFowardやBackが可能になるように修正しました。
- トラックの終端処理を変更しました。
(この変更で、LITE-ON MODEL:SOHW-812S も動作するようになりました。)- トラックの終端処理は使用するCD-ROMドライブにより、プログラムを変更する必要があります。
- 下に2種類のソースを添付しました。
- k1の方のCD-ROMドライブは、トラックの終端で自動的に停止する仕様になっているらしく、最後のplayが終わったらトラック1へ誘導して続行処理します。
- k2のCD-ROMドライブは、終端コード(0xaa)を検出したら、フラグを立ててトラック1への続行処理をします。
Hi_Tech_c のソース:main_k1.c
Hi_Tech_c のソース:main_k2.c