• ベストアンサー

AD変換ボードに入力された電圧値のデータを保存するC++の記述

初めまして。 具体的な状況はC++でプログラムを作成し、それをDA変換によりオシロスコープを用いて出力すると言う物なのですが、それのタイトルの部分の記述が分からないので、分かる方教えて頂けるととてもありがたいです。

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

  • ベストアンサー
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.2

AD変換は標準的なインターフェイスやAPIはないと思いますので、どうするかは使っているAD変換ボード、ドライバ(あれば)、マシンやOSにより異なります。 一般的な方法はありません。まあ、同一メーカーで同一OS使っていれば、同じになるかも知れませんが。 Windowsで使う場合はドライバぐらいはあるでしょうし、使うためのDLL等もあるかも知れません。(別売の可能性があるかも知れませんが) そのマニュアルやサンプルコードを参考にしてください。 ところで、DA変換でオシロに出力する方はわかるのでしょうか。 これも同様だと思いますが。

Ein_zwei
質問者

お礼

マニュアルの存在をすっかり忘れてました_| ̄|○ 今から調べてやってみようと思います。 どうもありがとうございました。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

AD変換ボード云々は関係ない話かと思います。 どんなフォーマットでデータを保存するのでしょうか?

Ein_zwei
質問者

お礼

今回自分の無知さを改めて実感しました。 もう少し自分で調べてから質問するべきでした。 わざわざお返事頂きありがとうございました。

関連するQ&A

  • 「入力電圧→AD変換→出力電圧の計算→DA変換→…

    「入力電圧→AD変換→出力電圧の計算→DA変換→出力」がしたいです。 「ポテンショメータからの電圧をA/D変換してピックやH8などに入れ、プログラムで出力電圧を計算し、D/A変換を行い、パウダーブレーキに適切な電圧を送る」ということをしたいと思っています。 現在、ポテンショメータを動かし、角度変化により生じるポテンショメータからの電圧変化をオシロスコープ上で確認すること、また一定電圧発生器を用いて電圧を調整することでパウダーブレーキの抵抗を変化させることまではできています。 しかし、電気回路は素人のためポテンショメータからの電圧に応じてパウダーブレーキの抵抗値を変えるために「何が必要なのか」も「どうすればいいのか」が全くわかりません。 時間をかけずに予算1万円程度で、最も簡単にできる方法をお教えください。 開発キットなどでも構いませんので、「どこの何という商品と何という商品があればできる」と具体的に教えて頂けたら幸いです。

  • AD/DAボードを用いたAD/DA変換プログラムについて

    C++を用いてAD/DAボードを用いたAD/DA変換プログラムを作成しようと思うのですが、何から書けばいいのか分かりません。 ボードの会社のHPにプログラミングの方法が記載されていたのですが、現在使用している開発環境よりも古いので、あまり参考に出来ませんでした。 調べたりもしたのですが、参考に出来るものがありませんでした。 環境は、  OS : WindowsXP  C++ : Visual C++ 2005 Express Edition  AD/DAボード : Interface製 PCI-3521 です。 参考になりそうなHP、本等がありましたら教えてください。 よろしくお願いします。

  • マイコンM16C_AD変換

    ルネサスのM16Cについて勉強しております。 AD変換のプログラムをCで書いています。 AD変換開始モードをソフトウェアトリガを選択した場合、 変換停止時は自動でADSTビットが0になり変換が終わる という動きをするのですが、 この動き(ADSTビット=0)、自動で行われる物もプログラム内に記述しないとだめなのでしょうか?

  • 「入力電圧→AD変換→出力電圧の計算→DA変換→出力」がしたいです。

    「ポテンショメータからの電圧をA/D変換してピックやH8などに入れ、プログラムで出力電圧を計算し、D/A変換を行い、パウダーブレーキに適切な電圧を送る」ということをしたいと思っています。 現在、ポテンショメータを動かし、角度変化により生じるポテンショメータからの電圧変化をオシロスコープ上で確認すること、また一定電圧発生器を用いて電圧を調整することでパウダーブレーキの抵抗を変化させることまではできています。 しかし、電気回路は素人のためポテンショメータからの電圧に応じてパウダーブレーキの抵抗値を変えるために「何が必要なのか」も「どうすればいいのか」が全くわかりません。 時間をかけずに予算1万円程度で、最も簡単にできる方法をお教えください。 開発キットなどでも構いませんので、「どこの何という商品と何という商品があればできる」と具体的に教えて頂けたら幸いです。

  • H8/3048マイコンAD/DA変換について

    初めて投稿させていただきます。  AKI-H8/3048キットでAD/DA変換をC言語で行いたいの ですがうまくいきません。  C言語ではどうやって記述すればいいのでしょうか? ご助言お待ちしています。  参考までに作成したAD/DA変換ソースコードを記します。 ちなみに入力端子AN0は可変抵抗器、出力端子DA1はLCDに 接続しています。 (可変抵抗器からの電圧増減に従ってLCDの表示を変化 させたい) #include <3048f.h> #include <stdio.h> main(){ int a; while(1){ AD.CSR.BYTE = 0x28; while(AD.CSR.BIT.ADF == 0){} a = AD.DRA; AD.CSR.BIT.ADF = 0; DA.DR1 = (unsigned char)((a >> 8)&0x00ff); } }

  • C#(C Sharp)でのデータの保存場所

    C#初心者です。 クラスで出力した結果をデータベースに保存して別のクラスからでも アクセス出来るようにしたいのですがデータソースが色々あり迷います。 sqlはわかるのでsqlが良いですが、それともxmlに記述するのが良いのか不明です。 もし、sqlを利用する場合、私が作成したプログラムの利用者はsqlを インストールする必要が出て来たりますか? データソースの操作にはLINQを使用するつもりです。

  • XMLデータの変換

    C#で作業を行っております。XMLデータをあるテキストファイルデータ(独自フォーマット)への変換プログラムを作成予定です。 JAVAのVelocityのようなテンプレートベースの変換ができるクラスはC#にあるのでしょうか。 XML用のクラスでデータを読み込み、独自フォーマットのテキスト出力用のコードはゴリゴリと書いていかなければならないのでしょうか?(←これを避けたいのです) スマートな方法をご存知でしたら、お教えください。

    • 締切済み
    • XML
  • 高速なサンプリングが可能なAD/DAカード(ボード)を探しています

    大学で研究をしている者です.ハードウェアに関してはほぼ素人です. 実験でAD/DAを行うため,以下のようなAD/DAカード(ボード)を探しています. ・ADは(最低でも)50[kHz]以上のサンプリングが可能 ・DAは10[kHz]程度の出力が可能 調べてみても専門用語が多く,高い買い物になりそうなので,使ってみて失敗したくありません. ですので,ノウハウを知っている方がいらっしゃいましたら御助言よろしくお願いします. 実験はC++を使ってセンサに電圧を出力し,センサからADで得られた波形をリアルタイムに解析するといった内容です. ノートPCを使う予定なのでAD/DAカードと記述しましたが,ボードでもかまいません.(カードよりもボードの方が一般的に性能が良いようなことがあればボードを使うつもりです.) 既出でしたら申し訳ありません.

  • H8/3048、AD/DA変換プログラムについて。

    H8/3048、AD/DA変換について質問です。 ポート7のAN0・AN1を入力に使い、DA0・DA1で出力される変換プログラムを作成して実験したところ AN0→DA0への変換は出力されたのですが、AN1→DA1への変換が出力できません。なぜ出力されないのかわかりません。 どうしたらいいか教えてください、お願いします。 AN0がDA1でも出力されているかと思いましたが違いました。 #include <no_float.h> #include <stdio.h> #include <machine.h> #include "h8_3048.h" void init (void); double get_ad0 (void); double get_ad1 (void); void out_da0 (double); void out_da1 (double); void wait (void); int main (void) { double ad0,ad1; int d; init(); //初期化 // set_ccr(0x00); //全体の割り込み許可 //AD DA変換----------- while(1){ ad0=get_ad0(); ad1=get_ad1(); for(d=0;d<1000;d++); out_da0(ad0); out_da1(ad1); } return 0; } void init(void) { /* ポートの入出力設定 */ P1DDR = 0xff; P2DDR = 0xff; P3DDR = 0xff; P4DDR = 0xff; P5DDR = 0xff; P6DDR = 0xf0; // CPU基板上のDIP SW P8DDR = 0xff; P9DDR = 0xf7; PADDR = 0xff; // LED基板 PBDDR = 0xff; // A/Dの初期設定(単一モード) AD_CSR = 0x00; // A/Dの初期設定(スキャンモード使用AN0-AN1) // AD_CSR = 0x11; //ITU0 1ms毎の割り込み ITU0_TCR = 0x20; ITU0_GRA = 24575; ITU0_IER = 0x01; ITU_STR = 0x01; // D/Aの初期設定 DA_CR=0xc0; //DA0E1,DA0E0:1 D/Aアウトプットネーブル DAE:0 ch0,1 独立制御 } double get_ad0(void) { int i; double ad; AD_CSR |=0x20; //ADST:1 AD開始 while(!(AD_CSR & 0x80)); //ADF:1 エンドフラグをチェック AD_CSR &=0x7f; i=AD_DRA>>6;// i=0-1023 ad=i*5.0/1024.0; // 0-1024 を 0-5vに変換 return ad; } double get_ad1(void) { int i; double ad; AD_CSR |=0x20; //ADST:1 AD開始 while(!(AD_CSR & 0x80)); //ADF:1 エンドフラグをチェック AD_CSR &=0x7f; i=AD_DRB>>6; //i=0-1024 ad=i*5.0/1024.0; // 0-1024 を 0-5vに変換 return ad; } void out_da0(double d) { DA_DR0=(int)(d*255/5.0); } void out_da1(double d) { DA_DR1=(int)(d*255/5.0); } void wait(void) { long Loop=200000; while(Loop--); }

  • c言語でint配列をdoubleに変換

    c言語でマイコンプログラムを作成しています. int型の配列をdoubleに変換するために以下のプログラムを記述し,テストしました. int a[4] = {0,0,1,8}; char s[4]; double d; char *temp; sprintf(s,"%d%d%d%d",a[0],a[1],a[2],a[3]); //文字列charをdoubleに変換 d = strtod(s,&temp); 望む結果は 18 ですが,なぜか上記結果は 1800 となりました. 試しに int a[4] = {1,2,3,4}; と,1234と表示されました. 上記より,出力値が左詰めのようになっています. 試しにVisual Studio 2013 C++で同様のプログラムを実行すると,所望の結果を得ることが出来ました. プログラムがおかしいのでしょうか?それともマイコンのコンパイラのバグでしょうか? お分かりになられる方がいらっしゃいましたら,ご教授宜しくお願い致します.