본문 바로가기

전체 글

(55)
10강. USART, UART 통신 본 글에서는 Atmega의 USART통신, UART 통신을 사용하는 방법을 '처음 배우는 사람의 입장'에서 배워본다. 즉, 처음 보았을 때 어떻게 데이트시트에 접근하는지 알아보고, 앞으로는 혼자서도 인터넷 글을 검색하기 보다는 데이터시트를 보면서 스스로 개발할 수 있는 역량을 기른다. - USART란? - USART와 UART의 차이는?? 나보다 글솜씨가 뛰어나게 정리한 분이 있으니 이걸로 대체합니다. https://blog.naver.com/PostView.naver?blogId=ycpiglet&logNo=222147465770&redirect=Dlog&widgetTypeCall=true&directAccess=false 동기 비동기 / USART와 UART 통신의 차이 완벽 정리 (Serial 통신)..
9강. PWM (8bit-timer) 본 글은 Atmega의 PWM에 대해서 알아본다. - PWM? Pulse Width Modulation의 약자로, 파형의 Duty Cycle을 바꾸는 기능이다. Duty Cycle은 Square wave 신호의 0과 1의 비율을 의미한다. 여기서 핵심적으로 보아야할 부분은, 파형의 Duty Cycle을 바꾼다는 점이다. Duty Cycle=0 이면 0신호가 나타날테고, Duty Cycle=100%이면 1신호가 나타날 것이다. 그래서, 파형의 주파수가 지나치게 낮지 않은 이상, 즉 10Hz 이하가 아니라면, 파형의 주파수는 큰 의미가 없다. Duty Cycle을 바꾸는 이유는 0과 1신호의 비율을 조절하기 위해서이지, 주파수를 바꾸어서 무언가를 하는건 아니다. PWM이 사용되는 곳은 대부분 전력을 조절하기..
8강. 내부 인터럽트 - 8bit 타이머 인터럽트 본 글에서는 내부 인터럽트중 일종인, 8bit 타이머 인터럽트를 사용하는 방법을 알아본다. - 오실레이터와 크리스탈? Atmega에는 다양한 오실레이터와 크리스탈이 있다. 둘 다 특정한 진동수를 만들어낸다는 특징이 있지만, 오실레이터는 자채 내장 회로를 가지고, 크리스탈은 외부 회로(RC 회로)가 필요하다는 차이점이 있다. Atmega128a 개발 보드에서는 대부분 16MHz 크리스탈이 달려있고, 이 진동수를 이용한다. 왼쪽이 오실레이터, 오른쪽이 크리스탈이다. - Timer? Atmega의 타이머는 종류마다 개수가 다르다. Atmega128a 기준으로는 8bit timer 2개, 16bit timer 2개가 있다. 이 타이머들은 오실레이터, 크리스탈의 진동수를 이용해서 시간을 계산해낸다. 예를들어, 1..
7강. 내부 인터럽트와 외부 인터럽트 본 글은 Atmega의 인터럽트에 대해서 얼아본다. - 인터럽트? '방해하다', '중단하다'라는 뜻을 가진 인터럽트는, 인터럽트가 실행 될 떄 메인 프로그램을 중지하고 다른 일을 수행하는걸 말합니다. 인터럽트가 발생하게 되면, 인터럽트 서비스 루틴(ISR)이 발생하면서 그 안에 있는 동작이 실행 된 후, 다시 메인 프로그램으로 돌아갑니다. - 인터럽트 종류 Atmega에는 다양한 인터럽트가 있습니다. 대표적인 것만 보면, > 내부 인터럽트 : 타이머, ADC, UART통신, SPI 통신 등, Atmega 내부의 동작에 의해 발생하는 인터럽트 입니다. > 외부 인터럽트 : INT0~INT7로, 외부의 전기 신호에 의해 발생하는 인터럽트 입니다. 내부 인터럽트는 다룰게 많아서 나중의 글에서 하나씩 살펴보기로..
6강. GPIO 실습 - 스위치로 LED 다루기 본 글은 GPIO를 실습해 보기 위해, 스위치를 눌러서 LED를 켜본다. 본 문제를 해결하기 위해 접근하는 과정은 다음과 같다. 1. 외부 전압(Vcc)가 스위치를 통해서 PC0 핀에 입력된다. 2. PC0 핀에 전압이 입력되면, PA7 핀에 전압을 출력한다. 3. PA7과 LED를 연결한다. 한가지 주의할 점은, 스위치에는 저항을 연결하고 접지에 연결해 주어야 한다는 점이고, LED에는 저항을 연결해 주어야 한다는 점이다. 이거는 전압이 특정 소자에 과하게 들어가는 현상인 floating 현상을 방지하기 위해서 라고 한다. // 1. LED 스위치 통제 #define F_CPU 12000000UL // 클럭 속도 결정 #include #include // 딜레이 라이브러리 int main(void) {..
5강. 핀 선택하기 본 글은 PIN을 선택하기 위한 다양한 비트 연산 테크닉을 알아본다. 앞 글에서, Port의 핀을 선택해주기 위해서 0x01, 0x02, 0xff 등의 16진수로 핀을 선택하는 방법을 배웠다. 그런데 이 방법은 정적인 방법이고, 핀의 선택을 계속해서 바꾸어 주어야 하는 동적인 방법은 어떻게 해야할까? 가령, PA0~PA7 핀을 순차적으로 돌아가면서 선택한다던지 하는 경우 말이다. 그러기 위해서 오늘은 비트 연산을 사용해서 핀을 선택하는 방법을 알아볼 것이다! - 비트 연산? 컴퓨터의 모든 숫자는 2진수로 나타낸다. 가령, 7은 111, 30은 11110으로 나타내는 식이다. Atmega의 핀은 비트 단위로 제어할 수 있으므로, 이를 연산하는 방법을 알면 동적으로 제어할 수 있게 된다. 연산 방법은 이 글..
4강. GPIO 개요 본 글은 GPIO 에 대해서 설명한다. - GPIO? General Purpose Input Output의 약자이다. 직역하면, 일반적인 목적을 가진 입/출력 핀 이라는 의미이다. 말 그대로 '1/0 신호를 입력받거나 출력받는다'는 의미를 가지고 있다. - GPIO 핀들 Atmega128A 기준으로 데이터시트의 Overview를 보면 Pin Map이 있다. 대부분의 정보가 여기에 전부 다 들어가있다. http://ww1.microchip.com/downloads/en/devicedoc/atmel-8151-8-bit-avr-atmega128a_datasheet.pdf ...??? GPIO 가 없는데요?? 바로 밑에 핀에 대한 간략한 설명을 보자. Atmega128A 기준으로, PortA ~ PortG 까지..
3강. 개발 환경 준비 본 강의는 Atmega를 개발하기 위한 환경을 준비하는 방법을 설명한다. 이 과정은 이해하는건 아니고, 초기에 필요한 소프트웨어만 준비하고 설정하는 과정이므로 편하게 따라와도 괜찮을 것 같다! Atmega로 모듈을 제어하는 과정은 다음과 같다. 1. 회로를 구성한다. 2. 회로를 제어하는 코드를 작성한다. 3. 코드를 Atmega에 넣는다. 하나씩 살펴보도록 하자. - 1. 회로를 구성한다. 회로도를 보고, 회로를 구성한다. - 2. 코드를 작성한다. 이를 위해서 IDE(Integrated Development Envirionment). 즉 개발을 할 수 있는 프로그램이 필요하다. 프로그램은 Atmel Studio를 가장 많이 쓰고, AVRvision을 쓰는 사람도 있긴 하지만 전자를 추천한다. 과정은 ..