« FPGAでLEDピコピコ | トップページ | 雑誌付録のイーサネットマイコン »

2008年9月 9日 (火)

Mega128のSDカード付き基板

こんなこともあるんだ(7/20/08)
 FPGA騒ぎが一段落して、やりかけていたMega128のCPU基板を作っている。最初に取り組んだのが、USBシリアル変換基板のパートである。実はこの変換基板、通販でアイテムラボにピンポストを注文するときに送料コストを下げるため試しに買った基板で、それにあうICを秋月で買ったという完全に目的と手段が逆になっている基板である。

 乗せたICはFTD232RLというUSBシリアル変換のICで秋月ではモジュールとして売っているのでわざわざ変換基板につける必要はない。モジュールとして買えば\950、ICで買っても\600、手間やモジュールに付いている部品を考えればあまりメリットはない。秋月も良心的な商売をしていると思う。Pict0732

 CPU基板は既に、SDカードとUSBソケットの実装は済んでいる。工具を揃えたお陰で、こうした基板工作の生産性は格段に上がった。難物だったDCアダプターのソケットも、ドリルスタンド(ボール盤と言えば聞こえは良いが、そこまではいかない)で、1ミリの孔を正確に開けられるようになったので、簡単に付けられる。

 USBソケットのピンはユニバーサル基板に合わず、小窓を明け、そこからUEW線とピンを半田付けして手近なランドにつないである。しかし線が短いためランドの半田付けでピンとの半田付けが溶けてはずれるのに苦労する。線をピンに一回ループさせ、手短に半田付けを済ませることで何とかしのいだ。いや半田付けというのは本当に職人芸だ。804

 半田付けが終わり、確認をすませて接続しようとしたところ、ふと秋月の前のモジュールの配線図を見ていてUSBのピンの位置がおかしいのに気がついた。USBバスのVccの隣に空きピンがない。危なかった。GNDとVccを完全に逆に配線していた。このまえの逆ざしの二の舞になるところである。VccとGNDがショートしていないことを確かめて、いよいよUSBケーブルを差し込む。全く反応がない。

 ま、そんなものだ。ケーブルをはずして基板の上から導通テストを一本づつ始める。変換基板は28ピンのSOCを2段のDIPピンに替えているので、ICピンから直接に確かめてないと危ない。案の定、片側は合っていたが、もう一方は逆にピンがでていることがわかる。やれやれ、紙に配線図を作ったときにすでにピン配置を逆にしていた。

 一旦配線したものを換えるのは大変だ。特に今度はチップコンデンサーを3つも使っているので、この配置換えに苦労する。しかし、このチップコンデンサーは熱に強い。何度半田付けしてもちゃんと容量が残っている。これで大丈夫だと、配線換えした基板にUSBをつなぐ。うんともすんとも動かない。

 うーむ。何が原因だろう。もういちど最初からピンの配線の確認を始める。おや、Vccと所定のピンが接続されていないぞ。おかしいな番号は合っている。え、え、えー、番号の振り方が間違っている。DIPやSOCのICはピン番号は左上から始まって、左下、右下に移り右上が最終ピンである。紙に書いた配線図は、左下まで行って番号が右上に上がっている。何と言う基本ミス。表のピンアサインを半田面の裏に移し、2段に移し変えていく間に間違えたらしい。さっき2段のピン位置の間違いに気を取られ、ピンアサインそのものが間違っているのに気がつかなかった。

 3度目の配線違いの修正はさすがに気が重い。ミスをするときは重なるものだ。いわゆる天中殺である。変換基板は結構大きく、秋月の変換モジュールと大差がない。無駄な作業をやっているような気がして、むなしい気分がよぎる。しかもまだ動いていないのだ。

 やっとのことで配線を終え、祈る気分でUSBケーブルを差し込む。やった、「新しいディバイスが認識されました」のメッセージが出て、やっとのことで新しいシリアルポートが出現した。やれやれ、やっと通った。と喜んだのも束の間、次に差し込むと認識されない。おかしいなと接触不良かと、ソケットあたりに少し力を入れたら、ボロッとソケットがはずれかかった。半田が不足していて固定ピンの半田がはずれたのである。泣きたい気分である。

 めげる気持ちを奮い立たせ、半田をたっぷり盛ってしっかり固定してテストを続行する。こんなことで挫折するわけにはいかない。まあ、それにしてもついていない日である。調べた結果、USBのホストコントローラーの組み込みに失敗している。別のシリアルUSBディバイスをつないだあとは上手く行くが、単独では失敗するようだ。まあ、動くことは確認できた。この日はこれでおしまいにした。

 次の日、本格的にWebでホストコントローラのことを調べてやろうとPCを立ち上げ、ふと、ハードの配線が一本不足しているのに気がついた。ピンの中にTESTというピンがあり、指定では、これもGNDに落とせとある。推奨配線図で違うところはここだけである。

 まあ、調べる前にたいしたことにはならないけれど、念のためつけておこうと半田ごてに電源をいれ、TESTピンをGNDに接続する。何と何と、これで問題なくUSBシリアルポートが認識されたのである。何度やっても問題なし。これまでこういうピンはだいたい何もしないで動いていたので放置してあった。USBだっていくらでもポート番号が増えるので好い加減に削除しても復活し問題になったことはない。それにしても、こんなこともあるんだ。いやいや「データシートは穴が開くまで見てそのとおりにする」という教訓が身にしみた一件であった。

CPU基板完動!(7/22/08)
 3連休は、寸暇を惜しんで電子工作にいそしんだ。USBシリアルのチップの配線では3度も配線を間違い一時は投げ出したくなる気にもなったが、トラブルが思わぬところで簡単に解決し気を良くして残りの作業に取り組む。SDカードの7つ余りのプルダウン抵抗の半田付けや、USB部との絶縁のためのトランジスタ回路(エミッタフォロワー)、CPUの3つの電源の配線とチップコンデンサーの埋め込み。細かい作業が続く。

 最後の作業は、レベルシフタのICの配線で、これは紙に何度もアートワークをやって最適な位置を探す。こういうアートワークのためにフリーソフトのCADもダウンロードしてあるのだが、なかなか導入する機会がない。なにしろ先にやりたいことが多すぎる。

 このCPU基板でSDカードに入れたWAVファイルの再生までやりたいのだが、FM放送なみの音質にするには、Mega128クラスでは自前のDACを持っていないので難しい。H8にはDACはあるが、小さなチップでうまくやるというのがアマチュアのこだわりだ。でも、サイトでDACの代わりにするPWM機能などを調べていたら、秋月でSACD並みの音質のDACチップが¥800で売っている。何となく気がそがれる。しかしアナログの世界は懐かしい。フィルターの設計では、40年以上前に大学で学んだ伝達関数が出てくる。丸善の分厚い対数表で7桁の掛け算を徹夜してやったことを思いだす。

 それはともかく、今日は朝から腰が痛くなるまで半田付けを続け、夜半、遂に全部の配線が終わった。コネクタのピンアサインなどは適当である。はやる心を抑えて恐る恐る電源を入れる。パイロットランプのLEDが付かない。頭から血の気が引いていく。さっき導通テストは済んでいる。ISPケーブルをつけてCPUそのものの動作も確認している。どこかが短絡したか。

 すぐに電源を切り、配線面を調べる。はっはっは、LEDのアースが位置を決めただけで半田付けを忘れていた。いやいやあせってはいけない。急いで半田付けし、もういちど配線を見直して再度電源を入れる。 出た。PCのシリアル画面に初期メッセージが表示される。しかし、SDカードNotReadyというエラーメッセージが出て先に進まない。はっはっは、SDカードが入っていなかった。

 SDカードを差してもういちど電源を入れる。やった。ちゃんとファイルをオープンしたというメッセージがでる。SDカードの部分は完全試合達成だ。アクセスランプも点滅する。しかし、LEDマトリックスはまだ点かない。フラットケーブルなので制御ラインのピンアサインが良く分からない。こうなったら3本しかないので手当たり次第に差し替えて見る。こわれることはないだろう。6回やれば総当りだが、2回目で出た!今までの電光表示が何事もなく表示される。

 遂に、Mega128のCPU基板の完成だ。まだRTCとバックアップMega128ledバッテリの実装が済んでいないが当面の作業には不自由しない。この基板はSDカードとUSBシリアルポートを内蔵しており、40ピンのソケットからI/Oピンを引き出せる。これでブレッドボードの2/3を占拠していた部分が開放され、がた老AVR研究所の効率は一段と向上する。

 散々苦労して動いたときも嬉しいが、こうして一発で動いたときの喜びもまた格別である。電池接続して場所を移動して動かしてみる。まるで子供のようなはしゃぎようである。

こんなこともあるんだ その2(7/25/08)
 このあいだはICのTESTピンを放置していてえらい目にあったが、今度もたったひとつの部品を手抜きしただけで、丸々一日半はまっていた。汎用CPU基板が順調に電光掲示板を光らせたあとチップを取り替えていくつかテストをしていた。Mega128の石は2つ買ってあって、ひとつはSDカードのテスト用にオリジナルのファームが書き込んである。これに差し替え、複数のSDカードのアクセステストをしていたときである。

 これまで何の問題もなく読み書きできていた16Mのカードが急に読めなくなった。128Mは最初エラーが出るが2回目からはちゃんと動く。ブレッドボード上のセットではどちらも問題ない。SDカードではなく、CPU基板がおかしい。基板をかえたところは、あのあとRTC(リアルタイムクロック)基板を差し込んでブレッドボードと共用するようにソケットを新設しただけで、SDカードあたりは全くいじっていない。

 SDカードアクセスの中身を知るちょうど良い機会と思い、chaN氏のソースリストに盛大にテストステートメントを入れて、初期化のシーケンスを追ってみることにした。これの説明はWebに詳しいが、そのやりとりを出てくるテストメッセージからトレースすることは簡単ではない。まずやっていることを把握しなければ、テストステートメントを入れる場所すらわからない。適当なところに入れてもエラーで帰ってくるところが表示されるだけで中身がわからない。やっとのことでその場所を見つけると、今度は沢山出すぎて何がなんだか余計分からない。

 数時間格闘して、わかったことは、ソースコードが想定しているようなレスポンスをSDカードが全く返しておらず、みんな迷路に入ってタイムアウトしているということだ。これは厄介な話である。ソフトではなく、ハードの問題の可能性が高い。電圧を測る。異常はない。パーツの緒元を確認する。間違いない。ブレッドボードと違うところは、電源を常時ONにしていることとソケットが違うだけである。配線違いがあればそもそも最初から動かないはずだ。

 SDカードの電源のパスコンは3.3Vレギュレータにアルミ電解100μと積層セラミックの0.1μが入っている。SDソケットの近くには、そう言えばない。オリジナルとブレッドボードの方はFETで電源をON/OFFしているので、インダクターと5μのコンデンサがついているが、これは電源ON時の急激な電圧低下防止用で、基板では常時ONのため省いてある。ブレッドボードにはオリジナル通りついている。これか。こんなものくらいで動作がおかしくなるということがあるのだろうか。いやもっと別の配線はずれか、ミスがあるのかもしれない。128Mなら大丈夫だし、16Mでも時々動くときがあるのだ。第一最初は問題なく動いていたのである。この日は夜も遅かったので頭を捻りながら床についた。

 次の日。FETをあらためて組み込むのもおおごとなので、コンデンサだけつけてみることにした。SDカードはカード自身がプロセッサーで確かに電源にパスコンがないのはまずい。しかし、電源を共有するレベルシフトICは近傍にあり、そこにはパスコンが入っている。半信半疑でコンデンサを半田付けしてみる。信じていない証拠にリード線を切らないで長いまま臨時の半田付けである。

 これが、何と、やっぱりというか、今までのトラブルの原因だったのである。これまでの機嫌の悪さが嘘のように、全くリトライもなく、SDカードは正しいレスポンスを返し、16Mが初期化される。128Mも問題なし。SDカードはかなり電流が流れるということで、電源変動が大きくてミスをしていたのか。いやそれにしても劇的な解決である。オッシロでもあればすぐにわかったのかもしれないが、ロジアナではこういうトラブルはわからないだろう。それにしても何故最初は動いていたのだろう。

 パスコンは教科書などにはICひとつに必ずつけろとあるが、それは発振などの予防で、なくても動くことが多い。あのLEDマトリックス基板だって全部のICにはついていない。しかし、こんなこともあるんだ。良い勉強になった。要は基本は忠実にということだ。別の目的で遂に買った2GバイトのマイクロSDカード(わずか¥960)もちゃんと認識し、正しいファイルサイズを表示した。偉い。コンデンサのリードを短く切って正式に組み込む。これでこれまでのブレッドボードは解体することが出来そうである。

|

« FPGAでLEDピコピコ | トップページ | 雑誌付録のイーサネットマイコン »

AVR」カテゴリの記事

コメント

mega128でDragonというプログラマーが出来るらしい。
回路図やソースなんかもありますよ。
私はこれで作らずmega164pにしようと思っています。

投稿: 秘密 | 2008年9月18日 (木) 22時37分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: Mega128のSDカード付き基板:

« FPGAでLEDピコピコ | トップページ | 雑誌付録のイーサネットマイコン »