PICAXEでシリアル出力

    PICAXE
    01 /24 2015
    シリアル通信をやっていなかったので出力試験をやってみた。

    PICAXEのシリアル通信の送信命令にはsertxdserouthseroutがある。

    sertxdはダウンロードケーブル向けで設定が固定、seroutは細かく設定変更できる。
     これらはソフトで実現しているらしい。
     推測だがsertxdはseroutをダウンロードケーブル向けの設定に固定しただけだと思われる。
     この二つは最高のボーレートが低く、CPUクロックが標準の4MHz時に4800bpsである。

    hseroutはハード(UART)を使うものでhseroutピンを使う。
     初期設定にhsersetup命令を使う。
     最高のボーレートが高く、4MHz時に実測57600bpsまでだった。(後述)
     08M2と14M2ではserial outピンと同じピンなので書き込みと同じで楽である。

    ボーレートは4800bpsでもターミナルへの表示だけみるならあまり問題ない。
    ただ、転送に時間が掛る=CPUの占有時間が長いのが難点である。(10文字で約21ms) 従ってボーレートはもっと高い方がよく、hseroutがよい。

    hseroutのボーレート試験(あくまで私のPCでの結果)
     38400bps以下 問題なし。(電源電圧が4.75V位でもOK)
     57600bps 電源電圧が4.75V位に低くなるとNG。 5V付近なら問題ない。
     115200bps NG。(文字化けなので設定自体はできている。)

    ボーレートの誤差を計算してみると
     4e6/38400/4-1=25.04→UART設定値25 = 誤差0.17%
     4e6/57600/4-1=16.36→UART設定値16 = 誤差2.2%
    詳細は省くが57600以上のボーレートの誤差は2~3%である。
    通常(5%位?)は問題ない値である。 が、時間軸方向のエラーではある。
    これに電源電圧が低いと縦軸方向のエラーも加わるのでデータをリカバリーできなくなるのではないかと思う。

    57600でも問題ないのだが無用なトラブルを避けるならば38400bps以下が安全そうである。(4800bpsの8倍の速度)

    送信は”Hello, world!”みたいに文字列をまとめなくてはならないのかというとそんなことはない。 実際には一文字づつ送っているのでプログラムで何回かに分けてもよい。

    ・ターミナルソフト(TeraTerm)の設定
    改行コードはLFのみとする。(CRとLFを区別するということ)
    PICAXE_serial01.png

    8ビット、ノンパリ、ストップ1、フロー制御なしである。
    PICAXE_serial02.png

    ・プログラム
    sertxdのプログラム例に手を加えたもの。
    接続にはダウンロードケーブルを使うので信号は反転。
    シリアル入力(hserin)を無効にする。
    hsersetup B38400_4, %10010 ;38400 baud, inverted TXD, disable hserin
    main:   for b0 = 0 to 15
        hserout 0,("The value of b0 is ")
        if b0 < 10 then
          hserout 0,(" ")
        endif
        hserout 0,(#b0,cr,lf)
        pause 1000
      next b0

    下図はボーレートが違いますが他は同じです。
    ターミナルソフトでログを取ればExcelでデータ処理できる。
    PICAXE_serial03.png

    下図はプログラムからLFをなくしたもので、同じ行で表示し続けます。
    CRとLFを区別したのはこのため。 電圧計などの表示に向いた方法。
    PICAXE_serial04.png

    下図はプログラムの冒頭部分にコントロール(制御)コード(エスケープシーケンス)を埋め込んで文字全体に色を付けたもの。 CLS(クリアスクリ-ン)はおまけです。
    hsersetup B38400_4, %10010 
    hserout 0,("\033[2J")       ; ESC[2J, CLS
    hserout 0,("\033[33m")    ; ESC[33m, YELLOW

    main:    for b0 = 0 to 15
    ・・・・・・・
    PICAXE_serial05.png
    コントロールコードを受信できるターミナルソフトに限られるが、LCDのキャラクタディスプレイと違って多彩な表現が可能である。(やる気があればキャラクタベースのゲームが作れる。)

    以上
    関連記事

    コメント

    非公開コメント

    Friendship 7

    浅く広くのハード屋です。
    コメントへの返信には過大な期待をしないで下さい。 非公開コメントは停止しております。 不適切なコメントはFC2で自動的にはじかれます。
    リンクフリーですが盗作は禁止です。
    本ブログの内容を参考にされる場合はあくまで自己責任でお願い致します。