シリアル カンタービレ
2018-05-12


とても昔からあって、今でも便利に使い続けられている技術。
それは俗にシリアルとかターミナルとか呼ばれているやつです。

以前少しだけarduinoをいじってみたんですが、標準でターミナルが実装されいて、コマンドを送ったりデータを表示させたりといったことが簡単にできるのが印象的でした。

そんなわけで

随分以前に写真だけ公開した基板をようやく動かす時が来ました。
実は通電するのも初めてだったりします。

禺画像]

そして、まずはシリアル送信を試してみます。

$LOOP
  ; タイミング処理
  btstc SYSTEM_CYCLE  ; 1msec毎にONされる
  if C
    DIVIDING$_ regular_10, 10  ; 10分周
      PROC$_CALL$_B S0T$_PUT, 30h
      PROC$_CALL$_B S0T$_PUT, 31h
      PROC$_CALL$_B S0T$_PUT, 32h
    _$
  endif
$END

; シリアル送信処理
S0T$ 1
  QUEUE$_B$_ALLOC send_queue, 20    ; 送信キュー確保
_ITP  ; 送信終了割り込み(レジスタバンク切り替え)
  QUEUE$_GET send_queue, R0L
  if C
    WRITE$_B R0L
  endif
_PUT
  if [ ti_u0c1 ]  ; 送信バッファ空
    WRITE$_B [PARAMETER].b
  else      ; 送信中
    ; 送信データをキューに入れる(満杯の場合は空くまで待つ)
    QUEUE$_PUT$_WAIT send_queue, [PARAMETER].b
  endif
_INIT
  QUEUE$_INIT send_queue
_END

10msec周期で3バイトのデータを送り続けるだけの簡単なお仕事です。
簡単と言いつつ、送信バッファが空なら直に送信し、そうでなければキューに入れるという小技も使っています。
そして、キューにいれておけば、送信終了割り込みで勝手に持って行ってくれるという寸法です。

結果はこんな感じ。

禺画像]

狙い通り、10msec周期できっちり送信されていますね。
ちなみに、通信速度設定は9600bpsです。

気分のほうが乗ってきたので

受信もやってみます。

パソコンのターミナルソフトから送ってみて・・・・・・・・・・・・・・・・・・・・・・・・・・受信できません。

一応、受信割り込みは1回かかるのですが、2回目以降は反応なし。
よく見るとフレームエラーが出ていましたが、速度・ストップビット・パリティの設定は間違っていないし、何故?

で、信号をよく見てみると・・・

信号は問題無さそうですが、電圧が3V少々ですね。

実は、使っているUSB-シリアル変換モジュールの出力(マイコン側では入力)が3.3V系なんですが、入力は5V対応なので5V電源のマイコンともそのまま接続できるということだったので気にしていませんでした。

しかし、R8C/xMの5V電源時のH入力閾値には届かないようですね。
受信割り込みはかかったので、オーバーシュート分が微妙に届いている感じなんだと思います。

そこでレベル変換です。
変換ICを乗せる程のことでもないので、トランジスタを使いました。

改めて信号を確認してみると、ちゃんと5V付近まで上がっています。

ソフトの動作はこちらです。

これでようやく準備が整い、あとはパソコンからコマンドを送って・・・と行きたいのですが、字句解析とかやったことがないので、どうなりますやら。

[マイコン周辺機能]
[プログラミング]
[構造化アセンブラ]
[R8C]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット