- 必要なコンポーネントとハードウェアのセットアップ
- アナログ電圧を読み取るためのNuvotonN76E003回路図
- N76E003のGPIOおよびアナログピンに関する情報
- N76E003のADCペリフェラルに関する情報
- ADC用のN76E003のプログラミング
- コードと出力の点滅
アナログ-デジタルコンバーター(ADC)は、マイクロコントローラーで最も使用されているハードウェア機能です。アナログ電圧を取り込んでデジタル値に変換します。マイクロコントローラはデジタルデバイスであり、2進数の1と0で動作するため、アナログデータを直接処理することはできませんでした。したがって、ADCを使用してアナログ電圧を取り込み、マイクロコントローラーが理解できる同等のデジタル値に変換します。アナログ-デジタルコンバータ(ADC)について詳しく知りたい場合は、リンクされている記事を確認してください。
MQガスセンサー、ADXL335加速度センサーなど、アナログ出力を提供する電子機器で利用可能なさまざまなセンサーがあります。したがって、アナログ-デジタルコンバーターを使用して、これらのセンサーをマイクロコンピューターユニットと接続できます。他のマイクロコントローラーでADCを使用するために、以下にリストされている他のチュートリアルをチェックすることもできます。
- Arduino UnoでADCを使用する方法は?
- ADC0808と8051マイクロコントローラーのインターフェース
- PICマイクロコントローラーのADCモジュールの使用
- Raspberry PiADCチュートリアル
- MSP430G2でADCを使用する方法-アナログ電圧の測定
- STM32F103C8でADCを使用する方法
このチュートリアルでは、N76E003マイクロコントローラーユニットの内蔵ADCペリフェラルを使用するので、このアプリケーションに必要なハードウェアセットアップの種類を評価しましょう。
必要なコンポーネントとハードウェアのセットアップ
N76E003でADCを使用するには、ポテンショメータを使用して分圧器を使用し、0V〜5.0Vの範囲の電圧を読み取ります。電圧は16x2文字LCDに表示されます。LCDとN76E003を初めて使用する場合は、LCDとNuvotonN76E003のインターフェイス方法を確認できます。したがって、このプロジェクトに必要な主要コンポーネントは16x2文字LCDです。このプロジェクトでは、以下のコンポーネントを使用します-
- キャラクターLCD16x2
- 1k抵抗
- 50kポテンショメータまたはトリムポット
- いくつかのBergワイヤー
- フックアップワイヤーが少ない
- ブレッドボード
言うまでもなく、上記のコンポーネント以外に、N76E003マイクロコントローラーベースの開発ボードとNu-Linkプログラマーが必要です。LCDにはプログラマーが供給できない十分な電流が流れるため、追加の5V電源ユニットも必要です。
アナログ電圧を読み取るためのNuvotonN76E003回路図
回路図でわかるように、ポートP0はLCD関連の接続に使用されます。左端には、プログラミングインターフェイスの接続が示されています。ポテンショメータは分圧器として機能し、アナログ入力0(AN0)によって検出されます。
N76E003のGPIOおよびアナログピンに関する情報
以下の画像は、N76E003AT20マイクロコントローラユニットで使用可能なGPIOピンを示しています。ただし、20ピンのうち、LCD関連の接続にはポートP0(P0.0、P0.1、P0.2、P0.4、P0.5、P0.6、P0.7)が使用されます。アナログピンは赤色で強調表示されています。
ご覧のとおり、ポートP0には最大のアナログピンがありますが、これらはLCD関連の通信に使用されます。したがって、P3.0およびP1.7はアナログ入力ピンAIN1およびAIN0として使用できます。このプロジェクトではアナログピンが1つしか必要ないため、このプロジェクトではアナログ入力チャネル0であるP1.7を使用します。
N76E003のADCペリフェラルに関する情報
N76E003は12ビットSARADCを提供します。N76E003の非常に優れた機能は、ADCの分解能が非常に優れていることです。ADCには、シングルエンドモードの8チャネル入力があります。ADCのインターフェースは非常にシンプルで簡単です。
最初のステップは、ADCチャネル入力を選択することです。 N76E003マイクロコントローラで利用可能な8チャネル入力があります。 ADC入力またはI / Oピンを選択した後、すべてのピンをコードの方向に設定する必要があります。アナログ入力に使用されるすべてのピンはマイクロコントローラの入力ピンであるため、すべてのピンを入力専用(ハイインピーダンス)モードとして設定する必要があります。これらは、PxM1およびPxM2レジスタを使用して設定できます。これらの2つのレジスタは、xがポート番号を表すI / Oモードを設定します(たとえば、ポートP1.0の場合、レジスタはP1M1とP1M2になり、P3.0の場合はP3M1とP3M2になります)。下の画像で見られます-
ADCの構成は、2つのレジスタADCCON0とADCCON1によって行われます。ADCCON0レジスタの説明を以下に示します。
ビット0からビット3までのレジスタの最初の4ビットは、ADCチャネル選択を設定するために使用されます。チャネルAIN0を使用しているため、これらの4ビットの選択は0000になります。
6番目と7番目のビットは重要なものです。ADCSはADC変換を開始するために1を設定する必要があり、ADCFは成功したADC変換に関する情報を提供します。ADC変換を開始するには、ファームウェアで0に設定する必要があります。次のレジスタはADCCON1-です。
ADCCON1レジスタは、主に外部ソースによってトリガーされるADC変換に使用されます。ただし、通常のポーリング関連の操作では、ADC回路をオンにするために1ビットのADCENを1に設定する必要があります。
次に、ADCチャネルの入力は、デジタル入力を切断できるAINDIDSレジスタで制御する必要があります。
nはチャネルビットを表します(たとえば、AIN0チャネルはAINDIDSレジスタの最初のビットP17DIDSを使用して制御する必要があります)。デジタル入力を有効にする必要があります。有効にしないと、0として読み取られます。これらはすべてADCの基本設定です。これで、ADCFをクリアしてADCSを設定すると、ADC変換を開始できます。変換された値は、以下のレジスタで利用可能になります-
そして
両方のレジスタは8ビットです。ADCは12ビットのデータを提供するため、ADCRHはフル(8ビット)として使用され、ADCRLはハーフ(4ビット)として使用されます。
ADC用のN76E003のプログラミング
毎回特定のモジュールのコーディングは多忙な作業であるため、N76E003との16x2文字のLCDインターフェイスに非常に役立つシンプルで強力なLCDライブラリが提供されます。16x2 LCDライブラリは、以下のリンクからダウンロードできるGithubリポジトリで入手できます。
NuvotonN76E003用の16x2LCDライブラリをダウンロード
親切(クローニングまたはダウンロードすることにより)ライブラリを持っているだけ含ま lcd.c と LCD.hの あなたのファイルKeil社N76E003プロジェクト所望のアプリケーションやプロジェクト内の16×2 LCDの容易な統合のために。ライブラリは、次の便利な表示関連機能を提供します-
- LCDを初期化します。
- LCDにコマンドを送信します。
- LCDに書き込みます。
- LCDに文字列を入力します(16文字)。
- 16進値を送信して文字を出力します。
- 16文字を超える長いメッセージをスクロールします。
- 整数をLCDに直接印刷します。
ADCのコーディングは簡単です。セットアップ関数 Enable_ADC_AIN0; 設定するために使用される ADC 用 AIN0の 入力を。これはファイルで定義されています。
#define Enable_ADC_AIN0 ADCCON0&= 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
したがって、上記の行はピンを入力として設定し、 ADCCON0、ADCCON1 レジスタ、および AINDIDS レジスタも構成します。以下の関数は、 ADCRH および ADCRL レジスタからADCを読み取りますが、分解能は12ビットです。
unsigned int ADC_read(void){ register unsigned int adc_value = 0x0000; clr_ADCF; set_ADCS; while(ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value- = ADCRL; adc_valueを返します。 }
このビットは4回左シフトされてから、データ変数に追加されます。主な機能では、ADCはデータを読み取り、ディスプレイに直接印刷されます。ただし、電圧は、比率または電圧をビット値で割った値の関係を使用して変換されます。
12ビットADCは、5.0V入力で4095ビットを提供します。したがって、5.0V / 4095 = 0.0012210012210012Vを除算します。
したがって、1桁のビット変化は0.001Vの変化に等しくなります(約)。これは、以下に示すメイン関数で実行されます。
void main(void){ int adc_data; セットアップ(); lcd_com(0x01); while(1){ lcd_com(0x01); lcd_com(0x80); lcd_puts( "ADCデータ:"); adc_data = ADC_read(); lcd_print_number(adc_data); 電圧= adc_data * bit_to_voltage_ratio; sprintf(str_voltage、 "ボルト:%0.2fV"、電圧); lcd_com(0xC0); lcd_puts(str_voltage); Timer0_Delay1ms(500); } }
データはビット値から電圧に変換され、 sprintf 関数を使用して、出力が文字列に変換され、LCDに送信されます。
コードと出力の点滅
コードは0の警告と0のエラーを返し、Keilによるデフォルトのフラッシュ方法を使用してフラッシュされました。以下のフラッシュメッセージを確認できます。 KeilまたはNuvotonを初めて使用する場合は、Nuvotonマイクロコントローラーの使用開始を確認して、基本とコードのアップロード方法を理解してください。
再構築が開始されました:プロジェクト:timer 再構築ターゲット 'ターゲット1' アセンブルSTARTUP.A51… コンパイルmain.c… コンパイルlcd.c… コンパイルDelay.c… リンク… プログラムサイズ:data = 101.3 xdata = 0 code = 4162 "。\ Objects \ timer"。。。 "。\ Objects \ timer" からhexファイルを作成しています -0エラー、0警告。 ビルド時間が経過しました:00:00:02 「G:\\ n76E003 \\ Display \\ Objects \\ timer」の読み込み フラッシュ消去が完了しました。 フラッシュ書き込み完了:4162バイトがプログラムされています。 フラッシュ検証完了:4162バイトが検証されました。 フラッシュロードは11:56:04に終了しました
下の画像は、DCアダプターを使用して電源に接続されたハードウェアを示しています。ディスプレイには、右側のポテンショメーターによって設定された電圧出力が表示されています。
ポテンショメータを回すと、ADCピンに与えられる電圧も変化し、LCDに表示されるADC値とアナログ電圧を確認できます。このチュートリアルの完全な実演デモについては、以下のビデオをご覧ください。
記事を楽しんで、何か役立つことを学んだことを願っています。質問がある場合は、下のコメントセクションに残してください。または、フォーラムを使用して他の技術的な質問を投稿することもできます。