마이크로프로세서 16

[마이크로프로세서] USART 통신

USART 통신 개요 개요 데이터를 모니터에 출력하려면, 메인보드와 HDMI를 연결하여 데이터를 송/수신해야 한다. 이처럼 장치 간 데이터를 주고받을 때, 하나의 신호선을 직렬로 연결하여 사용하는 통신 방식을 USART(Universal Synchronous and Asynchronous Receiver and Transmitter)라고 한다. 이번 시간에는 비동기 방식을 다루도록 해보겠다. 직렬 통신(Serial Communication): 순차적으로 데이터를 한 번에 하나의 비트만 송수신하는 통신 방법 병렬 통신(Parallel Communication): 여러 개의 채널을 통해 여러 비트를 송수신하는 통신 방법 동기식(Synchronous) 통신: 기준 클럭에 맞춰 데이터를 송수신하는 방법 비동기식..

[마이크로프로세서] ADC(Analog-Digital Converter)

ADC 개요 많은 센서들은 아날로그 신호를 출력한다. 예를 들어, 온도, 습도, 광도, 압력 등을 측정하는 센서들이 그러하다. 이러한 아날로그 신호를 디지털 신호로 변환해야 마이크로컨트롤러에서 이를 처리하여 사용할 수 있다. 일반적으로 아날로그 신호를 디지털 신호로 변환하는 소자를 ADC(Analog-Digital Converter)라고 부르며, 표본화(Sampling), 양자화(Quantization), 부호화(coding)의 과정을 거친다. 표본화: 연속 신호를 시간 축 방향에서 일정 간격으로 표본을 추출하여 이산 신호로 바꾸는 과정 양자화: 샘플링된 진폭의 값을 한정된 개수의 대표 값으로 바꾸는 과정 부호화: 신호 처리가 용이한 디지털 코드인 0과 1로 변환하는 과정 아날로그 신호가 입력되는 방법에..

[마이크로프로세서] 타이머/카운터 및 예제(2)

실습(2) CTC 모드, 고속 PWM 모드를 활용한 FND와 LED 제어 지난 시간엔 오버플로를 이용하여 FND에 디스플레이를 출력하는 실습을 진행하였다. 이번 시간엔 CTC 모드와 고속 PWM 모드를 활용한 예제를 다뤄보도록 하자. CTC 모드를 활용한 FND 동적 구동 지난 시간에 오버플로 인터럽트를 이용하여 FND에 디스플레이를 출력했던 부분을 CTC 모드로 작동해 보자. 이때 1ms를 계산하기 위해 다음과 같은 수식을 이용하였다. 여기서 분자는 1ms를 계산하기 위한 시스템의 클럭 주기 (1ms/256), 분모는 ATmega128의 시스템 클럭 주기를 의미한다. 따라서 분주비를 64로 설정하였고, 이때 클럭 주기가 4us이므로 오버플로우 주기 1ms와 나눠주면 250개를 계수해야 한다는 식이 나온..

[마이크로프로세서] 타이머/카운터 및 예제 (1)

본문 레지스터 이제 레지스터들을 이용하여 타이머/카운터를 제어하는 시간을 가져보도록 하자. 실습을 하기 전, 관련 레지스터들에 대해 알아보자. 참고로 8비트 타이머/카운터를 제어할 예정이므로 타이머/카운터0를 기준으로 설명하도록 하겠다. TCCR0 레지스터 TCCRn 레지스터는 동작 모드, 프리스케일러의 분주비를 설정하는 레지스터다. 일반적으로 동작 모드는 WGM01과 WGM00의 값으로 결정된다. 즉, 2개의 비트를 사용하므로 총 4가지 모드가 있다는 것을 알 수 있다. 여기서 설정한 모드에 따라 비교 일치 출력 모드의 값의 의미, 즉 OCn 핀의 동작이 바뀐다. 예를 들어 타이머/카운터0에서 일반 모드 혹은 CTC 모드에서 (COM01, COM00) = (1,1)이면 비교 일치 시 OC0 출력을 1로..

[마이크로프로세서] 타이머/카운터 (3)

PWM(Pulse Width Modulation) 모드 (1) - Fast PWM PWM(펄스폭 변조) 모드는 펄스의 폭을 변경하여, 출력 전압을 조절하는 변경 방식이다. 즉, 신호의 듀티 사이클(Duty Cycle)(한 주기 내에 신호가 높은 상태로 있는 시간의 비율)을 변경하여 다양항 출력을 생성하는 방식이다. 쉽게 생각해서 디지털 신호를 아날로그 신호와 유사한 효과를 내게 한다는 것이다. 예를 들어, 5V와 0V로 구분된 디지털 출력을 ON/OFF 시간을 조절하면 0~5V까지의 아날로그 출력을 내는 것과 유사한 동작을 한다. 이를 CTC 모드로 제어하려면, 매번 OCRn 값을 바꿔야 한다는 번거로움이 있다는 점도 확인해 두자. Fast PWM 모드는 비대칭형 톱니파를 이용하여 타이머/카운터가 BOT..

[마이크로프로세서] 타이머/카운터 (2)

본문 기본 개념 이번 시간에는 타이머/카운터의 모드에 대해 알아보는 시간을 가져보자. 위의 그림은 타이머/카운터의 블록 다이어그램을 간소하게 표현한 것이다. 해당 회로도를 보고, 간략하게 ATmega 128이 어떻게 타이머/카운터를 제어하는지 이해하면 좋을 것 같다. 외부 클럭을 입력으로 받는 타이머/카운터 0과 내부 클럭을 입력으로 받는 타이머/카운터 2는 몇 가지 차이점이 있다. 타이머/카운터 0에는 T/C Oscillator라는 자체 발진 회로가 있어, 외부 클럭이 불안정하거나 사용할 수 없을 경우에도 독립적으로 타이밍을 생성할 수 있다. 이는 타이머/카운터 0이 외부 클럭 소스에 완전히 의존하지 않도록 해준다. 또한, 외부 클럭에 프리스케일러가 달려 있어 타이밍을 조절할 수 있는 유연성을 제공한다..

[마이크로프로세서] 타이머/카운터 (1)

타이머/카운터 개요 타이머/카운터(Timer/Counter)는 시간 관련 작업을 처리하고, 일정 시간 간격을 측정하거나, 특정 이벤트의 발생 횟수를 세는 데 사용된다. 이때 클럭의 주파수를 알면 클럭 주기를 알 수 있으므로, 타이머로 활용할 수 있다. 예를 들어, 3bit 타이머/카운터의 경우, 카운터의 상태가 111에서 000으로 변화할 때 오버플로우 인터럽트 플래그가 발생한다. 이때, MCU 내부 클럭을 사용하는 것을 타이머 모드, 외부 클럭 또는 외부 이벤트를 사용하는 것을 카운터 모드라고 한다. 이러한 타이머/카운터는 특정 작업 간의 시간 지연을 생성하고, 정확한 타이밍을 제공한다. 이전에 FND 혹은 LED를 제어할 때 주었던 delay는, 그 함수가 실행되는 시점에 모든 작업이 멈춘다. 이로 ..

[마이크로프로세서] 인터럽트 개요

인터럽트 개요 개요 이전까지는 이벤트(프로그램이나 시스템 내에서 발생하는 특정한 상황이나 사용자의 액션)를 체크하기 위해 프로그램이 돌아가는 동안 이를 주기적으로 체크하는 방식을 사용했다. 예를 들어, 스위치를 눌러 왕복하고 있던 LED의 방향을 바꾸거나, FND의 출력 상태를 바꾸는 등의 작업이 해당된다. 이처럼 CPU가 주기적으로 이벤트를 확인하고 동작을 수행하는 것을 폴링(Polling)이라고 한다. 과연 이 방식이 효율적일까? 주기적으로 하드웨어 장치의 상태를 검사하며 변화가 있는지 확인하기 때문에, 프로그램의 흐름이 예측이 가능하며, 검사 시간과 간격을 프로그래머가 제어할 수 있다. 즉, 동기성을 갖고 있는 폴링 방식은 변화가 없을 때도 계속해서 상태를 검사하기 때문에 CPU 자원을 낭비하기 십..

[마이크로프로세서] ATmega 128 디지털 입출력 제어 (3)

본문 FND 제어 이번 시간에는 FND(Flexible Numeric Display)를 조작해 보는 시간을 가지도록 해 보자. 7-segments로도 알려진 FND는 LED의 어느 단자를 공통 단자로 사용하느냐에 따라 Common Anode와 Common Cathode로 나뉜다. Common Anode는 모든 LED의 Anode가 공통으로 연결되어 있어, LED를 점등시키려면 해당 LED의 Cathode에 GND를 공급해야 한다. 반면 Common Cathode는 모든 LED의 Cathode의 Cathode가 공통으로 연결되어 있어, LED를 점등시키려면 해당 LED의 Anode에 전압을 공급해야 한다. J-KIT-128-1의 경우 공동 음극형으로 설계되어 있다. FND의 구동 방식은 모든 LED 제어 ..

[마이크로프로세서] ATmega 128 디지털 입출력 제어 (2)

본문 LED와 스위치 제어 이론 지난 시간에 배운 입출력 포트를 레지스터로 제어하여 LED를 점등해 보자. 일단 J-KIT-128-1의 회로도를 살펴보면, LED가 PORTA와 연결되어 있음을 알 수 있다. 또한 LED가 LED의 양극이 MCU와 연결되어 있다는 것을 확인할 수 있다. 이는 Current Source 방식을 채용하고 있다는 것을 의미한다. 이 방식은 핀의 출력이 1일 때 LED가 점등된다. 실습을 진행하기 위해선 핀당 허용 전류를 확인하고, 저항을 선택하는 과정이 필요하나 J-KIT-128은 이미 모듈화가 되어 있어 생략해도 된다. 그리고 LED 점등 시 추가적인 제어를 위해 스위치를 사용한다. 스위치 1은 PORTE의 4번 핀과 연결되어 있고, 스위치 2는 PORTE의 5번 핀과 연결되..