- ベストアンサー
A/D変換について
- 卒業研究でH8/3052のマイコンボートを使用し、A/D変換において未定義のシンボルエラーが発生しています。プログラムの間違いかヘッダファイルの問題か判断できず、アドバイスを求めています。
- 卒業研究でH8/3052のマイコンボートを使用し、A/D変換を行っていますが、未定義のシンボルエラーが発生しています。プログラムかヘッダファイルの問題か判断できず、アドバイスをいただきたいです。
- 卒業研究でH8/3052のマイコンボートを使用し、A/D変換において未定義のシンボルエラーが出ています。プログラムの間違いかヘッダファイルの問題かわからず、助言をお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No3 です。ヘッダファイルは自分用に改造したかも知れない。 自分のヘッダファイルも載せておきます。 /************************************************************************/ /* === 15章 A/D変換器 === */ /* #define AD (*(volatile struct st_ad *)0xFFFFE0) /* A/D Address*/ /* マニュアル 15.3 によると、上位バイトを読んでから下位バイトを読む。 */ /* よって unsigned int DRA はおかしい */ /************************************************************************/ struct st_ad {unsigned int DRA, /* A/Dデータ・レジスタA */ DRB, /* A/Dデータ・レジスタB */ DRC, /* A/Dデータ・レジスタC */ DRD ; /* A/Dデータ・レジスタD */ /*----------------------------------------------------------*/ union {unsigned char BYTE; struct {unsigned char ADF:1, ADIE:1, ADST:1, SCAN:1, CKS:1, CH:3 ; } BIT ; } CSR ; /* A/Dコントロール/ステータス・レジスタ*/ /*----------------------------------------------------------*/ union {unsigned char BYTE; struct {unsigned char TRGE:1, reserve:7 ; } BIT ; } CR ; /* A/Dコントロール・レジスタ */ } ;
その他の回答 (3)
- ricardo_
- ベストアンサー率19% (14/72)
自分の過去のプログラムを見ると以下のようになっていました。 あなたの AD.ADCSR.BIT.ADF = 0; //ADFフラグクリア となっている部分を AD.CSR.BIT.ADF = 0; //ADFフラグクリア とすれば動くかも知れない。もちろん、その後の3行も同じ。 3048と3052はROMに書き込むハードが違うぐらいなので、ヘッダは共通して使えます。 ROMライタを作るので無ければ、問題有りません。 /*=== A/Dの設定 (マニュアル15章)===*/ DUMMY = AD.CSR.BYTE ; /* ADF をダミーリード 割り込みフラグが立っている時のための処理 */ AD.CR.BYTE = AD.CSR.BYTE = 0x00 ; /* リセット時と同じ値にする */ /* ADF : 1 で A/D 変換終了 */ /* ADIE : 1 で A/D 変換終了割り込み許可 */ /* ADST : 1 で A/D 変換スタート */ /* SCAN 1:スキャンモード 0:単一モード*/ /* CKS : 変換クロック数選択 */ /* CH2,1,0 : チャネル選択 */ /* ADCR:"TRGE, XXX,XXXX" 外部トリガによるA/D変換制御 */ /* 0:禁止 1:ADTRG の立ち下がりで変換開始 */ AD.CSR.BYTE = 0x57 ; /* 0101 0111 ADF=0, ADIE=1, ADST=0, SCAN=1, CKS=0, AN4-7 */
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>卒業研究でH8/3052(秋月書店)のマイコンボートを使って実験しています。 確認するけど、秋月のH8/3052なんだよね? 秋月キットのCDROMに3052.hってのが入ってるから、そのファイルを見てみよう。 そうすると、ADCSRに相当するレジスタは「CSR」って定義されてるのが判る。 1. #include <3048.H> を #include <3052.h> に変える。 2-1. 3052.hを見ながら「AD.ADCSR」は「AD.CSR」に、同様に「AD.ADDRA」は「AD.DRA」に書き変えて行く。 または 2-2. #include <3052.h> の直後、 #define E_SIG 0x20 の直前に、3052.hを見ながら #define ADDRA DRA #define ADDRB DRB #define ADDRC DRC #define ADCSR CSR のように「ADDRAはDRAに読み替えをする」と言う定義を必要なだけ書き足す。 「2-1.」と「2-2.」は「どっちか片方」だけで良いです。 「H8/3052」を使うなら「3052.h」をインクルードしなきゃダメっすよ。3048と3052はインタフェースレジスタのアドレス配置が違うからね。
お礼
いろいろとご指摘ありがとうございます。 皆さんの意見を参考にした結果できました。 ご教授ありがとうございます。
- pyonmae
- ベストアンサー率64% (40/62)
こんにちは。 ADCSRだのADDRAだのは、その、マイコンを買ったときに付属していた<3048.H>とやらで宣言されているはずなので、その内容が分からない事には、他人にはもっと判断できません。 と言いたいのですが、ヘッダファイル名でググってみたら、いろんな人がソースを公開していました。 違いも確認できますので、ちょっと覗いてみてはいかがでしょうか。
お礼
情報足りなくて申し訳ありませんでした。 少ない情報でのご意見ありがとうございます。
お礼
参考にしてみたらできました。 ご教授、ありがとうございました。