akira.keiのアイコン画像
akira.kei 2026年10月21日作成 (2026年10月21日更新) © MIT
セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 46
akira.kei 2026年10月21日作成 (2026年10月21日更新) © MIT セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 46

dsPIC33CK64MC105 Curiosity Nanoは使わないよw

Curiosity Nano

秋月電子通商の新製品ページに、なんだか大量に「Curiosity Nano」シリーズが登録された。すべて時価で1750円で、その中でdsPICがあった。
Curiosity Nano
もしかしたら信号処理が「簡単に」できるかも!と期待して買ったのだが、その手前のLチカで既に心が折れそうだ。
「dsPIC33 信号処理」

XC16のインストールで躓く

手持ちのM4 Mac miniやMacBook NeoにXC16のインストールを試みたが、素直には入らなかった。Geminiに相談しつつコマンドライン(ターミナル)からの手動インストールを試したが、Rossettaのインストールの後になんとかインストールできた。もうこの時点で印象は最悪で、心が折れかけていた。せっかく評価ボードまで作ったのにw

dsPIC33 Curiosity Nano+BB

内蔵オシレータで躓く

dsPIC33のオシレータ構成は比較的シンプルだがMCCに出てくる名前に騙された(ただの調査不足)。8ビットPICのような内蔵(Internal)オシレータを探したが、そういう名前はない。「Primary」オシレータがそれだと信じ込んでいたが、「FRC」オシレータが正解だった。RCってのが良くない(理不尽)。

内蔵オシレータはFRCかBFRCで両方ともに8MHzだが、FRCがチューニング可能なメインの内蔵オシレータだった。これを見るとBFRCもPLLが効くように見えるが、次のFigure 9-2を見ないと全貌がわからない。

この図を見るとFRCCLKはPLLブロックに入るやつとセレクタに直接入るやつがある。実際にセレクタに入るのは2つではなく、3つ(FPLLO/2、FRCCLK、FRCDIVN)なわけで図のセンスが問われる。もっとわかるように書けって文書のレビューワーに言われないのかな。

MCC (Classic)で躓く

dsPIC33は機能が豊富なのでMPLAB IDE XでMCCを使う。新しい方のMCC Melodyは画面が見にくくて使いにくいので、大抵はMCC Classicを使うのだが、ここにも地雷が埋めてあった。main.c冒頭には

#include "mcc_generated_files/system.h"

が挿入されるのだが、MCC Classicでは

#include "mcc_generated_files/mcc.h"

が正しい。このsystem.hはMCC Melody向けなのだ。ところがMCC Melodyに切り替えても問題は解決しない。なぜか一部のインクルードすべきヘッダーファイルを読まないことがある。もう既に心が3回くらい折れている。

__delay_msで躓く

delay関数群を使用する際には実時間への変換のための周波数をユーザがコンパイラに教える必要がある。8ビットPICではこの指定は#define _XTAL_FREQでオシレータ周波数そのものを指定して実際の時間に変換する。
一方でdsPIC33というかxc16コンパイラでは、インストラクションの周波数を定義する。8ビットPICではFosc/4がインストラクション周波数だがxc8コンパイラがこれを使用することは稀だ。一方のxc16コンパイラではdsPIC33に対してFosc/2をインストラクション周波数として指定しなければいかん。例えば、
MCC
最下行の「Fosc/2」に75MHzが書いてあるが、これを以下のように定義するのだ。

#define FCY 75000000UL #include <libpic30.h>

あれ?その<libpic30.h>ってどこから来たの?って思うでしょ? それはxc16コンパイラのマニュアルに書いてあるはずなのだが探すと載ってないw それは「16-Bit Language Tools Libraries Reference Manual」の方に載っているのだ。

たらい回しかよw

ちなみに8ビットPICではmcc.hからxc.hが呼ばれ、ここで_XTAL_FREQが定義されていればdelay関数群が使えるようになっている。

結論

開発環境に癖があるのは仕方がないし、dsPIC33は8ビットPICの系譜ではないので比較対象にならないのもわかるが、ちょっと酷すぎないかw なぜ名前にPICってつけたのよ。。。まぁPIC32シリーズの中身はMIPSアーキテクチャだったりするし、このあたりのブランド迷走ぶりはMicrochipらしいのかもしれない。

しかし、たかがblink(Lチカ)でこの混乱っぷり。もうコレ使わないな。。。

#include "mcc_generated_files/mcc.h" #define FCY 75000000UL #include <libpic30.h> int main(void) { SYSTEM_Initialize(); while (1) { LED0_Toggle(); __delay_ms(1000); } return 1; }
1
akira.keiのアイコン画像
機械系エンジニアだが電子工作を趣味としている。週末はひとりバーベキュー。
ログインしてコメントを投稿する