전체 글 267

[마이크로프로세서] 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로 변환하는 과정 아날로그 신호가 입력되는 방법에..

[마이크로프로세서] 타이머/카운터 정리

타이머/카운터 내용 정리 개요 타이머/카운터와 관련해서 정리할 내용이 많기 때문에, 이전에 하듯이 글 하단에 요약본을 만드는 것이 아닌 하나의 포스팅을 쓰기로 결정했다. 전반적인 내용과 레지스터 동작을 정리하도록 하겠다. 본문 기본 개념 타이머/카운터는 MCU 내부에서의 입력된 클럭을 계수하는 기능을 하고 있다. 즉, 클럭의 주파수를 이용해 타이머로 활용하며, 만약 8비트 카운터의 경우 카운터의 상태가 11111111에서 00000000으로 변화할 때 발생한다. 이때 시스템 내부의 클럭 주기론 만들기 어려운 것이 있는데, 이를 해결하기 위해 프리스케일러(Prescaler)를 사용한다. 즉, 고속의 클럭을 사용할 때 나타나는 한계를 해결하기 위해 클럭을 분주하여 더 느린 클럭을 생성하는 것이다. 예를 들어..

[디지털영상처리] Filtering in Frequency Domain (2)

본문 2D DFT Properties (1) 지난 시간엔 샘플링을 위한 조건에 대해 배웠었다. 이번 시간에는 이차원에서의 이산 푸리에 변환의 중요한 성질들을 다뤄보도록 하겠다. 위의 표에서 주목해야 할 점은 Translation이다. DFT를 적용한 결과는 일반적으로 저주파수에서 고주파수로 정렬되어 나타난다. 이는 주어진 이산 신호에 대해 직류 성분(가장 낮은 주파수)부터 높은 주파수의 성분까지 차례대로 계산되기 때문이다. 결과적으로 DFT의 출력은 주파수가 증가하는 순서로 배열된다. 그러나 이러한 배열은 직관적으로 이해하기 어려우므로, 이미지의 DFT 결과에서 저주파수 성분을 중앙에 위치시키기 위해 반주기씩 이동시키는 과정이 적용된다. 이 과정을 통해 저주파수 성분이 중앙으로 이동하고, 고주파수 성분은..

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

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

[디지털영상처리] Filtering in Frequency Domain (1)

주파수 영역에서의 필터링 개요 지난 시간까지는 이미지에 푸리에 변환을 적용하기 위한 기초적인 이론들을 배웠었다. 그리고 이미지에 푸리에 변환을 적용했을 때 어떻게 되는지도 간단한 실습을 통해 확인할 수 있었다. 이번 시간에는 필터링을 하기 위한 조건들에 대해 배워보도록 하겠다. 본문 Nyquist-Shannon Sampling Theroem 푸리에 변환을 적용한 주기적인 임펄스 열은 위의 수식이 나온다고 했었다. 샘플링 간격 △T는 연속적인 신호를 디지털 신호로 변환할 때 신호를 정확하게 복원할 수 있는지를 결정한다. 이러한 대역 제한 신호(Bandlimited Signal)에 대해, Nyquist-Shannon 샘플링 정리는 연속 신호를 디지털로 변환할 때 필요한 최소 샘플링 속도를 정의한다. 즉, 샘..

[마이크로프로세서] 타이머/카운터 및 예제 (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이 외부 클럭 소스에 완전히 의존하지 않도록 해준다. 또한, 외부 클럭에 프리스케일러가 달려 있어 타이밍을 조절할 수 있는 유연성을 제공한다..

[디지털영상처리] Fourier Theory (2)

본문 Impulse Train 결국 우리가 다루는 이미지는 샘플링을 거친 것을 보는 것이다. 즉, 연속적인 실제 세계를 이산적인 픽셀로 변환한 것이므로, 이 과정에서 임펄스 열을 사용하여 모델링하는 과정이 필요하다. 이번 시간에는 이러한 임펄스 열에 푸리에 급수와 푸리에 변환을 적용하면 어떻게 되는지 알아보자. 다음과 같이 시간축 t에서 간격이 △T인 임펄스 열(Impulse Train)이 있다고 가정해 보자. 이를 이용해 푸리에 급수를 표현하면 다음과 같이 나타낼 수 있다. 여기서 푸리에 계수를 구해보면 모든 n에 대해 1/△T이 된다는 점을 이용하여 임펄스 열을 다음과 같이 표현할 수 있다. 이번에는 푸리에 변환을 적용해 보자. 아래 수식에 따라 푸리에 변환을 적용하면 주파수 u = n/△T일 때만 ..