最近色々調べていて使ってみたいなと思ったのがPADAUKというメーカのマイコンです。何かマイコンを使って制御したいな~と思い立ち調べてみると秋月電子で販売されているものだと、Microchipのものか、ArduinoIDEにも対応するのがCH32V003あたりが最安値。
しかもこれらは外部回路をほとんど必要としないので、回路全体として安価に作ることが可能です。今回したいことは非常に簡単なことなので、基本的に安価なマイコンで事足りるので32ビットプロセッサなど高級なものは必要なく、PIC10F222のような8ビットマイコンで十分な感じの用途です。
ですが、秋月電子では32ビットマイコンのCH32V003が最安値。Microchipのはブランド的なところも含めての値付けといったところでしょうか。
それを見て少し気になったのが8ビットマイコンでもう少し安いのを探したらどこかにあるのではないかと思いました。というわけで格安電子通販LCSCを漁ってみたところ驚くほど安いマイコンを発見しました。
それがPADAUKのマイコンPMS150Cです。1000個以上買えばその値段は3セント程度です。円安のこのご時世であっても5円以下の衝撃です。中身としてはRISC-Vコアを搭載した8ビットマイコンで、クリスタルの外部回路が必要ない構成なためほぼこの値段で使えます。電源周りに少しコンデンサを入れたとしても10円以下は確実…!これは安いですね。
問題があるとすると、一番安いPMS150CはOTPなので一度しかプログラムを書き込めないという点ですが、2倍ほどの価格を出せばMTPとなりプログラムを書き直し可能なマイコンが手に入ります。値段が2倍でも安価なのでこの点は大きな問題になりません。試作はMTPのマイコンを使って数を作る場合はOTPのマイコンとすればコストも抑えられそうです。
値段は申し分ないのですが、一番の問題がマイコンの書き込み環境とプログラムの作成です。プログラムに関してはC言語っぽい独自の言語とのことで、癖のあるものになっています。また、マイコンの書き込み機ですが、公式ドキュメントに掲載されているマシンをAlliexpressで見つけることができますが、2万円弱という値付けで販売されており、折角の安価なマイコンが台無しです。それならWCHのCH32V003を買えば1000円以下でWCH Link-Eという書き込み装置を入手できるので明らかにそちらの方が良いです。
そこを不満に思う人も少なくないようで、公式のものを解析して使えるようにしようと海外の兄貴たちは解析して情報を公開しています。それがFree PDKです。
解析というと聞こえは悪いですが、見てみるとオシロスコープなどで波形をとってリバースエンジニアリングしているというところで、暗号化なども施されておらず用意に模倣できるという実態があるようです。また、書き込まれているプログラムもRISC-Vベースでありつつ中身はMicrochipのそれと非常に近いようなので、解析が容易だったとのこと。有志が解析して作った互換ツール群というのが正しいのかもしれません。
その産物として、互換プログラマとSDCCによるコンパイル環境が存在しています。というわけでそれを実際に作って使ってみたというお話です。ライセンスもCC-BY-SAなので一般的な利用ならすべて問題ないと言えるでしょう。
ひとまず基板と部品を用意してハードを用意してみました。ハードに関してはこちらのGitHubレポジトリにあります。はんだ付けが一番しんどいです。手際も悪いので一つで2時間ぐらいかかりました。
特に困ることもなく完成しました。はんだ付けして、別のGitHubレポジトリにあるプログラムをはんだ付けしたマイコン(STM32F072)に書いて終わりです。
あとはSDCCに対応したプログラムですが、こちらのレポジトリから使えそうなものを探します。LEDの点滅プログラムがおそらく一番わかりやすいと思います。
注意点としてLinuxでやるのが良いです。Windows環境だとmakeがサンプルのmakeが通らないのでできるとしても結構いじる必要が出てきます。Windowsを使っていると抵抗があるかもしれませんが、WSL2があれば簡単に環境を構築できるので、そちらを使うのが良いと思います。環境を作った話は別記事にあります。
make後は書き込むだけです。書き込む際にはマイコンと作った書き込み機をつなげる必要がありますが、SOP8用のプレッシャーレスソケットで書いても良いですし、実際に実装してある基板に端子を設けて書き込んでみても良いです。私はどちらも試しましたが問題なかったです。周辺回路がいろいろ実装されていると書き込めないとかあるかもしれませんがそのあたりは不明。
書き込む際にはソフトウェアのレポジトリにあるものを用意して以下のようなコマンドをコマンドラインから実行するだけ。これも簡単ですね。
easypdkprog -n PFS154 write myprog.hex
当然、PFS154のデバイスの部分は修正が必要です。書き込み途中はマイコンのLEDが光っています。実際に書き込みが終わるとDoneになっているので、それが出たら実際に動いているか確認しましょう。
少し気を付けるべきこととしては、微妙な型番違いでそれなりに知違うものがあるので注意です。例えばPMS150とPMS150Cは別物ですし、PFS122はPFS172のリネームですが、PFS122BはPFS122と全くの別物であるという点です。
SDCCは今まで使ったことがなかったので慣れていませんが色々触ってみて慣れていこうと思います。
ひとまずPadaunk用のFreePDKは使えましたという話でした。
非公式SDKなので、動作が怪しいところがってもマイコン側のバグなのかプログラム側のバグなのか怪しいのが玉に瑕ですが、安いですし個人の電子工作としては面白いものだと思いました。
以上となります。お読みいただきありがとうございました。