May 27, 2012

デジタルオーディオプレーヤー

E2601左の写真は、一見すると、今流行りの自作ヘッドホンアンプに見えるけど、そうじゃない。
携帯型デジタルオーディオプレーヤーだ。iPod とか Walkman と同じように、音楽を鳴らすことができる。
これを完全自作した。こう言ったものを完全自作する人は少ないだろうなあ。

回路自体は以前のコンテンツSTM32応用 デジタルオーディオプレーヤー その1と、ほとんど同じだ。STM32F405に SDIO と I2S インタフェースが内蔵されているので、それを利用して、microSD に入れた音楽ファイルを、FN1242 と言う DAC に送り、ローパスフィルター(LPF)用とヘッドホンアンプ(HPA)用の二つのオペアンプを通してヘッドフォンを鳴らしているもの。

E2602この回路を元に水城徹さんにプリント基板のパターンをおこしてもらった。世界には、ネット経由でプリント基板を格安で作ってくれる業者がある。今回の基板の場合、プリント基板10枚と送料をあわせて、たった 2700円で製造してもらった。

もちろん、業者が作った基板は部品が付いたものではないので、部品は自分で買い揃えてハンダ付けする必要がある。
STM32F405RGT6 は、DigiKey で買った。今日現在の価格は 1022円だ。
その他の部品は、全て秋葉原の秋月・千石・マルツ・鈴商などで買える一般的な部品だ。実はブレッドボードでヘッドフォンアンプを作ってみるは、このデジタルオーディオプレーヤーの最終段のオペアンプを決めるための実験だった。

E2603実際に作ってみると、やはり、最初のプリント基板なので、3つほどジャンパーを飛ばさないと動作しない。
また、デジタル部とアナログ部を共通の電源にしているので、デジタル部で発生したノイズ、特にSDIOのアクセス時に発生するノイズがアナログ部に回りこむ。プリント基板上では、アナログ部とデジタル部を切り離してパターンを作っていたので、その間にインダクタとコンデンサーでノイズフィルターを入れたら、ノイズが無くなった。部品側の写真の中央に空中配線した大きなコンデンサーが、それだ。

単四電池4本で、10時間くらい連続で聞けるから、それなりに実用的だ。

まだまだ不完全なものだが、一応、何とか音楽が聞けるようになったので、今後は回路とかプログラムとかをオープンソースとして公開したいと思っている。

E2604プログラム自体は、github で公開しようと思う。現状、44.1kHz 16bit のWAVファイルしか再生できないが、MP3 のデコードライブラリをリンクしたり、96kHz 24bit や 192kHz 24bit のハイレゾ音源再生への拡張を考えているが、プログラミングの得意な人に是非協力してもらいたい。(STM32F4のマニュアルによると、96kHz 24bit はスペックの範囲なのだが、192kHz 24bit はできるかどうか、やってみないと判らない)
また、
・回路図・レイアウト図
・ガーバーデータ(パターン・シルク・ドリル)・・(EAGLE CADで作ったもの)
や、プログラム等を作る上での議論などをWikiのようなもので公開するつもりだが、無料で、こう言ったWiki等を使えるところがあったら教えて欲しい。

プリント基板に関しては、上記で公開する予定のガーバーデータで、誰でも注文できるはずだが、もうちょっと回路を良くしてからの方が良さそう。特に、私はデジタルは専門なのだが、アナログに弱いので、LPF部やHPA部は、誰か得意な人の協力を得たいところだ。今のところ、単四電池4本の4.8Vで動かしているけど、本当は、単三電池2本でやりたいのだが、2.4Vで、ちゃんと動作するLPF部やHPA部を設計できてないんだよねえ。
まあ、as is で良いなら、部品載せる前の基板をコミケで配布しちゃうのも面白いかも。

とにかく、公開する予定なので、Wiki等を公開できるサーバーとかの情報や、プログラミングやアナログ回路設計などの協力してくれる人の情報求む。

それから、当たり前だけど、回路図とか見て作った回路は自己責任で使って!
下手な配線で、高価なヘッドフォンを壊しても責任持てないので、よろしく。

| | Comments (0) | TrackBack (0)

April 30, 2012

ブレッドボードでヘッドフォンアンプを作ってみる

E2590写真のようにブレッドボードでヘッドフォンアンプを作ってみた。
なんで、ブレッドボードで作ったかと言うと、オペアンプとか抵抗・コンデンサーとかを交換して、良い組み合わせを見つけようと言うため。ユニバーサル基板にハンダ付けして作るとオペアンプはICソケットにしておけば交換できるけど、抵抗とかコンデンサーとかを交換して回路定数を変更するのは難しいからね。ブレッドボードだったら、幾らでも交換できると思ったわけ。
秋月で小型のブレッドボードが150円から売っている。今回、使ったのは250円のもの。その他、ブレッドボード用のステレオミニジャック等も購入。抵抗類だけは千石で買った。

作る前はブレッドボードでの電子工作なんてハンダ付けもできない初心者用のものだと思っていたが、そうでもないことが判った。
まず、ハンダ付けに関しては、ブレッドボード用のステレオミニジャックは秋月で買ったキットなのに使う前にハンダ付けが必要だった。これじゃ「ハンダ付けもできない初心者用」じゃないよね。他にボリュームなど、幾つかの部品はブレッドボード用にピンをハンダ付けが必要だった。
また、ブレッドボードでの回路製作は、ユニバーサル基板でハンダ付けするより簡単かと思ったが、そうでもない。先のハンダ付けを除いても、回路組立に1時間くらいかかったから、大して変わりない。その上、ハンダ付けしてないから幾らでも作り変えできるやと、気を抜いて作ったら、回路を間違ってしまった。オペアンプの入力の+と−を間違えたのだ。電源の+と−を間違えたのじゃなくて良かった。

E2591ともあれ、回路ができて、試聴。
回路は、左図のもので、ゲインは1.36。電源は、単四エネループを4本の4.8V。電圧を低くしたのは、ゆくゆくは携帯オーディオとして使いたいからだ。
秋月で適当に買ったオペアンプを交換して比較した。
比較結果は次の通り。音が出ないものやオーディオとして役に立たないレベルのものは書いていない。
ただし、評価は私の個人的主観・趣味が反映されているので、一般的ではないので、注意。また、秋月で売っている全てのオペアンプを買って調べたわけではない。

OPA2134PA 音はするけど、それほどでもない。
NJM4580DD なんとか鑑賞に耐えられる程度。
OPA2353UA 音楽にはなっているけど、パンチが足りない。
NJM4556AM 安いオペアンプの割りにはいい音がする。
MUSES8820E やっぱり、高いだけあって良い音がする。

と言うわけで、上の5つのオペアンプでは、下の方ほど良い評価だ。
意外なことに OPA2353UA が良くない。秋月のヘッドフォンアンプキットに使っているオペアンプなので期待したのだが。回路定数が悪いのかも知れない。もう少し調査を続行したい。
NJM4556AM は、上記のオペアンプの中で、唯一オーディオ用ではない汎用オペアンプ。ただし、低電圧対応のオペアンプなので試したら、意外と音が良くて驚いた。これで、10個で300円とは滅茶苦茶コストパフォーマンスが良い。
MUSES8820Eは、ほとんど冗談で試した。このオペアンプは、動作電圧が±3.5V~±16Vなので、テスト環境の4.8Vつまり±2.4Vは完全な定格外だ。にもかかわらず、他を圧倒する音の良さだった。さすが高級オーディオ用オペアンプ。

で、やはり気になるのは、MUSES8820Eを定格で動作させると、どうなるかだ。上記と同一の回路で、電源を9V電池つまり±4.5Vで試してみた。
今まで聴いたことが無いくらい良い音がした。この音聴くまで、4.8Vでも十分だと思ってたんだけどなあ。
やっぱり、定格電圧で動かしたい。

| | Comments (2) | TrackBack (0)

April 09, 2012

春の秋葉原

E258先日、秋葉原に行った時の話。
電子部品を買おうと秋月に入ったら、若い女の子が回路図片手に部品を探していた。毎年、春になると秋月電子通商や千石電商と言った半導体や抵抗・コンデンサー等の電子部品を売る店に若い女の子が部品を買いに来る光景が見られる。たぶん、大学とか高専とか専門学校の学生で、学校から与えられたロボコンか何かの課題のために部品を買いに来ているんだと思う。いつもの年なら4月中旬以降5月くらいまでの風物詩なのだが、今年は少し早いかな?
もちろん、女の子だけじゃなく、男の子もいるはずだが、若い男が電子部品を買いに来るのは年がら年中なので別に目立ちはしない。女の子は、普段なら電子部品店に居ない上に秋葉原に似つかわしくない普通のファッショナブルな服を着ているから、目立つんだよね。
普段、秋葉原に若い女の子が居ないわけではない。ただ、秋葉原の街にあふれているのはメイド姿の客引きと、何かオタクっぽいファッションの娘ばかりなので、ごく普通のファッションがかえって目立つ。

若い女の子が、電子部品店に来るのは、毎年のことだけど、今までに面白かった事が2回ほどある。
一つは、数年前のことで、2人連れの真っ黒なゴスロリファッションの女の子が、秋月のベテラン店員相手に、「このセンサーがどうの、あの部品がどうの」って、質問していたこと。聞くとはなしに聞こえてくる内容から、ゴスロリの2人はちゃんと電子回路を理解して部品を探しているようだった。会話の内容とファッションのギャップが大きくて、思わず笑いそうになった。

もう一つは、確か去年か、一昨年のこと。女の子1人と男の子3〜4人のグループで、やはり秋月に部品を買いに来ていた。女の子が部品リストを読み上げ、「これ見つけて!」と命令すると、他の男の子が探していた。女の子は自分じゃ一切部品を探さなくて、男の子がパシリになっていた。このグループは完全に女の子が仕切っていたわけだな。
こう言うグループもリアルに居るんだな。女の子が「超団長」と書いた腕章をしているじゃないかと思っちゃったよ。

| | Comments (1) | TrackBack (0)

August 07, 2011

デジタルオーディオプレーヤーを作った

E240フルスクラッチでデジタルオーディオプレーヤーを作った。
コントロール部は、SH-2(SH7144F)。ここの部分は秋月のキットを使っているので、厳密にはフルスクラッチとは言えないかな・・・
音楽データは、SDカードもしくはmicroSDカードから、SH-2のSLIで読み出している。
DACは FN1242、これを XCR3064 と言う FPGA (正確にはCPLD)でSH-2とインタフェースを取っている。
ローパスフィルターとヘッドホンアンプにNJM4580をそれぞれ一個ずつ使っている。

音楽データは、44.1kHz 16ビットステレオのWAVフォーマットつまり、オーディオCDデータそのもののみだ。
非圧縮データなので、音は良いのだが、SDカードに大量の音楽データを入れられないのと、読み出し速度が速いのが難点。大量の音楽データが入らない方は、最近、大容量SDカード/microSDカードが安くなったから良いけど、読み出し速度の方は、SH-2のショボイSLIだと、44.1kHz 16ビットステレオの読み出しがやっとこさっとこ。DAC自体は、192kHz 24ビットステレオまで対応しているのだが、SH-2の方が追いつかない。とは言え、192kHz 24ビットステレオの音楽データって、それほど入手性が良くは無いんだけどね。

ローパスフィルターとヘッドホンアンプのNJM4580は、一番安いと言う理由で使っているのだが、それなりに音は良い。もちろん、二つともICソケットを使っているので、今後、色々なオペアンプに変えて、音が変わるかテストする予定。音はヘッドホンだけでなく、ラインアウトもあって、普通のスピーカーも外部アンプ経由で鳴らせることができる。

本当は、ポータブルオーディオを狙ったんだが、大きく重くなった上に、SH-2が意外と消費電力が大きくバッテリー駆動に向かない。

今後は、「小型・軽量・低消費電力化」と「高音質=192kHz 24ビットステレオ対応」だなあ。
とにかく、SH-2は電力大きいし、SLIはショボイしで、交換決定。
・Cortex-M3など、新しくて、SLIなども高性能化された CPUに変える。
・容量の大きなFPGAで、SLIとDAC I/Fを一体化し、CPUはH8等の小さいのに変える。
・いっそ大容量のFPAGで、SLIとDAC I/Fだけでなく、CPUまで入れてしまう。
なんて事考えている。

と言っても、工作する暇があったらの話なんだけど・・・

| | Comments (0) | TrackBack (0)

February 04, 2011

ヘッドホンアンプ

E2311 以前の記事にも書いたが、年末にインナーイヤー型ヘッドホンを買った。
それで、できるだけ良い音で聞きたいので、すぐさまヘッドホンアンプを作ったのは既に書いた通りだ。
さらに、良い音で聞きたいので、もう一つヘッドホンアンプを作った。それが左の写真の「2号機」だ。
このヘッドホンアンプ2号機のケースは秋月で買った単三 4本用電池ボックスを改造した。妻には「安っぽ〜」と言われるできだ。
ボリウムつまみ、ジャック、パイロットランプ用LEDの穴がジグザグに並んでいるのはデザイン上の工夫じゃなく、こう並べないと、干渉してしまうからに過ぎない。

E2312左は、今回作ったヘッドホンアンプの中身だ。
見るからにギッチリと詰まっている。
ユニバーサル基板を使って作るのは、これが限界の小ささだろう。
このヘッドホンアンプ2号機、基本的に高品質な低電圧ヘッドホンアンプ(単3×2本) で紹介している物と同じ回路である。
ただし、回路定数は同じでも、部品は秋葉原で買える限り、最も安いものを使っている。
トランジスタは秋月で1個10円で売っていたものだし、コンデンサーも積層セラミックや単なる電解コンデンサーで、抵抗はカーボン抵抗など、千石で最も安く売っているものを使っている。

部品代は1800円弱ですんだ。ただし、基板などは家で余っていたものを使ったから、新品を買うなら、もう200円ほど必要だろう。

E2313この写真は、以前の記事でも紹介したヘッドホンアンプ1号機と並べてみたもの。
大きさがふた回りほど違う。
携帯性を考えると小さい方が良い。
また、ヘッドホンアンプ1号機では、トグルスイッチを使っていたが、これだとカバンの中や服のポケットの中で勝手にスイッチが入ったり切れたりする。2号機ではスライドスイッチを使った。

E2314
1号機の回路はOPAmpヘッドフォンアンプNo.2と同じだ。
ケースが大きい上、オペアンプを一つしか使っていないので、中はガラガラである。
1号機の配線は2時間ほどで済んだが、2号機の配線は4〜5時間かかってしまった。

ヘッドホンアンプ2号機は、単三電池2本しか使っていないが、それなりに良い音がする。
以前の1号機の方が低音が効いていたような気がするが、それ以外の音質は、むしろ2号機の方が良いと思う。
特に中音域の音のキレが良い。
その上、小さくて携帯性も良いので、最近は、毎日通勤の朝夕の電車の中で聞いている。

| | Comments (4) | TrackBack (0)

June 21, 2008

iPod shuffle 充電器を作る

E1061iPod 第2世代 shuffle 専用充電器を作った。
自分のブログを見返してみると、以前、デジタル小物の回で、iPod を買いたいと言った事はあったが、実際に iPod Shuffle を買った事は報告していなかったようだ。実は、この春に iPod Shuffle を買っていた。フィットにカーオーディオを付けるの回で、 AUX 接続したのも、この iPod shuffle である。
使っていると、最もシンプルな iPod shuffle は、それなりに使いやすい。もちろん、機能の豊富な iPod nano 以上の iPod が欲しいときは無いと言えば嘘になるが、野外で音楽を聴くには十二分だ。

使っていて不満が出たのは、充電器である。付属の USB ケーブル(正確には DOCK か?)だと、パソコン使用時にしか充電できない。普段、iPod を使っているのは、妻で、先日、バッテリーが上がったとき、充電の仕方が判らなかったのだ。
もちろん、私が充電すれば良いのだし、iPod shuffle は、一度フル充電すると忘れてしまうくらい長持ちするのだが、やはり、使いたいときに自分で充電するのが一番良い。
確かに、充電するだけのために一々パソコンを起動するのも面倒だし、さりとて専用の充電器も意外と高いので、作ってしまったのが、写真の充電器だ。
最も作ったのは、中央部だけで、左は iPod 本体と DOCK だし、右の黒いのは Zaurus 用の AC アダプターだ。

E1062E1063

調べてみると左の DOCK のジャックは、USB コネクタと、この写真のように接続されているだけだ。また、右は一般的な USB のホスト側のコネクタだ。USB は、電源に5Vを用いているし、実際、パソコンに接続した時の DOCK のジャックをテスターであたったら、5Vが出ていた。
そこで、Zaurus の AC アダプター(5V)を使って USB コネクタに電力を与えれば充電できるだろうと作ったのが、今回の充電器だ。
問題は、2つの信号線だ。15KΩ位の抵抗を介してプルアップするかプルダウンするかなのだが、状況が良く判らない。とは言え、組み合わせは、たった四通りなのだから、全て試すことにした。なお、手持ちに15KΩの抵抗が無かったので、10KΩの抵抗で試した。

・D+/D−ともにプルダウン
 USBの定義的には、パソコンを接続した状態
 iPod shuffle を接続すると、オレンジ色の LED が数回点滅した後、消灯する。
・D+はプルダウン/D−はプルアップ
 USBの定義的には、ロースピード USB
 iPod shuffle を接続すると、オレンジ色の LED が数回点滅した後、消灯する。
・D+はプルアップ/D−はプルダウン
 USBの定義的には、フルスピード or ハイスピード USB
 iPod shuffle を接続すると、オレンジ色の LED が数回点滅した後、消灯する。
・D+/D−ともにプルアップ
 USBの定義的には、不明??
 iPod shuffle を接続すると、オレンジ色の LED が点灯する。

予測では、「D+/D−ともにプルダウン」だったんだけど、どうやら普段パソコンで充電するときと同じなのは「D+/D−ともにプルアップ」のようだ。

と言うわけで、「D+/D−ともにプルアップ」の状態で、iPod shuffle を一時間半位接続したままにしておいたら、オレンジ色の LED は、グリーン色に変わった。充電完了の印である。

で、iPod 第2世代 shuffle 専用充電器の完成。

もし、このコンテンツ読んで作る気になっても自己責任で。万一、iPod が故障しても責任取れません。

| | Comments (0) | TrackBack (0)

May 05, 2008

12 コア CPU を FPGA に

堅い話題が続いているので、ちょっと休憩。

雑誌の付録の FPGA で遊んで居る。
25万ゲートとは言え、オンチップでメモリーに使えるのは 24k バイトが上限なので、ワンチップ・マイコンとして使うなら、そんなに大規模ではない。小規模な組込み制御用のマイコンとして、適当なCPUコアを入れてリアルタイムOSをインストールできないか、調査し始めた。

調査を進めるうちに、疑問が芽生えて来た。
適当なCPUとリアルタイムOSが見つからなかった訳ではない。

「ワンチップ・マイコンとしてリアルタイムOSを走らすことに、FPGAの使い方として、何のメリットがあるというのか??」と

市販のワンチップ・マイコンに比べて、FPGAにCPUコアを入れることが有利な点は、インターフェース部分を自由に作り替えることは可能な事くらいだ。それ以外は、市販のワンチップ・マイコンの方が遥かに有利だ。数百円も出せば、H8 や SH-Tiny など、FPGA の何倍ものメモリー容量を持つワンチップ・マイコンが買えるし、それらでリアルタイムOSを使って居て、何の不便も無い。
もし、インターフェースを自由に作り替えたいなら、数百円のワンチップ・マイコンに、これまた数百円で買える数千ゲート級の CPLD を付けた方が大容量FPGAを使うより安くて早い。

FPGA でなければ、実現できないような事じゃなきゃ、試しても意味が無い。

そもそも、何故、リアルタイムOSを使うかと言うと、組み込み制御のマイコンの場合、いくつかの処理を組み合わせている場合が多いからだ。プログラミング・テクニックを駆使して、複数の処理を一つのタスク上で時分割に行うよりも、リアルタイムOS上で複数のタスクに各々の処理を任せた方が楽だ。

だが、本当に「複数の処理を行うには、リアルタイムOSでマルチタスクで行う」のがベストなんだろうか?
考えてみれば、大きな前提条件として「複数のCPUを組み合わせるのは難しい」があって始めて「リアルタイムOSがベスト」と言える。

もし、「必要なタスクの数だけCPUがある」のなら、リアルタイムOSは必要ないのかもしれない。

私自身のリアルタイムOSで作ったプログラムをみると、タスクの数は概ね6〜8個迄である。もちろん、大きなプログラムで、もっとタスクの数が必要になった時もあるが、それはむしろ例外的だ。大概の場合、10個程度のタスクが使えれば、それなりに使えそうだ。

市販のマイコン・チップは、当然のことながら、1つのチップで、1つのCPUコアしかもたない。最近では、SH などでもデュアルコアのチップが出始めたが、これは極めて例外的だし、それとて CPU コアの数は2個が上限だ。

今までは 10個のCPUが必要なら、10個のマイコン・チップを接続するしかなかった。これは大変な手間である。こんな手間をするくらいなら、リアルタイムOSの方が、ずっと楽だ。

だが、FPGA だと話は別だ。複数のCPUコアを一つのチップ上に入れることなど、造作もない。実際、25万ゲートのFPGAにZ80コンパチCPUを入れた時、半分も使って居なかったので、少なくとも2つの Z80 CPU をいれることは可能だろう。

もっとシンプルな CPU なら、もっと沢山の CPU が FPGA の中に入るかもしれない。

FPGA 上にマルチコアを入れ、各々のCPUコアに一つずつタスクを割り当てるなら、Z80 よりシンプルな機能の CPU で十分だろう。割り込みも必要ない。そもそもリアルタイムOSは使わないし、また、割り込みが必要なタスクには、それぞれ専用の CPU を割り当てるからだ。

ネットで調べた結果、XILINX が 公開している PicoBlaze と言う CPU が、コンパクトで良さそうだと判った。PicoBlaze は正確にはオープンソースでは無いのだが、無料で使えるので、CPU を何個 FPGA 上に作ってもロイヤリティーの問題は無い。ただ、PicoBlaze は割り込みの機能があるのだが、これは使わなければ良いだけの話だろう。

いろいろ試して、25万ゲートの FPGA に 12個の PicoBlaze CPU を乗せることに成功した。

それぞれの CPU 間は、メッセージ・キューやセマフォにあたる機能をハードウエア的に作って接続し、データの受け渡しや並行処理の同期を行っている。まだ、共有メモりにあたるものは実装していないが、作るのは難しくは無さそうである。

各 CPU は、PCCOMP と言う専用の C コンパイラでプログラミングした。実は、この C コンパイラの癖が強いのが、最も苦労したところだ。もっとも PicoBlaze と言う CPU 自体がプログラムエリアは 2k バイトと、それなりの容量なのに、リード・ライトできるデータエリアが僅か 64 バイトと極端に少ないので、あながちコンパイラの所為とも言い切れない。

とりあえず、12 個の CPU を1つの FPGA に乗せ、何とかデータの受け渡しや処理の同期を試したと言うのが本当のところで、まだまだ、複数 CPU による複数タスクの効果を確認したところまで達して居ない。

次の課題は、少なくともマルチ CPU ・マルチタスクの効果を確認できるような使い方を試す事だと思う。

ちゃんと実用になるためには、もう少しプログラミングしやすい CPU が欲しいところだ。コンパイラとして gcc が使え、メモリーは 2k バイトでも良いから、プログラム領域とデータ領域が共用できて欲しい。MIPS のようにメジャーな CPU のオープンソースの互換コアで、割り込み等は省略しても小さいサイズのものを探すべきなのかも知れない。

もっとも、理想的な CPU が見つかって、多数の CPU を FPGA に乗せることができても、何等かの理由で、リアルタイム OS の方が使い勝手が良いと言う結論になる可能性もある。

それを確かめるためにも、頭の中で考えるだけじゃなくて、実際に試してみなきゃいけないんだよねえ。

| | Comments (2) | TrackBack (0)

April 29, 2008

FPGA 再入門

昨年から大量の半田付け作業が続いている。半田付け箇所が多いのは、ディスクリートで回路を組んでいるからだ。(ディスクリートとは、単機能の IC を組み合わせてデジタル回路を作ること)
パワー制御部やアナログ部分はともかく、デジタル部は FPGA にすれば良いのに・・と友人に指摘を受けた。

FPGA とか CPLD や PLD を知っているだろうか?
IC とか LSI と言った集積回路の中身を自由に作り替える事のできる部品だ。中に入れる回路を規模が小さいものを PLD、中規模のものを CPLD、大規模のものを FPGA だと思ってもらうとイメージしやすいだろう。
(正確には FPGA と CPLD と PLD の違いは回路規模では無く、内部構造の違いである。しかし、ユーザーから見るとコンパイラが対応してくれるので、回路規模しか違いが見えない。CPU の CISC と RISC みたいな違い)

現在、半田付け作業は一段落付いているが、また、再開するかもしれない。今の間に FPGA を使えるようにしておこうと思い、試してみた。

以前は、Windows 98SE 上に FPGA 開発環境を構築していたのだが、いまさら 98SE でもあるまい。私が個人的に良く使う FPGA デバイス・メーカーである XILINX のサイトを見ると最新版は Linux にも対応していると言う。
対応 Linux は RedHat だが、Debian でも使えるようだ。早速、試すと意外と簡単に Debian Linux etch にインストールできた。昔作った FPGA ライター用ケーブルを接続すると簡単に FPGA (正確には CPLD)に書き込めた。

FPGA や CPLD を使うのも 5〜6年ぶりなので、世間の情勢が判らなくなっているので、ちょっと調べてみた。以前なら入手が難しかった CPLD も秋葉原の秋月や千石で数百円程度から買えるようになっている。

「デバイスの値段が安くなったとは言え、品揃えは昔と、そう変わらないなあ・・」と思って居たら、とんでもない勘違いだと気付いた。なんと千石で20万ゲートの FPGA が数千円で売っている。こんなものが数千円で手に入るとは・・・

こう言うことに詳しい友人に聞いたところ、ここ2・3年では、当たり前の事なんだそうだ。
うかうかしていると時代に取り残されるなあ。

5〜6年前にも10万ゲートを越える FPGA はあるにはあった。だが、何十万円もして、とてもアマチュアの手の出せるものでは無かった。それが、今では数千円で買えるほど、なっている。
一番手軽に数十万ゲート級の FPGA を試すのは雑誌の付録になっているものを使う事らしい。早速、去年のデザインウエーブを入手して試した。

雑誌付録の25万ゲートの FPGA に書き込むには自作のケーブルでは駄目で、既製品のケーブルを使わざるを得なかった。しかし、全て LINUX 上で開発環境がそろうとは頼もしい。
試しにオープンソースとして公開されている Z80 互換の CPU コア t80 を入て、シリアルポートに「Hello World」を出力するプログラムを走らせたら、ちゃんと動いた。

やはり、十万ゲートを越える FPGA は世界が違う。ワンチップ上に CPU とシリアルインターフェース、メモリーまで付けて、まだ半分しか使っていない。30年前に自作したコンピュータの何倍もの規模の回路が、この FPGA の上に乗りそうだ。
それどころか、ちょっと外部に回路を追加すれば、昔のパソコン PC-8001 くらい作れそうだ。

と、妄想しながら、ネット上を探索すると居る居る。PC-8001 に限らず、MSX とか X6800 とか、昔のパソコンを FPGA を使って再現している人が既にいっぱい居る。
誰でも考えることは同じかあ。
既に実行した人が居るんじゃ、今更やっても面白くない。何か別の事をやってみよう。

| | Comments (0) | TrackBack (0)

July 08, 2007

SH-TINY その5 漢字ターミナルを作る

さすがに、いっぺんに3つもコンテンツをアップすると疲れるなあ。
E0961前回、秋月のグラフィック液晶に漢字を表示したのに、良い気になって、今回は、漢字ターミナルを作ってみた。
(クリックすると写真は拡大)

この写真のように、PS/2 インターフェースを付け、フルキーボードからキー入力を得られるようにした。
キー入力と漢字の表示とを、シリアルインターフェースで入出力することで、漢字ターミナルとしている。

漢字フォントは、8x8 ドットだ。
これは、前回の最後に書いたように、SH-TINY の ROM サイズ(128K)に収まるのは、8x8 ドットが限界だったからだ。
写真では、恵梨沙フォントを使っているが、美咲フォントを使うことも、もちろん可能だ。

E0962写真の例では、シリアルケーブル経由で、Debian Linux Sarge にログインしている。
ls で、存在しないファイルを探そうとしたので、漢字でエラーメッセージが出ているのが判る。
(クリックすると写真は拡大)

シリアルケーブル経由と言えど、ちゃんとログインしているので、なんでもできる。

回路図
E0963前回の回路図に比べて、PS/2 インタフェースが増えただけだ。
IRQ0 を使って、PS/2 クロックを受信している。

(クリックすると画像は拡大)

プログラム
sh7125term.tgzをダウンロード

プログラムの構築には、漢字フォントが必須だ。漢字フォントのダウンロードと解凍については、前回のコンテンツを参考にしてもらいたい。

$ cd ~/hos-v4/sample/
$ tar zxvf sh7125glcd.tgz
$ cd sh7125glcd/
$ make -f make -f gcc.mak

ホスト PC の Linux に外部ターミナルからシリアル経由でログインするには、外部ターミナルを起動した後、ホスト側で次のようにコマンドする。

# /sbin/getty -L 38400 ttyS0 vt100

後は、普通にログインするだけである。

プログラムの説明
このプログラムは、2つのタスクで成り立っている。
(1)シリアルインターフェースから文字を受け取り、グラフィック液晶に表示するタスク
(2)PS/2 キーボードから信号を受け取り、スキャンテーブルで ASCII コードに変換し、シリアルインターフェースから送るタスク

グラフィック液晶に対するアクセスは、(1)のタクスのみである。従って、グラフィック液晶に対するアクセスがコンフリクトを起こす可能性は無いと判断し、セマフォ等の設定はしていない。
もし、2つ以上のタスクがグラフィック液晶をアクセスするようなプログラムを作る場合、セマフォ等で排他処理をしないとコンフリクトを起こす可能性があるから注意されたい。

シリアルインターフェースに対するアクセスは(1)(2)の両方のタスクからある。従って、コンフリクトの可能性が大きく、また、良く使うので、汎用的に使えるデバイスドライバにしておいた。セマフォや割り込みなど多数使用している。
ホスト側から速い速度で、データを送られた時、表示が間に合わなくなるので、XON/XOFF によるソフトウエア・フロー制御を行うようにしている。

PS/2 キーボード・インタフェースは、不規則性で、迅速な処理が必要なので、IRQ による外部割り込みを使っている。

このように複数のタスクや、割り込み等を使ってプログラムが書けるところが、リアルタイム OS の良いところだ。

なお、通信のボーレートは 38400bps 固定、キーボードは日本語キーのみ、漢字コードは EUC-JP のみ、エスケープシーケンスは最低限のモノしか用意していない。
この辺、誰か汎用的にしてくれると嬉しいのだが・・・
(エスケープシーケンスを揃えて、VT100互換にしても vi や emacs でエディットするのはキツイと思うが)

最後に
いやあ、結構、SH-TINY って、何でもできるね。
最後の漢字ターミナルなんて、黎明期のパソコン PC-8001とかPET並みだよね。もちろん、表示のドット数は落ちるけど、速度とか逆に速いような気もするし。
漢字ターミナルは、フォントデータが大きいけど、それでも 70K 程度しかない。まだ、50K も ROM が余っている。これに BASIC 等のインタープリタ/スクリプト言語を載せたら、本当に黎明期のパソコン並みになると思うのだが・・・

玄箱のシリアルインターフェースに接続するのも良いかも知れない。
DHCP で得た IP や内部状態のモニターだけでなく、新幹線の車内ニュース表示のように、インターネット上のニュースを RSS 経由で得て、表示するのも面白い。

もっと、大きな視認性の高い漢字フォントを使いたければ、外部にシリアルインターフェースの ROM でも付ければ良いかもしれない。ただし、アクセス速度の問題があるので、プログラムを工夫する必要が出ると思うが。

妄想は広がるばかりだ。

| | Comments (0) | TrackBack (0)

SH-TINY その4 秋月のグラフィック液晶で漢字を表示

E0951今回は、秋月のグラフィック液晶(122x32 ドット)を使い、さらにリアルタイム OS の HOS-V4 を使って漢字を表示する方法を示す。

左の写真は、16x16 の東雲フォントを使って表示した例だ。
(クリックすると画像が拡大する)

難しい漢字も表示できているが、半角で15文字x2行、全角で7文字x2行と少ししか表示できないのが難点だ。

E0952左の写真は、12x12 の東雲フォントを使って表示した例だ。

(クリックすると画像が拡大する)

少し字が小さくなっている。

文字数は、半角で20文字x2行、全角で10文字x2行だ。

E0953左の写真は、8x8 の美咲フォントを使って表示した例だ。

(クリックすると画像が拡大する)

かなり、字が小さく、複雑な文字は判別が困難だ。

文字数は、半角で30文字x4行、全角で15文字x4行だ。

E0954左の写真は、8x8 の恵梨沙フォントを使って表示している。ただし、半角文字は、美咲フォントを使っている。

(クリックすると画像が拡大する)

かなり、字が小さく、複雑な文字は判別が困難だ。

文字数は、半角で30文字x4行、全角で15文字x4行だ。

回路図は、下記の通りである。
このグラフィック液晶は、2kHz のクロックが必要なのだが、このクロックは、SH-TINY のタイマー機能を使って作っている。

E0955(クリックすると画像が拡大する)

フォントのダウンロード
フォントは、X Window 用のビットマップフォントで、フリーでダウンロードできるものを使用している。
フリーと言っても、ライセンスの問題もあり、フォントの転載は難しいので、直接下記のリンクからダウンロードしてもらいたい。
東雲 ビットマップフォントファミリー から shinonome-0.9.11p1.tar.bz2 をダウンロード

美咲フォント から mskbdb10.tar.gz をダウンロード

恵梨沙フォントファミリー から elisau10.tgz をダウンロード

$ cd ~/hos-v4
$ mkdir fonts
$ cd fonts
$ tar jxvf shinonome-0.9.11p1.tar.bz2
$ mkdir misaki
$ cd misaki
$ tar zxvf mskbdb10.tar.gz
$ cd ..
$ mkdir elisau10
$ cd elisau10
$ tar zxvf elisau10.tgz

プログラム
sh7125glcd.tgzをダウンロード

$ cd ~/hos-v4/sample/
$ tar zxvf sh7125glcd.tgz
$ cd sh7125glcd/
$ make -f make -f gcc.mak

プログラムを見たら判ると思うが、ruby で、出力する文字列から、必要な漢字フォントのデータを配列化して ROM に書き込むようにしている。このため、ruby のインストールが必須である。

できた sampleRom.mot を SH-TINY ボードに書き込むと、グラフィック液晶に漢字文字列を表示しつつ、「いわゆる哲学者の食事の問題」を実行する。

今回の方法では、漢字フォントの内、必要なデータだけを切り出して、SH-TINY の ROM に書き込んでいる。プログラムが予め表示すべき文字列を用意している場合は、この方法で十分だろう。

SH-TINY の ROM は、128K バイトなので、16x16 や 12x12 ドットの漢字のデータを全て書き込む事はできない。しかし、8x8 ドットの漢字フォントなら、JIS 第2水準まで全て含めても 53Kバイトで収まる。あらゆる漢字を表示する必要がある場合、漢字フォントを ROM に書き込む方法もあり得る。

| | Comments (0) | TrackBack (0)