PICAXEのハードリセットとSerial in ピンについて

    PICAXE
    03 /14 2015
    ・ハードリセットのやりかた
    PICAXE Manual GETTING STARTED (picaxe_manual1.pdf)の P.50に書いてある。
    ハードリセットとなっているが再プログラミングの仕方である。
    通常は必要ないが、プログラムの書き込み中におかしなことをしたとか、バグったプログラムを書いて、書き込みができなくった場合に必要。

    電源を使用してハードリセットを実行するには
    1)電源を切断。
    2)デカップリング・コンデンサをすべての電源が放電されるまで待ってください。(30秒か回路設計によってはもっと)
    3)ダウンロードを開始するには PICAXE > プログラム メニューをクリックします。
    4)プログレス・バーが画面に表示されるまで待ちます。
    5)電源を再接続します。

    パワーオン直後は短時間だけ必ずSIになりプログラミング待ちになるということらしい。


    ・Serial in ピンについて

    hard_reset01.png
    基本的には常にプログラミングの入力待ち(connect状態という?)になっているが入力(in)にもできる。 (inにはシリアル通信のRxも含まれる。)

    注意が必要なのはシリアル通信のserrxd命令でSIをRxにする場合。
    プログラム中で単純に
     serrxd b0
    とだけ、書いてしまうと、SIがRxになったままになりプログラムの書き込みができなくなってしまい、上に書いた「ハードリセット」を行う必要がある。

    本当はserrxd命令の例文のようにdisconnect ~ reconnectdで挟まなくてはならない。
     disconnect ; not scan for new downloads.
     serrxd b0
     reconnect ; scans for new downloads.
    要は使う時だけRx入力にするということ。
    ただ、serrxdだけでdisconnectになるそうなので、最初のdisconnect命令はいらないような気がする。→実際問題ない。
    また、実際やってみると、reconnect文があるとデータにゴミ(余分な文字)が入りうまくいかない。(現時点では原因不明)

    しかし、これだとPCから書き込みデータと通常のTxデータを交互に待っているのがだが大丈夫かな?

    書き込みデータを送る場合
    書き込みたいのでRx状態で受信して誤動作しても問題ない(?)。
    推測だが書き込みする場合、PCから「書き込むよ」、PICAXEから「準備できたから送って」というハンドシェイクをしてから書き込みデータを送るのではないか思う。
    何故なら、PCから一方的にデータを送るだけだと上記のプログラムは成り立たないから。
    また、PCからの「書き込むよ」は短いコードである必要がある。
    実際にやってみるとserrxdのタイミングにぶつかった為かまれに書き込みに入らない場合があるが、 再度書き込みを行えばよい。

    PCから通常のTxデータを送る場合
    たまたま書き込み開始のコードにならない限り問題ない。
    データの取りこぼしが起きる可能性は別の問題。(プログラムの速さの兼ね合い)

    次に、下図のようにSIを入力にしたい場合
    PICAXE Manual GETTING STARTED (picaxe_manual1.pdf)の P.46
    hard_reset02.png
    これは、SI入力は基本的には書き込みデータ待ちなので成り立たない。
    disconnectして入力にしなくてはならない。
    disconnect命令の説明に例文がある。

    pause 1000 ; startup delay 1s
    disconnect ; prevent new download scanning
    main:
     if pinC.5 = 1 then
      high C.1
     else
      low C.1
     end if
     goto main

    1秒待ってからdisconnectして入力にするというもの。
    1秒待つのはこの間ならプログラムできるから。
     これが分かっていないと再書き込みができない。
     実際にはチョット短いので3000~5000にした方が良いだろう。
     もしくはserrxdの例のようにmain内を disconnect ~ reconnectで挟んだ方が良いだろう。


    何でこの記事を書いたかというとシリアル通信の受信をやっていなかったのでエコーバックをやってみようと軽い気持ちで調べ始めたら問題があることが分かったからです。
    それでエコーバックはというと・・・うまくいっていません。(汗)

    以上
    関連記事

    コメント

    非公開コメント

    Friendship 7

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