akira.kei が 2026年10月21日12時04分23秒 に編集
コメント無し
本文の変更
## Curiosity Nano [秋月電子通商の新製品ページ](https://akizukidenshi.com/catalog/goods/search.aspx?search=x&keyword=Curiosity&search=search)に、なんだか大量に「Curiosity Nano」シリーズが登録された。すべて時価で1750円で、その中でdsPICがあった。  もしかしたら信号処理が「簡単に」できるかも!と期待して買ったのだが、その手前のLチカで既に心が折れそうだ。  ## XC16のインストールで躓く 手持ちのM4 Mac miniやMacBook NeoにXC16のインストールを試みたが、素直には入らなかった。Geminiに相談しつつコマンドライン(ターミナル)からの手動インストールを試したが、Rossettaのインストールの後になんとかインストールできた。もうこの時点で印象は最悪で、心が折れかけていた。せっかく評価ボードまで作ったのにw  ## 内蔵オシレータで躓く 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)なわけで図のセンスが問われる。もっとわかるように書けって文書のレビューワーに言われないのかな。
この図を見ると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をインストラクション周波数として指定しなければいかん。例えば、  最下行の「Fosc/2」に75MHzが書いてあるが、これを以下のように定義するのだ。 ``` #define FCY 75000000UL #include <libpic30.h> ``` あれ?その```<libpic30.h>```ってどこから来たの?って思うでしょ? それはxc16コンパイラのマニュアルに書いてあるはずなのだが探すと載ってないw それは「16-Bit Language Tools Libraries Reference Manual」の方に載っているのだ。  たらい回しかよw  ## 結論 開発環境に癖があるのは仕方がないし、dsPIC33は8ビットPICの系譜ではないので比較対象にならないのもわかるが、ちょっと酷すぎないかw なぜ名前にPICってつけたのよ。。。まぁPIC32シリーズの中身はMIPSアーキテクチャだったりするし、このあたりのブランド迷走ぶりはMicrochipらしいのかもしれない。 しかし、たかが```blink```(Lチカ)でこの混乱っぷり。もうコレ使わないな。。。 ```cpp: #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; } ```