본문 바로가기

Develop Knowledge/Atmega, AVR

(12)
Atmega를 공부하는데 유용한 책과 블로그 저의 ATmega 강의글은 여기서 마칩니다. 여기까지 해서 기본적인 기능은 대부분 알아보았으니, 앞으로 ADC, DAC, Analog Comparator, WatchDog Timer, 16bit Timer.. 등 여러 글은 쉽게 공부할 수 있을거라 생각됩니다. 사실 저의 글솜씨는 형편없다는 것을 저도 잘 알기에, 더 공부하고 싶으신 분들을 위해서 이미 자료를 잘 정리해주신 분의 책과 블로그를 소개하려고 합니다. - 책 > Atmega128로 배우는 마이크로컨트롤러 프로그래밍 이미 완성된 보드를 사용하는 다른 책들과는 달리, 직접 회로도를 가지고 스스로 회로를 구성해 보라고 하는 책입니다. 개념 설명도 잘 되어 있어서 추천합니다. https://product.kyobobook.co.kr/detail/S00..
11강. SPI 통신 본 글은 Atmega의 SPI 통신에 대해 간략하게 알아본다. 자세한 내용은 데이터시트에서 SPI 항목을 보면 나와있어서, 여기서는 최소한의 지식만 알아볼 예정이다. - SPI 통신? SPI는 Serial Peripheral Interface의 줄임말이다. 풀어보면, 주변 장치와 직렬 통신으로 연결한다는 말 정도가 된다. SPI는 마스터와 슬레이브로 이루어져있는데, 일반적으로 마스터는 MCU, 슬레이브는 주변 장치(Peripheral)이 되는게 일반적이다. 마스터가 하는 일은 다음과 같다. 1. 슬레이브 선택 (SS 핀을 high로 올린다.) 2. 통신주기 생성(SCLK 핀에서 생성된다.) 이때 주의할 점은, 마스터는 데이터를 보낼수도 있고, 받을수도 있다는 점이다. 마스터라고 해서 데이터를 보내기만 하..
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의 핀은 비트 단위로 제어할 수 있으므로, 이를 연산하는 방법을 알면 동적으로 제어할 수 있게 된다. 연산 방법은 이 글..