AT90S1200による増設出力モジュール

【どんなもの】
 AVRに限らず、ワンチップマイコンで応用回路を設計
していると、出力ポートが足りなくなることがあります。
こういう時は、シフトレジスタにラッチの付いたIC(
4094とか74HC595)を外付けすることが多いようです。
これらのICは、3本の通信線で8ビットの出力が得られま
す。より多くの出力が欲しい時はこれらのICを数珠繋ぎ
にします。

 こういうICの代わりに、内蔵RC発振器で動くAT90S1200が
使えないかと考えました。

 まずホストとの通信は非同期シリアル通信にします。
こうすれば1本の通信線でOKです。AT90S1200は15ビット
のI/Oポートがありますから、そのうちの1本を通信に使う
とすると残り14ビットを出力ポートとして使えます。

 AT90S1200の内蔵RC発振器はそれほど安定に発振する
わけではありませんし、またホスト側もそうである可能
性があります。どうせAT90S1200にはシリアル通信のた
めのハードウェアはありませんし、柔軟にいろいろなボー
レートに対応するために、最初の通信で、ボーレートを
決定する方法を取りました。

 非同期シリアル通信のフォーマットは、上記のようになっています。
(8ビット長、パリティ無し)
 通信していない時はHレベル
 スタートビットは Lレベル
 以下、LSBからMSBまで出力して
 ストップビットは Hレベル

LSBを必ずHレベルとすれば、Lレベルの時間を測定す
ればストップビットの長さ(=ボーレート)がわかりま
す。

4800bps、9600bps、19200bpsのいずれでも通信できました。
もちろん、この間の中途半端なボーレートでもかまいません。

またこの増設出力モジュールは複数接続できるようにもしましょう。(下図)
最大8台としておけば、まず足りないことはないはずです。


回路図です。↓



ソフトウェア


 この回路は複数繋がることから、自分に対する送信データであることを
識別するために、回路毎にID(3ビット)を持つことにします。つまり最大で
8個の回路を繋ぐことができることになります。
自分宛ではない送信データは無視します。そのために、送信するデータの
バイト数も最初に知らせることにします。
具体的には↓をご覧下さい。
フォーマット1では、14ビットのポート全部を直接H/Lできます。

フォーマット2では、14ビットのうちのどれか1ビットをHまたはLにできます。
(0=PD0、13=PB7)


では、テストしてみます。
14ビットの出力にはそれぞれLEDを繋ぎ、通信ポート(PD2)には簡易なEIA-232インターフェース
を入れて、PCと接続しました。

うまく動いています。

19200bpsで、3バイト送信するのに、1.5msかかります。2バイト送信なら1msです。
この程度の頻度でしか出力を変化できませんが、リレーのON/OFF程度でしたら
充分でしょう。

単純にポートをON/OFFするのではなく、7セグLEDを繋いで、ローカル側でスキャン
すれば、ダイナミック点灯もできるでしょう。それはこれからです。デコーダを使わない
とすれば、7セグ×7桁、もしくは8セグ×6桁の制御ができますね。

4800bpsで$55を受信させました。
サンプリングするところで、ポートを
Low/Highして、受信しているシリアル
データのどこをサンプリングしているか
観測しました。

黄色がサンプリング位置
空色がシリアルデータ

ちょっとズレもありますが、だいたい
ほぼ中央部でサンプリングしていて
問題ないようです。
これは9600bps

サンプリング位置がよくわかるように
重ねてみました。

問題ありませんね。
これは19200bps

問題ありません。
ここでソフトを変えました。
割込処理の入口でLow、
割込処理の出口でHighにしてみました。
Lowの期間が割込処理していることに
なります。(黄色の方)

19200bpsです。
3バイト連続受信したところ。
上記の時間軸を拡大しました。
割込処理の時間に問題ないようです。

(シリアルデータの1ビットが約50μ秒、
割込処理の時間は、最後が一番長く
かかっていて30μ秒弱です。
最後が長くなるのは、今まで受信した
データをポートに出力する処理がある
からです。

もし38400bpsになるともう処理が追い
つかないことになります。)


以上より、19200bpsには充分追従することがわかりました。
おそらくあと2〜3割早くても大丈夫でしょう。

AT90S1200のクロックは1MHz(=周期1μ秒)ですので、
1命令実行するのに1〜2μ秒かかります。割込処理に30μ秒
ということは20命令分ぐらいでしょうか。

クロックに比例して処理速度は上がりますから、素直にセラロック
か何かを外付けすれば、もっと早いボーレートにも対応できます。
(早い方の限界はAT90S1200の処理速度に起因しています。)

遅い方の限界は、タイマ割込を使う関係で、タイマのカウンタが8ビット
だということに起因しています。現状で、4800bpsが遅い方の限界です。
これは、なるべく処理速度を早くするために、1回のタイマオーバーフロー
割込を使っているからで、ソフト次第で遅い方にはいくらでも対応できる
のは言うまでもないことです。

AT90S1200は最高で12MHzクロックで動作しますから、スピード狂の方
はやってみて下さい。今の12倍、maxで300kbpsぐらいまで追従するはず
です。遅い方は今のソフトのままで60kbpsぐらいまで追従しますから、
Windows PCの一般的なボーレートの最大である115.2kbpsにぴったり
です。8台まで繋げますので、あまり高速に書き換えることはできませんが
(115.2kbpsですと、1台分の書き換えに200〜300μ秒ぐらい)、PCのCOM
ポートに繋ぐ汎用出力ポートとしても用途がありそうです。


ソフトはこちら。


戻る