google-site-verification: google3bd66dd162ef54c7.html
FC2ブログ

PICAXE(ピカクス)を使ってみる-その2 USB電流チェッカーの製作

 前の記事でPICAXEをいじる環境を作ったので、早速具体的なテーマに取り組んでみました。

 課題は、USBの電流チェッカー。

 ええそうです、ついこのあいだArduinoで作ったばかりの物と基本は同じです。コンセプトとしては、充電電流の大小がLEDの点滅周期で判る物。Arduinoで作ったやつは累積電流が表示出来ます。でも使ってみるとほとんどの場合は、累積電流の測定機能は使いません。それよりもLEDの点滅で「充電中で電流がじゃんじゃん流れているかどうか?」が判るのがすごく便利です。

 ということで、電流だけ判る物をPICAXEで作ってみました。といってもまだブレッドボードの段階です。

▼ブレッドボード
PICAXEで試作
 PCAXEのCPU以外はLEDと抵抗が少々。

▼回路図(クリックで別窓に拡大)
USB電流モニタ回路図
 めちゃめちゃシンプルです。こんなふうに8PinのPICを使うのに憧れていたんですが、PICAXEのおかげで簡単に実現できました。

 おっと、これがどういうふうに動くか、説明を全くしていませんでした。

 動作としては、USBの電源電流を測定して電流の大小でLEDの点滅周期を変えています。つまり、電流が多ければLEDのチカチカの点滅速度が速くなります。これがあると、スマホなどの充電をする時にまだ充電中か、はたまたもう充電が終わったかなどが簡単に判ります。
 LEDの点滅速度は電流に比例。LEDは二つあって、片方は1A流れた時に毎秒1回。もう一つは0.1A流れた時に毎秒一回点滅します。これなら2Aから0.01Aあたりまで広い範囲で充電の状態が判ります。

 とはいってもまだPICAXEのプログラミングの勉強段階で、まだ完全に使い方が判っているわけではありません。

 一番の問題はPICAXEの実行速度がめちゃくちゃ遅いこと。このチェッカーでは2A流れた時に高速側のLEDの点滅周波数は20Hzが必要です。この速度はArduinoでは楽勝ですが、PICAXEだとかなり苦しくなります。

 それと、タイマー割り込みなどの方法で正確な周期でプログラムを動作させる方法が見当たりません。

 Arduinoみたいに処理速度が速くて、それこそ数十マイクロ秒で処理が終われば、タイマー割り込み無しでdelay関数でもいけます。でもPICAXEでは処理が数ミリ秒もかかるので正確な周期で動かすうまい手が見つかりません。

  とかなんとかで作った現在のプログラム

 これ、正確な時間間隔で動かすのは諦めてます。LEDの点滅時間の誤差は10%以上あると思いますが、まあ目安に使うなら許容範囲。PICAXEで例えば10ms間隔で割り込みかける方法は本当に無いのかな。

 PICAXEで残念だったことばかり書いてますが、デバッグの画面はすばらしいです。

▼DEBUG画面
PICAXEのDEBUG画面
 こんなふうに内部の変数がリアルタイムで表示出来て、これは便利。但しDEBUG画面のデータを一回送るのに数十msが必要です。

 それと、この画面を見て思い出したのは、PICAXEでは変数のメモリーのへのアサイン方法がすごく原始的であること。変数の名前はw1とかb1とかあらかじめ決まっていて、各々の変数のメモリー上の位置も固定です。実はこの仕様が最初は全く理解できませんでした。適切な変数名の選択は、良いプログラムを書く時に重要なんですが。(変数名はsymbol命令で他の名前にマップすることはできます)
 PICAXEのプログラムを書くには、変数とメモリー上の位置の関係を正確に把握していないといけません。見かけはBASICですが、変数の利用つまりメモリアクセスに関してはアセンブラと思わないといけません。

 なんだか最後はぐだぐだの記事になりました。

PICAXE(ピカクス)を使ってみる-その1

 今話題のPICAXE(ピカクス)をいじリ始めました。で、その経過を順に記録に残してみます。

 うまくいくかどうか判らないけど、最終的には小さなものでいいからPICXEを使って何か一つ作るのが目標です。

▼PICAXEのチップ
PICAXE 08M2
 まずは、この8ピンのCPU PICAXE 08M2がターゲット。秋月で240円で売ってます

○私のプロフィール
 これまでマイコンをいじった経験はArduinoだけ。実は初めはPICをいじってみたかったのですが、何しろコンパイラがいろいろあって選ぶのが嫌になってやめてしまいました。つまり、PICに関してほとんど素人同然。こういう人がPICAXEをいじるとどうなるか、という記事になるはずです。

1.環境構築
 これはめちゃくちゃ簡単。風呂に入ってから開始して、寝る前にはLチカまで完了。でも、PICAXEのマニュアル読むと「子供が1時間以内でプログラミング開始できる」と書いてあったです。orz
▼開発環境
ProgramingEditor

2.プログラミングケーブル
 で、話を戻してダウンロードケーブルの作成。ここが最初の難関です。最近だとUSBからシリアル変換する場合が多いと思います。でも私のPCにはRS232Cが付いているし、ルビジウムオシレーターの周波数調整用に作ったシリアルケーブルもある。ということでRS232Cインターフェースでいきます。

▼RS232Cのシリアルケーブル
232C汎用ケーブル
 上に書いたように、昔ルビジウムオシレーターの周波数調整用に作った物です。

 D-SUB 9Pinのシリアルケーブルは長くPCをいじった人なら持っているでしょう。捨てちゃった人はハードオフのジャンクコーナーに行きましょう。でも最近のPCには232Cは付いてないか。

▼接続回路図
PICAXEプログラミング 接続回路
 こういう回路図があると一番理解しやすいと思うのですが、PICAXEのマニュアルには断片的な図と説明があちこちにあるだけで、こんなふうに全体を表現したものが無かった(見つからなかった)です。

 RS232Cの信号レベルは±数ボルト。これをCPUに入力(Pin2)するために抵抗で電圧をドロップさせ、最後はチップの入力保護ダイオードでクランプさせる回路になってます。CPUからの出力(Pin7)は、直接RS232Cに接続してます。これだとLow側の電圧マージンがほとんど無いというか、インターフェイスの規約を満たしていないように思います。でも動けばいいんでしょう。

 RS232Cは負論理で、普通のマイコンのシリアルポートは正論理なのでそのままでは繋がりません。通常はロジックICかトランジスタで論理を反転させる必要があります。ところが、PICAXEのシリアルポートは負論理にしてあるので、こんな抵抗だけの簡単な回路でインターフェイスが出来るということです。

 ちなみにUSBから仮想COMポートで接続する場合、一般的なUSB/232C変換チップは論理反転になっているのでこれを元に戻す設定などが必要になります。232Cで簡単に接続できる仕様にしたことで、USB接続ではすごく不便になってます。
 このあたりの話はエアーバリアブルさんが詳しく解説されています。

▼ブレッドボードでLチカ
PICAXEでLチカ
 あちこちのWebに記事があるので詳細の説明は省略。

▼実行速度
スケッチの波形
 プログラムは二番目の写真の画面のもの。Lチカのpauseの時間をHi/Loどちらも2msにした時のポートの電圧波形です。

 本来は2ms+2msで4ms周期の波形になって欲しいのですが、Hiは2.6ms、Loは3.4msで周期は6msになっています。HiとLoの時間の差の0.8msはgoto mainの処理。Hiの時間の誤差0.6msはポートを操作するのにかかった時間ということでしょう。つまり1ステップ実行するのに1ms弱かかっています。これはマイコンとしては凄く遅い部類に入ります。

 PICAXEのプログラムはインタープリターで動いているので処理のオーバーヘッドが大きく、こんなに実行速度が遅くなっているんだと思います。もちろん関数の中はもっと高速に処理されていると思いますが、処理時間の制約が厳しいアプリを作るときには注意が必要です。

 ということで今回は基本的な動作確認までやりました。

 この次はプログラミングに向け、基本的な言語仕様の理解です。疑問な点がたくさんあるのでどうなることやら。

tag : 08M2 232Cケーブル 回路図

カレンダー
08 | 2019/09 | 10
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード