- ハードウェアのセットアップと要件
- NuvotonN76E003とのLEDインターフェースの回路図
- NuvotonN76E003のタイマーピン
- NuvotonN76E003のタイマーレジスタ
- NuvotonN76E003の時間の種類
- タイマー用NuvotonN76E003マイクロコントローラーのプログラミング
- コードの点滅とタイマー機能の出力の確認
以前のNuvotonマイクロコントローラーのチュートリアルでは、基本的なLED点滅プログラムを開始ガイドとして使用し、触覚スイッチを接続するための入力としてGPIOをインターフェイスしました。このチュートリアルでは、Keilプロジェクトを構成し、N76E003Nuvotonマイクロコントローラーをプログラミングするための環境をセットアップする方法を十分に理解しています。マイクロコントローラユニットの内部周辺機器を使用し、N76E003の内蔵タイマーを使用してもう少し移動します。
以前のチュートリアルでは、ソフトウェア遅延を使用してLEDを点滅させただけなので、このチュートリアルでは、タイマー遅延機能とタイマーISR(割り込みサービスルーチン)を使用して、2つの個別のLEDを点滅させる方法を学習します。ArduinoタイマーチュートリアルとPICタイマーチュートリアルをチェックして、他のマイクロコントローラーでタイマーを使用する方法を確認することもできます。時間を無駄にすることなく、どのようなハードウェアセットアップが必要かを評価しましょう。
ハードウェアのセットアップと要件
このプロジェクトの要件はタイマーISRとタイマー遅延機能を学習することであるため、2つのLEDを使用します。そのうちの1つはwhileループのタイマー遅延を使用して点滅し、もう1つはISR機能内で点滅します。
LEDはN76E003開発ボードで利用できるため、このプロジェクトでは、LED電流を制限するために1つの追加LEDと電流制限抵抗が必要です。必要なコンポーネント-
- LEDの任意の色
- 100R抵抗
言うまでもなく、上記のコンポーネントの他に、N76E003マイクロコントローラーベースの開発ボードとNu-Linkプログラマーが必要です。さらに、すべてのコンポーネントを接続するには、ブレッドボードとフックアップワイヤも必要です。
NuvotonN76E003とのLEDインターフェースの回路図
以下の回路図でわかるように、テストLEDは開発ボード内で利用可能であり、ポート1.4に接続されています。追加のLEDがポート1.5に接続されています。抵抗R3はLED電流を制限するために使用されます。左端には、プログラミングインターフェイスの接続が示されています。
NuvotonN76E003のタイマーピン
N76E003のピン配列は下の画像で見ることができます-
ご覧のとおり、各ピンには異なる仕様があり、各ピンは複数の目的に使用できます。ただし、LED出力ピンとして使用されるピン1.5は、PWMおよびその他の機能を失います。ただし、このプロジェクトには別の機能は必要ないため、これは問題ではありません。
ピン1.5を出力として、ピン1.6を入力として選択する理由は、接続を容易にするためにGNDピンとVDDピンが最も近くにあるためです。ただし、このマイクロコントローラでは、20ピンのうち18ピンをGPIOピンとして使用でき、リセット入力専用のピン2.0を除き、他のGPIOピンを出力および入力関連の目的に使用できます。出力。すべてのGPIOピンは以下のモードで設定できます。
データシートによると、PxM1.nとPxM2.nは、I / Oポートの制御動作を決定するために使用される2つのレジスタです。LEDを使用しており、一般的な出力ピンとしてピンが必要なため、ピンには準双方向モードを使用します。
NuvotonN76E003のタイマーレジスタ
タイマーはマイクロコントローラユニットにとって重要なものです。マイクロコントローラには、タイマー周辺機器が組み込まれています。nuvoton N76E003には、16ビットタイマー周辺機器も付属しています。ただし、各タイマーはさまざまな目的で使用されるため、タイマーインターフェイスを使用する前に、タイマーについて知っておくことが重要です。
NuvotonN76E003の時間の種類
タイマー0および1:
これらの2つのタイマーtimer0とtimer1は、8051タイマーと同じです。これらの2つのタイマーは、一般的なタイマーまたはカウンターとして使用できます。これらの2つのタイマーは4つのモードで動作します。でモード0、それらのタイマは13ビットタイマ/カウンタモードで動作します。モード1、これら二つのタイマーの分解能ビットは16ビットであろう。モード2、タイマーが8ビット分解能でオートリロードモードとして構成されています。モード3、タイマ1を停止し、タイマ0は、同時にカウンタ、タイマとして使用することができます。
これらの4つのモードのうち、ほとんどの場合、モード1が使用されます。これらの2つのタイマーは、固定モードまたは事前スケーリングモード(Fys / 12)でFsys(システム周波数)を使用できます。また、外部クロックソースからクロックを供給することもできます。
タイマー2:
タイマー2も16ビットタイマーで、主に波形キャプチャに使用されます。また、システムクロックを使用し、8つの異なるスケールを使用してクロック周波数を除算することにより、さまざまなアプリケーションで使用できます。また、比較モードで使用したり、PWMを生成したりすることもできます。
タイマー0およびタイマー1と同様に、タイマー2は自動リロードモードで使用できます。
タイマー3:
タイマー3は16ビットタイマーとしても使用され、UARTのボーレートクロックソースとして使用されます。また、自動リロード機能もあります。アプリケーションでUART通信が必要な場合は、このタイマーをシリアル通信(UART)にのみ使用することが重要です。このような場合、タイマー設定のプロセスが競合するため、このタイマーを他の目的に使用しないことをお勧めします。
ウォッチドッグタイマー:
ウォッチドッグタイマーは標準の6ビットタイマーとして使用できますが、この目的には使用されません。汎用タイマーとしてのウォッチドッグタイマーの使用は、マイクロコントローラーがほとんどアイドルモードのままである低消費電力アプリケーションに適用できます。
ウォッチドッグタイマーは、その名前が示すように、マイクロコントローラーが正しく機能しているかどうかを常にチェックします。マイクロコントローラーがハングまたは停止した場合、WDT(ウォッチドッグタイマー)はマイクロコントローラーを自動的にリセットします。これにより、マイクロコントローラーがスタックしたり、ハングしたり、停止したりすることなく、継続的なコードフローで実行されます。
セルフウェイクアップタイマー:
これは、ウォッチドッグタイマーと同じ専用のタイミングプロセスを提供する別のタイマーペリフェラルです。このタイマーは、マイクロコントローラーが低電力モードで実行されているときに定期的にシステムをウェイクアップします。
このタイマーペリフェラルは、内部または外部ペリフェラルを使用して、マイクロコントローラーをスリープモードからウェイクアップするために使用できます。このプロジェクトでは、タイマー1とタイマー2を使用します。
タイマー用NuvotonN76E003マイクロコントローラーのプログラミング
ピンを出力として設定する:
まず、出力セクションから始めましょう。2つのLEDを使用しています。1つはTestという名前のオンボードLEDで、ポートP1.4に接続され、外部LEDはピンP1.5に接続されています。
したがって、これら2つのピンは、以下のコードスニペットを使用してこれら2つのLEDを接続するための出力ピンとして構成されます。
#define Test_LED P14 #define LED1 P15
これらの2つのピンは、セットアップ機能で準双方向ピンとして設定されます。
void setup(void){P14_Quasi_Mode; P15_Quasi_Mode; }
タイマー機能の設定:
セットアップ機能では、目的の出力を取得するようにタイマー2を構成する必要があります。このために、T2MODレジスタに1/128クロック分周係数を設定し、自動リロード遅延モードで使用します。T2MODレジスタの概要は次のとおりです-
T2MODレジスタの4、5、および6ビットはタイマー2クロック分周器を設定し、7ビットは自動リロードモードを設定します。これは、以下の行を使用して行われます–
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
これらの2行は、 Function_define.h ファイルで次のように定義されています。
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD&= 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON&= 〜SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
これらの行は、Timer 2ISRに必要なタイミング値を設定します。
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
これは、Function_define.hファイルでさらに次のように定義されています-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
したがって、16000000は、100ミリ秒の時間遅延を設定している16Mhzの水晶周波数です。
2行より下では、タイマー2の下位バイトと上位バイトが空になります。
TL2 = 0; TH2 = 0;
最後に、以下のコードはタイマー2割り込みを有効にし、タイマー2を開始します。
set_ET2; // Timer2割り込みを有効にするset_EA; set_TR2; // Timer2の実行
完全なセットアップ機能は、以下のコードで確認できます-
void setup(void){ P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Timer2 割り込みを有効にする set_EA; set_TR2; // Timer2の実行 }
タイマー2ISR機能:
タイマー2ISR機能は、以下のコードで確認できます。
void Timer2_ISR(void)割り込み5 { clr_TF2; // Timer2割り込みフラグをクリア LED1 = 〜LED1; // LED1トグル、P1.5で接続; }
コードの点滅とタイマー機能の出力の確認
コンパイル時にコード(以下に示す)は0の警告と0のエラーを返し、Keilのデフォルトのフラッシュ方法を使用してフラッシュしました。点滅後、プログラムされた定義済みのタイマー遅延でLEDが点滅していました。
ボードがこのコードでどのように機能するかの完全なデモンストレーションについては、以下のビデオをチェックしてください。チュートリアルを楽しんで、質問がある場合に役立つことを学んだことを願っています。下のコメントセクションに残してください。フォーラムを使用して、他の技術的な質問を投稿することもできます。