Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

シリアル通信について

現在rx65nを使用してadコンバータとi2c通信を行いデータの受信を行うことができました。

そのデータをシリアル通信でpcのcsvに出力するためスマートコンフィグレータを使用しようと思っているのですが

R__Serial_Send

で送ったデータは接続しているpcに送られるということでしょうか?

またその確認方法はpc側のプログラミングが別で必要なのでしょうか?

よろしくお願いします。

  • チョコさん、こんにちは、たむら さんも、こんにちは。NoMaYです。

    > (RX65n -> MAX3232 -> RS232C用外部コネクタ?)
    たむらさんの文面から、そういう接続でしょうね。

    > (9pinのD-subコネクタであれば、±12VのRS232Cだと思いますが)
    電子工作グッズでは無くパソコン用品として販売されているUSB-RS232C変換アダプタですので、±12Vだと思うのです。

    先走るのもなんですけれど、基板に搭載されているRS232Cのもともとの用途として、パソコンに繋ぐ為に用意されていたものなのか気になっています。提携先の企業から何かの周辺機器も提供されていて、もともとは、それと繋ぐためのもので、それと繋ぐ時にストレートケーブルを使用して下さい、という意図の説明だったりしないのかなぁと、、、(そして、パソコンと繋ぐにはクロスケーブルを使用しないといけないのだった、という可能性とかが気になっています、、、)

    > 基盤の説明書にストレートケーブルを使用すると記載されていた

    [追記]

    でも、それだと、コネクタ/ケーブルのオス/メスが合わなかったりするのかな?、、、

  • TXDは電話回線に出て行く信号です。
     ターミナル(パソコン側)のTXDは出力で、モデム側のTXDは入力となります。
     ストレートケーブルで、同じ信号名同士を繋ぎます。
     ターミナル側がオスコネクターで、モデム側はメスコネクターとなります。
     ターミナル側はDTE、モデム側はDCEと言います。
     次のページを参照
    www.sacom.co.jp/.../rs232c.html


    2020/11/11 7:41
    >ケーブルの方は基盤の説明書にストレートケーブルを使用すると記載されていたので

     相手側にパソコンを想定していてストレートなら、DCEで作られている。コネクタはメスになっていますか?
     コネクターのTXDを辿っていくと、レベル変換ICを通してCPUのRXDに入ります。
     基板から信号を送出すれば、コネクターの2番ピンのRXDに信号が現れます。

     書き込みを見ていると、テラタームが動いていないようです。
     基板とは繋がず、変換ケーブルだけで試してみます。
     先ずエコーバッグにして下さい。打った文字が表示されますか?
     次にTXDとRXDを繋いで下さい。打った文字が2回表示されれば正解です。
  • リカルドさん、こんにちは、たむら さんも、こんにちは。NoMaYです。

    情報ありがとうございます。ちょうど金曜日に以下が確認出来たところですね。そして今は、マイコン基板側で、RX65N -> MAX3232 -> RS232C用外部コネクタと繋がっている回路で、MAX3232のRS232C側出力には信号が出ているけれども、RS232C用外部コネクタの出力には信号が出ていない、ということが分かったけれども、なぜだろう?ということで、私からは回路図を追ってみて欲しいとリプライしたところですね。

    > 書き込みを見ていると、テラタームが動いていないようです。
    > 基板とは繋がず、変換ケーブルだけで試してみます。
    > 先ずエコーバッグにして下さい。打った文字が表示されますか?
    > 次にTXDとRXDを繋いで下さい。打った文字が2回表示されれば正解です。

    [追記]

    MAX3232は2ch入りなんですね、、、別のchの方がRS232C用外部コネクタと繋がっていたという可能性も気になりますね、、、(そして信号が観測された方のchはマイコン基板内で別の場所に繋がっていた、とか、、、)

    MAX3232製品ページ
    www.maximintegrated.com/jp/products/interface/transceivers/MAX3232.html
     
    [追記2]

    2ch入りなのはデータ信号線用と制御信号線用ですかね、、、どう繋がっているかは回路図で確認ですね、、、

  • In reply to NoMaY:

    リカルドさん,チョコさん,NoMaYさん,回答ありがとうございます。
    返信が遅くなり申し訳ございません。

    そしてもう1つ謝らなければいけないことがあります。
    単刀直入に言うと通信できました。

    以前pcとの接続しているケーブルが
    www.cablecreation.com/.../usb-to-rs232-flat-cable-ftdi-chipset-10ft3meters-cd0621.html
    だといったのですがオスとメスを間違えていて実際は下のほうのurlのものを使用していました。
    www.cablecreation.com/.../usb-to-rs232-adapter-with-ftdi-chipset-6-6-feet2-meters-cd0486.html
    申し訳ありません。

    そして回路図を追うということでマイコン側のほうを見てみましたが特に問題はなかったのでケーブルのほうのピンの配置も見てみました。以前参考するようにと言われていた
    www.nahitech.com/.../rs232c.html
    このurlの通りにピンが配置されているだろうと思っていたのですが違っていて
    使用していたケーブルはストレートではなくクロスケーブルだということに気づきました。

    そしてMAX3232のRS232C側出力に波形の変化が見られないとのことでしたがジャンプワイヤがうまく接続できていなかったのが原因で現在確認してみるとちゃんと波形は変化していました。

    今回は焦りで最後まで確認せず初歩的なミスで皆様の貴重な時間を割いてしまい本当に申し訳ありませんでした。
  • たむら さん、こんにちは。NoMaYです。

    まだひとつ片付いてないと思うのです、、、以下に関しては、どういうことだったのでしょう?こちらもジャンプワイヤの接続ミスだったのかな?(ミスだったと思われるかな?)

    > [追記]

    > 以下であるなら、やはり、根本的に何かおかしい、何か勘違いされている、のでしょうね、、、

    > > また、キーを押して見ましたが波形の変化は見られませんでした。

    [追記]

    片付いていないのはひつだけでは無いですね。RX65Nから送信してTeraTermaに表示されなかったのも片付いてないですね、、、(だからオシロで波形を観測しようとしたのっだった筈?、、、)

  • In reply to NoMaY:

    NoMaYさん,回答ありがとうございます。

    通信ができたという確認方法はrs232cのコネクタの送信のピンからジャンプワイヤを使用して
    ケーブルの受信のピンと接続してテラタームに表示されるというものです。
    ですので
    >> > また、キーを押して見ましたが波形の変化は見られませんでした。
    このときは送信と受信のピンを同じコネクタ内でつなぐということと思っておらずpcとマイコンを
    ケーブルでつないだ時の状態と勘違いしていたため波形の変化が見られなかったのだと思います。
  • たむら さん、こんにちは。NoMaYです。

    ああっ、そういうことだった(そういうことをされていた)のですね、、、マイコン基板側のRS232メスコネクタと、アダプタ(ケーブル)側のRS232メスコネクタの間を、ジャンプワイヤで接続していたのですね、、、私は、何が起きていたのか把握出来ました(たぶん出来たと思います)、、、

    > rs232cのコネクタの送信のピンからジャンプワイヤを使用してケーブルの受信のピンと接続

  • In reply to NoMaY:

    NoMaYさん,回答ありがとうございます。

    分かりずらい説明で申し訳ございませんでした。

    また,質問したいのですが1バイトの文字を送信できたので次のステップとして
    文字列を送信したいと思っています。2桁の数値を送信しているつもりなのですが
    1桁目の数値しか表示されません。

    本当に何度もお聞きして申し訳ないですが文字列の送信の方法をご教授願いたいです。
    よろしくお願いします。
  • たむら さん、こんにちは。NoMaYです。

    つい先日、TB-RX65N等でUART出力するサンプルプログラムを作って投稿したのですが、まだUART出力がうまく出来ないのであれば、そのサンプルプログラムを使ってみてください。(サンプルプログラムではSCI1を使っていますが他のSCIチャンネルへの変更は容易です。)

    TB-RX65N/RX130/RX231+CSplus sample program

    ダウンロード
    japan.renesasrulz.com/cafe_rene/m/sample_program/460

    説明
    japan.renesasrulz.com/cafe_rene/f/002-2095199602/6870/tb-rx65n-rx130-rx231-csplus-sample-program/36947#36947
     

  • In reply to たむら:

    RX65Nのユーザーマニュアルハードウエア編の37.3.8 シリアルデータの送信(調歩同期式モード)にフローチャート付きで解説があります。そのまま、コーディングすれば問題ないプログラムが作成できます。もし、この中に難解なところがあればその都度具体的にかふぇルネに投稿するのが良いと思います。
    スマートコンフィグレータがあったとしてもSCIに限らずそれぞれのマイコンのペリフェラルを使うときはユーザーマニュアルまたはハードウエアマニュアルを読むことが基本になります。私の場合はプリントアウトしないと理解ができないので、RX65Nのように2727ページあっても紙にします。なんとか読める両面2ページ割付にして同僚が出社する前の早朝に分割で数日間をかけて印刷します。
  • In reply to NoMaY:

    NoMaYさん,回答ありがとうございます。

    uart出力はうまくいきました。先にも書いたのですが1バイトは送信できていて
    文字列も
    uint8_t tx_char[12]="HELLO WORLD!";
    このtx_charを12回送信することでテラタームに表示できました。
    次にセンサの値を送信したいのですが文字化けしてうまくいきません。
    その原因が分かれば教えていただきたいです。
    よろしくお願いいたします。
  • In reply to kijo:

    kijoさん,回答ありがとうございます。

    やはりマニュアルを読み込んで理解することが大事なのですね。
  • In reply to たむら:

    TeraTerm 側で表示させるには、センサの数値を文字列へ変換していないといけません。
    例えばA/D変換した結果が「242(0x00F2)」だった場合、文字列として "242" とか "0x00F2" に変換して送信していれば、Teraterm に表示されますが、バイナリの生値 0x00F2 のまま送信しますと tx_char[0]=0xF2 と tx_char[1]=0x00 を送信することとなり、文字化けします。(RX65Nはリトルエンディアンでよかったかな?)
  • たむら さん、こんにちは。NoMaYです。

    いやいやいや、文字列なんて一気に送れますよ、、、

    > 文字列も
    > uint8_t tx_char[12]="HELLO WORLD!";
    > このtx_charを12回送信することでテラタームに表示できました。

    ところで、以下のプログラムはどうでしたか?

    > TB-RX65N/RX130/RX231+CSplus sample program
    > ダウンロード
    > japan.renesasrulz.com/cafe_rene/m/sample_program/460
    > 説明
    > japan.renesasrulz.com/cafe_rene/f/002-2095199602/6870/tb-rx65n-rx130-rx231-csplus-sample-program/36947#36947

  • In reply to 吉光屋:

    プログラミングそのものが初めてだと文字列と数値で良く解らなくなることはしばしばあります。C言語で可能な文字と数値の加算はチョット違和感があるかもしれません。ASCIIで数字やアルファベットが並んでいるのでできることです。

    sprintfは汎用性があり、整数から文字列の変換が明確になるのですがメモリや処理時間を浪費する可能性があります。ヒープの使用もありそうです。

    私の場合は開発時にのみ使うこのような処理は下記のような力技で良しとしてます。動作をチェックしていないのでタイプミスなどがあるかもしれません。
    途中でdata1とdata2が変化しないことを確実にしておかなければなりません。また、16進の場合は一行にいろいろなことを書いているのでブレークポイントを欲しいところに設定できない難点もあります。?:ではなくC言語に不慣れな人でも分かりやすいif・・else・・;を使うことも多くあります。
    アナログ入力の場合はエクセルに取り込んでグラフ化もあるのでほとんどの場合で10進にします。この場合は、コードも単純になるメリットもあります。

    フォーラム参加の方々がどのような手法を使われているのか興味があります。sprintfなどを使われているのでしょうか?


    unsigned int data1;
    unsigned int data2;

    void moni()
    {

      unsigned int string[80];
      unsigned int stringLen;

      // 16進
      string[0]='s';
      string[1]='1';
      string[2]='=';
      string[3]=(((data1/4096)%16)<10)?(((data1/4096)%16)+'0'):(((data1/4096)%16)-10+'A');
      string[4]=(((data1/ 256)%16)<10)?(((data1/ 256)%16)+'0'):(((data1/ 256)%16)-10+'A');
      string[5]=(((data1/  16)%16)<10)?(((data1/  16)%16)+'0'):(((data1/  16)%16)-10+'A');
      string[6]=(((data1     )%16)<10)?(((data1     )%16)+'0'):(((data1     )%16)-10+'A');
      string[7]=' ';
      string[8]='s';
      string[9]='2';
      string[11]='=';
      if(((data2/4096)%16)<10){string[12]=((data2/4096)%16)+'0';}else{string[12]=((data2/4096)%16)-10+'A';};
      if(((data2/ 256)%16)<10){string[13]=((data2/ 256)%16)+'0';}else{string[13]=((data2/ 256)%16)-10+'A';};
      if(((data2/  16)%16)<10){string[14]=((data2/  16)%16)+'0';}else{string[14]=((data2/  16)%16)-10+'A';};
      if(((data2     )%16)<10){string[15]=((data2     )%16)+'0';}else{string[15]=((data2     )%16)-10+'A';};
      string[16]=' ';

      // 10進
      string[17]=' ';
      string[18]='s';
      string[19]='1';
      string[20]='=';
      string[21]=((data1/1000)%10)+'0';
      string[22]=((data1/ 100)%10)+'0';
      string[23]=((data1/  10)%10)+'0';
      string[24]=((data1     )%10)+'0';
      string[25]=' ';
      string[26]='s';
      string[27]='2';
      string[28]='=';
      string[29]=((data2/1000)%10)+'0';
      string[30]=((data2/ 100)%10)+'0';
      string[31]=((data2/  10)%10)+'0';
      string[32]=((data2     )%10)+'0';
      string[33]='\n';

      // いつもよりカッコは多めにつけてます。

      stringLen=34;
      SendSci(string,stringLen);

    }

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page