지연시간을 개선하기 위한 마이크로 컨트롤러의 효율적인 프로그래밍 방법
Efficient Programming Method in Microcontrollers for Improving Latency
이 경 남
*
, 김 영 민* ★
Kyungnam Lee
*
, Youngmin Kim* ★
Abstract
Most of the electronics we use today have built-in microcontrollers, which are called embedded systems. In such a small environment, responsiveness is very important for the microcontroller. In this paper, the basic input/output control, timer/counter interrupt operation principle, and understanding of the microcontroller are described. Program logic is proposed to improve throughput and latency by controlling characteristics of service routine and program execution order.
The hardware simulations in this paper were verified using ATmega128 and PIC16F877A from Atmel and Microchip.
요 약
오늘날 우리가 사용하고 있는 대부분의 전자제품에는 마이크로 컨트롤러가 내장되어 있으며, 이를 내장한 미니컴퓨터를 임베디드 시스템이라고 한다. 이러한 소규모 환경에서는 마이크로 컨트롤러에 응답성이 매우 중요한데 본 논문에서는 마이 크로 컨트롤러에 기본적인 입출력 제어, 타이머/카운터 인터럽트 동작원리 및 이해에 대한 내용과 더불어 마이크로 컨트롤러 내의 플래시메모리에 각 프로그램 실행 루틴인 메인 루틴 및 인터럽트 서비스루틴에 대한 특징 및 프로그램 실행 순서를 컨 트롤하여 처리율과 레이턴시를 개선하는 프로그램 로직을 제안하고 있다. 본 논문에서의 하드웨어 시뮬레이션은 아트멜사와 마이크로칩사에서 출시한 ATmega128과 PIC16F877A 마이크로 컨트롤러를 이용하여 검증이 실시되었다.
Key words : MCU, Throughput, Latency, FPGA, PID, dynamic systems, response time;
* Dept. of Com. & Info. Eng. Kwangwoon University
** School of Electronic and Electrical Engineering, Hongik University
★ Corresponding author
E-mail:[email protected], Tel:+82-02-320-1665
※ Acknowledgment
This research was supported by the Basic Science Research Program, through the National Research Foundation of Korea (NRF), funded by the Ministry of Education (NRF-2017R1D1A1B03028065).
Manuscript received Sep. 6, 2019; revised Sep. 26, 2019;
accepted Sep. 26, 2019.
This is an Open-Access article distributed under the terms of the Creative Commons Attribution Non-Commercial License(http://creativecommons.org/licenses/by-nc/3.0) which permits unrestricted non-commercial use, distribution, and reproduction in any medium, provided the original work is properly cited.
Ⅰ. 서론
오늘날 마이크로 컨트롤러(MCU)는 우리의 일상 에서 뗄 수 없는 전자부품 중 하나가 되었다[1]. 가 정용 가전기기에서 시작해 장난감, 자동차, 홈네트 워크는 물론 MP3와 PMP와 같은 최신의 모바일 기기까지 다양한 애플리케이션에서 핵심적인 두뇌 역할을 담당하고 있다[2]. 과거의 컨트롤러들은 오 로지 로직 컴포넌트들로 만들어졌으며, 지금에 비해 대개는 크고 무거운 상자들이었다. 그 후 마이크로 프로세서들이 사용되어 전체 컨트롤러를 작은 회 로 보드에 맞출 수 있게 됐고, 이것은 아직까지도 보편적으로 사용되고 있다.
318
Fig. 1. ATmega128 Pin Assign [5].
그림 1. ATmega128 핀 배열 [5]
모든 반도체들의 발전 방향이 그렇듯, 계속되는 경박단소화에 따라 한 컨트롤러에 필요한 모든 구 성 요소들도 한 개의 칩 안에 직접 설계되면서 마 이크로 컨트롤러로 발전했다. 최초의 마이크로 컨 트롤러는 1975년 TI에서 개발한 MCS100이다. 마 이크로 컨트롤러는 집적도를 높인 칩으로, 한 개의 칩 안에는 컨트롤에 필요한 대부분의 구성 요소들 이 들어 있다. 이후 자이로그의 Z88C00(Super-8), 인텔의 8051, 모토로라의 68HC11 등과 같은 마이 크로 프로세서 코어가 등장하고 널리 사용되면서 부터 다양한 마이크로 컨트롤러들을 주위에서 쉽 게 발견할 수 있게 됐다. 마이크로 컨트롤러는 부 품 수와 설계비용을 획기적으로 줄인 원칩 솔루션 (one-chip solution)이다.
마이크로 컨트롤러의 등장은 컨트롤을 위한 특수 한 기능들을 포함함으로써, 여러 개의 칩을 사용하 던 이전 세대의 컨트롤러에 비해 제조사의 제품 개 발 및 생산 비용을 줄일 수 있게 됐다. 전형적인 마 이크로 컨트롤러의 경우 단편적인 조작 명령들, 쉽 고 직접적인 I/O(input/output) 액세스, 빠르고 효 율적인 인터럽트 처리기능을 갖추고 있다. 최근에 는 놀라운 속도로 계속되고 있는 대용량 통합 진행 의 연속으로, 많은 표준 구조 프로세서들이 마이크 로 컨트롤러로 변화되고 있다[3].
Ⅱ. 본론
1. AVR ATmega128
ATMEL사가 개발한 AVR은 현재 8비트 AVR과 32비트 AVR을 제공하고 있는 마이크로 컨트롤러 이다. AVR의 다양한 명령과 쉬운 구조를 가지고 있어 마이크로 컨트롤러를 쉽게 접근할 수 있으며, 가격이 저렴하고 응용하기 쉬워 산업 시장에서도 많이 사용되고 있다. AVR은 1개의 클록 사이클에 1개의 명령을 처리할 수 있으며, 1.8V에서 5.5V까지 어느 전압이든 동작 시킬 수 있다. 또한 picoPower 기술이 적용된 제품의 경우 저 전력 설계가 가능하 고, 32개의 범용 레지스터와 RISC 구조의 디자인은 C언어에 적합하여 제품을 빠르게 개발하는 데 도 움이 된다. 재부에 플래시 메모리를 제공함으로써 새로 개발되는 제품의 크기를 줄일 수 있고, 제품의 크기가 줄면서 원가 절감에도 도움이 된다. 또한 6핀 또는 10핀 인터페이스로 제공되는 ISP(In-System
Programming) 기능이나 JTAG 기능은 쉽게 제품 을 개발하는 데 도움이 된다. ATmega128은 8비트 AVR 마이크로 컨트롤러의 megaAVR 패밀리 계 열 중 하나의 프로세서이다. 이 프로세서는 64핀으 로 구성되었으며, TQFP형 패키지의 저 전력 8비트 CMOS 마이크로 컨트롤러이다. 내부 구조는 RISC 아키텍처(RISC like Architecture) 구조로 이루어 져 있으며 대부분 1 클록에서 수행되는 어셈블리어 명령어를 가지고 있어서 입력 클록 1 MHz에서 1 MIPS(Million Instruction Per Second)의 처리능력을 가진다. 한편, ATmega128은 최적화된 전력 소모 구조를 가지고 있어서 다른 마이크로 컨트롤러에 비해 상대적으로 작은 전력을 소모하며, 처리 능력 도 뛰어나다. 한편, ATmega128은 다음과 같은 특 징들을 가지고 있다[4].
가. 개선된 RISC 구조
1) 대부분 단일 클록에서 실행되는 133개의 명령어 2) 8비트로 구성된 32개의 범용 작업 레지스터 3) 16 MHz에서 16 MIPS의 처리율
4) 2 사이클에서 실행되는 내장 곱셈장치
나. 프로그램 메모리와 데이터 메모리
1) 대부분 단일 클록에서 실행되는 133개의 명령어 2) 8비트로 구성된 32개의 범용 작업 레지스터 3) 16 MHz에서 16 MIPS의 처리율
4) 2 사이클에서 실행되는 내장 곱셈장치
2. AVR ATmega128에서의 프로그래밍 가. ATmega128 입출력 제어
마이크로 컨트롤러를 프로그래밍 할 때 우리가
제일 처음 익혀야 할 개념은 메모리 제어에 의한 포트 신호 체계이다. 본 논문에 사용한 마이크로 컨트롤러인 ATmega128은 어드레스 한 개에 데이 터 메모리(Data Memory) 영역을 항상 가지고 있 다. 8비트 마이크로 컨트롤러는 읽거나 쓸 수 있는 데이터 버스가 8비트로 구성 되어있다.
Fig. 2. Diagram of ATmega128 input/output port.
그림 2. ATmega128 입출력포트 다이어그램
AVR 프로세서의 입출력 포트 내부를 들여다보면 그림 2와 같다. 점선으로 표시된 삼각형을 트라이- 스테이트 버퍼라고 한다. 만약 ① 신호 선에 전기적 으로 하이(High)에 해당하는 전압 신호가 흐르게 되면 ②과 ③ 신호 선 사이가 서로 연결이 된다. 즉, 점선 원 안에 있는 트라이-스테이트 버퍼의 ②과
③ 신호 선 사이가 서로 연결되어, ② 신호 값이 ③ 신호 선을 타고 AVR 프로세서 외부로 신호가 출력 될 수 있게 된다. 반대로 ① 신호 선에 (전기적으로) 로우(LOW)에 해당하는 전압 신호가 흐르게 되면
②과 ③ 신호 선 사이의 연결이 끊어지게 된다.
따라서 ② 신호 값이 ③ 신호 선을 타고 AVR 프 로세서 외부로 신호가 출력될 수 없다. 그러므로, AVR 프로세서 외부에서 입력된 신호가 ③ 신호 선을 타고 AVR 프로세서 내부로 입력될 수 있다.
즉, ① 신호 선에 (전기적으로) 하이 전압 신호를 흘려주거나 혹은 로우 전압 신호를 흘려줌으로써 이와 연결된 외부 입출력 핀의 방향성을 지정해 줄 수 있다. 아래 프로그래밍 예제는 입출력레지스터 를 이용하여 해당 포트를 설정하고 있다 [6].
void main() {
DDRA = 0xff;
//~PORTA 출력핀 설정~
DDRB = 0x00;
//~PORTB 입력핀 설정~
PORTA = 0x00;
while(1)//~무한루프~
{
PORTA = 0xff;
//PORTA 0~7번핀 출력을 하이로 설정 }
}
나. ATmega128 타이머/카운터 인터럽트 제어 타이머(Timer)란 우리가 원하는 시간을 프로그 램적으로 만들어 주는 데 사용한다. 일반적으로 시 계를 생각하면 된다. 또한 카운터(Counter)는 외부 이벤트나 펄스의 숫자 등을 카운팅 하는데 사용된 다. 이러한 기능을 갖는 타이머/카운터를 이용하여 서 시간 및 펄스폭의 계측, 주기적인 인터럽트 등 을 발생하는 데도 사용하게 된다.
타이머/카운터0은 0에서 255까지 셀 수 있는 8비 트 타이머/카운터이다. 타이머로 사용될 때는 내부 클럭을 분주하여 이용, 외부에 32.768 KHz 클럭을 TOSC1, TOSC2 단자에 연결하여 RTC(Real Time Clock)을 구현할 수 있다. 그리고 8비트 PWM 신 호를 만들어서 포트로 출력이 가능하다.
타이머/카운터0을 타이머로 사용할 때, 타이머는 내부클럭에 의해 동작한다. 그림 4처럼 TCNT0은 임의의 클럭 사이클 주기마다 1씩 증가하게 된다.
여기서, 임의의 클럭 사이클은 오실레이터 신호를 1, 8, 64, 256, 1024 배 곱한 수가 된다. 예를 들면, 오실레이터 신호를 1024 배로 선택하면 오실레이 터 신호의 1024 사이클마다 타이머의 값이 하나씩 증가된다. 이렇게 클럭 사이클을 사전에 결정할 수 있는 기능을 프리스케일러(Prescaler)라고 하는데, 이 값은 TCCR0 의 설정으로 이뤄진다. ATmega128 에는 8비트 타이머/카운터가 2개 16비트 타이머/카 운터가 2개 있다. 타이머/카운터 인터럽트 구동제 어에 필요한 레지스터는 아래와 같다.
Fig. 3. Status Register.
그림 3. 상태레지스터
Fig. 4. Timer/Counter Register 0.
그림 4. 타이머/카운터 레지스터 0
Fig. 5. Timer/Counter Control Register 0.
그림 5. 타이머/카운터 컨트롤 레지스터 0
그림 3처럼 타이머/카운터 0 컨트롤 레지스터는 사용하여 주기를 설정하고 해당 인터럽트를 처리 할 수 있다. 그림 6처럼 내부 I/O 클럭을 사용하고 분주비를 8로 설정하였을 때 카운터 값이 최대값 (MAX)에서 최소값(BOTTOM)으로 바뀌는 상태 에 대한 타이밍도이다.
Fig. 6. Timing Diagram of Timer/Counter Operation.
그림 6. 타이머/카운터 타이밍 다이어그램
그림 6에 clkI/O는 타이머 카운터의 오실레이터 클럭을 의미하며 아래의 clkTn은 프리스케일러 값 이 8 이므로 8 나눈 만큼 주기를 갖는 클럭이 발생 된다. TCNTn가 최대값이 되면 오버플로우가 발생 하고 최소값으로 바뀐 다음 증가하는 모습을 보여 준다. 그 아래에 TOVn은 타이머카운터0 오버플로 플래그이다. TCNTn이 오버플로우 발생했을 때 하 이(High)로 설정되고 인터럽트가 실행되면 하드웨 어에 의해 클리어 된다. 그림 6에서 TOVn이 로우 (Low)에서 하이로 변경 시 타이머 오버플로우 인 터럽트가 발생하는 시점이다.
다. ATmega128 폴링(Polling)과 인터럽트(Interrupt) 처리방식
ATmega128 펌웨어 프로그래밍 시 폴링과 인터 럽트는 둘 다 어떤 작업을 수행 시 외부에서 들어오 는 이벤트에 의해 어떠한 작업을 수행하는 것이다.
1) 폴링방식
폴링방식은 정해진 시간 또는 순번에 상태를 확 인해서 상태 변화가 있는지 없는지를 체크하는 방 식이다[7].
while(1) {
if(button == 0) {
...;
} else {
...;
} task 1;
task 2;
task 3;
task 4;
}
위의 코드를 보았을 때 버튼이 0 인지 아닌지를 확인한 뒤 아니면 else를 실행할 것이다. if, else 문 이 끝나면 순차적으로 다른 작업을 실행한다. 그리 고 다시 if문을 확인할 것이다.
결론적으로 마이크로 컨트롤러는 정해진 순서 혹 은 시간에 버튼의 상태변화를 확인해서 그것에 맞 는 일을 할 수 있도록 한다.
2) 인터럽트 방식
인터럽트 방식은 메인(main)문을 실행하는 도중 에 외부에서 정해져 있는 인터럽트 핀에 신호가 들 어오면 마이크로 컨트롤러는 즉각적으로 하고 있는 모든 TASK를 멈추고 인터럽트 서비스 루틴을 실행 한다. 즉, 인터럽트 핀에 신호가 들어오면 스택공간 에 실행 중이던 TASK의 주소번지를 저장하고 인터 럽트 서비스 루틴으로 프로그램 순서가 바뀐다[8].
인터럽트 루틴이 끝나면 스택에 저장되었던 주소 번지를 읽어서 다시 작업하던 곳으로 복귀해서 수 행한다. 폴링방식과 인터럽트 방식은 논리적으로 외부 신호에 의해서 다른 작업을 하는 것이지만 회 로 상으로 볼 때는 전혀 다른 개념이다[9].
폴링방식은 버튼의 온(On) 혹은 오프(Off)를 판 단하기 위해 마이크로 컨트롤러가 계속 확인해야 하기 때문에 소스 중간 중간에 상태를 체크할 수 있게 코딩을 해야 한다. 인터럽트 방식은 메인 루 틴에서 하던 일을 잠시 멈추고 실행되는 것이기 때 문에 메인루틴 프로그램만 작성하면 된다.
3) 폴링 VS 인터럽트 처리방식
마이크로 컨트롤에서 데이터를 처리하는 방법에
는 앞서 설명한 것과 같이 폴링과 인터럽트 방식이 있다. 폴링방식은 입력 데이터가 들어오는 대로 순 차적으로 처리하는 방식이며, 마이크로 컨트롤러는 그것을 정해진 순서대로 처리를 해준다. 그러나 비 상사태에 신속하게 처리해야 할 일이 생기면 지연 없이 처리를 해주어야 하는데 순차적으로 처리하다 보면 해당 타이밍을 놓치는 경우가 종종 발생한다.
반면에 인터럽트 처리방식은 마이크로 컨트롤러 가 해당 하드웨어 및 디바이스에 우선순위를 정해 놓고 우선순위가 높은 TASK가 발생하면 현재 실 행하고 있는 작업을 중단하고 우선순위가 높은 TASK가 실행되므로 폴링방식의 단점을 보완할 수 있다.
3. 마이크로컨트롤러 프로그래밍 제안
본 논문에서 처리율(Throughput)을 높이고 지연 속도(Latency)를 낮추기 위해서는 그림 7처럼 입력 디바이스 체크는 타이머/카운터 인터럽트 서비스루 틴을 활용하여 실시간으로 처리하며 출력 디바이스 활성화는 무한루프에서 처리하도록 표현했다. 얼핏 보면 이것은 인터럽트 처리방식과 유사하다. 그러 나 자세히 들여다보면 인터럽트처리방식을 기본으 로 하고 펌웨어 프로그래밍을 통하여 퍼포먼스를 개선하기 위해서 재정립하는데 초점을 두었다.
Fig. 7. Diagram of Interrupt sequence.
그림 7. 인터럽트 시퀸스 다이어그램
가. 무한루프(Endless Loop)의 코딩
1) 메인함수에 무한루프는 실행 코드들을 순차적으 로 반복하여 실행하도록 구성 되어 있다.
2) 출력포트(Output Port)에 신호를 제어하는 영역이 무한루프이다. 출력은 입력에 의한 상태변화에 의해서 이루어진다. 즉, 하드웨어 혹은 소프트웨어 인터럽트에 의해 감지 된 입력포트(Input Port) 및 메모리값 변화를 체크하여 마이크로 컨트롤 러의 출력포트에 하이 혹은 로우에 신호가 전달 된다.
3) 시스템의 처리율을 높이기 위해서는 무한루프 내에 코드들을 읽고 처리하는 시간이 낮으면 낮 을수록 시스템 전체 스캔 타이밍 속도가 높아지 고, 버그 발생을 낮출 수 있다.
예컨대 무한루프 내에 조건반복문, 딜레이 함수 가 설계되어 있으면 지연이 발생되어 시스템 성 능 저하로 이어질 것이다.
4) 데드-타임(Dead Time) 발생을 피한다.
데드 타임은 딜레이 함수 및 조건반복문과 같이 코어가 해당함수에 진입하여 머물고 있어서 해당 시간에 입력과 관련된 코드를 실행 불가하거나 해 당 신호에 의한 응답을 할 수 없는 시간을 의미한 다. 특히 무한루프의 코드가 길어질수록 데드 타임 관리가 중요하다.
나. 인터럽트 서비스 루틴(Interrupt Service Routine) 의 코딩
1) 마이크로 컨트롤러 펌웨어 코딩 시, 긴급한 요청 에 의한 처리를 하기 위해서 인터럽트 서비스 루틴을 사용한다.
2) 인터럽트 서비스 루틴에서는 입력체크과 관련된 코드를 서술한다. 인터럽트 발생 시 입력관련 레 지스터인 메모리 상태를 확인하여, 상태가 변화 가 있을 시에는 플래그 변수값을 리턴하여, 인터 럽트 종료 후 무한루프에서 이를 감지하여 해당 출력이 나가도록 한다.
타이머/카운터 인터럽트 서비스 루틴은 주기적 으로 인터럽트를 발생시킬 수 있는 소프트웨어 인터럽트이므로 입력포트 핀에 대한 트리거 신
호 엣지(Edge) 검출 및 사용자 변수 및 기타 메 모리를 효과적으로 체크할 수 있어 산업현장에 서 유용하게 사용 된다..
3) 인터럽트 동작시간을 낮추기 위하여 인터럽트 서비스 루틴 내(Interrupt Service Routine)에서 는 딜레이함수, 조건반복문, 외부함수 호출 등 의 코딩은 삼가도록 한다.
4) 인터럽트 서비스 발생을 간결화 해야 한다.
ATmega128 내의 리셋신호를 포함한 인터럽트 발생 소스는 36개가 있다. 이때의 리셋을 제외한 35개의 인터럽트 소스는 레지스터 설정에 의해서 활성화 혹은 비활성화 될 수 있다.
2개 이상의 인터럽트 요청이 발생 되었을 때 우 선순위(Program Address)가 낮은 인터럽트가 실 행되고 인터럽트가 우선순위(Program Address)가 높은 인터럽트는 무산될 수 있으므로 인터럽트 충 돌을 유의하여 인터럽트 소스를 설정해야 한다.
4. 실험
본 절에서는 앞서 제시한 코딩 방법을 적용하여 PID 컨트롤 테스트 로직을 구현하였다. 또한 비교 를 위해서 단순 폴링 제어만 적용이 된 PID 컨트롤 테스트 로직을 구현하였다.
Fig. 8. Image of control DC motor using Interrupt Vector handling coding with ATmega128 Evaluation Board and DC motor driver.
그림 8. 인터럽트 벡터 핸들링을 사용하여 ATmega128 평가 보드와 L298N 모터 드라이버로 DC모터를 제어하는 사진
본 실험에 사용된 평가 보드(Evaluation Board) 는 결과의 신뢰성을 높이기 위해서 각기 다른 제조 사 2개의 마이크로 컨트롤러 칩을 사용하여 시뮬레 이션이 이루어졌다.
그림 8의 실험 구성은 아트멜사 마이크로 컨트롤러 인 ATmega128가 내장된 평가 보드를 사용했으며, 그림 9의 실험 구성은 마이크로칩사의 PIC16F877A 가 내장된 평가보드를 이용하였다. 이 실험을 통해 서 두개의 다른 로직인 펌웨어를 적용했을 때의 각 각의 처리율(Throughput)과 레이턴시(Latency)에 대한 차이를 비교 분석했다.
Fig. 9. Image of control DC motor, Step motor Sever motor using Interrupt Vector Handling Coding with PIC16F877A Evaluation Board and DC motor driver.
그림 9. 인터럽트 벡터 핸들링을 사용하여 PIC16F877A 평가 보드에 DC모터, 서보모터, 스텝모터를 제어하는 하는 사진
Fig. 10. Diagram of Endless Loop.
그림 10. 무한루프 다이어그램
위 그림 10은 마이크로 컨트롤러 내부에서 무한 루프만 이용하였으며, 그림 11은 무한루프와 인터 럽트 서비스 루틴을 사용하였을 때의 각각의 입력 포트 그리고 출력포트의 신호를 블록다이어그램으 로 나타내고 있다.
Fig. 11. Diagram of Endless Loop with Interrupt Service Routine.
그림 11. 인터럽트 서비스 루틴이 있는 무한루프의 다이어 그램
5. 결과 및 분석
위 그림 12와 그림 13에 보이는 오실로스코프 출 력 이미지는 본 논문에서 제안한 방식을 사용했을 때와 사용하지 않을 시의 응답시간 차이를 보여주 고 있다.
Fig. 12. Image of Input/output signal when using Endless Loop.
그림 12. 무한루프를 사용했을 때 입력/출력 신호 사진
그림 10과 그림 11에는 PID 연산을 위하여 마이 크로 컨트롤러의 신호를 입력하고 출력하는 신호 를 위 2개의 오실로스코프 그림을 통하여 보여주고 있다. 그림 12와 그림 13에 그림을 설명하자면, 함 수발생기(Function Generator)를 이용하여 일정한 주기로 마이크로 컨트롤러에 입력하는 신호가 노 란색 라인 Source 1이고, 입력신호를 받아들인 후
내부 로직 연산을 마친 후 내보내는 출력신호가 파 란색 라인 Source 2이다. 이때의 각기 다른 2개의 응용 로직은 PID 연산을 사용하였으며, 마이크로 컨트롤러에 입력포트로 입력신호를 분석 및 판단 후 연산이 이루어지며, 이후 출력신호가 출력포트 로 나오기까지의 시간을 레이턴시로 규정 한다.
Fig. 13. Image of Input/output signal when using Endless Loop with Interrupt Service Routine.
그림 13. 무한루프와 인터럽트 서비스 루틴을 사용했을 때 입력/출력 신호 사진
Table 1. Table of Result using ATmega128 Evaluation Board.
표 1. ATmega128 평가 보드 결과 표
Parameters Endless Loop logic Vector Handle Logic
Latency [μs] 480 100
Power DC 5V, 10mA
Frequency 16 Mhz
Table 2. Table of result using PIC16F877A Evaluation Board.
표 2. PIC16F877A Evaluation 보드 결과 표
Parameters Endless Loop logic Vector Handle Logic
Latency [μs] 580 110
Power DC 5 V, 10 mA
Frequency 16 Mhz
우리가 제안한 그림 11에서의 로직을 사용한 레 이턴시는 그림 13처럼 100 μs가 발생 된 것을 확인 할 수 있다. 이와는 반대로 그림 10과 같은 오직 무 한루프 내에서 입력과 출력 코드가 함께 작성 된 프로그램의 실험에서는 그림 12처럼 레이턴시가 480 μs가 나오는 것을 확인할 수 있다.
실험에 사용된 2개의 마이크로 컨트롤러는 제조
사마다 다른 펌웨어와 개발환경에서 테스트가 진 행되었다. 표1과 표 2에 나온 결과처럼 2개의 파라 미터 로직을 적용하였을 때 레이턴시 차이는 약 5 배가 발생 되는 것을 확인할 수 있었다.
Ⅲ. 결론
본 눈몬은 마이크로 컨트롤러에 처리율을 개선하기 위해서 새로운 접근을 제안한다. 가장 먼저 우리가 시뮬레이션에서 사용할 ATmeg128 입출력 포트 제 어방법과 타이머/카운터 인터럽트, 그리고 요청에 대한 응답을 처리 하는데 있어서 로직으로 주로 사 용되는 폴링 구동과 인터럽트 구동에 대해서 설명 했다. 그 다음 제안하는 구동 로직을 이용해서 PID 제어 루프를 이용해서 처리율의 향상이 있는지에 대해서 확인 했다. 처리율의 향상 여부를 판단하기 위해서 일반 프로그램과 인터럽트 벡터 핸들링 프 로그램을 평가 보드에 다운로드하여 실행했다. 실 험은 객관성을 확보하기 위해서 2개의 마이크로 컨 트롤러인 ATmeg128과 PIC16F877A 평가 보드를 이용했고, 실험 결과는 PIC16F877A 평가 보드에서 최대 5.2배에 해당하는 레이턴시를 확인했다.
본 논문에서 제안하는 각각의 입력과 출력코드를 분리 시켜 놓고 주기적으로 마이크로컨트롤러 내 부에서 인터럽트를 발생시켜 하드웨어 엣지 및 메 모리 변화를 감지하여 출력제어가 이루어진 무한 루프와 인터럽트 서비스 루틴이 적용 된 펌웨어 프 로그램은 시스템이 복잡하고 코드양이 길어질수록 필요한 효율적인 프로그래밍 기법이다.
또한 제안된 기법은 적용요건에 따라 다른 접근 방식을 사용해 여러 가지 다른 로직에 적용하여 입 력에 대한 출력인 응답성을 개선 할 수 있다.
References
[1] S. Sachdeva and R. Singh, “Low cost-low speed oscilloscope using graphical lcd and atmega 128 microcontroller,” International Journal of Research
in Engineering and Technology (IJRET), vol.3,
no.6, pp.123-126, 2014.DOI: 10.15623/ijret.2014.0306022
[2] N Senthil Kumar, M Saravanan, S Jeevananthan, and Satish Shah, “Microprocessors and Interfacing,”
Oxford: university press, pp.391-392, 2012.
[3] M. Sani, M. Rahman, M. Noor, K. Kadirgama, and M. Izham, “Iop conference series: Materials
science and engineering,” 2011.
[4] G. Gridling and B. Weiss, “Introduction to microcontrollers,” Vienna University of Technology
Institute of Computer Engineering Embedded Computing Systems Group, 2007.
[5] Microchip, ATmega128 Datasheet, https://ww w.microchip.com/wwwproducts/en/ATmega128.
[6] R. Hari Sudhan, M. Ganesh Kumar, A. Prakash, S. Roopa Devi, and P. Sathiya, “ARDUINO ATMEGA -328 MICROCONTROLLER, INTERNATIONAL
JOURNAL OF INNOVATIVE RESEARCH (IJIREEICE), Vol.3, no.4, pp. 27-29, 2015.
[7] X. Chen, G. Yu and H. Cheng, “Approach to External Events of Real-Time Operating System Based on Polling,” 2010 Second International
Conference on Computer Modeling and Simulation,
Sanya, Hainan, 2010.DOI: 10.1109/ICCMS.2010.312
[8] D. Brylow and J. Palsberg, “Deadline analysis of interrupt-driven software,” in IEEE Transactions
on Software Engineering, vol.30, no.10, pp.634-
655, 2004. DOI: 10.1109/TSE.2004.64[9] G. J. Lipovski, “Introduction to microcontrollers:
architecture, programming, and interfacing for the freescale 68hc12,” 2004.
BIOGRAPHY