公開日:2024/06/29
title.png

30th Season


#30-9 PICAXEというマイコン

 一度、PICマイコンを使って見たかったのです。電子工作をやっていると、AVRと並んで良く見かけるマイコンですから。しかし、「最初の開発環境整備が大変だな」と、手をこまねいていたところ、PICAXEという製品を知りました。
 シリアル通信(UART)でプログラムの書き込みが可能で、BASICやフロウチャート、Blockly等の開発環境が使えます。PICマイコンに専用のファームウェア(BASIC処理系)が書き込まれた状態で販売されている、カスタムマーク品です。

PICマイコン

 PICマイコン自体は、色々な製品展開があり、チップ単体は普通に安く入手可能です。ところが、プログラムの書き込みツールが、何故か高価なのです。こちらの純正書き込みツールPICkit5は17,800円もします。サードパーティ製の物でも、5,000円〜7,000円が相場です。
 これでは、「ちょっと使って見たい」と思っても、手が出ません……。

 本HPにて、購入してきたマイコンボードたちの価格を以下リンクからご確認ください。

  マイコンボード購入価格表

 高機能な部類に入るArduino DUE @84MHzでも2,000円、TFTディスプレイ付きで、諸々オールインワンM5StickC Plusが3,564円でした。DUEもM5StickC Plusも、この価格のボード単体で書き込みまで実行できます。その他のマイコンボードが、もっと安かったという事は、上のリンク先の購入価格表でご確認いただけます。
 ちょっと毛色が異なりますが、オリジナル16ビットCPUコアMoscoviumの開発で大活躍しているCmod A7ボード(FPGA)だって、13,700円なのに……。
 なのに、ただの書き込みツールであるPICkit5が17,800円??

  PICマイコンの書き込みツールは、バカ高い。

 普通、マイコン(MCU)と言うのは、量産品に使ってもらってナンボのものです。10個や100個買ってもらったところで、儲けは少ない、完全な薄利多売なのです。
 量産には使われ無いけど開発者が使う書き込みツールは、採算度外視で安くしておいて、「なるべく多くの開発者に使ってもらおう」とするものです。沢山の開発者に使ってもらったら、その中のいくつかは月産数万個の売り上げに発展するかもしれないし、そうでなくてもロングテイルの獲得につながるからです。

 MCUメーカにとって、拡販するために重要なアイテムである書き込みツールが、こんなにバカ高い💸のは何でだろ??……意味・意図、不明。

PICAXEと言うマイコン

 などと、手をこまねいていたところ、PICAXEという製品を知りました。

 PICマイコンのメーカは英国のMicrochip社ですが、PICAXEと言うマイコン(MCU)は、Revolution Education Ltd社が開発・販売しています。以下に公式HPへのリンクを張っておきます。

  公式HPリンク:https://picaxe.com/ / マニュアル

 PICAXEの処理系はBASICという言語です。
 筆者の少年時代は、個人が使うパーソナルコンピュータ(PC)が走りの時代でした。当時128k円程の8ビットパソコンに、BASIC処理系が搭載されていたので、最初に学習したのはBASIC言語でした。
 ちなみに、筆者が最初に購入したPCは、富士通FM-7です。Motorola MC6809×2個使いのPCでした。

元はPICマイコン

 さて、異なる企業が販売しているPICマイコンとPICAXEマイコンですが、PICAXEの発売当初は、Revolution Education Ltd社が、普通のPICマイコンにBASICファームウェアを書き込んだ状態で販売していた模様です。
 現在も、PICAXEの中身はPICマイコンらしいのですが、以下図の様にカスタムマークを施して販売されています。

a309_picaxe.jpg

 今回購入したのは、PICAXE-14M2という、14ピンDIP形状のMCUです。PICAXE-14M2は、Microchip社のPIC16F1825にカスタムマークを施したマイコンである様です。他に、8ピン〜40ピン、M/M2/X/X2シリーズなどの展開があります。

  PIC16F1825のデータシートを検索する(別ウインドウが開きます)

  PIC16F1825概要:

 上に示した概要は、オリジナルのPIC16F1825としての機能です。PICAXEとしては、BASIC処理系と言う皮を被っているため、上の様なPICマイコンの各種機能は隠蔽されています。

書き込みツール

 中身がPICマイコンなのであれば、PICAXEも結局、バカ高い書き込みツールが必要なのではないか?と、思いきや、そこが違っていました。PICAXEには、ちょっと癖があるけど、シリアル通信(UART)で書き込みできて、BASICで開発することができます。

 特殊な専用書き込みツールは必要なく、普通のUSB⇔UART変換モジュール(例えばFTDI)を使って書き込み可能なのです。よって、手持ちのUSB⇔UART変換モジュールを流用する場合、PICAXEチップさえ購入したら、専用の書き込みツールは必要ありません。

PICAXE用として販売されている書き込みケーブルもありますが、やっぱり安くはないです……。

 さらりと流しましたが、「癖」とは、UARTのTXD,RXD論理が反転していることです。このため、手元のUSB⇔UART変換モジュールを「そのまま」使う事はできません。
 対処方法は、次回解説いたします。

開発環境の立ち上げ

 PICAXEの統合開発環境は、公式HPからダウンロード可能な、PICAXE Editor 6です。
 Windows版のインストーラをダウンロードしてインストールしたところ、BASIC、フロウチャート、Blocklyが統合されていました。PICAXE Editor 6だけで開発環境の立ち上げは終了です。すごく簡単。

 以下、各々のプログラミング環境について、簡単に説明して行きたいと思います。

BASIC処理系

 最初に購入したPC(FM-7)宜しく、当時のBASICそのまま、といった感じのBASIC言語でした。BASIC言語のマニュアルも、PICAXE公式HPからダウンロードできます。
 最近見かけるBASIC言語は、OOP(Object Oriented Programming)等に対応したMicrosoft BASICみたいに、ちょっと進化した物が多いのですが、PICAXEのBASICは、昔ながらのザ・BASICでした。

※あっ、でも、この言い方も変だな……。FM-7に搭載されていたザ・BASICも、元々はMS(Microsoft) BASICをカスタマイズした物だったから……。おっと、オジサンの昔話はこの辺にしておきます。

・数学演算の優先順位

 マニュアルを読んでいて引っ掛かったのは、数学演算の優先順位でした。例えば、「1+2×3」と言う数式は、算数的には「1+(2×3)」と解釈するので、答えは7です。算数的には、足し算(+)より、掛け算(×)の方が優先順位が上だからです。

 PICAXEのBASIC言語では:

 即ち、先程の数式「1+2×3」は、最初に「1+2」が演算されて3となり、次に「3×3」が計算されて、答えは9となります。算数の演算順で演算させるためには、「2×3+1」と記述しなくてはならないのです。優先順は基本、自分で一々制御しなさいって事ですね。

・使用可能な変数

 変数についても引っ掛かったことがあります。変数は、バイト変数が28バイト(b0〜b27の28個)、ワード変数が14ワード(w0〜w13の14個)しか使えません。基本的に、名前も決まっています。

 PICAXE-14M2に使われているPIC16F1825は、内蔵RAM容量1Kバイトです。そこへ、BASIC処理系自体が使っているメモリも割り当てられているはずです。ユーザが使えるRAM容量が限定されるのは仕方のない事でしょう。それにしても16ビットワード変数が、たったの14個しか使えないとは、中々厳しいですね。
 PICAXE-14M2の場合、少しRAM容量に余裕があるPIC16F1825のため、BASICのpeek/pokeコマンドを使うと、変数としてのアクセスは、できないものの、データ領域として512バイトまでは使えるみたいです。
 内蔵RAMのアドレス0x00〜0x1bまでが変数領域(28バイト)なので、その後ろに続くアドレス0x1c〜0x1ffまでが、追加で使用可能なRAM領域です。変数領域28バイトを除くと、484バイト分です。

 なお、基本的に変数名は「b0〜b27または、w0〜w13」に決まっていますが、symbolコマンドを使って「symbol idx=w0」等の様に、解り易い変数名を、w0〜w13に割り当てて使う事は出来ます。
 変数名を打ち換えているだけ(ただの別名)であることに加えて、予約された変数w0=b1:b0(16ビット変数w0の上位8ビットが変数b1、下位8ビットが変数b1)など、データエリアが共有される事にも注意が必要です。
 例えば、変数idx=w0に於いて、b0=0とすると、変数idxの下位8ビットが0にクリアされるし、b1を読み出すと、変数idxの上位8ビットデータを読み出すことになります。

 後でシミュレーションを実行する時、確認していただけますが、メモリ上の記憶形態はリトルエンディアンでした。

・BASICと言う名のアセンブラ

 この様に、使用可能な変数には数に限りがあり、CPUの内部レジスタと見なせる程度の数しか使えないため、「高級言語BASIC」と言うより、「CPU内部レジスタ数28個のアセンブラ」と、思った方が近いですね。アセンブラの代わりにBASICを採用したことで、言語としての抽象度は上がって、プログラムを組み易くは、なっています。
 印象としては、以下の様な感じです。

  PICAXEマイコンの印象:

・マルチタスク

 PICAXEのBASICが時分割マルチタスクに対応している事は評価できます。PICAXE-14M2では、最大8個のタスクを並列に処理することができます。

デュアルコア版Moscovium等「デュアルコアマルチタスク」と異なり、PICAXEのコア数は1個なので、「時分割マルチタスク」です。N個のタスクを並列動作させると、1タスク当たりのMCU動作速度は、1/N未満に低下します。

 ただし、BASICのマニュアルを見た感じ、セマフォなどのリソース管理命令が見当たりません。限られた変数領域も共有リソースなので、まともなマルチタスクプログラムは組めないでしょう。
 リソース競合を起こさずに、例えば主たる処理をタスク#1で実行中、タスク#2ではパッシブブザーを制御して音楽を演奏する(BGM)とか、その程度のマルチタスクには応用可能だと考えられます。

フロウチャート

 プログラムの処理内容をドキュメントとして残すために使われるフロウチャートを使って、プログラムを組み上げる開発環境です。フロウチャートに具体的な変数や数式、条件式などを記述して行くことでプログラムを作成します。

 フロウチャートでプログラムしても、最終的にはBASICに変換されてPICAXEに書き込まれます。この様に、変換先はBASICなので、前節で解説した、使用可能な変数の数や、演算優先順位などの制約は、そのまま影響を受けます。

 個人的な使用感ですが、凄く手間がかかって、全く嬉しくありません。

 「こんなのもあるのね」と、一度眺めたら、速スルーして良いです(キッパリ)。何なら、この記事だけ目を通したら、一度も使わずにスルーでもOKです。

 こんな物より、次のBlocklyの方が数段優れていますし、お勧めです。

Blockly(推奨)

 UIFlowなどでも採用されている、元を正せばGoogle社の開発したビジュアルプログラミング環境、Blocklyです。
 本HPでは、ブロックを使ったプログラミングについて、以前よりUIFlowを推奨してきました。ブロックを使ったグラフィカルな開発環境は、プログラムしていて、とても楽しいです(1^−^)a。

 こちらも、最終的にはBASICに変換されてPICAXEに書き込まれます。この様に、変換先はBASICなので、前の節で解説した、使用可能な変数の数や、演算優先順位などの制約は、そのまま影響を受けます。

 UIFlowのエディタと比べると、「Clean up Blocks」という、ブロックを綺麗に整列する機能が実装されていないのが、ちょっと使い難いと感じました。けど、これはエディタの問題です。ブロックを使ったプログラミングの楽しさに変わりはありません。

 マニュアルを読みながら、BASICでプログラムして「シンタックスエラー」だのなんだのと怒られるより、Blocklyでプログラムした方が、断然お勧めです。
 従って、本ページではBlocklyを使ってPICAXEのプログラムを開発する事とします。

シミュレーション

 サンプルとして、フィボナッチ数列を計算するプログラムと、LEDを点滅させるプログラムをマルチタスクで並列動作させてみようと思います。

 まずは、最初にインストールしたPICAXE Editor 6を起動してみましょう。下図の様なウインドウが表示されます。

a309_pe6.png

 このソフトウェアがPICAXEの統合開発環境なので、これ一本でBASICフロウチャートBlocklyによるプログラミング、シミュレーション、PICAXEマイコンへの書き込み、シリアルモニタによる通信など、まるっとお任せできます。
 Workspace Explorerサブウインドウ(上図、左上側サブウインドウ)で、「PICAXE Type」を「PICAXE-14M2(またはお手持ちのPICAXE型名)」に設定してください。「COM Port」には、書き込みに使用するUSB⇔UART変換モジュールの通信ポートを設定してください。

・フィボナッチ数列

 続いて、フィボナッチ数列について、以下に定義をまとめておきます。

  フィボナッチ数列:

 簡単な数列なので、Blocklyを使ってプログラムしました。完成したプログラムを以下にリンクしておきます。PICAXE Editor 6から読み込んでご確認ください。

  完成プログラム:picx_blink_fibo.xml

※ブラウザによっては、XMLファイルをレンダリングして表示してしまうので、「右クリック ⇒ リンク先を保存」などしてください。

・シミュレーション実行

 早速、PICAXE Editor 6のシミュレーション機能を試してみましょう。
 PICAXE Editor 6(前の節で示した図)の「Simulateタブ ⇒ Simulate ⇒ Run」を実行すると、シミュレーションが走り始めます。

 シミュレーション実行に先立ってブレークポイントの設定、ステップ実行等が可能で、変数やメモリの状態変化を確認しながらデバッグできます(前の節で示した図、右側Code Explorer/Memoryサブウインドウ)。
 監視する変数名の指定はできませんが(※)、最大14個しか使えない変数なので、最初から全部見えています。RAMの256バイトも監視可能なので、デバッグで困る事はありません。

※「指定できない」と、言うより、始めから全て見えているので、「指定する必要が無い」が、正しいです。

・シミュレーション結果

 前の節で示した図は、フィボナッチ数列20項を計算するシミュレーション実行後のスクリーンショットです。

a309_vterm.png

 第1項〜第20項までのフィボナッチ数列が仮想シリアルモニタに対して送信されることが、シミュレーションで確かめられました。

※都合により、第0項の0は省略してますm(1__)m。

 ここまで全部、「シミュレーション」ですからね。まだ、PICAXEマイコンの実チップには指一本触れていません。なのに、もう、仮想シリアルモニタに処理結果が送られてきてしまいました。

 至れり尽くせり。

シミュレーション実行の様子

 まあ、PICAXE Editor 6を使った、シミュレーションの様子を見てやってくださいな。



 この程度のプログラムなら、シミュレーション確認で沢山、で、ございましょう?

 本来、直接観測できない、マイコンの内部動作をシミュレーションで確認しながらプログラムデバッグができるのですから、活用しない手はありませんよね。

今回のお買い物

 ここで、今回のお買い物を記しておきます。

 秋月電子通商で購入しました。Cmod A7ボード購入ロボットカープラットフォームキット購入に続く、3回目の利用です。
 前回、このお店で購入した時の送料は、佐川急便500円、ヤマト運輸600円でした。二社から選べる時に、「わざわざ高い方を選ぶ人いるの?」ってことで、その時は佐川急便を選択しました。

 すると今回はヤマト運輸が値下げして、送料が500円に揃っていました。
 何でも値上がりするインフレ真っ只中(※)にあって、値下げを決断したヤマト運輸に敬意を表し、今回はヤマト運輸の選択に至っております。値下げした分、利益は圧迫されるだろうけど、その分こちらが使ってあげれば、損益分岐点を超える手伝いはできますから。

※インフレ(円安)を放置し続ける政府与党に対する不信任は、ありとあらゆる場にて意思表示して行くつもり。まずは七夕都知事選挙。

 とは言え、上に示した通り、数100円のパーツ2個に送料500円は高すぎです。

 何度もお願いしているけど、こんな小さな部品は「宅配便」である必要は無いので、「メール便」にして安く届けてくれ〜。メール便なら、郵便受けに投函して終わりなのだから、ピンポンしたり、結果不在で再配達になったりすることが無い、梱包サイズも小さい等、単価を下げられるはずです。工夫しなさいよ!→ 配送業者、WEBショップ各位。

 メール便(送料200円)に対応しているのは、スイッチサイエンスです。総合的にも良心的で良いショップなので、個人的には、お勧めです。今回は、PICAXEの取り扱いが無かったため、秋月電子通商を選択しました。
 秋月電子通商も、昔、秋葉原詣でしていた時代から知っていて、細かな電子工作部品の品揃えが豊富なので、お勧めです。もう少し送料を下げていただくと、最強だと思います。

※逆に、宅配便の送料500円は安過ぎはしないか?人件費もエネルギ価格も上昇しているのに、宅配便500円で届けられる??宅配便の送料を下げるより、メール便が使えるようにしてもらった方が嬉しいのだが?配送業者って、メール便みたいな形態の取り扱いができないのだろうか?

標準ロジックIC

 さて最後に、PICAXEと一緒に購入した74HC00について言及しておきましょう。具体的な使用方法については、次回、PICAXEの書き込み回路を構築する時に説明します。

 本当は単なるインバータ(74HC04等)で良かったのだけど、PICAXE専用で使うつもりは無くて、別な用途にも応用が利く様に、NANDゲートにしておきました。単なるインバータだと、NOT論理演算にしか使えませんが、NANDゲートがあれば、複数を組み合わせてNOT/AND/OR/NOR等の論理演算素子を組み立てる事が可能だからです。

 上の例だと、NOR論理演算がNANDゲート×4個を使っています。74HC00には、4個のNANDゲートが入っていますので、最後のNORゲートまで組み立てて作ることができます。

※NORゲート(74HC02等)だけ、を使っても、同じ様に4種類の論理ゲートを組み立てることができます。正論理のAND/ORゲートからでは、NOT論理演算が作り出せないので、ご注意ください。

 この様な論理演算は、マイコンのI/Oポート×2本で読み込んでおいて、ソフトウェアで演算しても良いのですが、時間的に連続した波形の論理演算を継続して、かつ、時間遅延無しで実行し続ける事は、ソフトウェアでは困難です。その様な時には、外部のブレッドボードなどに論理回路を構築して処理する必要が生じます。

 外部で論理回路を組むには、通常、標準ロジックICを使います。標準ロジックICは、型番が「74」から始まるので、「74シリーズ」などと呼ばれています。今回購入した74HC00という14ピンのICには、4個の2入力NANDゲートが入っています。NORゲートが使いたければ、74HC02です。
 「74」の右に続く「HC」は、High-speed CMOSの略なので、時々、違うアルファベットが付いている場合があります。

 xxの部分が同じ数字なら、論理動作は同じですが、動作速度や入出力レベル、電気的特性等が異なるので、用途に合った種類を選択する必要があります。現在ではCMOSタイプが一般的で使い易いので、要求する電気的特性が、よほど特殊だったり高度な物でない限り、「HC/AC」タイプを選んで良いと思います。


 実は今回、相対的にバカ高い送料を薄めるため、一緒に他のパーツも購入してあります。そのお話は、また別な機会にお伝えします。その前に次回は、PICAXEの実チップへプログラムを書き込んで、動作を確認して行きます。


btn_arduino.png

btn_prev.png btn_next.png

home