見出し画像

PICAXE プログラムダウンロード機能が突然動かなくなったときの対処方法

本記事はシリアルのドライバ関連の問題の話ではありません

試した環境

  • PICAXE 18M2

  • PICAXE 20M2

概要

  • 不意にシリアル通信をテストしてみようと思い、serrxdやsertxdコマンドを実行するプログラムを書いてしまうと、その後、PICAXEのプログラムのダウンロード機能が使えなることがあります。

  • 「PICAXEのチップが定期的に行っている、コンピューターからのプログラムの書き込み要求のスキャン機能」が停止するからだと考えられます。

  • また、disconnectコマンドをして、reconnectコマンドに到達しないコードを書いた場合も発生します。

  • 原因と対処方法を知らないと焦るのでメモを残しておきます。(実際、かなり焦る事案になったので、何かの参考になれば幸いです。)

想定されるエラーメッセージ

Error: Can't open port COM

対処方法

注意事項

  • 対処方法は、以下の「What is a 'hard reset'?」に書かれています。

  • Disconnectコマンドについてのページを読めば、仕組みが理解できると思います。

  • 英語がわかる方は、この記事を参考にせずに、公式サイトを参照ください

  • この記事は、筆者が1時間程度、調べた限りの情報で正しい保証がありません(責任も取れません)(まとめには2時間ぐらいかけました)

方法1

  • PICAXE ChipのパワーをOffにする

  • コンピューターのPICAXE EditorからProgram PICAXE(Download)ボタンを押して開始する(電源がOffなので、この時点では通信が開始できない)

  • 間をあけずに(すぐに)、PICAXE ChipのパワーをOnにする(タイミングがよければ、通信が開始される)

  • メモ:

    • ユーザーが書いたプログラムがシリアル通信する前(disconnectコマンドを発行する前)に、書き込みを行うという手法だと思います

    • 今回、試した限りでは、この方法で成功しました

方法2

  • 28X2 and 40X2 (前期の28-pin and 40-pinデバイス、plus 18M と 18X)には、reset pinをしばらくLOWにする

  • こちらは試してないので動作するかわかりません

公式サイトからの引用

For all PICAXE a 'hard reset' can be achieved by
removing power and reapplying it soon after the download is initiated.
For the 28X2 and 40X2 (and earlier 28-pin and 40-pin devices, plus 18M and 18X) a 'hard reset' can also be achieved by
taking the 'reset' pin low for a brief time.

https://picaxe.com/faqs/fault-finding/

PICAXEでシリアル通信を行うプログラムの組み方

知識がないと、PICAXEチップにプログラムできなくなるので、ご注意ください。発生した損害は一切保証しません

前提

  • 「PICAXEのプログラムダウンロード機能」と「ユーザー独自のシリアル通信」は同時には使えず、PICAXE Chip側で、明示的に切り替える必要がある

プログラムの基本的な流れ:

  • Disconnectコマンドで、「PICAXEのプログラムダウンロード機能」を停止する

  • この期間、PICAXE Editorからプログラムを書けなくなる

  • 「ユーザー独自のシリアル通信」をする

  • 何かをトリガにして、

  • Reconnectコマンドで、「PICAXEのプログラムダウンロード機能」を再開する

  • この期間は、「ユーザー独自のシリアル通信」はできない

【案1】

  • プログラムダウンロード用のボタンを作る。

  • 起動時にボタンが押されていたら「PICAXEのプログラムダウンロード機能」を有効にする。

  • つまり、Disconnectコマンドを呼ばずにプログラムを終了する。

    • (プログラムも起動せずに終了する方が、プログラムの暴走を停止する機能にもなる)

  • ボタンが押されていなかったら、Disconnectコマンドで「PICAXEのプログラムダウンロード機能」を無効にする。

  • 「ユーザー独自のシリアル通信」をする。

  • ボタンを押すという手間をかけないと、プログラムを書けなくなる。

【案2】

  • プログラム起動後、5秒間くらい「ユーザー独自のシリアル通信」はしない。

  • 「PICAXEのプログラムダウンロード機能」を使いたい場合は、電源を入れて、5秒以内に行う。

  • 5秒後に、Disconnectコマンドで「PICAXEのプログラムダウンロード機能」を無効にする。

  • その後、「ユーザー独自のシリアル通信」をする。

  • これ以降は再起動するまで、「PICAXEのプログラムダウンロード機能」は使えない。

  • PICAXEがデフォルトで用意している待ち受け時間よりも長くして扱いやすいくする。

【案3】

  • 起動後にすぐに、Disconnectコマンドで「PICAXEのプログラムダウンロード機能」を無効にする。

  • その後、「ユーザー独自のシリアル通信」をする。

  • 「ユーザー独自のシリアル通信」で特定のデータをPICAXE Chipが受信したら、Disconnectコマンドを発行する。

    • 例えば、終了コマンドを作る、など。

  • 「PICAXEのプログラムダウンロード機能」を有効にするにはシリアル通信が必要になる。

この先に価値のある情報はありません。








【廃案1】

  • 「ユーザー独自のシリアル通信」するときだけ、「PICAXEのプログラムダウンロード機能」を停止する

  • 今、どっちのモードなのかわからないので、コンピューターからPICAXEチップへ送信が行えない。

  • また、「ユーザー独自のシリアル通信」しているときに、PICAXE EditorのProgramを試みると、失敗する、暴走する可能性がある。

  • これが理想だけと、たぶん、うまくいかないと思う。

【廃案2】

仮想COMポートなどを使い、さらに独自のシリアル通信プロトコルを作り、自動で切り替える仕組みを作る。

この記事が気に入ったらサポートをしてみませんか?