秋月などで買えるRL78G1C(R5F10JBCAFP, 32pin)ですが、「Renesas USB MCU, USB Peripheral Human Interface Devices Class Driver (PHID) using Basic Mini Firmware」で公開されているソースコード、そのまま動かないようです。なお、USBキーボードとして動作させるモードを使おうとしてます。
今、作業始めて見つけた条件の違いは、
(1) 48pinが、前提で、32pinにはないポートをスイッチに割り当てている。再配置が必要かも。←sw1,sw2,sw3で使ってるポートは、32pinにもありました。(2) 外付け水晶を使った発信が前提で、内蔵発信器になっていないこと。ロースピードで良いので、内蔵発信器で動くようにしたい。(3) 今後の作業で見つけていきます。
上記の3つの中で、(2)の変更をするための情報が知りたく、お願い致します。
RL78G10と同様の回路で、制御プログラムは書き込めているようです。
ユーザズマニュアルでは、下記の記載がヒントかな。
② 高速オンチップ・オシレータオプションバイト(000C2H)により,fHOCO = 48 MHz (TYP.) /24 MHz (TYP.)から周波数を選択し,発振させることができます。CKSELRビット(MCKCレジスタのビット0)を"0"に設定すると,周波数fHOCOをRDIV0, 1ビット(MCKCレジスタのビット1, 2)の設定によって,2/4/8分周(2分周がデフォルト)したクロックがメイン・システム・クロック・ソース(fIH)として選択されます。リセット解除後,CPUは必ずこの高速オンチップ・オシレータ・クロックで動作を開始します。USBクロックとして高速オンチップ・オシレータ・クロックをソースクロックとして選択(USBファンクション・コントローラ機能のロウ・スピード転送時のみ使用可能)する場合は,fHOCOの周波数選択を48 MHzとした上で,メイン・システム・クロック(fMAIN)に必ずfHOCOを分周したメイン・システム・クロック・ソース(fIH)を選択して使用してください。STOP命令の実行またはHIOSTOPビット(CSCレジスタのビット0)の設定により,発振を停止することができます。オプション・バイトで設定した周波数は,高速オンチップ・オシレータ周波数選択レジスタ(HOCODIV)で変更できます。周波数は,図5-9 高速オンチップ・オシレータ周波数選択レジスタ(HOCODIV)のフォーマットを参照してください。
③ PLL(Phase Locked Loop)による高速システム・クロックの逓倍機能USBホスト/ファンクション・コントローラ用のクロック供給を主目的としたクロック機能で,PLL発振周波数(fPLL)が48MHzとなるようにDSCCTLレジスタを設定して使用します。また、CKSELRビットを"1"に設定すると,周波数fPLLをRDIV0, 1ビットの設定によって,2/4/8分周したクロックがメイン・システム・クロック・ソース(fIH)として選択されます。USBクロックとしてPLLクロックをソースクロックとして選択する場合はメイン・システム・クロック(fMAIN)として必ずfPLLを分周したメイン・システム・クロック・ソース(fIH)を選択して使用してください。DSCONビット(DSCCTLレジスタのビット0)の設定により,PLLを動作,停止させることができます。なお,PLLの設定の詳細およびUSBクロックとの接続関係に関しては図5-12,表5-3を参照してください。
これの具体的なプログラムがどうなうのか? でも、②と③で、混乱
試しに、「// MCKC |= 0x01; /* Select PLL clock (fPLL) */」とコメントアウトすると、下写真のエラーメッセージがでるようになったが、どう設定するのだろうか?
上写真は、ロースピードでつけろと書いてあったコンデンサを外した時のエラー。
前提として、USBデバイスとして、使うときは、水晶発振器が必須ということではないですよね。
-------
デバイスマネージャのダイアログを見ていると、一瞬、HIDキーボードデバイスとして、認識されているようだ。
digipontaさん
図5-1 クロック発生回路のブロック図を見ると、内蔵高速発振器をUSBに接続するには以下の設定でよさそうですよ。
DSCCTL=0x00;//DSFRDIV=0分周なし(PLLを使わない場合はDSCCTLの設定は不要かも) HOCODIV=0x00;//48MHz MCKC=0x00;//FIOCO選択
内蔵発振器の精度だとUSB規格的にLow-speedにしか対応できないんですよねー。
ちなみに、LowSpeedなので、G1CのD-/D+のラインにそれぞれ0.22uF 220pFくらいのコンデンサをつけてます?
Kirinさん、情報、有難うございます。試すと、残念ですが、認識エラーのままでした。
とりあえず、RL78G1Cの32pinに、外付けで12MHzの水晶振動子を付けて、動作確認をしたところ、サンプルソースコードを無修正で、PCからHIDキーボードデバイスとして認識されました。
現状までの確認では、RK78G1C/32pinに、外付け12MHz水晶振動子(外部コンデンサは2個とも10pF、抵抗は零Ω)を付けると、サンプルソースコードは無修正で、キーボードモードが稼働。SW1,SW2, SW3のポートは、32pinパッケージにも出廷ます。
しかし、秋葉原の店頭で買える12MHz水晶振動子が、大きすぎる(;^ω^)
こんなの も売ってるみたいですよ。
情報、有難うございます。一昨日、行ったときに、見つけられなかった模様です。でも、更に10pFのコンデンサ2個付けるスペースが捻出するのが難しそう。今、空中配線でも良いかと挫折しようかと
USBコネクタから、RL78G1Cまで、10cm弱あるので、PBC側のスペース捻出よりも、USBの2芯シールドケーブルで内部接続するのが、無難か。
ブレッドボードでUSBの実験するのが、駄目そうな気がしてきました。
現状は、E20付けて、3.3V電源つなぐと、正常に、HIDキーボードとして認識されるが、5V電源に変えると、USBケーブルを短くしないと、正常に認識されないことが、判明。E20を繋げずに、直接、電源をつなげると、一瞬、PCのデバイスマネージャが再描画されて、不明なUSBデバイスになるか、一覧から消失したままという状況。USBから電源をとると、PCのデバイスマネージャが再描画も起きずにだんまり。アナログ的な条件なのか、そもそも何かがずれているのか、E20付けて、3.3V電源つないだ状態が、なぜ安定して動作しているのかが不思議。あと、D+とD-のそれぞれに直列に、51Ω(有り合わせなので、45Ωなかった)を入れると、E20付状態だけど、5V電源でも、PCに正常に認識される状態になった。やはり、E20の有無で何が異なるのか気になる。
動きませんでしたか、、、 ちなみにC2h番地のオプションバイトはF0h(48MHz)ですよね?
あと追加で、 UCKSEL=0x0001;//USBクロックに高速オンチップ・オシレータ・クロック(fHOCO)を選択する を設定する必要がありそうです。
UCKSEL=0x0001;//USBクロックに高速オンチップ・オシレータ・クロック(fHOCO)を選択する
PS と思ったら、UCKSELはL1Cにしかないレジスタみたいです。同じUSBじゃないのかなぁ、謎だぁ。。。。
*((volatile unsigned short *)0xf06C4)=0x0001; //UCKSELとかやったらダメかな。。
*((volatile unsigned short *)0xf06C4)=0x0001;
Kirin さん
有難うございます。
不安定ながら、HIDキーボードとして認識されるようです。ブレッドボードでの実験に問題があるようです。
あと、D+とD-のポートを、いじくっていると、チップが簡単に壊れるようで、困惑中。