浜松市にいる組み込みおやじ-電子工作、回路設計、ファーム TIPS

このブログはビーコンの代表である菅原が、電気電子、電子工作、組み込みソフトウェアなどで、自分が苦労したところや面白い発見などを記事にしていきます。電子工作やマイコンに親しむ人が少しでも増えたらという思いでつづります。
やっぱり、電子工作が好きなんですよ。
RL78のコード生成を使って一日で移植した。
0

    もともと私は R8C大好きだったけど、最近は R8Cは進化がなく、RL78推しがはっきりしてきた。

    で、めちゃ安いマイコンを使わないといけなかったので、いろいろと調べて、安いRL78/G10の16PINを使うこととした。

     

    余談になるけど、安いマイコンで探すと Silicon Lab のマイコンが40円ぐらいで販売されている。ROM2K RAM 256byte,ADCも付いている。今回は調べる時間が無かったので、採用しなかったけど、普通に通販で数十個のオーダーでこれだけの価格になるのはすごいことで、小規模のロットでも安く調達できるので、本気で採用を考えたい。

     

    さて、RL78/G10だがちょうど良いことに 秋月で 小さいボードを販売していたので、これをつかってバラックを作ってみた。

    http://akizukidenshi.com/catalog/g/gK-09035/

    RL78バラック

    R5F10Y47ASP

    コードフラッシュメモリ:4KB、RAM:512B

    で 16pin の内電源以外の 14pinがフルに使える。

    デバッグ用の2pin は兼用にしなければ、 12pinと言うことで、今回のプロジェクトではこのぐらいで収まりそう。

     

    で、RL78は仕事では初めて使う。また、、コード生成もあるので、せっかくなのでこれを使おうと思う。

     

    ◆コード生成について

     

    最初だけいろいろ戸惑ったところがあるけれど、順番に設定を入力していけばコード生成できる。

     

    また、コード生成が重複している端子のチェックをしていて、使いたい機能があったとして、そこで使用する端子が他の機能に使われていると、選択項目に出てこないなどしてくれる、これば便利だ。

    もっとも、一つの端子を複数の機能として使い分けをしたいと言うことには対応出来ないんだけど、本来ならばマニュアルをよく読んで、機能の割り振りをしないといけないところを、ウィザードで簡単にわかるのは良い。

     

    このマイコンは UARTとしては 1CH. いわゆる SPI機能としては 2CH使える。 最初 UARTとSPI両方使おうかなと考えていたが、コード生成で選べないので、マニュアルを調べると UART使う場合には SPIは1CHも使えないことがわかった。

    こんなことも、小ピンの安いマイコンにはよくあることだけど、たくさんコードを書いてから動かないとうんうんうなって、マニュアル調べて、出来ないとわかる・・という手間と時間を考えると、本当にありがたいことだ。

     

    PG RL78

    注意としてコード生成したファイルは必ず先頭が r_cg_xxxx となるがそのファイルは自動生成実行で上書きされてしまう。

    これらのコードを覗いてみると以下のようなコメントがある。

    /* Start user code for function. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */
    ユーザーが書いたコードはこのコメントの中にあれば残る。

     

    最初に一回だけ自動生成で、あとは自分でメンテすると言うことであれば、べつにどこに何を書いてもいいんだけど、

    後から設定を変更したいと言うことはよくあることなので、コードが消されないように注意したい。

     

    何にしろ、使った事のないマイコンでわずか一日でPICマイコンのソースから移植できたのはすごいことだ。

     

    ◆RL78とPICマイコンのコード効率の違い

     

    今回は いろいろ事情があって 最初にPIC16F887 でバラックを制作して評価した後、量産GOとなったので、小さくて安いマイコンということでRL78と言う流れになった。

    今回は 入力された波形の周波数とDUTYを算出して、それであるモジュールを動かすみたいなシステムだ。

    PICマイコンは古いこともあり、機能が非常に少なく、割り込みのチャタリング除去もハードでサポートしていないのでソフトでしないといけないとか余計な処理が入る。SPI機能も使わず、ポートパタパタでやっている。

    一方RL78はSPI機能を使い、また、タイマーのキャプチャー入力のノイズ除去なんかも優秀だし、タイマの機能も多彩なので、タイマー設定しておけば、割り込み時にレジスタを取得するだけで正しい値が出てくる。

    そう思うと RL78の方がコードが少なくてすむと考えていたが、実際にビルドしてみると PICマイコンの方がずいぶんとROMサイズが小さく収まる。


     

    MPLAB メモリ使用

    JUGEMテーマ:組み込み開発

    PIC16Fのメモリ使用

     

    RL78のMAPの抜粋

    .vect
                                      00000000  0000007f        80   0
    .const
                                      00000080  00000080         0   2

    <<中略>

    .monitor1
                                      000000ce  000000d7         a   1
    .text
                                      000000d8  00000bc4       aed   1
    .RLIB
                                      00000bc5  00000c31        6d   1

     

    PIC16F は 2430bye

    RL78G10 は 3120byte 

    PIC16Fは最適化無しで、RL78はデフォルトの最適化ありなのにこのように逆の結果となった。

     

    移植なのでほとんど同じプログラムで、PIC16の方がコードが若干多いというのに。。

    よく見てみると RL78/G10は Vecterに 128byte とられているのも痛い。

    安いマイコンだと ROMの残容量っていうのが本当に苦しいところがあるけれど、PICマイコンのコード効率の高さというのもすごいものがあることがわかった。。

     

     

     

     

    | ビーコン菅原 | Renesas RL78 | 17:18 | comments(0) | trackbacks(0) |
    nRF52 P0.10,P0.9が操作できない問題について
    0

      nRF52で P0.9,P0.10が操作できなくて、ちょっとはまったのでメモしておく。

       

      P0.9,p0.10を出力に設定しても、ポートの操作ができない問題に直面。

      これは NRF_UICR->NFCPINSの設定が 1になっていて、P0.9,P0.10を NFCで使うモードになっているためと判明。

      ちなみに、デフォルト値は1 なので、なにもしないと NFCモードになる。
       

      で プロジェクトの中でNRF_UICR->NFCPINSの設定をしているところがあるのではないかと検索すると、一つだけヒット。。

      CONFIG_NFCT_PINS_AS_GPIOSを定義しておけば、P0.9,P0.10をGPIOとして設定するコードが有効になるので、GPIOとして使えるようになる。

       

      NRF_UICRは不揮発メモリなので一度設定してしまえば、電源を再投入してもリセットしてもGPIOモードのままになる。

       

      CONFIG_NFCT_PINS_AS_GPIOSの定義が見当たらなかったので、 該当する  #if defined (CONFIG_NFCT_PINS_AS_GPIOS)の直前に定義してみたところ、設定が書き換わり、P0.9,P0.10のポート操作ができるようになった。

       

      system_nrf52.c 140行目あたり(nRF5_SDK_11.0.0_89a8197)

              // add by sugawara
      #define     CONFIG_NFCT_PINS_AS_GPIOS 1

          /* Configure NFCT pins as GPIOs if NFCT is not to be used in your code. If CONFIG_NFCT_PINS_AS_GPIOS is not defined,
             two GPIOs (see Product Specification to see which ones) will be reserved for NFC and will not be available as
             normal GPIOs. */

          #if defined (CONFIG_NFCT_PINS_AS_GPIOS)
              if ((NRF_UICR->NFCPINS & UICR_NFCPINS_PROTECT_Msk) == (UICR_NFCPINS_PROTECT_NFC << UICR_NFCPINS_PROTECT_Pos)){
                  NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos;
                  while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
                  NRF_UICR->NFCPINS &= ~UICR_NFCPINS_PROTECT_Msk;
                  while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
                  NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos;
                  while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
                  NVIC_SystemReset();
              }
          #endif

      | ビーコン菅原 | nRF5x Nordic | 12:15 | comments(0) | trackbacks(0) |
      最近組み込みエンジニア不足らしいと
      0

        先日の異業種交流会に参加した。

         

        IT系の会社の人が多くて、組み込みやっている人は少数派だ。。

        組み込みやっていることを伝えると、いまは自動車メーカーがどんどん組み込みエンジニアを抱えていて、組み込みエンジニアは不足しているという話をしていた。

         

        確かに、浜松で活躍していたある組み込みの人も、最近某自動車メーカーの系列会社の仕事とかで、県外にずっと入っているということも聞く。。

        それから、とにかく、最近引き合いが多い。まあ、自動車メーカーに入って仕事してくださいというのはないけれど、それでも、いろいろな引き合いが増えているのは、他の組み込みエンジニアが自動車メーカーに取られてしまった余波なのかもしれない。

         

        JUGEMテーマ:組み込み開発

        | ビーコン菅原 | やもやま話 | 11:28 | comments(0) | trackbacks(0) |
        nRF5x をGCCでコンパイルする。(暫定)
        0

          JUGEMテーマ:組み込み開発

           

          nR52をGCCでコンパイルしたので、メモとする。

          いつもは恵まれた統合開発環境を使っていたこともあり、GCCを使う機会が無かったこともあり、なおかつ、Linux使いというわけでもなく、なじみが無かったので、結構苦労した。

           

          参考にしたサイト

          GCC ARM Toolchainでmbedをオフラインビルド

           

          ここより抜粋

          GCC ARM Toolchainのインストール

          gcc-arm-none-eabi-4_8-2013q4-20131204-win32.exeをダウンロードして、実行する。

          忘れずに、最後はAdd path to environment variableにチェックを入れる。(環境変数を追加してくれる)

          Gnu Makeの追加

          C:¥Program Files (x86)¥GNU Tools ARM Embedded¥4.8 2013q4¥binに下記のファイルを追加する。

          make.exe
          libiconv2.dll
          libintl3.dll
          上記ファイルは、sorceforge.netのmake-3.81-bin.zipとmake-3.81-dep.zipの中にある。
          引用終わり・・

          --

          ということで、

          今回は ble_app_nrsをコンパイルしてみたかったので

          ・・・¥nRF5_SDK_12.2.0_f012efa¥examples¥ble_peripheral¥a_ble_app_hrs¥pca10040¥s132¥armgcc

          のディレクトリまでおりて

          makeを実行。

          するとなにやらエラーが出てくる。

           

          ¥nRF5_SDK_12.2.0_f012efa¥components¥toolchain¥gcc¥Makefile.windows

          の中を見てみると

          インストールされているコンパイラのバージョンが違っていて、そのためにインストールされているフォルダが違っていた。

          4.9 2015q3 を 4.8 2014q3 に書き換えた。

           

          GNU_INSTALL_ROOT := C:/Program Files (x86)/GNU Tools ARM Embedded/4.8 2014q3
          GNU_VERSION := 4.9.3
          GNU_PREFIX := arm-none-eabi
           

          再び makefileのフォルダでmake.exeを実行するとコンパイルがあっさり通った。

           

          Keil の統合開発環境で見てみるとよくわかるが、Nordicが提供しているプロジェクトは階層構造が結構複雑だ。

           

           

          CUIの環境ではこれを見渡すのが難しいことと、いまのままではデバッガが使えない。いろいろと改善の余地があるけれど、まずはこれで開発を進めていく。

           

           

           

           

          | ビーコン菅原 | nRF5x Nordic | 09:06 | comments(0) | trackbacks(0) |
          さくらのIoT Platform βの消費電流について
          0

            JUGEMテーマ:組み込み開発

             

            先日さくらのIoT Platform を知ったので、早速さくらの通信モジュール(LTE)-β版 を購入してみた。

            https://iot.sakura.ad.jp/

            http://iot-store.sakura.ad.jp/items/4326125

             

            さくらの通信モジュールは、このモジュールにデータを渡すとインターネット等を介さずに、専用の通信網を使ってデータをクラウド上に上げてくれる仕組みとなる。

            サクラのクラウドとかそういうところにいきなりデータがある。その他 AWS等とも接続できるということ。

            組み込みで、一番面倒だったりするところを全部担当してくれて、こちらはこのモジュールと通信できれば IOT完成 ・・・という感じになるので大変ありがたい。普通は Wifiで飛ばしてみたいなところから始まり、セキュリティーはどうするとか、相手と接続の手順やら、結構めんどくさいことが山積みになってしまう。それなりにおおきなマイコンを積まないといけないとかなる。

            さくらのIoT Platformを使えば、そういうことも考えなくていいので、マイコンも小さなものですむというわけですな。

             

            で通信モジュール(LTE)は UART,SPI,I2Cの三種類の通信方法が用意されている。

            ここでは I2C 一択と考えてよさそうだ。

            いまは β版だけど、今後正式版ではUARTをサポートしないかもみたいなことがマニュアルに書いてある。

            SPIの場合、使用しているポートが 通信モジュール(LTE)のIOポートと兼用端子となってしまうので、ここを使うとI/Oが使えなくなってしまう。

            そんなわけで I2Cバスが一番の選択になる。

             

            Arduino のシールドも用意されている。

            http://iot-store.sakura.ad.jp/items/4350904

             

             

            Arduino のシールドではSAKURAのスケッチもサンプルとして提供されている。

            スケッチをダウンロードして動作させてみた。

             

            最初はサーバーと通信をして、プログラムの更新などするらしく、結構消費電流を食らうようだ。

            で、ArduinoのUSB端子だけを電源にすると、PCに拒絶されてしまった。

             

            おそらく、大電流が流れて、USBの保護回路的なものが働くのだろう。

            仕方がないので、Arduino に ACアダプタをつけて動かした。

             

            しばらく動作させた後に、ACアダプタをはずしてみたが、今度はPCに拒絶されることはなく動作する。

            ただし 、消費電流は安定するとなく、数秒単位で切り替わる。これはUSBの電流計のせいかも知れないけれど・・

            それから数十分すると 0.12A前後で安定するようになる。

             

            次回電源を入れたときも最初のうちは 350mAと120mAのあいだをしばらく行ったりきたりする。

             

            Arduinoの消費電流が だいたい 40mA程度なので、安定したら サクラ自体の消費電流は80mAぐらいになりそうだ。

            今後、正式リリース版になれば、 スリープモードもサポートされる模様だが、通信開始時に電流が流れ、マイコン側からは制御する術もなさそうなので、それなりに大容量の電源の確保が必要となる。

             

             

             

             

             

             

             

             

            | ビーコン菅原 | Arduino | 18:06 | comments(0) | trackbacks(0) |
             123456
            78910111213
            14151617181920
            21222324252627
            28293031   
            << May 2017 >>
            + RECOMMEND
            + RECOMMEND
            + SELECTED ENTRIES
            + RECENT COMMENTS
            + RECENT TRACKBACK
            + CATEGORIES
            + ARCHIVES
            + つぶやき
            + MOBILE
            qrcode
            + LINKS
            + PROFILE