タイマーと配列

はじめまして,softmと申します。

現在RX65Nを用いてデータ計測を行っています。

データを取得してからPCにデータをシリアル通信で

送っているのですが,これを1分間経ったらい分間のデータを

まとめて送信できるようにしたいです。

しかし,その間のタイマーの使い方とデータの保管の仕方がわかりません

どなたかわかる方ご教授願います。

ちなみに開発環境はcs+です。

Parents
  • softmさん、こんにちは。NoMaYと申します。

    少しお尋ねしたいのですが、シリアル通信で垂れ流し送信ではなく、1分間分をまとめて送信したい、というのはどのような理由によるものですか?そちらの事情として、垂れ流し送信で困っている、というのはどのような点ですか?

  • NoMaYさん,こんにちは。

    返信ありがとうございます。

    理由としては,まずa/d変換器からデータを取得し,てそれをpcにシリアル通信で送信しています。

    そしてpc側のプログラムでデータを読み込んだらcsvファイルに書き込んで,1分経ったら

    また新しいcsvファイルに書き込むという作業を行っております。しかし1分毎のデータ数が違っており

    今後の処理を行う上で障壁となっています。

    なので,まとめると時間ごとに生じるデータ数のばらつきを抑えて,1分,10秒,1秒ごとのデータ数を同じにしたいということです。つたない文章で分かりづらいと思いますがよろしくお願い致します。

     

  • softmさん、こんにちは。NoMaYです。

    いつA/D変換するか、というのがイベントドリブンになっていて変換タイミングが不定な感じかな、、、そして、送信データは1分毎(or 10秒毎、1秒毎)の計測回数(A/D変換回数)と平均値、といった感じでしょうか、、、

    それで、推測なのですが、まず、1分毎とか10秒毎とか1秒毎とか、そういった時間間隔を生成するところから分からない状況でしょうかね?

  • NoMaYさん,こんにちは。

    返信ありがとうございます。

    ちなみにA/D変換器はADS1015を使用しており,サンプリングは1600Hzに設定してます。

    >>それで、推測なのですが、まず、1分毎とか10秒毎とか1秒毎とか、そういった時間間隔を生成するところから分>>からない状況でしょうかね?

    マイコンについては全然利用したことないので正直

    わからないです。

  • softmさん、こんにちは。NoMaYです。

    ちょっとググってみたのですけれど、今現在のADS1015の使い方は、RDYピンをポーリングして変換完了毎にI2Cで読み出す、といった使い方でしょうか?それと、RXスマートコンフィグレータは使われていますか?使われているのであれば、I2C読み出しAPI関数名はどういう名前の関数を使われていますか?

    Google検索: ADS1015
    www.google.com/search?q=ADS1015

    A/Dコンバータ ADS1015(I2C)を利用しA/D変換を行う
    zattouka.net/GarageHouse/micon/circuit/A_D2.htm
     

  • NoMaYさん,こんにちは。

    返信ありがとうございます。

    RDYピンの設定はデフォルトで行っております。

    スマートコンフィグレータも使用しており,

    R_Config_SCI0_IIC_Master_Receive

    を使用しております。

    また,複数のA/D変換器を使用しており,順番に

    データを読み込んでいってます。

  • softmさん、こんにちは。NoMaYです。

    まだ、ちょっと、そちらの課題を私が理解しきれている感じでは無いですけど、そのあたりは新たなことがあれば随時分かっていくだろうと思いますので、今思い浮かんでいる案を書くと以下のようなものですね。

    (1) 1ms毎にカウントアップされるハードウェアカウンタを1つ用意します。(どのハードウェアカウンタが良いかは後で調べてみます)

    (2) たぶん、main()の中に無限ループがあると思いますので、その中で以下のような処理を記述します。

    void main(void)
    {
        for(;;)
        {
            A/D変換結果読み込み(イベントドリブン?) → 配列へ順次格納?
            if (カウンタ >= 60000)
            {
                /* 60秒毎の処理 */
                カウンタクリア → クリア後は再度1ms毎にカウントアップ
                配列へ格納したA/D変換結果を一挙に文字列化して一括送信?
            }
        }
    }

     

Reply
  • softmさん、こんにちは。NoMaYです。

    まだ、ちょっと、そちらの課題を私が理解しきれている感じでは無いですけど、そのあたりは新たなことがあれば随時分かっていくだろうと思いますので、今思い浮かんでいる案を書くと以下のようなものですね。

    (1) 1ms毎にカウントアップされるハードウェアカウンタを1つ用意します。(どのハードウェアカウンタが良いかは後で調べてみます)

    (2) たぶん、main()の中に無限ループがあると思いますので、その中で以下のような処理を記述します。

    void main(void)
    {
        for(;;)
        {
            A/D変換結果読み込み(イベントドリブン?) → 配列へ順次格納?
            if (カウンタ >= 60000)
            {
                /* 60秒毎の処理 */
                カウンタクリア → クリア後は再度1ms毎にカウントアップ
                配列へ格納したA/D変換結果を一挙に文字列化して一括送信?
            }
        }
    }

     

Children
No Data