RL78G1C(R5F10JBCAFP)でサンプルを動かすには?

秋月などで買える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キーボードデバイスとして、認識されているようだ。

  • データシートに載っていました。

    D+/D-につながるUDP0,UDM0,UDP1,UDM1は6.5Vまで大丈夫ですので、VBUS側(5V)に逃すようにつなげば良いです。

  • 皆様、情報、有難うございます。部品が入手できたら、試したいと思います。

  • TPD2E001DRLRを入手したものの、意外に小さく、手付の半田付けでは、無理そうなので、別の部品を探します。この大きさなら、これを内蔵するUSBコネクタがあってもよさそう(;^ω^) DZDパッケージの方が大きそうなのですが、在庫が無いようです。

    試しに、外付け水晶振動子無しの場合で、手元にあったリード線付のスイチングダイオード(1S2076Aを4本)を付けたら、うんともすんとも、認識されなくなりました(;^ω^)。但し、1N4148の方が、TPD2E001に近い仕様な模様。

    安いUSBアナライザ(USBストリームスコープ US-F100Aとか中古)でもあった方が、いいかな。外付け水晶振動子なしは、鬼門だったかな。

    とりあえず、外付け水晶振動子の使用を前提にすると、ダイオード4本も付けられるようにして、PCBはこんな感じに修正しとけば、良いかな。

  • とりあえず、このPCBを発注して、第二ラウンドします。

  • 昨日、水晶振動子付版の電子基板が届いたので、試したところ、ふりだしに戻った感じで、E20を繋いでないと、PCから認識されない状態になりました。抵抗器は、0Ω, 22Ω, 47Ω, 100Ωと変えても、症状変わらず。

  • お騒がせしてます。新しい電子基板の動作不安定の落ちが、見えてきました。現象論ですが、resetピンをプルアップしてなかったのが原因のようです。resetピンをプルアップして、更に、動作確認予定です。RL78/G10を使ったときには、resetピンは、オープンで使えていたので、同じようにしてました。

    外付け水晶振動子ありに変更しましたが、ちゃんと動くようになったみたいです。皆様、有難うございました。

    RL78/G1C ユーザーズマニュアル ハードウェア編のページ20には、resetピンは、使わない時には、VDDへ接続しろと書いてあるのね。内部でプルアップでないってことですかね。D+とD-の保護ダイオードは、1N4148で動いてます。

  • PCBファイルも修正。シルク1ヶ所の印刷面修正と、プルアップ抵抗器の追加。

    修正版PCBファイルも公開。但し、サイリウム部分は未チェック。ゲームコントローラ部のRL78G1Cと、サイリウム部のGR-KURUMIそれぞれは、シリアルで接続されているだけなので、独立して使えるようになってます。

  • サンプルを改造して、プッシュスイッチを接続するポートで変更しようと、下記修正をしたのですが、ポートからちゃんと値が取れてない状況。ポート初期化は初心者なので、何が不足しているのか、データシート見ながら確認中。兼用機能を無効化しそこねてるのかどうか。サンプルソースの下記の関数usb_cpu_set_pin_functionが、ポート初期化をしている模様。

    void usb_cpu_set_pin_function(void)
    {
    
        ADPC = 0x01; // all digital port
        PIOR = 0x00; // 
    
        /* Pin  | Function  | I/O   | Connection */
        /*****************************************/
        /* P00  | P00        | I     | SW02       */
        /* P01  | P01        | I     | SW01       */
    
        IICCTL00.7 = 0; //stop SDA
        IICCTL01.7 = 0; //stop SDA
    
        TOE0 = 0;
        TO0 = 0;
        CKS0.7 = 0; 
    
        SOE0 = 0x01;
        SO0 = 0x02;
    PMC = 0xfc; // p00 and p01 to digital I/O PM0 = 0xff; // p01 and p01 t0 input PU0 = 0x03; /* P20 | P20 | I | SW04 */ /* P21 | P21 | I | SW07 */ /* P22 | P22 | I | SW0a */ PM2 = 0xff; /* P30 | P30 | I | SW0c */ /* P31 | P31 | I | SW06 */ PM3 = 0xff; PU3 = 0x03; /* P60 | P60 | I | SW0b */ /* P61 | P61 | I | SW08 */ /* P62 | P62 | I | SW03 */ PM6 = 0xff; /* P70 | P70 | I | SW09 */ PM7 = 0xff; PU7 = 0x01; /* P120 | P120 | I | SW05 */ PMC12 = 0xfe; PM12 = 0xff; PU12 = 0x01; } /* eof usb_cpu_set_pin_function() */

    E20で見ると、P2,P3,P6,P7,P12からは値が取れていてけど、P0から、常時、0値で、値が取れてない模様。P0の何かを無効化できてないのかな。
    そもそも、P0を使わない方が良いのかしら。

  • お騒がせしました。下記のレジスタ誤りでした。

    誤「PMC = 0xfc; // p00 and p01 to digital I/O 」
    正「PMC0 = 0xfc; // p00 and p01 to digital I/O 」

    void usb_cpu_set_pin_function(void)
    {
        ADPC = 0x01; // all digital port
        PIOR = 0x00; // 
    
        /* Pin  | Function  | I/O   | Connection */
        /*****************************************/
        /* P00 | P00        | I     | SW02       */
        /* P01 | P01        | I     | SW01       */
    
        IICCTL00.7 = 0; //stop SDA
        IICCTL01.7 = 0; //stop SDA
    
        TOE0 = 0;
        TO0 = 0;
        CKS0.7 = 0; 
    
        SOE0 = 0x01;
        SO0 = 0x02;
        
        PMC0 = 0xfc; // p00 and p01 to digital I/O    
        PM0 = 0xff; // p01 and p01 t0 input   
        PU0 = 0x03;
        
        /* P20 | P20        | I     | SW04       */
        /* P21 | P21        | I     | SW07       */
        /* P22 | P22        | I     | SW0a       */
    
        PM2 = 0xff;
        
        /* P30 | P30        | I     | SW0c       */
        /* P31 | P31        | I     | SW06       */
        
        PM3 = 0xff;
        PU3 = 0x03;
        
        /* P60 | P60        | I     | SW0b       */
        /* P61 | P61        | I     | SW08       */
        /* P62 | P62        | I     | SW03       */
        
        PM6 = 0xff;
        
        /* P70 | P70        | I     | SW09       */
        
        PM7 = 0xff;
        PU7 = 0x01;
        
        /* P120| P120       | I     | SW05       */
    
        PMC12 = 0xfe;
        PM12 = 0xff;
        PU12 = 0x01;   
        
    }   /* eof usb_cpu_set_pin_function() */

    この訂正で、サンプルのキーボード機能の動作を確認できました(下画像)。

    この英数キーをファンクションキーに変えれば、今回のゲームコントローラとしては、目的達成。あとは、シリアルポート0を使えるようにすること。

  • チョコです。

    無事動作おめでとうございます。

    RL78では、アナログ入力兼用ポートは初期状態では

    アナログ入力になっています。これをデジタル入出力に

    変更すれば、PMレジスタの初期値は1(入力ポート)なので、

    そのまま使えるはずです。(タイマやシリアル関係の出力は

    無関係です。そもそも、これらのレジスタはPER0レジスタの

    対応するビットが1になっていないと設定はできません。)