- 하드웨어 설정 및 요구 사항
- Nuvoton N76E003과 LED 인터페이싱을위한 회로 다이어그램
- Nuvoton N76E003의 타이머 핀
- Nuvoton N76E003의 타이머 레지스터
- Nuvoton N76E003의 시간 유형
- 타이머 용 Nuvoton N76E003 마이크로 컨트롤러 프로그래밍
- 타이머 기능에 대한 코드 플래싱 및 출력 확인
이전 Nuvoton 마이크로 컨트롤러 자습서에서는 기본 LED 깜박임 프로그램을 시작 안내서로 사용했으며 GPIO를 촉각 스위치를 연결하기위한 입력으로 인터페이스했습니다. 이 튜토리얼을 통해 Keil 프로젝트를 구성하고 N76E003 Nuvoton 마이크로 컨트롤러를 프로그래밍하기위한 환경을 설정하는 방법을 완전히 알고 있습니다. 이제 마이크로 컨트롤러 장치의 내부 주변 장치를 사용 하고 N76E003에 내장 된 타이머를 사용하여 조금 더 움직일 때 입니다.
이전 자습서에서는 LED를 깜박이는 데 소프트웨어 지연 만 사용 했으므로이 자습서에서는 Timer 지연 기능과 Timer ISR (Interrupt Service Routine)을 사용하고 두 개의 개별 LED를 깜박이는 방법을 배웁니다. 또한 Arduino 타이머 자습서 및 PIC 타이머 자습서를 확인하여 다른 마이크로 컨트롤러와 함께 타이머를 사용하는 방법을 확인할 수 있습니다. 많은 시간을 낭비하지 않고 어떤 종류의 하드웨어 설정이 필요한지 평가 해 봅시다.
하드웨어 설정 및 요구 사항
이 프로젝트의 요구 사항은 Timer ISR 및 타이머 지연 기능 을 배우는 것이므로 두 개의 LED를 사용합니다. 그중 하나는 while 루프에서 타이머 지연을 사용하여 깜박이고 다른 하나는 ISR 기능 내에서 깜박입니다.
N76E003 개발 보드에서 LED를 사용할 수 있으므로이 프로젝트에는 LED 전류를 제한하기 위해 하나의 추가 LED와 전류 제한 저항이 필요합니다. 필요한 구성 요소-
- LED의 모든 색상
- 100R 저항기
말할 것도없이, 위의 구성 요소 외에 N76E003 마이크로 컨트롤러 기반 개발 보드와 Nu-Link 프로그래머가 필요 합니다. 또한 모든 구성 요소를 연결하는 데 브레드 보드 및 연결 와이어도 필요합니다.
Nuvoton N76E003과 LED 인터페이싱을위한 회로 다이어그램
아래 회로도에서 볼 수 있듯이 테스트 LED는 개발 보드 내부에서 사용할 수 있으며 포트 1.4에 연결됩니다. 추가 LED는 포트 1.5에 연결됩니다. 저항 R3은 LED 전류를 제한하는 데 사용됩니다. 맨 왼쪽에는 프로그래밍 인터페이스 연결이 표시됩니다.
Nuvoton N76E003의 타이머 핀
N76E003 의 핀 다이어그램은 아래 이미지에서 볼 수 있습니다.
보시다시피 각 핀은 사양이 다르며 각 핀은 여러 용도로 사용할 수 있습니다. 그러나 LED 출력 핀으로 사용되는 핀 1.5는 PWM 및 기타 기능을 잃게됩니다. 그러나이 프로젝트에는 다른 기능이 필요하지 않기 때문에 문제가되지 않습니다.
핀 1.5를 출력으로, 1.6 핀을 입력으로 선택하는 이유는 쉬운 연결을 위해 GND 및 VDD 핀을 가장 가깝게 사용할 수 있기 때문입니다. 그러나이 마이크로 컨트롤러는 20 개 핀 중 18 개 핀을 GPIO 핀으로 사용할 수 있으며 다른 GPIO 핀은 출력 및 입력 관련 용도로 사용할 수 있습니다. 단, 핀 2.0은 리셋 입력 전용으로 사용되며 다음과 같이 사용할 수 없습니다. 산출. 모든 GPIO 핀은 아래 설명 된 모드에서 구성 할 수 있습니다.
데이터 시트에 따르면 PxM1.n 및 PxM2.n 은 I / O 포트의 제어 작동을 결정하는 데 사용되는 두 개의 레지스터입니다. LED를 사용하고 있으며 일반 출력 핀으로 핀이 필요하므로 핀에 준 양방향 모드를 사용합니다.
Nuvoton N76E003의 타이머 레지스터
타이머는 모든 마이크로 컨트롤러 장치에서 중요한 것입니다. 마이크로 컨트롤러는 내장 타이머 주변기기와 함께 제공됩니다. nuvoton N76E003에는 16 비트 타이머 주변 장치 도 함께 제공됩니다. 그러나 각 타이머는 다른 용도로 사용되며 타이머 인터페이스를 사용하기 전에 타이머에 대해 아는 것이 중요합니다.
Nuvoton N76E003의 시간 유형
타이머 0 및 1:
이 두 타이머 timer0 및 timer1은 8051 타이머와 동일합니다. 이 두 타이머는 일반 타이머 또는 카운터로 사용할 수 있습니다. 이 두 타이머는 네 가지 모드로 작동합니다. 에서 모드 0, 그 타이머는 13- 비트 타이머 / 카운터 모드에서 동작한다. 에서는 모드 1 해상도는 16 비트가 될 것이다 두 타이머 비트. 에서는 모드 2, 타이머는 8 비트 해상도의 자동 새로 고침 모드로 설정된다. 에서는 모드 3, 타이머 1을 정지 타이머 0는 동시에 카운터 및 타이머로 사용될 수있다.
이 네 가지 모드 중 대부분의 경우 모드 1이 사용됩니다. 이 두 타이머는 고정 또는 사전 스케일 모드 (Fys / 12)에서 Fsys (시스템 주파수)를 사용할 수 있습니다. 외부 클럭 소스에서 클럭킹 할 수도 있습니다.
타이머 2:
타이머 2는 주로 파형 캡처에 사용되는 16 비트 타이머입니다. 또한 시스템 클럭을 사용하며 8 개의 다른 스케일을 사용하여 클럭 주파수를 분할하여 다양한 애플리케이션에서 사용할 수 있습니다. 비교 모드에서 사용하거나 PWM을 생성 할 수도 있습니다.
Timer 0 및 Timer 1과 마찬가지로 Timer 2는 자동 다시로드 모드에서 사용할 수 있습니다.
타이머 3:
타이머 3은 16 비트 타이머로도 사용되며 UART의 전송 속도 클럭 소스에 사용됩니다. 자동 새로 고침 기능도 있습니다. 응용 프로그램에 UART 통신이 필요한 경우 직렬 통신 (UART)에만이 타이머를 사용하는 것이 중요합니다. 타이머 설정에서 충돌하는 프로세스로 인해 이러한 경우 다른 목적으로이 타이머를 사용하지 않는 것이 좋습니다.
워치 독 타이머:
Watchdog Timer는 표준 6 비트 타이머로 사용할 수 있지만이 목적으로는 사용되지 않습니다. 워치 독 타이머를 범용 타이머로 사용하는 것은 마이크로 컨트롤러가 대부분 유휴 모드에있는 저전력 소비 애플리케이션에 적용 할 수 있습니다.
이름에서 알 수 있듯이 Watchdog Timer는 항상 마이크로 컨트롤러가 제대로 작동하는지 여부를 확인합니다. 중단되거나 중단 된 마이크로 컨트롤러의 경우 WDT (Watchdog Timer)는 마이크로 컨트롤러를 자동으로 재설정하여 마이크로 컨트롤러가 중단, 중단 또는 중단 된 상황없이 연속 코드 흐름으로 실행되도록합니다.
셀프 웨이크 업 타이머:
이것은 워치 독 타이머와 동일한 전용 타이밍 프로세스를 제공하는 또 다른 타이머 주변 장치입니다. 이 타이머는 마이크로 컨트롤러가 저전력 모드에서 실행될 때 주기적으로 시스템을 깨 웁니다.
이 타이머 주변기기는 내부적으로 또는 외부 주변기기를 사용하여 마이크로 컨트롤러를 절전 모드에서 깨울 수 있습니다. 이 프로젝트에서는 Timer 1과 Timer 2를 사용합니다.
타이머 용 Nuvoton N76E003 마이크로 컨트롤러 프로그래밍
핀을 출력으로 설정:
먼저 출력 섹션부터 시작하겠습니다. 우리는 두 개의 LED를 사용하고 있습니다. 하나는 Test라는 이름의 온보드 LED이며 포트 P1.4와 연결되고 외부 LED는 핀 P1.5에 연결됩니다.
따라서이 두 핀은 아래 코드 조각을 사용하여 두 LED를 연결하는 출력 핀으로 구성됩니다.
#define Test_LED P14 #define LED1 P15
이 두 핀은 설정 기능에서 준 양방향 핀으로 설정됩니다.
무효 설정 (무효) {P14_Quasi_Mode; P15_Quasi_Mode; }
타이머 기능 설정:
설정 기능에서 원하는 출력을 얻으려면 타이머 2를 구성해야합니다. 이를 위해 1/128 클럭 분할 계수로 T2MOD 레지스터를 설정하고 자동 재로드 지연 모드에서 사용합니다. 다음은 T2MOD 레지스터의 개요입니다.
T2MOD 레지스터의 4,5 및 6 비트는 타이머 2 클록 분할기를 설정하고 7 비트는 자동 다시로드 모드를 설정합니다. 이것은 아래 줄을 사용하여 수행됩니다 –
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
이 두 줄은 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 2 ISR에 필요한 타이밍 값을 설정합니다.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Function_define.h 파일에 추가로 정의되어 있습니다.
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128 / 16000000 = 100ms
따라서 16000000은 100ms 시간 지연을 설정하는 16Mhz의 수정 주파수입니다.
두 줄 아래에서 Timer 2 Low 및 High 바이트가 비워집니다.
TL2 = 0; TH2 = 0;
마지막으로 아래 코드는 타이머 2 인터럽트를 활성화하고 타이머 2를 시작합니다.
set_ET2; // Timer2 인터럽트 활성화 set_EA; set_TR2; // Timer2 실행
전체 설정 기능은 아래 코드에서 볼 수 있습니다.
무효 설정 (무효) { 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 실행 }
타이머 2 ISR 기능:
Timer 2 ISR 기능은 아래 코드에서 볼 수 있습니다.
무효 Timer2_ISR (무효) 인터럽트 5 { clr_TF2; // Timer2 인터럽트 플래그 지우기 LED1 = ~ LED1; // P1.5에 연결된 LED1 토글; }
타이머 기능에 대한 코드 플래싱 및 출력 확인
컴파일 할 때 코드 (아래에 제공됨)는 0 개의 경고와 0 개의 오류를 반환했으며 Keil의 기본 플래시 방법을 사용하여 플래시했습니다. 깜박 인 후 LED는 프로그래밍 된대로 정의 된 타이머 지연 시간에 깜박입니다.
이 코드에서 보드가 어떻게 작동하는지에 대한 완전한 데모는 아래의 비디오를 확인하십시오. 튜토리얼을 즐겼기를 바라며 질문이 있으면 아래의 댓글 섹션에 남겨주세요. 포럼을 사용하여 다른 기술 질문을 게시 할 수도 있습니다.