본문 바로가기

AVR

(7)
[AVR] 6. ATmega128A의 PWM PWM(Pulse Width Modulation)란? 1. 개요 PWM(Pulse Width Modulation)은 디지털 신호를 이용하여 아날로그 신호를 구현하는 기술 중 하나이다. 즉 디지털 클럭 신호를 모터의 속도, LED의 밝기 등 아날로그 신호로 바꿀 수 있다는 말이다. 주파수는 일정하게 유지하면서, 펄스의 폭(Width)를 조절하여 폭이 넓을수록 신호의 크기가 크고, 폭이 좁을수록 신호의 크기가 작아지게 된다. 2. 동작 방식 PWM을 이용하여 디지털 신호를 발생시키면, 신호의 High 레벨과 Low 레벨이 일정한 주기로 반복되는 것을 볼 수 있다. PWM의 동작방식은 주파수와 듀티비(Duty Cycle)로 이루어져 있다. 주파수는 신호가 반복되는 주기를 나타내며, 듀티비는 High 레벨의 지..
[AVR] 5. ATmega128A의 인터럽트 인터럽트(Interrupt)란? 1. 개요 인터럽트는 프로그램 실행 도중 발생하는 이벤트로, 현재 실행 중인 코드의 흐름을 중단하고 인터럽트 서비스 루틴(Interrupt Service Routine, ISR)으로 이동하여 처리할 수 있다. 2. 동작 방식 간단한 예시로, 집에서 집안의 일들을 하는 도중에 어떤 외부인이 초인종을 눌렀다고 생각해보자. 즉시 집안일을 관두고 외부인과 대응해야한다. 대응 이후에는 다시 마저 하던 일을 하게 될 것이다. 이것이 바로 인터럽트다. 이 인터럽트의 가장 큰 장점은 리얼 타임 시스템(Real-Time System)에서 빛을 발한다는 점이다. 시스템 가동 중에 예기치 못한 상황이 발생된다면, 인터럽트를 통해서 해당 상황을 즉각적으로 처리할 수 있다. 3. ATmega12..
[AVR] 4. ATmega128A의 타이머/카운터 타이머/카운터란? 1. 개요 타이머 카운터(Timer/Counter)는 마이크로컨트롤러에서 주어진 시간 동안의 카운트를 수행하는 하드웨어 모듈이다. 이 모듈은 내부적으로 클럭 신호를 카운트하고, 사용자가 설정한 카운터 값에 도달하면 인터럽트를 발생시키거나 외부 장치를 제어하는 등의 기능을 수행할 수 있다. 쉽게 말해서, 일정한 시간 동안 발생되는 클럭을 세서 시계로 쓸수도 있고, 클럭이 일정 횟수가 카운팅되면 LED를 켤 때, 카운팅을 위해 쓸 수도 있는 것이 타이머/카운터이다. 2. 타이머/카운터를 쓰는 이유 간단한 예로 시계를 구현한다고 하자. _delay() 함수를 통해서 시계를 구현할 수 있지만, 미세한 차이가 누적된다면 그다지 정밀하지 않을 것이다. 하지만 내부의 클락(타이머/카운터)을 사용할 ..
[AVR] 3. ATmega128A UART 통신과 I2C 통신 1. UART 통신이란? (1) 개요 Universal asynchronous receiver/transmitter의 약자로써, 병렬 데이터를 직렬형태로 바꾸어 데이터를 전달하는 프로토콜(약속)이다. 통신 방법의 한 종류이고, 프로토콜 구현이 매우 간단하지만, 여러 다중 모듈과 통신을 해야하는 시스템에는 그다지 적합하지 않다. (2) 통신 방법 비동기식 방식이라 클럭을 사용하여 통신하지 않고, TXD(송신부), RXD(수신부) 두 개의 라인으로 이루어져 있어 통신 방법이 매우 간단하다. 사진을 보자. 총 11개의 비트로 이루어져있고, 시작 비트(0)와 종료 비트(1)로 시작과 끝을 나타낸다. ATMEGA128에서는 레지스터를 설정하여 사용할 수 있다. 위 사진은 Comportmaster로 UART 통신했..
[AVR] Pull-Up/Pull-Down 저항이란? 스위치가 연결되지 않으면 MCU에 붙어있는 노드의 전압을 알 수 없다. 왜냐하면 걸어놓은 전압이 없기 때문에 몇 V인지 전혀 알 수 없다. 이를 Floating 상태라고 한다. 이러한 경우에는 외부 노이즈나, 환경에 따라 전압이 바뀔 수 있으므로 정확함을 요구하는 공학에서는 이를 해결해야한다. 위 사진에서 스위치가 연결이 된다면 MCU는 저항이 무한대에 가깝기 때문에 전류는 무조건 그라운드로만 흐를 것이다. 5V와 그라운드 사이에 아무런 저항이 없기 때문에 합선이 발생하여 무척 위험하다. 위 ①과 ②의 사진에서 발생되는 Floating 상태와 합선의 위험을 해결하는 방법은 저항을 부착하는 것이다. ③의 왼쪽 그림은 저항이 그라운드와 연결되어 있으므로 이를 Pull-down 저항이라고 하며, ③의 오른쪽 ..
[AVR] 2. ATmega128A 버튼 제어 //////////// //main.c// //////////// #if 1 #define F_CPU 16000000UL #include #include "button.h" extern int get_button(); // extern : 내 화일에 있지 않고 다른 화일에 있음을 알림, extern void init_button(); int button1_state = 0; // 초기 상태는 버튼이 off된 상태에서 출발 int main(void) { DDRA = 0xff;//LED포트는 출력모드 init_button();//버튼 레지스터 초기화 함수 PORTA = 0x00; while(1) { if(get_button(BUTTON1))//버튼 1(PD4)을 누르면 { if(!button1_state)/..
[AVR] 1. ATmega128A의 입/출력 #include #define F_CPU 16000000UL int main(void) { DDRA = 0xff;//핀 A의 방향 : 출력상태 DDRD = 0x00;//핀 D의 방향 : 입력상태 PORTA = 0x00;//PORTA LED ALL OFF while(1) { if (PIND &(1