本物のArduino UNO R4 Minimaはまだ価格が高いのでAliExpressで互換品を買いました。価格571円送料166円で注文から1か月ちょっとで届きました。オリジナルとちょっと違うところがあって16MHzのクリスタルが実装されています。しかし、ブートローダーもArduino IDEのボード設定にもこのXTALを使う設定がありません。原則として内蔵CR発振器を使うことになっているようです。通常の使用には問題ありませんが、精度が必要な用途には不安定で不満が残ります。
何か切り替える方法がないかと探したところ、GitHubにありました。
12MHzのXTALを使うための設定で、4MHzから12.5MHzなら設定を変更すれば対応できるそうです。16MHzはRA4M1チップの仕様範囲外ということですが、何とか使えちゃうかもしれません。
そのままの設定でPWMで10番ピンに1MHzを出力するコードを追加して実行すると1.333MHzが出てきました。1MHz*16/12 ですね。発振と切り替えは出来ているようです。このままではシステムクロックが高すぎるので変更しましょう。
ソースコードを眺めてみると12MHzの場合、8倍してから1/2しているようです。この8倍を6倍にすれば16MHzのXTALで48MHzのシステムクロックを作れそうです。そこで、
*SYSTEM_PLLCCR2 = 0x07; // Setup PLLCCR2_PLLMUL_4_0 PLL PLL Frequency Multiplication to 8x
となっている所を
*SYSTEM_PLLCCR2 = 0x05; // Setup PLLCCR2_PLLMUL_4_0 PLL PLL Frequency Multiplication to 6x
に変更すると、1MHzのPWMが出てきたので、システムクロックが48MHzになったはずです。
これで、安定したパルスジェネレータや周波数カウンタを作る時に使えそうです。
テストに使ったソースコードは下記の通りです。使っていない#defineがいっぱいありますが、オリジナルを尊重してそのままにしてあります。
R4_HOCO_to_XTAL_clock_change.ino
(2025.04.27 追記) 大量のアドレス直書き#defineを抱え込むのは鬱陶しいので、標準で用意されている構造体でのレジスタ定義を使って書き直しました。
R4_HOCO_to_XTAL_clock_change2.ino
(2025.05.06 追記) 居酒屋ガレージ店主さんの記事
RA4M1コアボードの16MHz水晶をPLLでメインクロックに
を見て、6倍は仕様範囲外であって、逓倍比は8~31(1ステップずつ)にしなければならないことに気が付きました。なんとなく動いてますけど。
かと言って、12倍して1/4すると「PLL出力周波数は24MHz~32MHz(出力分周比:4)」の範囲外になります。
そもそもPLLの入力周波数が4MHz~12.5MHzを超えているので、どちらもお勧めできない設定になります。
6倍して1/2と12倍して1/4の両方を試してみましたが素人目にはどちらでも動いているように見えます。