忘備録-備忘録

技術的な備忘録

RX62NのUSB機能を使う

2015-12-06 21:29:51 | RX62N
RX62NのUSB機能を使用してRX62NをCDCデバイスにするプログラムです。基本となる部分はルネサスエレクトロニクスのサンプルプログラムを利用しました。
関数化してあるので簡単に使用することができます。

e2 studioのエクスポートしたプロジェクト

サンプルプログラム
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <machine.h>
  4. #include "iodefine.h"
  5. #include ".\USBStack\usb_hal.h"
  6. #include ".\USBStack\CDC\usb_cdc.h"
  7. void _INIT_IOLIB( void );    //プロトタイプ宣言
  8. int main(void)
  9. {
  10.     int data;
  11.     unsigned char c,buf[256];;
  12.     SYSTEM.SCKCR.BIT.ICK = 0x00;        //システムクロック x16 96MHz
  13.     SYSTEM.SCKCR.BIT.PCK = 0x01;        //周辺クロック   x4  48MHz
  14.     SYSTEM.SCKCR.BIT.BCK = 0x01;        //外部バスクロック x4  48MHz
  15.     /*Initialise the USB CDC Class*/
  16.     USBCDC_Init();
  17.     setpsw_i();                            //割込み許可 clrpsw_i()割込み禁止
  18.     _INIT_IOLIB();                        // printf(),scanf()の初期化
  19.     while(false == USBCDC_IsConnected());    //USB接続待ち
  20.     c = charget();        //ホストから1文字入力
  21.     printf("RX62N USB cdc test program.\n");
  22.     while(1)
  23.     {
  24.         c = charget();        //ホストから1文字入力
  25.         charput(c);        //ホストに1文字出力
  26.         printf("Input string:");
  27.         scanf("%s",buf);
  28.         printf("string: %s\n",buf);
  29.     }
  30. }

RX210で矩形波を出力する

2015-12-06 21:14:46 | RX210
RX210のタイマMTU0を使用してをMTIOC0A端子(PORT3-BIT4)から一定周波数の矩形波を出力するプログラムのサンプルです。

  1. #include "iodefine.h"
  2. #include <machine.h>
  3. #define PCLK 125                // 周辺機器のクロック設定 125kHz
  4. /*
  5. タイマの設定
  6. */
  7. void initMTU0cmt(void)
  8. {
  9.     SYSTEM.PRCR.WORD = 0x0A502;
  10.     MSTP(MTU0) = 0;                //MTU0 モジュールスタンバイ解除
  11.     SYSTEM.PRCR.WORD = 0x0A500;
  12. /* 端子の設定 */
  13.     PORT3.PODR.BIT.B4 = 0;        // P34 MTIOC0A 出力初期値
  14.     PORT3.PDR.BIT.B4 = 1;        // P34 出力設定
  15.     PORT3.PMR.BIT.B4 = 0;        // P34ポートとして使用
  16.     MPC.PWPR.BIT.B0WI = 0;        // PFSWE書き込み可
  17.     MPC.PWPR.BIT.PFSWE = 1;        // PFSレジスタへの書き込み可
  18.     MPC.P34PFS.BIT.PSEL = 1;    // P34をMTIOC0Aとして使用
  19.     MPC.PWPR.BIT.PFSWE = 0;        // PFSレジスタへの書き込み禁止
  20.     PORT3.PMR.BIT.B4 = 1;        // P34周辺機器として使用
  21. /* MTUタイマの設定 */
  22.     cycle = PCLK * 1000UL / 1000UL / 2UL;
  23.     MTU.TSTR.BIT.CST0 = 0x00;    //MTUカウント停止
  24.     MTU0.TCR.BIT.TPSC = 0x00;    // CLK PCLK/1 でカウント
  25.     MTU0.TCR.BIT.CCLR = 0x02;    //TCNT0はTGRBのコンペアマッチでクリア
  26.     MTU0.TMDR.BIT.MD = 0x00;    //タイマーノーマルモード
  27.     // 出力波形の設定
  28.     MTU0.TIORH.BIT.IOA = 0x03;    // MTIOC0A初期出力はLow出力コンペアマッチでトグル出力
  29. //    MTU0.TIORH.BIT.IOA = 0x00;    // MTIOC0A 出力禁止
  30.     MTU0.TIORH.BIT.IOB = 0x00;    // MTIOC0B 出力禁止
  31.     MTU0.TGRA = 0;                //出力ON-OFFのタイミング
  32.     MTU0.TGRB = 0;                //周波数の設定
  33.     MTU0.TCNT = 0;                //カウンタクリア
  34.     MTU.TSTR.BIT.CST0 = 0x00;    //タイマ停止
  35. }
  36. /*
  37. 波形の出力
  38.   引数 周波数
  39.  */
  40.  void setFrequency(int Frequency)
  41.  {
  42.      int sycle;
  43.      if(Frequency == 0) {
  44.         MTU.TSTR.BIT.CST0 = 0x00;        //タイマストップ
  45.      } else {
  46.         sycle = PCLK * 1000UL / Frequency / 2UL;
  47.         //MTU0.TCNT = 0;                //カウンタクリア
  48.         MTU0.TGRB = sycle;
  49.         MTU.TSTR.BIT.CST0 = 0x01;    //タイマスタート
  50.      }
  51.  }
  52. void main(void)
  53. {
  54.     unsigned int n=0;
  55. /* クロックは速いほうが正確な周波数になる */
  56.     //change_oscillation_PLL();            // クロックソースPLL
  57.     initMTU0cmt();
  58.     setFrequency(1000);                    // 1kHz出力
  59.     while(1) {
  60. /* ハードウェアで波形出力するのでプログラムでは何もしなくてもよい */
  61.     }
  62. }

RXマイコンでprintfを使う

2015-12-06 20:27:38 | RX210
開発環境はe2 studioでルネサスエレクトロニクス製のCコンパイラを使用しています。やはりprintf()が使えると開発に便利なのでprintf()を動作させる方法を調べてみました。
printf()ないでmalloc()を使用しているらしくヒープ領域が必要です。プロジェクト生成のウィザードでヒープ領域を設定します。どのくらい必要かは調べていません。


次に示すコードlowsrc.cを追加します。このファイルの最後に1文字分の入出力を行う関数charput(),charget()にコードを追加します。lowsrc.cはHEW開発環境では自動的に生成されるらしいです?。
main()関数かreset_program.c()内でlowsrc.cファイル内の入出力初期化用の関数_INIT_IOLIB()を呼び出します。

  1. void _INIT_IOLIB( void );
  2. main()
  3. {
  4.     _INIT_IOLIB();
  5.        .
  6.        .
  7.     printf("Hello world!\n");
  8.        .
  9.        .
  10. }

lowsrc.c


binbono arduino互換機を作る

2015-12-04 17:31:43 | arduino
マイコンはarduinoをよく使用します。本体を使いまわせば良いのですが、何かの機器に組み込む場合、1台あたりの値段が結構かかります。AVRマイコン自身は安価なので、なるべく安く組み込めるように考えてみました。

書き込み器とマイコンを分け、マイコン部分を少ない部品で作ることとしました。

マイコン部回路


これだけシンプルになりました。水晶振動子を使用していないのでクロックは内臓の8MHzとなります。また、電源電圧は2.7V~5Vの間で自由に使えます。

書き込み器回路図


マイコン部をシンプルにしたために書き込み器に細かい回路が来ています。書き込み器は使いまわしがきくので問題ないでしょう。ピン配置はaitendoで取り扱っているUSB-TTL変換キットと同じにしました。このキットでも書き込みできると思います。

使用時の写真



ブートローダーの設定
ATmega168  ATmegaBOOT_168_pro_8MHz.hex arduinoをインストールしたフォルダの中にあります。
       ヒューズビット EXTENDED:0xF8  HIGHT:0xFD  LOW:0xE2  LOCKBIT:0xCF

ATmega328  ATmegaBOOT_168_atmega328_pro_8MHz.hex arduinoをインストールしたフォルダの中にあります。
       ヒューズビット EXTENDED:0xFD  HIGHT:0xDA  LOW:0xE2  LOCKBIT:0xCF

IDEでの設定
 IDE上ではArduino Pro or Pro Miniを選びます。



参考サイト
  Arduinoのヒューズ設定
  あちゃんでいいの