• ベストアンサー

H83052 シリアル通信 A/D変換データ送信 について

毎回の質問失礼します。 現在H83052マイコンを使用して、センサで得た電圧値を1ms間隔でA/D変換させるプログラムを作成しています。 マイコンのA/D変換機能と、ITUタイマ機能を用いて測定を行うまでのプログラムの作成は何とか完了しました。 ここで、測定終了後データをどのようにして表示したらいいのかというところでとまっています。 データはA/D変換データ(data[]←int型)、A/D変換時の時間データ(time[]←long型)が、測定プログラム実行時に200個ずつ配列に保存されています。 これをそのままシリアル通信機能を用いてPC側に表示させるようにしたいのです。シリアル通信のH8側からPCへの送信の場合TDRにデータを書き込みそれをTxDより送信すると思うのですが、実際にTDRのアドレスは1バイトですので、データとしては入りません。1バイトごと分けて送信するという方法になってくるのではないかと考えていますが・・・ また、送信する時のコードとしては、数字データもアスキーコードとして送信されてしまうことになるのでしょうか? どなたか、わかることやアドバイスがあれば、回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bug_bug
  • ベストアンサー率78% (36/46)
回答No.2

3052搭載のシリアル通信モジュール(SCI)はTDRにセットされた8bitデータを トコロテンを押し出すかのようにMSBから順に1bitつづ通信経路(TxD)に電位として出力します。 SCIはTDRにセットされた8bitデータが「数値」なのか「キャラクターコード」なのか一切判別しません。 ただのバイナリデータとして取り扱います。(このことが知りたかったのではないかな?) PCで簡易にモニタしたいのであれば、ファームウェアにて取得した数値のデータをキャラクターコードに変換し SCIを用いて出力すればRS232Cケーブルを接続するだけで可能です。 公開されたのは随分昔ですがAcknowrichというフリーウェアが組み込みの動作確認にはお勧めです。 モニタデバッグ環境でシリアルを利用しているのであれば、USB-シリアル変換機等でPC側の シリアル入力を増やしてあげる必要があるかもしれません。 あとはシリアル通信に関するプルトコルを把握するのが近道です。 ■参考サイト http://www.softech.co.jp/mm_050907_firm.htm (サンプルの説明はH8Sですが、内容もレジスタ構成も3052と同じ) 「UART」というキーワードで検索しても仕組みを理解するヒントが見つかるでしょう。 シリアル通信のプロトコルそのものにはACK等の応答確認がありませんから、 「ひたすらデータを垂れ流ししてるだけ」とイメージしちゃうと理解が速いかも

utaibito33
質問者

お礼

いつもありがとうございます。 そうです。TxDが実際にどのようなデータとして扱っているのかが知りたかったです。判別しないということはやり方次第で両方にもできるということですね。 アスキーコードに変換していろいろなところのサンプルを参考にしたら表示されました。あとは、データの表示方法を工夫するだけです。 本当にありがとうございます。

その他の回答 (1)

  • techa
  • ベストアンサー率60% (41/68)
回答No.1

送信コードがバイナリであるか、アスキーであるかは作成者の組み方次第ですね。H8は16ビットマイコンですから、int型で取得された内容は、 バイナリで送信すれば2バイトで済みますね。 ただ、バイナリにすると、うまく制御手順を決めないとデータの区切りが わからなくなったりするので、初心者には荷が重いのではないかとおもい ます。 というわけで、ASCIIに変換して区切り文字(CR+LF)を付加して 返信することから始めたらいかがですか? 通信時間を最小にしようとすると、16進4桁(10bitADなので3桁でも充分ですが)+CR+LFとなりますか。 int->HEX文字列への変換は適当に。

utaibito33
質問者

お礼

バイナリデータでも可能なんですか。。。 でも難しそうなのでアスキーコードに変換してやることにしました。 改行のコードがわからなかったので助かります。ありがとうございます。

関連するQ&A

  • データ型変換

    ファーム初心者です。 あるマイコンのA/Dを使用し、読み取ったA/D値をシリアル(RS232C)で 送信しようとしているのですが、そこで質問です。 A/D値はlong intで返ってくるのですが、 それをasciiコードに変換しシリアル送信しTeraTermで表示させたいのですが、その変換方法がわかりません。 ltoa というのがおそらくこれにあたると思うのですが、 この ltoa の中身が知りたいのですが、 どなたかご存知ないでしょうか?? よろしくお願いします。

  • マイコンのシリアル通信

    マイコンでシリアル通信を用いてセンサのデータを取得したいのですが、このセンサのシリアル通信の設定がストップビット2、奇数パリティとマイコンでシリアル通信をするのにやっかいな設定となっています。また取得したセンサデータをシリアル通信を用いてPCに送りたいと考えているのでマイコンのシリアルは2ch必要です。私もいろいろ探しているのですが、なかなか条件を満たすマイコン(ストップビット2対応、シリアル2ch、A/D2ch)が見つかりません。どなたか情報ありましたら教えてください。よろしくお願いします。できればDIPタイプのマイコンを探しています。

  • C言語によってシリアル通信をおこないたいのですが

    PCとマイコンとでシリアル通信でデータの受け渡しを行いたいのですがよくわかりません。 PC←マイコン方向はハーイパーターミナルを使え値を確認できるのでよいのですが、PC→マイコンの方向でのプログラムがわかりません何か参考になるものはありませんか? PCはVC++を使用しています。 マイコンはH8/3664です。

  • シリアル通信プログラミングでのバイナリデータ送信

    UNIX系環境(IRIX)でのシリアル通信プログラムを作成していて、 バイナリデータの送信方法がわからず困っています。 write関数を使い、テキストデータの送信は出来ます。 write(fd,"テキスト",byte)のように。 ただ、今回はバイナリデータ送信を考えており、 例えば1byteのデータ00000001(01H)を送りたいと思っています。 このデータを送る場合、write関数で実現出来るのでしょうか? write(fd,0x01,1)←イメージです。 色々ネットで調べても出てきません。 開発がWindows環境ではないので、API関数が使えない状況で困っています(MsComm等が使えない)。また、fwrite関数は使用してはいけないみたいです。教えてください。宜しくお願いします。

  • PCとマイコンとのシリアル通信

    マイコンとパソコンでシリアル通信を考えています。 WEB検索すると「TeraTerm」というソフトにたどり着きました。 通信はバイナリです。(ASCII文字でのやり取りは行いません) 例えば、  マイコンボード上にトグルSWとLEDランプが実装されているとします。  ・PCからトグルSWコマンド「0Ah」をマイコンに送信。  ・マイコンはトグルSWの状態をONなら「00h」をOFFなら「01h」をPCに返信。  ・PCは返信データが「00h」なら、LED点灯コマンド「0Ch」をマイコンに送信。  ・PCは返信データが「01h」なら、LED消灯コマンド「0Dh」をマイコンに送信。 みたいなことを行いたいです。 TeraTermでどのように記述してよいかわからないです。 このへんを教えてくださいよろしくお願いします。

  • H8マイコンとPCをUSBでシリアル通信

    H8マイコンとPCをUSBでシリアル通信 マイコン( H8/2215 )をUSBでPCと繋ぎ、RAM上にあるデータを シリアル通信で送りたいと思っています。 現在、書籍のサンプルソースを参考に図1のような構成で プログラムを実行すれば H8/2215 から PC_1 へデータが送れる ことを確認しました。 しかし、図2の構成で実行するとデータが送れません。 また、PCとは繋がず RS232C のケーブルだけをマイコンにさせば なぜか問題なく動作します。 このような状態なので、プログラムを試行錯誤しながら調整 しているのですがなかなかうまく通信出来ません。 図2のような構成でシリアル通信したい場合、どこをどんな風に 調整すれば良いのでしょうか? 参考URLでも何でも構いませんのでアドバイスお願いします。 図1  PC_1 <--- USB ---> H8/2215 <--- RS232C ---> PC_2 図2  PC_1 <--- USB ---> H8/2215 <サンプルソースの書籍> 「USBターゲット機器開発のすべて」(CQ出版社)  サンプルソースはルネサスのH8S/2215用USB-シリアル  変換サンプル・プログラム

  • 計測用データを送信するには

    帯域測定プログラムを作っています。 まず送信側で通信に使用するデータサイズを決めて受信側に送信し、 そのデータを使って互いに送受信して帯域測定を行いたいです。 送信側で50000バイトのデータを使って計測を使用と決めて、50000バイトという情報を受信側に送信します。 int data = 50000; String unit = "byte"; byte[] send_size = (data+unit).getBytes(); out.write(send_size); out.flush(); これを受信側は受け取り50000バイトという数値に変換したいのですが、 変換の仕方が分かりません。 バイトに変換して送信しているので、5は53に、0は48に変換されているので、53->5、48->0というように変換してやりたいのですが、 どうすればよいのでしょうか? また、50000バイトという情報を相手側にもっと賢く遅れる方法があればそちらについてのアドバイスも頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • シリアル通信のデータ欠けについて

    シリアル通信のデータ欠けについて教えてください。 WindowsXP上でシリアル通信「115200bps、8、None(ODD、EVEN)、1」の設定で、1ms毎に12バイトの送受信を行っているのですが、1分ほど受信すると、データ欠けが発生します。 受信プログラムはこの問題が発覚してから、受信したデータを変数にバッファリングし、保存ボタンを押してから、ログファイルへ保存するシンプルなプログラムを作成し、確認しています。 「切り分けた内容」 1、57600bpsでも発生する 2、VB6、VisualStudio2008 C#で作成したツール及びフリーソフト(SerialDebugger)でも、データ欠けが発生する 3、RS232Cラインモニタ(キャロちゃん)で確認すると、データ欠けは発生していないので、受信側の問題と判断しています。 4、送信間隔を50msと遅くしても発生する 5、RS232C及び、USB変換したものどちらでも発生する 6、9600bpsでは、発生しない(同じデータ数での判断) 7、ケーブル長は1mほど ちなみに通信時間に余裕が無い為、チェックサムやハンドシェイクなどの機能は、入れられません。 一般的にWindowsでシリアルの高速受信を行うと、データ欠けが発生するのが当たり前なのでしょうか?

  • シリアル通信でのデータ取りこぼし

    はじめまして。 現在、計測機器からシリアル通信で測定値を取得しています。 その測定機器は1秒間当たり、1000データ測定できるのですが、 プログラムで収集した際、取りこぼしが多く発生します。 取りこぼしがないよう収集するには どうすれば、いいのか、教えていただけないでしょうか? よろしくお願いします。 動作の流れは  (1)測定ボタンを押す  (2)1秒間測定する (1000データ) → 保存 ◆教えてほしい箇所  (3)1秒後自動的に終了する 環境  OS:Windows XP  プログラム:VB.NET 2008  通信:RS232C  測定データ1個当たり:X.XXXX (6桁)

  • シリアル通信 VB 受信したデータ

    初めまして。 今現在,RS-232Cのシリアル通信で,重量計で測定したデータ(990kg)をCOM1に取り込めるようにするプログラムを作成中です。 出力データのフォーマットは以下のようになっています。 ST   , GS   , +0012345  kg  CRLR  ヘッダ1  ヘッダ2   データ  単位  ターミネータ 18バイトのデータを受信していることになります。 ここで質問なのですが,プログラムでは1バイトずつイベントを発生させて1バイトずつ受信させているのですが,1バイト×18回 のデータをどのようにつなぎ合わせれば18バイトのデータとして扱えるようになるのですか? うまく説明できていないかも知れませんが,お分かりの方がいらっしゃいましたら宜しく御願いします。 VBではOnCommを使用しています。

専門家に質問してみよう