• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TDS01VのデータをH8/3048で読み込むプログラムについて困っています)

TDS01VのデータをH8/3048で読み込むプログラムについて困っています

このQ&Aのポイント
  • TDS01VのデータをH8/3048で読み込むプログラムが書けず、初期化方法もわからない
  • 必要なデータは方位、傾斜角roll、傾斜角pitch、気圧、高度で、計測データ全て使って作るつもり
  • 作ったプログラムはint get3Dsensor()で、データの受信とチェックしている

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

  • ベストアンサー
回答No.1

お困りの様ですね。 まず、私はこのセンサーを使った事がありませんし、残念ながらTDS01Vのデータシートがウェブで少し探した時点では見つからなかったのであくまで推測です(のでもっと詳しい方の回答を待ちましょう) まず、 http://blogs.yahoo.co.jp/tumaranaitokiha/47437672.html このあたりのサイトを参考にさせて頂くと、どうやらTDS01VはSPI(いわゆる3線シリアルですね)で通信するようですね。秋月には、このTDS01VをPICでコントロールし、シリアルをUSBに変換してPCに読ませるようなモジュールがあるようですが、質問者さんは、おそらくこのモジュールを使わずにTDS01VをSPIで直接H8で制御するという理解でよろしいでしょうか? H8の開発経験がどの程度あるかわかりませんが、本やウェブなどを参考にして頂き、SPIシリアルもウェブで多大に情報が見つかるのでまずその理解からでしょうか。 その上で、TSV01Vのデータシートにどのコマンドを送るとセンサーのデータを取り出せるとか、センサーから送られてくるデータのフォーマットが規定されているかと思うので、それを取得するという流れですね。ソースコードを質問欄に提示されておりますが、データシートもない、変数の内容も示していないのでは何とも回答できません。 上記のブログの方はPICで制御しているようですが、SPIのシリアルに外部から別にクロックやリセット信号を入れないと動かない様なのでこの辺りが少し注意が必要かもしれませんね。 動いてくると楽しいですからがんばってくださいね。 また3048は内部のフラッシュが古くて弱く、書き込み回数が100回程度なので、あまりこだわりが無いなら秋月の別のH8を使ったほうが良いかもしれません。慣れない内はすぐ100回なんて超えて書き込めなくなってしまいます。

noname#73404
質問者

お礼

早速の御解答、ありがとうございます。 私のH8の開発経験はこれが初めてです。 TDS01Vのデータシートはどうやらweb上では公開していないようです… upできたら、URLを貼りたいと思います。 >モジュールを使わずにTDS01VをSPIで直接H8で制御するという理解でよろしいでしょうか? はい、USBを使わずH8に接続して使います。 変数情報は、 0x90:データシートより、0x9がセンサ情報要求 0xF0:同じくデータシートより、0xFがリセット(ソフトウェアリセット) これで合っているかと思います。 ソースコードは、GPSの解析プログラム(データシートなし、プログラムのみ)を見て作りました。 わかりやすいアドバイスを下さり、本当にありがとうございます。 何処から手をつけてよいか迷っていたので助かりました。 今はまだH8を変える予定はありませんが、そのうち変えてみたいと思います。 もう少し勉強して、少しずつ組み立てていきたいです。

noname#73404
質問者

補足

すいません、質問箱も初心者なので、間違えてしまいました。 お礼を出してから気づいたのですが、データシートをみると、もう一つコマンドがありまして、 0F:システムリセットを実行する 29:計測結果を取得する 21:計測を開始させる 23:現在実行中の計測を停止させる 27:地磁気センサーに対する初期化を行う 15:現在の計測条件を取得する 0xF4:センサ情報項目(計測データ全て) といったコマンドが乗ってました。 投稿の間違い、本当に申し訳ありませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラムが間違っているようなのですが

    ファイルからデータを読み込み、そのファイル内のデータの最大値・最小値を求めるプログラムを作ろうとしているのですが、実行結果が 最大値:0 最小値:0 となり、max2とmin2にうまく値が入っていないようなのです。 main関数にsub_main;を追記してみたりと色々試しているのですが、うまくいきません。 ファイルの読み込みがうまくいっていないのでしょうか。 もしくはポインタの使い方がまずいのでしょうか。 ファイルの内容は 20 40 30 ・ ・ ・ という感じの、不規則な数字の羅列で、今は10個入っています(データ個数が分からない場合も考えているのですが・・・)。 プログラム初心者なので難しいことはあまり分からないですが、助言を頂ければ嬉しいです。 #include<stdio.h> int sub_main(int *tensu,int *max,int *min) { int i=0; FILE *fp; fp = fopen("11.txt","r"); while(fscanf(fp,"%d",&*tensu)!=EOF); { for(i=0;i<10;i++) { if(*tensu+i>*max) *max=*tensu+i; if(*tensu+i<*min) *min=*tensu+i; } } fclose(fp); } main() { int max2=0,min2=0; int *max=&max2; int *min=&min2; printf("最大値:%d\n最小値:%d\n",max2,min2); }

  • プログラムが動きません。

    以前動いていたプログラムが動かなくなりました。 プログラムは3個のtxtファイル(2×2のデータ)で第1列の絶対値和、第2列の絶対値和を求め、1つのtxtファイルとして出力するものです。 #include <stdio.h> #define DATA_MAX 4 #define CH 2 static double data[CH][DATA_MAX]; int read_data(fp) FILE *fp;{ int i,j=0; while(1){ for(j=0;j<DATA_MAX;j++){ for(i=0;i<CH;i++){ fscanf(fp,"%lf",&data[i][j]); } if(feof(fp)!=0) break; } return j; } } void ecg_rr(fp,data_max) FILE *fp; { int i=0; char fname[64]; char fname1[64]; for(i=0;i<3;i++) { sprintf(fname1,"k%d.txt",i+1); fp = fopen(fname1,"r"); read_data(fp); fclose(fp); sprintf(fname,"sum.txt"); fp = fopen(fname,"a"); if(data[0][0]<0){data[0][0]=-data[0][0];} else{data[0][0]=data[0][0];} if(data[0][1]<0){data[0][1]=-data[0][1];} else{data[0][1]=data[0][1];} if(data[1][0]<0){data[1][0]=-data[1][0];} else{data[1][0]=data[1][0];} if(data[1][1]<0){data[1][1]=-data[1][1];} else{data[1][1]=data[1][1];} data[0][i]=data[0][0]+data[0][1]; data[1][i]=data[1][0]+data[1][1]; fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); fclose(fp); } } メイン関数には問題がないので省略しましたが、ここまでで問題というところはあるでしょうか?

  • 線形探索法のプログラムについて

    配列Aに格納されている数字を検索するプログラムより、 Aのプログラムでは配列Aに格納されている数字を検索(scanf("%d" , j)で入力)した にもかかわらず、「該当するデータがありませんでした」と表示されてしまいます。 Bのプログラムでは、配列Bに格納されている数字を検索(scanf("%d" , j)で入力)すると 「該当するデータがありました」と表示されます。 Aのプログラムで、------でかこってある部分に問題があると思われ、 いろいろと試してみましたが、未だにその理由をつかむことができません。 その理由を知りたく、書き込みを致しました。 ご教授の程宜しくお願い致します。 A. main(){ int i , j; int k = 0; int A[5] = {4 , 1 , 3 , 4 , 5}; printf("検索する数値を入力してください > "); scanf("%d" , j); --------------------------------------------------------------- for(i=0 ; i<5 ; i++){ if(A[i] == j){ printf("該当するデータはあります"); k++; } } --------------------------------------------------------------- if(k <= 0){ printf("該当するデータがありませんでした\n"); } return; } B #include<stdio.h> main(){ int i , j , k; int A[5] = {4 , 1 , 3 , 4 , 5}; printf("検索する数値を入力してください > "); scanf("%d" , j); for(i=0 ; i<5 ; i++){ if(A[i] == j){ k++; } } if(k>0){ printf("該当するデータはありました"); }else{ printf("該当するデータはありませんでした"); } return; }

  • プログラムに詳しい方教えてください!

    5人の点数を入力して二つの関数maxとpmaxで最高点を求めたいのですが、 int max(int d[]) { int score; int i; score = d[0]; for(i=1;i<5;i++){ if(score < d[i]){ score = d[i]; } } return score; } int pmax(int *d) { int score; int i; score = *d; for(i=1;i<5;i++){ if(score<*(d+i)){ score = *(d+i); } } return score; } この2つの関数を利用して、 5人の点数を入力してください。 47 34 54 98 37 関数maxが求めた最高点は98点です。 関数pmaxが求めた最高点は98点です。   というように、動かしたいのですが、プログラムの組み方がよくわかりません。 はっきり言って、これは学校の宿題なんですが、どうしてもわからないんです。どうかわかる方、教えてください。

  • 配列の和を求めるプログラム

    キーから入力したデータを配列に入力した後、その和を求めるプログラムを作成したいのですが、プログラミング初心者の私にはさっぱりわかりません。 和を求めたいのに平均値が出てきてしまいます。 どこが間違っているのか教えてください。 #include <stdio.h> float data[5]; float total(int max); void main(void) { int cnt = 0; float d; printf("please input a data: "); scanf("%f", &d); while((cnt < 5) && (d > 0.0)) { data[cnt] = d; cnt++; printf("please input a data: "); scanf("%f", &d); } printf("total data: %5.2f\n", total(cnt)); } float total(int max) { int i; float total = 0.0; for(i = 0; i < max; i++) { total += data[i]; } return total / max; }

  • 因数分解プログラム(C言語)について(3)

    つづきです /*求めた最大公約数で約分*/ if(*flag == 1){ *d = *m1 / *i; *e = *n1 / *i; } else{ printf("約分できません。\n"); *d = *m1; *e = *n1; } return 0; } int yakubun2(int *m2,int *n2,int *min2,int *flag,int *i,int *f,int *g) { /*最大公約数を見つける*/ if(*m2 < *n2){ *min2 = *m2; } else{ *min2 = *n2; } *flag = 0; for(*i = min2; *i > 0; *i--){ if(*m2 % *i == 0){ if(*n2 % *i == 0){ *flag = 1; break; } } } /*求めた最大公約数で約分*/ if(*flag == 1){ *f = *m2 / *i; *g = *n2 / *i; } else{ printf("約分できません。\n"); *f = *m2; *g = *n2; } return 0; } /*因数分解の結果を表示*/ int output(int *d,int *e,int *f,int *g) { printf("(%dχ-%d)(%dχ-%d)",*d,*e,*f,*g); return 0; } 関連URL:http://www.okweb.ne.jp/kotaeru.php3?q=474597

  • H8/3069 SCIについて

    H8/3069のシリアル通信機能についての質問です。 SCI0を調歩同期式に設定して、パソコン上のハイパーターミナルと通信しています。SCI1とSCI2をクロック同期式に設定して、tx1とrx2,tx2とrx1,sck1とsck2を配線接続した状態です。 このとき、PC(ハイパーターミナル)からの送信データ⇒SCI0で受信⇒SCI1から送信⇒SCI2で受信⇒SCI0からパソコンに対してデータ送信したいと思っています。 ところが、SCI1のクロック同期式でのデータ送信がまずできません。データもクロックも出せていないです。 そこで、SCI0,SCI1,SCI2のすべてを調歩同期式に設定した場合は、上記のデータの送受信は成功しています。 H8/3069において、SCI0,SCI1,SCI2のシリアル通信方式の設定を上記のように、1つのH8に対してクロック同期と調歩同期を混在させた場合、何かうまく動作しない原因は考えられますでしょうか。 プログラムでのSCI0とSCI1,SCI2の初期設定の違いは、SCI1とSCI2は、SMRレジスタC/Aビットを1(SCI0は0)にして、SCI2については、SCRレジスタのCKE1ビットを1(SCI0,SCI1は0)にした状態にしています。 よろしくお願いいたします。

  • 作っているプログラムが分かりません・・・

    プログラムが… 以下のプログラムを作っているのですが、よく分かりません・・・ A監督が 77,B走塁コーチは 78 です.さて,77 と 78の素因数の和は等しくなっています. つまり,77=7×11,78=2×3×13,7+11=18,2+3+13=18 となっています. このように,素因数の和が互いに等しいという条件を満たすような, 差が 1 の自然数の組を 20000 以下でできるだけ多く探索しましょう. ここで,20000 以下には 26 組しかないことがわかっています. #include<stdio.h> #difine MAX 20000 int main(){ int sum[MAX+1]; int i,j,n; for(i = 2;i <= MAX;i++){ j = 2; while(j*j <= i){ if(i % j == 0){ _________________; break; } else j++; } if(j*j > i) ___________________; } n = 0; for(i = 2;i < MAX;i++) if(sum[i] == sum[i+1]){ n++; printf("%3d (%d,%d)\n",n,i,i+1); } return 0; } 補足 分からないのはプログラムの書き方で _________________;の部分だけでも答えていただけるとありがたいです。

  • cプログラム

    次の10人の身長を入れ、最大と最小を配列を使って求めるプログラムなんですが、この場合だと一人の身長データしか入力できません どのように直せばいいでしょうか? #include <stdio.h> main () { float h[10],max,min; int i; max=-999; min=999; for(i=0;i<=9;i=i+1){ printf("%d番目の身長を入力してください\n",i+1); scanf("%5.1f",&h[i]); if(h[i]>max){ max=h[i]; } if(h[i]<min){ min=h[i]; } } printf("最大の身長は%5.1f,最小の身長は%5.1fです。\n",max,min); return(0); }

  • プログラムを読む

    public class ShowMaxData { public static void main(String[] args){ int[] data = {31, 41, 59, 26, 53, 58, 97, 93,23, 84} int max_data = data[0] for(int = 0 ; i<data.length ; i++){ if(max_data <data[i]){ max_data = data[i] } } System.out.println("最大値は"+max_data+"です。") } } これは最大値を求めるプログラムですがこの内容の中で質問があります。 for文はi=10になって初めてfor文を抜けてSystem.out.printlnが実行されるのですよね? 分かる方宜しくお願いします。