2009年3月19日木曜日

TinyでDRO!(ハードウェア1)

このシステム全体は+5V電源で動作するようになっています。5V出力のACアダプターで直接給電です。それを前提に回路の説明です。

図の左端にはスケールからのクロックおよびデータの信号入力があります。スケールの電源は電位の高いほうがフレーム=GND電位で、低いほうが-1.5Vと通常とは逆の電位になっているので、C3およびC4による容量結合で4049(hex inverter, IC1)でレベルシフト、増幅しています。4049から出力された両信号は元の信号の反転になっています。これらはTiny2313のポート入力につながります。

左上のNチャンネルMOSFET uPA2753GR(Q7)はゼロクリアをスケールに対して送るためにあります。ポート出力でスケールのGNDとクロック線を(抵抗を介して)ショートさせます(スケール本体のZEROボタンを押したのとまったく等価と思われる)。

図の上半分はLEDドライブ回路です。Tiny2313の少ないポートでこれだけのLEDセグメントを駆動するためダイナミック点灯をさせることにします。数字が6桁すなわちデューティ1/6なので、見掛け上の明るさを稼ぐために1セグメントあたり20mAずつ流します。1コモン端子あたりの最大電流は、7セグメント+1DPで8素子ですから×8で、160mAです。ドライブ用トランジスタをポピュラーな2SA1015ではなく2SA950にしたのはこのためです。実は160mAというのはTiny2313の「全ポートのIOLの合計が60mAを超えるべきではない」という注意書きから外れています(前モデルの90S2313にすればこの条件が100mAと若干軽減されます)。本来ならばドライバトランジスタを挿入するべきでしょう。…が、とりあえず動いているのでまあいいかと。

LEDコモンのドライバトランジスタの選択に74HC138(3-to-8 decoder, IC3)を使用しています。Tiny2313のピン数が足りないための苦肉の策。リセット直後のポート出力が確定していない時期に、特にフラッシュ書き込みを行っている最中に変な表示が出ないように、リセットが利いている間は出力を禁止するようHC138のG1にリセット線を接続しています。

図の右下にダイオードを介してスイッチがつながっているのが見えます。LEDの(ダイナミック点灯のための)スキャンをキーのスキャンにも利用しているのです。これもやはりポートが足りないのが理由です。LEDはダイナミック点灯により約360Hz周期で切り替えますので約60Hzで1周します。キーのスキャンにはちょうど良いくらいの周期です。この方法ならばあと4つもスイッチを増やすことも可能です。なおダイオードと反対側のスイッチの端子は1つの入力ポートに集められます。この入力ポートはプルアップされてなければいけません。ダイオードの役割は2つのスイッチが同時にONになったときHC138の出力同士がショートしてしまうのを防ぐためにあります。逆流防止ダイオードとかいいますね。

Tiny2313にはセラロックが接続されているように書いてありますが、内蔵のRC発振回路で十分だということが分かりましたので、実際は接続しません。ただ、90S2313を使用する場合は必要です。RC発振回路が内蔵されていないからです。

回路の簡単な説明でした。次は基板を設計してOLIMEXに発注するのですが、先人が苦労されてきたとおりやはり最初は一筋縄ではいかずちょっと苦労しました。その話はまたいずれ。

基板が届くまでにずいぶんと時間がありますから、その間にソフトのコーディングとブレッドボードによるプロトタイピングです。これはそのときの様子です。ここまでちゃんと動くのに結構悩みました…。

0 件のコメント: