本ドキュメントはCypress (サイプレス) 製品に関する情報が記載されております。 AN07-00185-1 F2MC 8FX Family 8-BIT MICROCONTROLLER MB95200H/210H series A/D コンバータ AN07-00185-1 注意事項 本資料の記載内容は、予告なしに変更することがありますので、ご用命の際は営業部 門にご確認ください。 本資料に記載された動作概要や応用回路例は、半導体デバイスの標準的な動作や使い 方を示したもので、実際に使用する機器での動作を保証するものではありません。し たがいまして、これらを使用するにあたってはお客様の責任において機器の設計を行 ってください。これらの使用に起因する損害などについては、当社はその責任を負い ません。 本資料に記載された動作概要・回路図を含む技術情報は、当社もしくは第三者の特許 権、著作権等の知的財産権やその他の権利の使用権または実施権の許諾を意味するも のではありません。また、これらの使用について、第三者の知的財産権やその他の権 利の実施ができることの保証を行うものではありません。したがって、これらの使用 に起因する第三者の知的財産権やその他の権利の侵害について、当社はその責任を負 いません。 本資料に記載された製品は、通常の産業用、一般事務用、パーソナル用、家庭用など の一般的用途に使用されることを意図して設計・製造されています。極めて高度な安 全性が要求され、仮に当該安全性が確保されない場合、社会的に重大な影響を与えか つ直接生命・身体に対する重大な危険性を伴う用途(原子力施設における核反応制御、 航空機自動飛行制御、航空交通管制、大量輸送システムにおける運行制御、生命維持 のための医療機器、兵器システムにおけるミサイル発射制御をいう)、ならびに極め て高い信頼性が要求される用途(海底中継器、宇宙衛星をいう)に使用されるよう設 計・製造されたものではありません。したがって、これらの用途にご使用をお考えの お客様は、必ず事前に営業部門までご相談ください。ご相談なく使用されたことによ り発生した損害などについては、責任を負いかねますのでご了承ください。 半導体デバイスはある確率で故障が発生します。当社半導体デバイスが故障しても、 結果的に人身事故、火災事故、社会的な損害を生じさせないよう、お客様は、装置の 冗長設計、延焼対策設計、過電流防止対策設計、誤動作防止設計などの安全設計をお 願いします。 本資料に記載された製品を輸出または提供する場合は、外国為替及び外国貿易法およ び米国輸出管理関連法規等の規制をご確認の上、必要な手続きをおとりください。 本書に記載されている社名および製品名などの固有名詞は、各社の商標または登録商 標です。 Copyright© 2008 FUJITSU MICROELECTRONICS LIMITED all rights reserved 1 AN07-00185-1 改版履歴 版数 1.0 版 日付 内容 新規作成 2 AN07-00185-1 目次 注意事項 ...............................................................................................................................1 改版履歴 ...............................................................................................................................2 目次 ...................................................................................................................................... 3 1 はじめに ........................................................................................................................ 5 2 機能 ...............................................................................................................................6 2.1 主な機能 ................................................................................................................. 6 2.2 ブロックダイヤグラム............................................................................................ 7 2.3 レジスタ ................................................................................................................. 8 2.3.1 8/10 ビットA/Dコンバータ制御レジスタ 1(ADC1)..................................... 8 2.3.2 8/10 ビットA/Dコンバータ制御レジスタ 2(ADC2)..................................... 9 2.3.3 8/10 ビットA/Dコンバータデータレジスタ 上位/下位(ADDH,ADDL) ...... 10 2.4 3 8/10 ビットA/Dコンバータの割込み..................................................................... 11 2.4.1 8/10 ビットA/Dコンバータ動作における割込み............................................ 11 2.4.2 8/10 ビットA/Dコンバータの割込みに関連するレジスタとベクタテーブル. 11 アナログ入力と外部回路 ............................................................................................. 12 3.1 電気的特性 ........................................................................................................... 12 3.2 アナログ入力向け外部回路例............................................................................... 13 4 AD変換時間 ................................................................................................................. 15 5 A/Dコンバータの例 ..................................................................................................... 16 5.1 5.1.1 初期設定........................................................................................................ 16 5.1.2 割込み処理 .................................................................................................... 16 5.2 A/D起動方法 ......................................................................................................... 17 5.2.1 A/D変換起動ビットの設定による起動........................................................... 17 5.2.2 8/16 ビット複合タイマTO00 出力による起動 ............................................... 18 5.3 6 AD設定手順 .......................................................................................................... 16 A/D変換完了の判断方法 ....................................................................................... 19 5.3.1 変換中フラグビット確認による判断 ............................................................. 19 5.3.2 AD変換完了割込みを使用して確認 ............................................................... 20 8/10 ビットA/Dコンバータの使用上の注意事項 .......................................................... 22 6.1 8/10 ビットA/Dコンバータの設定に関する注意事項............................................ 22 6.2 割込み要求に関する注意事項............................................................................... 22 6.3 8/10 ビットA/Dコンバータ アナログ入力順序..................................................... 22 7 その他の情報 ............................................................................................................... 23 8 付録 ............................................................................................................................. 24 3 AN07-00185-1 8.1 図の索引 ............................................................................................................... 24 8.2 表の索引 ............................................................................................................... 24 8.3 サンプルコード .................................................................................................... 25 8.3.1 プロジェクト 1.............................................................................................. 25 8.3.2 プロジェクト 2.............................................................................................. 27 8.3.3 プロジェクト 3.............................................................................................. 29 4 AN07-00185-1 1 はじめに このアプリケーションノートは、各モードでの 8/10 ビット A/D コンバータの使用方法につ いて説明します。 また、アナログ/デジタルコンバータ(ADC)の機能を説明し、いくつかの例を示します。 5 AN07-00185-1 2 機能 この章では、8/10 ビット A/D コンバータの基本機能を説明します。 2.1 主な機能 A/D コンバータは、アナログ入力端子に入力されたアナログ電圧(入力電圧)を 8 ビットま たは 10 ビットのデジタル値に変換します。 z 複数のアナログ入力端子の一つを選択できます。 z 変換速度はプログラマブルで設定可能です(動作電圧と周波数によって選択)。 z A/D 変換が完了すると割込みが発生します。 z A/D 変換の完了は、ADC1 レジスタの ADI ビットでも判断できます。 z A/D 変換機能の起動には、以下2つの方法があります。 a. ADC1 レジスタの AD ビットによる起動 b. 8/16 ビット複合タイマ出力 TO00 による連続起動 6 AN07-00185-1 2.2 ブロックダイヤグラム 図 2.2-1 に 8/10 ビット AD コンバータのブロックダイヤグラムを示します。 図 2.2-1 : 8/10 ビット AD コンバータ ブロックダイヤグラム (MB95200H シリーズ) アナログ入力信号(AN00~AN05)は、サンプルアンドホールド回路を経て、制御回路に 渡されます。制御回路にて 8 ビットまたは 10 ビットのデジタル値に変換され、変換結果が A/D コンバータデータレジスタ(ADDH,ADDL)に格納されます。ユーザーは、A/D コンバ ータデータレジスタ(ADDH,ADDL)の値を読み出すことでデジタル変換結果を知ることが できます。 A/D 変換が起動されると、まず制御回路が、選択された入力チャネルをサンプリングし、サ ンプルアンドホールド回路で入力電圧を保持します。 7 AN07-00185-1 2.3 レジスタ レジスタの詳細設定については、MB95200H/210H シリーズのハードウェアマニュアルの第 17 章を参照してください。 2.3.1 8/10 ビット A/D コンバータ制御レジスタ 1(ADC1) このレジスタは、8/10 ビット A/D コンバータの各機能の許可・禁止、アナログ入力端子の 選択、および A/D 変換のステータスチェックに使用します。 図 2.3.1-1 : 8/10 ビット A/D コンバータ制御レジスタ 1(ADC1) アナログ入力端子の数は、シリーズによって異なります。MB95200H シリーズは 6 チャネ ルのアナログ入力端子を搭載しています(AN00~AN05)。MB95210H シリーズは 2 チャネ ルのアナログ入力端子を搭載しています(AN04、AN05)。アナログ入力端子は汎用入出力 ポートとしても使用できます。 8 AN07-00185-1 2.3.2 8/10 ビット A/D コンバータ制御レジスタ 2(ADC2) このレジスタは、8/10 ビット A/D コンバータの各機能の制御、入力クロックの選択、およ び割込みの許可・禁止を行うためのレジスタです。 1×MCLK 1/2×MCLK 1/4×MCLK 1/8×MCLK / (マシンクロック) (マシンクロック) / / (マシンクロック) (マシンクロック) 図 2.3.2-1 : 8/10 ビット A/D コンバータ制御レジスタ 2(ADC2) 9 AN07-00185-1 2.3.3 8/10 ビット A/D コンバータデータレジスタ 上位/下位(ADDH,ADDL) このレジスタには、AD 変換結果が格納されます。10 ビット AD 変換時の変換結果は、上位 2 ビットのデータが ADDH レジスタに、下位 8 ビットのデータが ADDL レジスタに格納さ れます。8 ビット AD 変換時の変換結果は、ADDL レジスタに格納されます。 ADC2 レジスタの AD8 ビットに”0”が設定されているとき、10 ビット A/D コンバータとし て動作し、”1”が設定されているときは 8 ビット A/D コンバータとして動作します。 図 2.3.3-1 : 8/10 ビット A/D コンバータデータレジスタ 上位/下位(ADDH,ADDL) 10 AN07-00185-1 2.4 8/10 ビット A/D コンバータの割込み 2.4.1 8/10 ビット A/D コンバータ動作における割込み A/D 変換が完了すると、割込み要求フラグビット(ADC1 : ADI)が”1”に設定されます。こ のとき割込み要求許可ビットが許可(ADC2:ADIE=1)になっている場合は、割込みコント ローラに対して割込み要求が発生します。割込み要求をクリアするには、割込み処理関数 内で、ADI ビットに”0”を書込んでください。 ADI ビットは ADIE ビットの値に関係なく、A/D 変換が完了すると”1”に設定されます。割込 み要求フラグビット(ADC1 : ADI)が”1”で、割込み要求が許可(ADC2 : ADIE=1)されて いる場合は、CPU は割込み処理から復帰することができません。必ず割込み処理関数内で ADI ビットをクリアしてください。 2.4.2 8/10 ビット A/D コンバータの割込みに関連するレジスタとベクタテーブル 表 2.4.2-1 : 8/10 ビット A/D コンバータの割込みに関連するレジスタとベクタテーブル 全ての周辺リソースの割込み要求番号とベクタテーブルは、MB95200H/210H シリーズのハ ードウェアマニュアルの「付録 B. 割込み要因のテーブル」を参照ください。 11 AN07-00185-1 3 アナログ入力と外部回路 この章では、電気的特性と基本的な外部回路について説明します。 3.1 電気的特性 次の表は、MB95200H/210H シリーズに搭載されている A/D コンバータの電気的特性を示 しています。 表 3.1-1 : A/D コンバータの電気的特性 12 AN07-00185-1 3.2 アナログ入力向け外部回路例 Vss 図 3.2-1 : A/D 変換 外部回路例 アナログ入力端子を過電圧から保護するために端子と直列に抵抗(Rclamp)を挿入すること を推奨します。Rclampの抵抗値は次式で求めることができます。 Rclamp > 印加最大電圧 / Iclamp 印加最大電圧 : Vccを超える正電圧またはVssを下回る負電圧 Iclamp : アナログ入力端子の最大クランプ電流 Iclampが規格を超えてしまう場合は、マイコンの外部にクランプダイオード(Dclamp)を接 続してマイコンの入力端子を保護してください。この場合リーク電流の小さいダイオード を使用して回路への影響を小さくしてください。 12V系のセンサを接続するような場合、センサの出力がマイコンのVccよりも高い電圧とな る場合があります。このような場合はマイコンの外部回路で抵抗(R1、R2)により分圧し てVccを超える電圧が入力端子に印加されないようにしてください。入力端子電圧は次式で 求めることができます。 入力端子電圧 = signal 電圧 × R2 /(R1 + R2) 13 AN07-00185-1 入力信号のノイズを吸収するためにコンデンサ(Cnoise)が挿入されている場合にはRclamp、 R1、R2 とCnoiseでローパスフィルタが構成されます。この時定数が大きい場合、signal電圧 の変化に入力端子の電圧が追い付くことができず測定誤差の原因となります。 また、AD 変換時のサンプリングによる入力端子電圧への影響を小さくするために AD 変換 の周期は時定数の 8 倍以上とすることを推奨します。 図 3-1 のような回路構成の場合、時定数は次式で求めることができます。 ) 時定数 = Cnoise × (Rclamp +(R1 × R2 /(R1 + R2)) 14 AN07-00185-1 4 AD 変換時間 この章では、A/D 変換時間について説明します。 A/D 変換の速度は、クロックモード、メインクロック発振周波数、メインクロックの速度切 換え(ギア機能)に影響されます。A/D 変換時間は次式で求めることができます。 A/D 変換時間 = サンプリング時間 + 比較時間 サンプリング時間 = CKIN ×(ADC2:TIM1/TIM0 設定) 比較時間 = CKIN × 10(固定値)+ MCLK CKIN : AD 動作クロック(ADC2:CKDIV1/CKDIV0 設定) MCLK : マシンクロック z AD コンバータ起動のタイミングによって、A/D 変換時間は、最大で 1CKIN- 1MCLK 分の誤差が発生します。 z データシートの AD 変換部の「サンプリング時間」及び「コンペア時間」の規格を 満たすようにレジスタの設定を行ってください。 15 AN07-00185-1 5 A/D コンバータの例 この章では、8/10 ビット A/D コンバータの使用例を示します。 A/D 変換の起動には 2 つの方法があります。また, 変換が完了したか否かを確認する方法も 2 つあります。 5.1 AD 設定手順 以下に、8/10 ビット A/D コンバータの設定手順例を示します。 5.1.1 初期設定 z 入力ポートの設定(DDR1) z 割込みレベルの設定(ILR4) z アナログ入力チャネルの選択(ADC1 : ANS0~ANS3) z サンプリング時間の設定(ADC2 : TIM1,TIM0) z クロック選択(ADC2 : CKDIV1, CKDIV0) z A/D 変換精度の設定(ADC2 : AD8) z 動作モードの選択(ADC2 : EXT) z 起動トリガの選択(ADC2 : ADCK) z 割込み許可(ADC2 : ADIE = 1) z A/D 変換起動(ADC1 : AD = 1) 5.1.2 割込み処理 z 割込み要求フラグのクリア(ADC1 : ADI = 0) z 変換値の読み出し(ADDH,ADDL) z A/D 変換起動(ADC1 : AD = 1) 16 AN07-00185-1 5.2 A/D 起動方法 A/D 変換の起動方法には 2 つの方法があります。1 つは、8/16 ビット複合タイマ TO00 出力 による起動です。もう 1 つは、A/D 変換起動ビットの設定(ADC1 : AD = 1)による起動で す。以下にそれぞれの起動方法の設定例を示します。 5.2.1 A/D 変換起動ビットの設定による起動 ADC1 = 0x00; //AN00 as input ADC2 = 0x81; //8-bit resolution,2/MCLK ADC1_AD = 1; //start AD converter 付録に掲載されているプロジェクト 1「AD_BASIC」のサンプルコードを参照してくださ い。 17 AN07-00185-1 5.2.2 8/16 ビット複合タイマ TO00 出力による起動 この場合、8/16 ビット複合タイマ 0 が使用されます。8/16 ビット複合タイマ 0 の動作の詳 細は、MB95200H/MB95210H シリーズのハードウェアマニュアル 第 14 章を参照ください。 次の例は, 8/16 ビット複合タイマ 0 の設定方法を示しています。 /********************************************************** Name: InitCompTimer Function: TO00 control AD converter **********************************************************/ void InitCompTimer(void) { T00DR = 0xE0; // set count value (low 8 bit) TMCR0 = 0x40; // 8-bit, no filtering T00CR0 = 0x01; // interval timer with continuous mode T00CR1 = 0x81; // enable output, start timer } 次の例は、A/D 変換の設定方法を示しています。 /**************************************************** Name: MCU_Initialization Function: Initialization MCU *****************************************************/ void MCU_initialization() { .............. //..... ADC1=0x00; //AN00 as input ADC2=0x81; //8-bit resolution, 2/MCLK ADC1_AD = 0; //Don’t to start AD conversion. ADC2_ADCK =1; //Start via 8/16-bit composite timer (TO00) output ADC2_EXT =1; //Continuous activation with the clock selected by the ADCK bit in the ADC2 register .............. //..... } 付録に掲載されているプロジェクト 2「AD-TIMER」のサンプルコードを参照してください。 18 AN07-00185-1 5.3 A/D 変換完了の判断方法 A/D 変換完了を判断するには、2 つの方法があります。 1 つは、変換中フラグビット(ADC1 : ADMV)を確認します。もう 1 つは、AD 変換完了割 込みで確認する方法です。以下にそれぞれの判断方法の設定例を示します。これら2つは 論理が異なるだけで、どちらを使用しても構いません。 5.3.1 変換中フラグビット確認による判断 この場合、変換中フラグビット(ADC1 : ADMV)を見て判断します。読出し値が”1”であれ ば A/D 変換中であり、”0”であれば A/D 変換完了となります。 /************************************************* Name: AD_Sample Function: Use AN00 as the sample voltage channel **************************************************/ void AD_Sample(void) { ad_data = ADD_ADDL; //Read AD Sample Value ADC1_AD=1; //Start AD again } /*********************************************************************** Name: syinit Function: Initial AD ***********************************************************************/ void syinit(void) { // AN0 pin as input ADC1 = 0x00; ADC2 = 0x81; // 8-bit precision, 2/MCLK ADC1_AD = 1; // start A/D converter .............. } /******************************************************************** Name: main Function: Main Routine ***********************************************************************/ void main(void) { syinit(); while (1) { //Check converter finish flag, while(ADC1_ADMV); //ADC1_ADMV = 0 means AD Sample finished AD_Sample(); } } 付録に掲載されているプロジェクト 1「AD_BASIC」のサンプルコードを参照してください。 19 AN07-00185-1 5.3.2 AD 変換完了割込みを使用して確認 AD 変換が完了すると割込み要求フラグビット(ADC1 : ADI)が”1”に設定され、割込み要求 が発生します。この AD 変換完了割込みを使用して、変換完了を確認します。 /********************************************************************* Name: InitADC Function: initialize AD **********************************************************************/ int ad_data; void InitADC(void) { ADC2 = 0x89; // 8-bit resolution, enable interrupts ADC1 = 0x01; // AN0 pin as input,start AD } /******************************************************************** Name: main Function: Main Routine ***********************************************************************/ void main(void) { PDR0 = 0x00; // Port 0: AIDRL = 0xfe; // used as I/O-port (no analog inputs), P00 as AN-input DDR0 = 0x00; // Set to input InitIrqLevels(); // initialise Interrupt level register and IRQ vector table __EI(); // global interrupt enable __set_il(3); // set global interrupt mask to allow all IRQ levels InitADC(); // init AD - converter while(1) // waiting for interrupt ( no operation ) { __asm("nop"); WDTC=0x35; //Clear watch dog timer } } ▼ 20 AN07-00185-1 ▲ /******************************************************************** Interrupt process ***********************************************************************/ __interrupt void ISR_ADC (void) { ad_data = ADDL; // voltage calculating ADC1 = 0x01; // clear interrupt flag, start A/D again } 対応する割込みベクタと割込みレベルは、富士通の標準テンプレートプロジェクトの Vectors.c モジュールで定義するものとします。 /***************************************************************************** VECTORS.C ******************************************************************************/ void InitIrqLevels(void) { ILR4 = 0xCF; // IRQ18: 8/10-bit AD-converter // IRQ19: Timebase timer } __interrupt void ISR_ADC (void); #pragma intvect ISR_ADC 18 // IRQ18: 8/10-bit AD-converter 付録に掲載されているプロジェクト 3「AD_INT」のサンプルコードを参照してください。 21 AN07-00185-1 6 8/10 ビット A/D コンバータの使用上の注意事項 この章では、8/10 ビット A/D コンバータを使用する際の注意事項を示します。 6.1 z 8/10 ビット A/D コンバータの設定に関する注意事項 A/D 変換値は A/D 変換完了時に ADDH,ADDL レジスタに格納されます。したがっ て、A/D 変換中は前回の変換値が読み出されます。 z A/D 変換機能の使用中は、アナログ入力端子の設定(ADC1 : ANS3~ANS0)を変 更しないでください。特に連続起動時は、アナログ入力端子を変更する前に連続 起動を禁止(ADC2 : EXT = 0)に設定してください。 z リセット時、ストップモード,時計モードでは A/D コンバータは停止し、その全て のレジスタは初期化されます。 z 割込み要求フラグビット(ADC1 : ADI)が”1”で、割込み要求が許可されている場 合(ADC2 : ADIE = 1)、CPU は割込み処理から復帰することができません。必ず、 割込み処理関数内で ADI ビットをクリアしてください。 6.2 割込み要求に関する注意事項 A/D 変換の再起動(ADC1 : AD = 1)と A/D 変換の完了が同時に発生した場合は、割込み要 求フラグビット(ADC1 : ADI)が”1”に設定されます。 6.3 8/10 ビット A/D コンバータ アナログ入力順序 アナログ入力(AN00~AN05)は、電源(Vcc)と同時か、または電源(Vcc)投入後に印加 してください。 電源(Vcc)は、アナログ入力(AN00~AN05)と同時に切断するか、またはアナログ入力 (AN00~AN05)を切断後に切断してください。 電源投入/切断時には、アナログ入力電圧が電源の電圧を越えないように注意してください。 22 AN07-00185-1 7 その他の情報 富士通マイクロエレクトロニクス製品に関するその他の情報については、下記の Web サイ トをご覧ください。 http://jp.fujitsu.com/microelectronics/ 23 AN07-00185-1 8 付録 8.1 図の索引 図 2.2-1 : 8/10 ビットADコンバータブロックダイヤグラム例(MB95200Hシリーズ) ... 7 図 2.3.1-1 : 8/10 ビットA/Dコンバータ制御レジスタ 1(ADC1) ............................... 8 図 2.3.2-1 : 8/10 ビットA/Dコンバータ制御レジスタ 2(ADC2) ............................... 9 図 2.3.3-1 : 8/10 ビットA/Dコンバータデータレジスタ 上位/下位(ADDH,ADDL) . 10 図 3.2-1 : A/D変換 外部回路例................................................................................. 13 8.2 表の索引 表 2.4.2-1 : 8/10 ビットA/Dコンバータの割込みに関連するレジスタとベクタテーブ ル.......................................................................................................................... 11 表 3.1-1 : A/Dコンバータの電気的特性 .................................................................... 12 24 AN07-00185-1 8.3 サンプルコード 8.3.1 プロジェクト 1 Name: AD_BASIC Function: set start-bit and check conversion flag bit /****************************************************************************** Name: MAIN.C ******************************************************************************/ #include "mb95200.h" unsigned char ad_data; /****************************************************************************** Name: AD_Sample Function: Use AN00 as the sample voltage channel ******************************************************************************/ void AD_Sample(void) { ad_data = ADD_ADDL; ADC1_AD=1; // Read AD Sample value // Start AD again } /****************************************************************************** Name: syinit Function: Initial AD, IO-PORT ******************************************************************************/ void syinit(void) { ADC1=00; //AN00 as input ADC2 = 0x81; //8-bit resolution, 2/MCLK ADC1_AD = 1; //start A/D converter DDR0 = 0x00; //use P00-P05 input PDR0 = 0x00; } 25 AN07-00185-1 /****************************************************************************** Name: main Function: Main Routine ******************************************************************************/ void main(void) { syinit(); __EI(); //global interrupt enable __set_il(3); //set global interrupt mask to allow all IRQ levels while(1) { WDTC = 0x35; //Clear watch dog timer while(ADC1_ADMV); //Check converter finish flag AD_Sample(); } } 26 AN07-00185-1 プロジェクト 2 8.3.2 Name: AD-TIMER Function: start A/D converter using 8/16 bit compound timer and check conversion flag bit /****************************************************************************** Name: MAIN.C Function: start A/D converter using 8/16-bit composite timer (TO00) output. ******************************************************************************/ #include "mb95200.h" unsigned char ad_data; /****************************************************************************** Name: MCU_Initialization Function: Initialization MCU ******************************************************************************/ void MCU_initialization() { __DI(); SYCC=0x00; //MCLK = source clock = 8 MHz (Main CR) DDR0_P05 = 1; AIDRL=0xfc; //AN00,AN01 analog input WDTC=0x35; //Clear watch dog timer ADC1=0x00 ; //AN00 as input ADC2=0x81; //8-bit precision,disable interrupt, 2/MCLK ADC1_AD = 0; //No start A/D conversion. ADC2_ADCK =1; //Start AD by 8/16-bit composite timer (TO00) output // Continuous activation with the clock selected by the ADCK bit in the ADC2 register ADC2_EXT =1; } /****************************************************************************** Name: InitCompTimer Function: TO00 control AD converter ******************************************************************************/ void InitCompTimer(void) { T00DR = 0xE0; // set count value (low 8 bit) TMCR0 = 0x40; // 8-bit, no filtering T00CR0 = 0x01; // interval timer with continuous mode 27 AN07-00185-1 T00CR1 = 0x81; // enable output, start timer } /****************************************************************************** Name: ad_sample Function: AD sample code ******************************************************************************/ void ad_sample() { while (ADC1_ADMV); ad_data = ADD_ADDL; // If AD Complete? //Read AD Sample value } /****************************************************************************** Name: main Function: Main Loop ******************************************************************************/ void main() { MCU_initialization(); InitCompTimer(); while(1) { ad_sample(); WDTC=0x35; //Clear watch dog timer } } 28 AN07-00185-1 プロジェクト 3 8.3.3 Name: AD_INT Function: start A/D converter by setting start-bit and check interrupt request flag bit /****************************************************************************** Name: MAIN.C Function: checking interrupt request flag bit ******************************************************************************/ #include "mb95200.h" /****************************************************************************** Name: InitADC Function: initialize AD ******************************************************************************/ int ad_data; void InitADC(void) { ADC2 = 0x89; // 8-bit resolution, enable interrupts ADC1 = 0x01; // AN0 pin as input, start AD } /****************************************************************************** Name: main Function: Main Routine ******************************************************************************/ void main(void) { PDR0 = 0x00; // Port 0: AIDRL = 0xfe; // used as I/O-port (no analog inputs), P00 as AN-input DDR0 = 0x00; // Set to input InitIrqLevels(); // initialise Interrupt level register and IRQ vector table __EI(); // global interrupt enable __set_il(3); // set global interrupt mask to allow all IRQ levels InitADC(); // init AD - converter while(1) // waiting for interrupt ( no operation ) { __asm("nop"); WDTC=0x35; //Clear watch dog timer } } 29 AN07-00185-1 /***************************************************************************** Interrupt process ******************************************************************************/ #include “mb95200.h” extern int ad_data; __interrupt void ISR_ADC (void) { ad_data =ADD_ADDL; // voltage calculating ADC1 = 0x01; // clear interrupt flag, start A/D again } /***************************************************************************** VECTORS.C ******************************************************************************/ void InitIrqLevels(void) { ILR4 = 0xCF; // IRQ18: 10-bit AD-converter // IRQ19: Timebase timer } __interrupt void ISR_ADC (void); #pragma intvect ISR_ADC 18 // IRQ18: 10-bit AD-converter 30