106
-1- 시리즈를 이용한 ATMEGA 16 하드웨어 설계 및 프로그래밍 월자 차 수정본 2005. 7 2 조선대학교 가상현실실험실 공학박사 강 원 찬

ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 1 -

시리즈를 이용한ATMEGA 16

하드웨어 설계 및 프로그래밍

월자 차 수정본2005. 7 2

조선대학교 가상현실실험실

공학박사 강 원 찬

Page 2: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 2 -

목 차

구조 및 특징1. ATMEGA 163 3

컴파일러 사용법2. GCC 19

3. I/O, 7-Segment and Relay Control 29

4. Atmega163L Interrupt 42

5. Timer & Real-time clock 51

시리얼 통신6. 72

및7. LCD Graphics LCD 85

서보 모터 제어8. RC 99

Page 3: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 3 -

구조 및 특징1. ATMEGA 163

이란1) AVR ?

미국 아트멜 사의 마이크로 컨트롤러는 싸이클 명령 실행 구조를 갖(Atmel) AVR Single

는 이다RISC 또한 효율적인 포트 구조와 각 모델에 따라서 내부 발진회로 타이머. , I/O , ,

시리얼 통신(UART), SPI, 변환기 풀업저항 저항 펄스폭변조 제어 아날AD , (Pull-UP ), (PWM) ,

로그 비교기 그리고 와치독, (Watch dog 타이머등이 내장 되어 있다 마이크로 프로세) . AVR

서의 명령어들은 언어나 기계어 어셈블리 로 개발C ( ) 할 때 프로그램의 크기를 최적화하도록

되어 있다 또한 시리즈에는 플래쉬 메모리. , AVR (Flash Memory)가 내장되어 있어 단시간내에

최소의 비용으로 개발하려는 분들에게 매우 적합한 마이크로 컨트롤러이다.

www.ateml.com 참조

참고사항•

구조와 의 차이점CISC RISC

구조란 복잡한 명령어들의 집합 컴퓨터란 뜻으로CISC(Complex Instruction Set Computer)

씨스크는 명렁어들이 복잡하다는 단점 즉 명령어의 갯수가 많다는 단점이 있는 반면 프,

로그램의 길이가 짧은장점이 있다 그러므로 저장공간도 적게 차지하고 속도는빠른 면모를.

보인다 우리가 주로 쓰이는 개인. 용컴퓨터는 대부분 시스크 구조를 사용한다.

반면 는 명령어들의 간단한 반면 적은수의 명령어RISC(risk instruction set computer)

로 프로그램을짜자니 자연 프로그램의 길이가 길어집니다 그러므로 저장공간도 더 많이.

차지하고 속도는 느린 단점이 있습니다 리스크는 워크 스테이션 같은 컴퓨터에서 주로.

사용한다 본디 방식의 비트 프로세서인 까지 완벽한 호환성을 유지하며 발. CISC 32 80386

전하다가 의클럭을 높이는 방식으로 성능향상을 기대할수 없으므로 방식의 문제CPU CISC

점이 들어나기 시작했다 그래서 한번에 여러 개의 명령어를 동시에 수행할 수 있는 기. ,

술이 필요하게 되었다 즉 동일한 클럭에서 두 개의 명령어를 한번에 처리하게 되면 두. ,

배의 성능 향상을 기대할 수 있기 때문이다 그래서 나온구조가 구조로서 펜티엄부. RISC

터 이라는 기법이 사용되었다 이 방식은RISC86 . AMD의 인텔 호환 에서 사용된 기술로CPU ,

명령어의 해석 부분을 기존의 슈퍼 스칼라 방식으로 유지하면서독립된 장치로 설계하여 연

속적이고 고속으로 명령어를 방식으로 변환시키는 것이다 그리고 실제로 연산을RISC . ,

처리하는 장치는 방식으로 처리하여 여러 개의 명령어를 처리할 수 있도록 하는 방RISC

식이다 그래서 인텔 펜티엄 프로세서는 최대한 두 개의 명령어를 동시에 처리할 수 있. ,

는 것이다

패밀리의 종류와 특징AVR■

시리즈 이 없거나 적은 모델이 대부분이며 핀 수 또한 적어서 간단한 어플Tiny : RAM•

리케이션에 적합하다.

• 시리즈 의 크기는 보통으로 과 비슷하거나 더 나은 성능을 제공한다AT90S : RAM 8051 .

시리즈 플래쉬 메모리와 램의 용량이 크고 핀 수 또한 많아서 복잡한 어플리케Mega :•

이션에 적합하다.

현재 다루게 될 시리즈는 시리즈 이므로 이를 중심으로 설명하겠습니다AVR MEGA .※

Page 4: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 4 -

의 주요특징ATMEGA163■

고성능 저전력 소모의 비트 마이크로 컨트롤러8•

개의 강력한 명력어 대부분 클럭에 실행된다- 130 , 1

의 범용레지스터와 주변장치 제어 레지스터 보유- 32 ×8

- 에서의 초당 백만개까지의 명령어 연산능력을 가지며 이밖에 사이클에 실행되는8MHz 8 2

곱셈기를 가진다

이밖에 사이클에 실행되는 곱셈기를 가진다- 2

비활성 데이터 및 프로그램 메모리•

방식 프로그램용 의 플레시 메모리를 가지며 이는 번을 쓰고 지울수 있다- ISP 16K 1000

의 을 가지면 이는 만번을 쓰고 지울수 있다- 512Byte EEPROM 100,000

의 데이터 저장용 을 가진다- 1024 Bytes SRAM

의 보안을 위한 프로그램 잠금기능이 있다- CODE

다양한 주변장치•

개의 비트 타이머 카운터와 개의 비터 타이머 카운터를 가지며 이들 타이머 카- 2 8 / 1 16 / /

운터는 비교 캡쳐 체널의 의 기능을 가진다, , 3 PWM

체널의 컨버터를 가진다- 8 10-bit AD

개의 전이중 통신이 가능한 직렬포트를 가진다- 2 USART

마스터 슬레이브의 직렬통신이 가능하다- / SPI

내부 오실레이터로 작동하는 워치독 타이머를 가진다-

아날로그 비교기를 가진다-

특수 기능 및 특징•

시 리셋되며 시스템 클럭을 발생하는 내부 오실레이터 회로를 가지며 또- Power-on RC ,

한 외부에 크리스탈이나 세라믹 레조네이터를 접속할수 있는 발진회로를 내장하고 있다

슬립 모드로서 개의 파워 절약 모드를 가지고 있다- 4

동작시 에서 전력 소비량은- 4 MHz ( 25 ) 3.0V,℃

동작은 모드에선 파워다운 모드에선 이내의 전류소모- 5mA, idle 1.9mA 1uA

입출력 핀 페키지-

개의 프록램 입출력 포트를 가가진다- 32

핀 와 핀 를 가진다- 40 (PDIP) 44 (TQFP)

동작전압 및 동작 주파수•

은- ATmega163L 2.7 - 5.5V / 0 - 4 MHz

은- ATmega163 4.0 - 5.5V / . 0 - 8 MHz

Page 5: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 5 -

의 핀 페키지 및 블록다이어 그램ATMEGA163■

Page 6: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 6 -

와 은 칩의 페키지의 종류로서 전자를 타입이라 하며 후자를 타입이TQFP PDIP SMD DIP※

라 한다 일반적으로 후자인 딥타입은 땜질하기 쉬워 학생들이 많이 쓰지만 요즘은 점차.

사라져 가는 추세 딥타입처럼 핀이 길고 덩치가 크면 자리도 많이 차지할뿐만 아니라,

고주파회로에서 여러가지 문제가 되기 때문에 나 같은것들이 많이 쓰이고있는것PLCC TQFP

은 핀이 많아도 자리를 덜 차지하기 때문이고 고속회로에도 안정적이다 요즘은 아예 핀.

이없는 타입으로 가는 추세BGA .

주요 핀 기능•

전원과 접지단자- VCC / GND :

- PORTA (PA7 ~ PA0)

는 컨버터의 입력 신호로 이용된다 또한 컨버터로 이용하지 않을시에는 내PORTA AD AD

부 풀업저항을 가지는 입출력 포트로서 이용된다 출력 전류는 로서 출력에 직. 20mA LED

접적으로 이용할수 있다 또한 입력포트로 사용될시 내부 풀업저항이 설정되어 있을때.

신호가 입력신호로서 인가된다 신호 인가시에는 는 단계의 전압을 갖low . RESET PORTA 3

는다

- PORTB (PB7 ~ PB0)

내부 풀업 저항을 가지는 입출력 포트로서 이용된다 출력 전류는 로서 출력에. 20mA LED

직접적으로 이용할 수 있다 또한 입력포트로 사용될시 내부 풀업저항이 설정되어 있을때.

신호가 입력신호로서low 인가된다 신호 인가시에는 는 단계의 전압을 갖는. RESET PORTB 3

다 또한 아래와 같은 특수한 기능을 같는다.

※ 는 의 약자로서 한마디로 말해 주변 와 통신하기 위한SPI serial peripheral interface IC

직렬통신장치 가령 나 관련 등을 제어하기 위한 장치로 일반 를 이. PLL IC AUDIO IC . PORT

용해 전송보다 전용 단자의 경우가 속도도 빠르고 간편하게 사용할수 있는 장점이 있SPI

다 때로는 두개의 를 연결하여 를 주고 받을때도 사용하기도 한다 본 에서. MCU DATA . AVR

는 과 같은 연결시 활용된다SKT200/300/500 ISP

유럽이나 미국에서 생산된 의 경우 주로 통신을 사용하지만 일본에서 설계된IC IIC

는 로 제어하는 가 많습니다IC SPI IC .

- PORTC (PC7 ~ PC0)

내부 풀업 저항을 가지는 입출력 포트로서 이용된다 출력 전류는 로서 출력에. 20mA LED

직접적으로 이용할 수 있다 또한 입력포트로 사용될시 내부 풀업저항이 설정되어 있을.

때 신호가 입력신호 로서 인가된다 신호 인가시에는 는 단계의 전압을low . RESET PORTB 3

갖는다 또한 아래와 같은 특수한 기능을 같는다

Page 7: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 7 -

※ 타이머 오실레이터 핀으로서 각각 에 위치한다 동작은 레지스TOSC1/2 : PORTC 6/7 . ASSR

터의 비트 비동기식 타이머 카운터 동작 스위치 역할 가 셋 될 경우 동작하는데 본AS2 ( / ) ,

레지스터가 셋 됨과 동시에 은 입출력 포트로서의 동작이 이루어지지 않으며 인PORT6/7 ,

버팅된 오실레이터 증폭기의 입력 포트로서 동작하게 된다 즉 본 모드에서는 포트로. PORTC6/7

는 크리스탈 오실레이터가 연결된다

※ SDA : 로서 레지스터의 비트 시리얼Two-wire serial bus data TWCR TWEN (Two-wire interface

가 가능하게 해주는 레지스터 가 셋될 경우 은 입출력 포트가 아닌) PORTC0 SD 로서 동작하게A

된다.

내부에는 스파이크를 이하로 줄이기 위한 필터가 있으며 오픈 콜렉터로서PORTC1 50ns

동작 한다 즉 필요한 경우 허용유입전류 이하가 되도록 부하를 연결해 주어야 한다. .

으로서 레지스터내 비트가 셋 될 경SCL : Two-wire werial interface Clock TWCR TWEN※

우 은 입출력 포트가 아닌 즉 즉 시리얼 클럭 입출력 핀으로서 작동하게 된PORTC1 SCL

다 본 핀역시 와 마찬가지로 스파이크 필터가 내부에 존재한다. SDA

- PORTD (PD7 ~ PD0)

내부 풀업 저항을 가지는 입출력 포트로서 이용된다 출력 전류는 로서 출력에. 20mA LED

직접적으로 이용할 수 있다 또한 입력포트로 사용될시 내부 풀업저항이 설정되어 있을때.

신호가 입력신호로low 서 인가된다 신호 인가시에는 는 단계의 전압을 갖. RESET PORTB 3

는다 또한 아래와 같은 특수한 기능을 같는다.

시리얼 신호의 입력과 출력시 사용된다PD0/1 :※

외부 인터럽트 의 입력시 사용된다PD2/3 : 0/1※

타이머 카운터 출력비교 매치를 출력하는 포트로서 제어하는 레지OC1/2 A/B : / 1 A/B※

스터는 레지스터 의 입출력 방향결정 레지스터 의 해당포트 즉 번포트DDRn (PORT ) 4, 5, 7

가 의 값을 가질 경우 동작한다 또한 펄스변조로서 모드로서도 작동한다0 . PWM

타이머 카운터 의 입력캡쳐 핀으로서 마찬가지로 의 레지스터로 제어한다ICP : / 1 DDRn※

Page 8: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 8 -

- RESET

외부 신호에 의해 신호를 인가하는 핀으로 입력이 일 경우 본 프로세서는 리reset low

셋된다 리셋이 되기 위해선 이상의 신호를 유지해주어야 한다. 50ns low

일반적인 회로RESET※

- XTAL1

발진 증폭기가 인버팅되어 입력되어 입력되는 핀으로서 내부 클럭의 동작에 입력된다

- XTAL2

발진 증폭기가 인버팅 되어 출력된다

크리스탈은 동작주파수까지 가변가능※

- AVCC

포트 를 변환기로 사용할 경우 변환기의 전원공급 단자로서 변환기의 전A A/D A/d A/D

원을 사용할 경우 반드시 전원을 저역필터를 거쳐 로 연결 사용하여야 한다vcc AVCC

- AGND

만일 보드에 아날로그 접지가 있으면 아날로그 접지와 연결하고 그렇지 않을 경우 GND

에 연결

- AREF

변환기의 기준전압 입력 핀으로 와 사이의 전압을 인가한다A/D AVCC AGND

클럭인가 관련 옵션※

총 가지의 클럭 입력 옵션이 있으며 각각에 대해선 아래와 같다5

1. Internal RC Oscillator

내부 오실레이터에 의한 클럭 인가시 일반적으로 의 클럭으로 동작하게 된다RC 1Mhz

본 클럭입력 설정시 외부에 의한 클럭입력에 의해 영향을 받지 않는다

2. Crystal Oscilator

Page 9: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 9 -

과 에 인버팅된 즉폭기가XTAL1 XTAL2

입출력 되어 클럭이 인가된다

이때 클럭발진기로서는 크리스탈이나

세라믹 레조네이터 등이 사용된다

3. External Clock

외부 클럭소스에 의해 클럭이 인가되기 위해선

오른쪽 그림과 같이 에 외부 클럭발진기XTAL1

즉 오실레이터가 입력되어야 한다

4. External RC Oscillator

오른쪽 그림과 같이 과 를 인가하여R C

외부에서 클럭을 인가한다

과 에 의해 인가되는 클럭은 아래와 같다R C

5. Timer Oscillator

과 의 핀에 크리스탈을 직접 연결하여 클럭을 발생시키는 방법으로TOSC1 TOSC2

의 인가시 오실레이터가 그 성능을 최대한 발휘한다 본 모드 사32,768Hz watch crystal .

용시 기타 다른 클럭소스가 핀에 인가될필요는 없다TOSC1

아키텍쳐 분석■

본 은 메모리와 버스가 구분된 하바드 아키텍쳐 구조를 가진 프로그램 메모리는AVR . 2

스테이지의 파이프 라인에서 실행된다 즉 한개의 명령이 실행되는 동안 다음명령이 프로

그램 메모리에서 읽혀져 매 클럭사이클당 명령이 실행되어질수 있도록 할수 있다.

본 프로그램 메모리는 시스템 내에있는 쓰고 지울수있는 플레시 메모리이다 명령이 호.

출되거나 다음번지로 이동해야 할시에는 총 의 주소공간이 억세스 된다 대부분8k word .

의 명령은 비트 워드 포맷을 가지며 모든 프로그램 메모리 어드레스는 비트나AVR 16 16

비트의 명령을 포함한다 프로그램 플레시 메모리 공간은 개의32 . 2 공간으로 분류 되는데

하나는 부트 프로그램 섹션과 나머지 하나는 어플리케이션 프로그램 섹션으로 두 섹션다 프

로그램의 보호를 위해 락비트를 가진다 또한 인터럽트나 서브루틴. 이 호출되는 동안에는 호출

되었던 시기의 메모리 어드레스가 스택에 저장되며 스택은 효과적으로 상에 위치하SRAM

게 되며 해당 스택 사이즈는 규격화된 총 사이즈에 의SRAM 해 제한되어 저장된다 또한.

리셋 실행시에는 스택포인터는 초기화 되며 비트의 스텍 포인터는 입출력에 해당하는11

어드레스에 접근하게 된다

Page 10: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 10 -

메모리 맵■

데이터 은 아키텍쳐 구조에1024byte SRAM AVR

해당하는 가지의 어드레스 모드에 의해 접근하5

기 용이하다 아키텍쳐의 메모리 공간은 아. AVR

래와 같이 선형의 규칙적인 메모리 맵을 갖는다

인터럽트 모듈은 입출력 어드레스 공간상에 이를

제어할수 있는 레지스터를 가지는데 모든 인터럽

트는 프로그램 메모리의 시작부분에 해당하는 벡

터테이블에 분리된 인터럽트 벡터를 가진다.

또한 해당 인터럽트는 그들의 어드레스 위치에

따라 우선권을 가지는데 이때 낮은 어드레스를

갖는 인터럽트일수록 더 높은 우선권을 가진다.

Page 11: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 11 -

범용 레지스터 파일■

개의 비트 범용 레지스터는 오른쪽의 데이터 영역의 번지부터 할당되어 있는데32 8 0

은 범용 레지스터로 사용하면서 데이터 영역의 간접 어드레스 지정 포인터로R26 ~ R31

사용 가능하고 이를 로 표시하며 어드레스 변환 자동증가 작동감소 등의 기능을x, y, z

갖는다

ALU■

고성능의 는 개의 범용 작업 레지스토와 직접 연결되어 동작한다 하나의 클럭AVR ALU 32

사이클 내의 명령을 처리하게 되며 명령은 산술 논리 비트처리 함수의 세가지ALU ALU , ,

영역으로 나누어 진다 계열의 마이크로 컨트롤러들은 의 산술부분에 하드웨어적. AVR ALU

인 곱셈기를 가지고 있다

데이터 메모리SRAM■

다음 그림은 데이터 메모리 구조를SRAM 보여주는데 하위 데이터 메모리 부분1120 은 입

출력 메모리의 레지스터 파일과 내부 데이터 의 위치로 지정되는데 처음 번지까지SRAM 96

의 레지스터 파일과 입출력 메모리이며 다음 번지가 내부 위치로 지정된다 직1024 SRAM .

접 간접 이동을 가진 간접 어드레싱 전 감소 간접 어드레싱 후증가 간접 어드레싱, , , ,

모드이며 레지스터 파일중에는 레지스터 에서 까지 간R26 R31 접 어드레스로 지정 포인터

레지스터 특징을 가진다.

Page 12: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 12 -

프로그램과 데이터 어드레싱 모드■

구조를 지원하는 마이크로 컨트롤러는 강력하고 효과적인 프로그램 메모RISC ATMEGA163

리와 데이터 메모리에 접근하는 어드레싱 모드를 지원한다 아래는 아키텍쳐가 지원. AVR

하는 각기 다른 어드레싱 모드를 그림으로 나타내었다.

쉽게 설명하기 위해 여기 나온 모든 모습들이 정확한 어드레싱 비트를 가리키는 것이※

아님을 미리 밝혀둔다

실행코드는 레지스터 에D※

들어있는 값이다.

※ 명령 코드는 과 에 들어있으며r d

결과값은 에 저d 장

Page 13: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 13 -

※ 명령 코드는 메모리에 있으며IO

은 원본이n 나 목적레지스터

※ 은원본이나목적Rd/Rr

레지스터를 가진다

※명령 코드는 어드레스 나 레지스터 안의y z

데이터와 비트 인스트럭션 워드에 포함된6

어드레스와 더하여 나온 값이다

※ 명령 코드는 레지스터 안의x,y,z

데이터가 된다

레지스터의 데이터는 오퍼레이션 전에x,y,z※

씩 감소된다 오퍼랜드 어드레스는1 . x,y,z

레지스터 안의 감소된 데이터가 된다

레지스터의 데이터는 오퍼레이x,y,z※

션 전에 씩 증가된다 오퍼랜드 어드.

레스는 레지스터 안의 증가된x,y,z

데이터가 된다

Page 14: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 14 -

프로그램 실행은 어드레스에서 계속된다pc+k※

관계 어드레스 는 의 범위에 있k -2k ~ (2k-1) 다

메모리 엑세스 및 명령어 처리 타이밍■

는 시스템 클럭을 분주하지 않고 직접 사용하므로 클럭으로 로의 동작이 가AVR CPU 1Mhz 1MIPS

능하다 하버드 아키텍쳐 구조의 특징상 개의 명령 처리는 클럭을 사용하지만 개까지. 1 4 4

의 병렬처리가 가능하여 번째 명령 처리부터는 클럭에 개의 명령을 처리하는 효과를4 1 1

가진다.

주요 레지스터 및 인터럽트 처리■

입출력 관련 레지스터•

다른 디바이스와 핀을 공유할 때는 해당핀을입력이나 출력으로 사용하지 않을 때 사용

1내부 풀업 연결상태외부풀업 필요없음( )

타이머 카운터 인터럽트 플래그 레지스터/•

구분 TCCRn TCNTn 0CRn인터럽트와 연동하여

TIFR TIMSK

기능

프리스케일

러 값

조정기능

업 다운 카운터

얼마마다 한번씩

인터럽트를 걸게

할 것인지와

관련된

값을 써주면 된다.

본 값은 의TCNTn

레지스터 값과 비교

매치될 때 인터럽트

발생하는 형식으로

등의 웨이브PWM

파형생성시 이용된다

타이머 카운터에 관한/

인터럽트가 발생하면

인터럽트 요청을 하는

플래그들이 있는

레지스터 입니다.

Page 15: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 15 -

레지스터- TCCRn

레지스터의 구조는 위와 같다 위에서 하위 비트 값을 설정함으로서 프리스케일. 3 CS0n

러값을 설정할수 있다 각 값에 대한 프리스케일러 값은 아래와 같다.

레지스터- TIFR

비트는 타이머 카운터 오버플로우 플래그입니다 비트는 출력 비교 플래TOV0 / 0 . OCF0

그입니다 위 두 비트는 인터럽트가 발생해서 인터럽트 서비스 루틴을 실행하면 으로. 0

클리어 되고 플래그에 을 쓰면 으로 클리어 됩니다, 1 0 .

레지스터- TIMSK

레지스터의 구조는 위와 같다 위에서 값을 설정하여 타이머 카운터 오버플로우시TOIEn /

인터럽트가 발생가능토록 설정할수 있다

외부 인터럽트 관련 레지스터■

먼저 레지스터를 보면 아래 그림과 같습니다 이중에서 최상위 비트 는 전체SREG . I

인터럽트를 허용 마스크 하는 기능을 합니다 즉 비트가 로 셋 되어 있어야 전체 인/ . I 1

터럽트가 가능해 집니다.

Page 16: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 16 -

레지스터의 상위 비트는 외부 인터럽트 의 각각을 허용 마스크 하는GICR 3 0, 1, 2 /

비트입니다 외부 인터럽트 을 가능하게 하려면 비트를 로 셋 시켜야합니다. 0 INT0 1 .

외부인터럽트 과 을 함께 가능하게 하려면 두 비트를 로 셋 시켜야 합0 1 INT1, INT0 1

니다.

레지스터의하위 비트와 레지스터의 최하위 비트는 인터럽트의 타입을MCUCR 4 EMCUCR

결정하는 비트입니다.

비트로 외부 인터럽트 각각의 인터럽트 타입을 결정ISCxx(Interrupt Sense Control)

합니다 외부 인터럽트 의 경우를 아래 표에 예시했습니다 보통 외부 인터럽트 단자는. 0 .

풀업되어 있기때문에 하강에지에서 인터럽트를 발생하게 하는 경우가 많습니다 외부 인.

터럽트 는 한 비트만으로 인터럽트 타입을 결정합니다2 ISC2 .

인 경우는 하강 에지에서 인터럽트가 발생하도록 설정하는 것입니다ISC2 = 0 .

인 경우는 상승 에지에서 인터럽트가 발생하도록 설정하는 것입니다ISC2 = 1 .

Page 17: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 17 -

시리즈별 비교분석표Atmega■

구 분 a t me g a 128 a t me g a 163 a t me g a 103

F l a s h (K b y t e s ) 128 16 128

E E P R O M (K b y t e s ) 4 512 by te 4

S R A M (By t e s ) 4096 1000 4096

M a x I / O P i n s 53 32 48

F .ma x (M H z ) 6 8

V c c (V ) 2.7-5.5 4.0 - 5.5 4.0 - 5.5

16-b i t T i me r s 1 1

8-b i t T i me r 2 2 2

P W M (c h a n n e l s ) 4 4

R T C Y es Y es Y es

S P I 1 1 1

U A R T 2 1 1

T W I Y es

IS P Y es y es y es

10-b i t A / D (c h a n n e l s ) 8 8 8

A n a l o g C o mp a r a t o r y es y es y es

Br o w n O u t D e t e c t o r y es y es

W a t c h d o g y es y es y es

O n C h i p O s c i l l a t o r y es y es

H a r d w a r e M u l t i p l i e r y es

In t e r r u p t s 34 17 16

E x t I n t e r r u p t s 8 2 8

S e l f P r o g r a m M e mo r y y es

Page 18: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 18 -

시리즈 의 기본 회로도Atmega Atmega163L■

Page 19: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 19 -

컴파일러 사용법2. GCC

들어가기전에1)

란Gcc ?①

또는 라 칭하며 년 무렵부터GNU Compiler Collection GNU C Compiler 1984 FSF(Free

을 중심으로 추진되어온 프로젝트의 일환으Software Foundation) GNU(GNU is Not Unix)

로 개발된 공개 소프트웨어로서 언어 및 언어를 지원하는 미국표준규격 컴C C++ ANSI( ) C

파일러이다 간단히 말하면 무료로 사용할 수 있는 언어를 컴퓨터가 읽어 들일 수 있게C

번역해주는 일종의 사람과 컴퓨터의 중간 매체이다.

란GNU ?②

는 유닉스가 아니다 라는 재귀적 약어이며 유료인 유닉스와 달리 모두가 공유하‘GNU ‘

고 개발 발전할 수 있게 하자는 일종의 규약으로 선언문이 있다GNU

란MCU ?③

는필요한 기능을 컨트롤 한다는 목적으로 사용되어지고MCU(Micro controller unit) ,

이러한 칩에는 고유한 기능을 가지고 있으며 사용자의 필요에 따라 각각 다른 수십 가,

지의 칩 기능을 가지고 있다 이러한 형태는 집적화로 인해 좁은 공간의 회로에. ON chip

서도 많은 기능을 수행할수 있고 내부에 메모리가 있어 명령에 필요한 프로그램도, CPU

집어 넣을수 있습니다 이러한 칩은 형태로써 데이터를 처리하. 4bit, 8bit, 16bit, 32bit

는 속도를 가지고 있으며 수많은 가전제품의 자동제어장치 시스템이나 도난 방지시스,

템 자동차 시스템 항온 시스템등 등 다른 분야에서도 널리 쓰이고 있는 라 할수, ABS , CPU

있겠습니다.

최신 버전을 다운로드 받을 수 있는 곳AVR-GCC .④

운영체제를 사용하는 기종퍼스널 컴퓨터를 호스트 플랫폼으로 하는Windows IBM PC

소프트웨어 패키지를 이라고 부르고 있으며 아래주소에서 다운 받아 설AVR-GCC WinAVR ,

치할 수 있으며 설치 가이드를통해 쉽게 설치할수 있다AVR-GCC .

http://winavr.sourceforge.net/

기본적으로 어셈블리어로 제작가능하며 언어로 개발하는 것이 용이 하여 를C GCC⑤

사용한다.

는 표준의 및 컴파일러이므로 용으로서의AVR-GCC ANSI C C++ AVR⑥ 언어를 사용C

할 때 알아야하는 중요특징과 기능을 중점으로 이야기한다.

⑦ 본 내용은 의 를 중심으로 에 대하여 접근하였다WinAVR AVR-GCC GCC .

에는 어셈블러를 포함하고 있어 어셈블러를 사용할 수 있다WinAVR .

Page 20: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 20 -

의 개요2) AVR-GCC

는 거의 모든 에 적용될 수 있을 정도로 뛰어난 이식성을 가지고 있는데 이를GCC CPU ,

위하여 는 플랫폼에 의존적인 부분과 플랫폼에 의존하지 않는 부분으로 나누어져 모GCC

듈화되어 있으며 이들 모듈은 서로 지정된 규칙으로 인터페이스 되고 있다 따라서 플, . ,

랫폼에 의존적인 부분만을 수정하면 새로운 플랫품을 지원하는 를 만들 수가 있다GCC .

는 이러한 방법으로 만들어진 용의 컴파일러인 것이다 는 정확히AVR-GCC AVR GCC . AVR-GCC

말하면 크로스 컴파일러이다.

즉 호스트 플래폼으로서 윈도우 운영체제를 사용하는 호환기종 퍼스널 컴퓨터를IBM PC

사용하고 타겟 플랫폼으로서 마이크로 콘트롤러용의 소스 파일을 컴파일하여 실행, AVR

파일을 생성하는 것이다 가 이와 같이 크로스 컴파일러로 동작하기 위해서는 어. AVR_GCC

셈블러와 링커가 더욱 중요하다.

컴파일러는 다시 언어 소스를 어셈블리 소스로 번역하는 역할만을 수행하므로 어GCC C

셈블러가 타겟용의 오브젝트 코드를 생성하고 링커가 여러개의 오브젝트 파일들을 링크

하기 때문인데 에서는 이러한 크로스 어셈블러나 크로스 링커와 같은 유틸리티AVR-GCC

들을 모아서 라고 한다binutils .

의 특징3) GCC

의 여러 특징들 가운데 하나는 이식성 이다 이는 본래 프로젝트gcc (portability) . GNU

가 여러 유닉스 시스템 지원을 목표로 삼고 있으며 역시 그러한 특성을 물려받았기gcc

때문이다 아마도 는 가장 많은 하드웨어 플랫폼을 지원하는 컴파일러가 아닌가 싶. gcc C

다 실제로 지금까지 나온 거의 모든 를 지원한다 이러한 특징으로 는 여러 플랫( CPU ). gcc

폼에 대하여 거의 동일한 개발환경 과 소스 코드 호환성(development environment)

을 제공한다 개발자에게 있어서 개발환경은 매우 중요하(source code compatibility) .

다 특히 가 바뀜에 따라서 변화하는 개발환경은 개발자에게 매우 긴 적응 시간을 소. CPU

비하게 만든다.

의 경우는 플랫폼에 상관없이 대부분의 컴파일러 옵션을 이용할 수 있다 그리고gcc .

소스 코드 호환성 역시 중요한데 예를 들면 계열의 시스템에서나 또는, x86 PowerPC

계열의 시스템에서 약간의 소스 코드 수정만으로도 호환되는 프로그램 개발이 가SPARC

능하다는 것을 의미한다 이 역시 개발자가 다른 플랫폼을 지원하기 위해 소스 코드를.

재작성하는 시간을 줄여주기 때문에 매우 중요한 점이다 이외에도 많은 뛰어난 특징들.

이 있다.

크로스 컴파일러4) (Cross Compiler)

크로스 컴파일러를 이해하기 전에 먼저 호스트 플랫폼 과 타겟 플랫폼(host platform)

이라는 용어를 먼저 이해해야 한다 타겟 플랫폼은 크로스 컴파일러가(target platform) .

생성하는 오브젝트 코드가 실제로 수행되는 시스템을 호스트 플랫폼은 크로스 컴파일러,

를 수행하는 시스템을 일컫는다 예를 들어 펜티엄 컴퓨터상에서 컴파일러를 이. 8051 C

Page 21: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 21 -

용하여 용 오브젝트 코드를 생성하고 그 결과 코드를 롬에 담아서 에서 수행하8051 8051

였을 경우에 펜티엄 컴퓨터는 호스트 플랫폼이 되는 것이고 은 타겟 플랫폼이 된, , 8051

다 여기에서 크로스 교차하다 가로지르다 즉 플랫폼을 가로질러서 컴파일하. (Cross- . . ,

다 라는 말이 생긴 것이다 따라서 호스트 플랫폼과 타겟 플랫폼이 같은 경우는 크로스.) .

라는 말이 붙지 않는다.

이 경우의 대표적인 예는 호환 컴퓨터에서 컴파일러를 이용해서x86 Boland C 386EX(x86

과 호환되는 임베디드용 프로세서 용 오브젝트 코드를 생성하는 경우이다) .

와 크로스 컴파일러5) AVR-GCC

앞에서 말했듯이 는 뛰어난 이식성을 가지고 있다 이러한 특징을 가능하게 하기gcc .

위해 는 플랫폼에 의존적인 부분과 플랫폼에 비 의존적인 부분으로 모듈화되어 있으gcc

며 각 모듈은 서로 특정한 규칙으로 인터페이스되어 있다 따라서 플랫폼에 의존적인, .

부분만 수정하고 다른 모듈과 인터페이스를 맞추어 주면 새로운 플랫폼을 지원하는 gcc

를 제작할 수가 있다 사실 도 그런 방식으로 만들어졌다. AVR-GCC .

가 크로스 컴파일러로써 동작하기 위해서는 몇 개의 도움이 더 필요하다 사실gcc . gcc

는 단지 언어를 어셈블러로 변환하는 기능을 갖는다 따라서 변환된 어셈블러를 오브젝C .

트 코드로 변환 시켜주는 어셈블러 그리고 여러 개의 오브젝트 코드를 하나(assembler)

로 오브젝트 코드로 병합하는 링커 가 필요하다(linker) .

호스트 플랫폼과 타겟 플랫폼이 같은 경우는 어셈블러와 링커를 따로 제작할 필요가

없이 호스트 플랫폼의 것을 이용하면 된다 왜냐면 호스트 어셈블러와 링커가 생성하는(

오브젝트 코드가 타겟과 호환되므로 하지만 크로스 컴파일러의 경우 변환된 어셈블러).

를 타겟용 오브젝트 코드로 만들어줄 어셈블러와 링커가 필요하다 이를 각각 크로스 어(

셈블러와 크로스 링커라고 부른다).

를 위해서 필요한 것들6) AVR-GCC

총 세가지 패키지가 필요하다 즉 용 패치 필요 용 이다. Binutils, GCC(avr ), libc(avr ) .

요약하면 다음과 같다.

여러 바이너리 파일Binutils : cross assembler + cross linker +

유틸리티 예 파일 포맷 변환기( : )

기존의 이 을 지원하도록 패치하여야 함gcc : gcc avr

는 언어를 어셈블러로 변환하는 기능만을 가지므로libc : gcc C

에서 지원해야 할 기본적인 함수가 따로 필요하며 이를C

라고 부른다 심지어 덧셈 이나 곱셈 연산자 에libc . (+) (*)

대한 실제 오브젝트 코드를 는 가지고 있지 않으며 모두gcc

가 제공한다 필수 사항은 아니지만 디버깅 툴인libc .

도 용도 포팅되어 있다gdb(GNU Debugger) AVR .

Page 22: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 22 -

에서 섹션의 사용7) AVR-GCC

에서는 컴파일러가 기본적으로 섹션 섹션 섹션 섹AVR-GCC C .text , .data , .bss , .noinit

션 섹션 등과 같은 개의 섹션을 사용한다, .eeprom 5 .

당연히 섹션은 플래시 메모리를 사용하는 실행 코드용의 섹션이고 섹션.text , .eeprom

은 을 사용하는 데이터용 섹션이다 이밖에도 은 함수 등을 위한 힙EEPROM . SRAM malloc()

메모리로 사용될수 있다(heap) .

에서 특별히 데이터 메모리의 각 섹션 위치를 지정하지 않으면 기본적으로 내AVR-GCC

부 의 낮은 번지에서부터 섹션 섹션 섹션 힙 스택의 순서로 배SRAM .data , .bss , .noinit , ,

열된다 의 경우 이를 그림으로 보이면 위의 그림과 같다. ATmega128 .

데이터 메모리의 섹션들이 이와 같은 순서로 배열되는 것은 기본적으로 링커 스크립트파

일에서 이렇게 할당되도록 지정되어 있기 때문이다 사용자가 조정할 수 있다. .

섹션text①

섹션은 프로그램의 실행 코드로 이루어진 섹션으로서 여기에는 사용자가 작성한.text ,

프로그램의 실행 코드는 물론이고 서두 부분에 섹션과 말미에 섹션을 함께initN .finitN

포함하고 있다.

이밖에도 섹션을 초기화하기 위한 내용과 을 초기화하기 위한 내용을 추가.data .eeprom

로 가지고 있다.

섹션data②

섹션은 초기값이 정의된 전역변수나 함수의 파라미터처럼 정적인 데이터.data (static

를 포함하는 섹션으로서 이는 반드시 영역에 할당된다data) SRAM .

또한 스택을 제외한 모든 데이터 영역을 외부 으로 옮겨서 할당하지 않고 일부 섹션SRAM

만을 외부 메모리에 할당할 수도 있다.

Page 23: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 23 -

섹션bss③

섹션은 초기값이 정의 되지 않은 전역 변수 나 정적 변수.bss (global variable) (static

를 포함하는 섹션으로서 이는 반드시 영역에 할당된다variable) SRAM .

기본적으로 내부 에서 섹 뒤에 이어서 할당되지만 사용자는 시작번지를 임SRAM .data tus ,

의로 지정할수 있다.

섹션noinit④

섹션은 섹션의 일부분으로서 역시 초기값이 정의 되지 않은 전역 변수나.noinit .bss

정적 변수를 포함하는 섹션으로서 이는 반드시 영역에 할당된다SRAM .

의 주요 기능 요약8) AVR-GCC

에서의 변수 및 상수SRAM①

에서 특별히 속성을 지정하지 않고 변수를 정의하면 이는 내부의 영AVR-GCC MCU SRAM

역에 저장된다 이것들은 외부 메모리에 저장되는 경우에 비하여 빠르게 액세스할 수 있.

다는 것이 장점이다.

프로그램 메모리에서의 상수②

에서는 프로그램 메모리에서 상수를 지정하는 여러 가지 방법을 제공하고 있AVR-GCC

다 프로그램 메모리인 플래시 메모리에는 프로그램이나 상수를 정의할 수 있는데 이. ,

상수는 당연히 읽는 것만 가능하지만 모듈에 표시할 문자열 등의 데이터를 저장하는LCD

데 매우 유용하다 물론 이러한 데이터는 에 저장할 수도 있지만 플래시 메모리는. SRAM

매우 용량이 크므로 여기에 저장하는 것이 유리하다.

에서의 변수EEPROM③

의 변수는 액세스 방법이 매우 간단한데 비하여 의 변수를 액세스 하는 방SRAM EEPROM

법은 좀 복잡하다 그렇기 때문에 에서는 을 액세스하는데 필요한 특별한. AVR-GCC EEPROM

을 제공하며 이것들은 헤더파일 에 정의되어 있다GKATNEMFF , <eeprom.h> .

일반적인 데이터형의 표현의AVR-GCC

데이터형 표현

바이트

수표현범위

signed char int8_t 1 -128~+127

unsigned char uint8_t 1 0~255

signed int int16_t 2 -32768~+32767

unsigned int unint16_t 2 0~65535

signed long int32_t 4 -2147483648~+2147483647

unsigned long uint32_t 4 0~4294967295

signed long long int64_t 8 -9.22*10^18~+9.22*10^18

unsigned long long uin64_t 8 0~1.844*0^19

intptr_t 2 와 같음int16_t

unintptr_t 2 와 같음unint16_t

Page 24: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 24 -

레지스터 및 병령 포트의 액세스I/O I/O④

에서는 레지스터로부터 바이트의 데이터를 읽어들이거나 지정된 포트의AVR-GCC I/O 1 ,

포트도 역시 레지스터 영역의 에 해당하므로 이I/O I/O SFR(special function register)

방법을 사용하여 액세스 한다.

인터럽트 프로그래밍⑤

에서는 반드시 지정된 형식으로 인터럽트 서비스 루틴AVR-GCC (interrupt service

또는 함수를 작성하도록 되어 있다routine interrupt handler)

인라인 어셈블 프로그래밍⑥

를 이용하여 프로그램을 작성하다 보면 때로는 언어 소스에서 어셈블리 명령AVR-GCC C

을 사용하고 싶을 경우가 있다 이때는 인라인 어셈블 기능으로 어셈. (inline assemble)

블리 명령을 소스에 포함시킬수 있다C .

레지스터의 사용⑦

언어의 중요한 특징중의 하나는 함수 중심의 언어라는 것이며 일반적으로 함수를 호C ,

출할 때는 입력 파라미터가 전달되고 함수가 수행되고 나서 리턴될 때는 출력파라미터,

를 전달하게 된다 이 함수를 어떻게 전달하고 그것이 함수 안에서 어떤 방법으로 사용.

되는지는 컴파일러의 성능에 중요한 영향을 준다 종래의 컴파일러들은 이러한 파라미C . C

터를 대부분 스택을 통하여 전달함으로써 일반성은 있었으나 처리성능이 낮았다 그러나.

은 의 개 레지스터를 가지고 있으므로 이러한 파라미터 전달에 주로 레지스AVR R0~R31 32

터를 사용하며 이는 언어로 작성된 사용자 프로그램의 실행속도를 높여주므로 그만큼, C

이 언어에 적합한 구조의 마이크로 콘트롤러라는 것을 말해준다AVR C .

컴파일러 사용법9) GCC

새롭게 만들고자 하는 파일의 종류를 선택하고 에 신규로 만들 파일명을 적File Name

어준다 이 때 파일의 위치는 에 나타나 있으며 이 위치를 바꾸고 싶으면. Location ,

의 오른쪽에 있는 폴더 선택 버튼을 눌러 폴더 선택 다이얼로그를 실행하고 신Location ,

규로 만들 수 있는 파일의 종류는 가지며 각각 다음과 같다4 .

Page 25: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 25 -

확장자는 이며 의GCC Source File : “.C” AVR-GCC

파일이 된다C-Source .

확장자는 이며 의GCC Header File : “.H” AVR-GCC Header

파일이 된다.

확장자는 이며 의GCC ASM File : “.S” AVR-GCC assemble

파일이 된다.

의 프로젝트 파일로서 확장자는Project File : Microrobot AVR_GCC

이다“.MRP” .

BUILD MENU

사용자가 만든 프로그램을 하는 메뉴들로 구성되어 있고 또한 의Compile, Link Build

옵션을 변경 할 수도 있다.

Compile

현재 작업 중인 파일을 컴파일 합니다 이는 현재 파일에 대해 문법적인 오류를 검사.

한 뒤 이상이 없으면 오브젝트 파일 을 만드는 과정입니다 만약 오류가 있다면(*.o) .

에 그 내용이 된다Output Message Window LIST .

Build

이 메뉴를 선택하면 현재 작업 중인 파일을 한다Build .

Build All

이 메뉴는 이전에 한 파일이더라도 무조건 다시 모든 파일을 하게 한다 따Build Build .

라서 경고메시지는 이 메뉴를 통해 한 경우 항상 나타나며 보통 이 메뉴는 전체적Build .

으로 프로그램에 이상이 없는 지를 확인하기 위해 또는 최종적으로 다시 하기 위, Build

해 수행된다.

컴파일 구동10)

라는 파일이 정상적으로 만들었다고 가정한다LCD.o .

를LCD.C compile

라는 파일을 에서 추가LCD.o Build Option

이 후부터는 응용 프로그램에 를 함으로서 함수들을 사용할 수 있다LCD.H include LCD .

그러므로 라는 파일은 필요가 없다 물론 수정사항이 발생하거나 함수를 추가해야LCD.C .

할 경우가 발생할 수 있으니 소스는 잘 보관해야 한다.

Hex format

현재에는 두 가지의 포맷을 지원한다.

모토롤라 계열에서 많이 사용하는 포맷S-record format : .

인텔 전용 헥사 포맷입니다Intel hex format : .

Page 26: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 26 -

MCU

의 여종의 를 지원합니다 원하는 를 선택AVR 14 MCU . MCU .

하드웨어에 프로그램을 다운해서 정상적으로 수행되기 위해서는 반드시 일치하는 를MCU

선택해야 한다.

Generation

작업 후 체크되어 있는 파일들을 만들어 준다Link .

Optimization

프로그램의 최적화를 설정.

출력 파일의 크기를 최적화Size : .

프로그램의 실행 속도를 최적화Speed : .

Output file extension

컴파일 결과에 따른 출력 파일의 확장자를 설정 를 선택하면 기본 확장자인. Default *.o

로 출력되며 을 선택하면 사용자가 지정한 확장자로 출력, User define .

List file

컴파일러의 의해 생성된 출력파일에 대한 를 출력list file .

List file sub options

에 포함되는 정보의 종료를 설정List file .

Page 27: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 27 -

Intermediate files

컴파일러의 의해 생성된 임시 파일들을 보관 이 옵션에 의해 생성되는 파일은 컴파일 정.

보를 나타내는 파일과 어셈블된 소스인 이다*.i *.s .

Warning Message

파일 중 경고가 발생하면 이를 에 출력합니다 만약 이 옵션이Output message window .

체크되어 있지 않으면 모든 경고는 무시된다.

Compile just for ANSI-C

대상파일이 오직 형태의 파일이라고 간주하고 컴파일을 수행ANSI-C .

Debug format output

이 옵션을 체크하면 디버그용 오브젝트 파일이 생성된다 따라서 오브젝트 파일의 용량.

이 늘어난다.

Link script

를 선택하면 프로그램이 제공하는 기본적인 파일이 선택된다Default script link script .

는 선택하면 에디터 박스에 직접 파일명의 경로를 적어주거나 파일 탐User link script ,

색 버튼을 눌러 파일을 선택하면 된다.

Output file extension

에 의해 출력될 파일명의 확장자를 설정Linker .

는 이며 컴파일과 링크 작업이 정상적으로 완성되었다면 해당 출력 폴더에Default *.elf ,

확장자가 인 파일이 생성된다 이 파일은 목적 파일로서 일반적인 에디터프로그램으elf .

로는 그 내용을 알 수 가없다.

그래서 로 이런 목적 파일의 내용을 분석하여 그 내용을 요약 해 볼수 있게 되Elf Viwer

어있다.

사용시의 유의 사항11) AVR-GCC

컴파일러의 신뢰성을 의심하지 마라AVR-GCC .①

에서 컴파일 에러가 발생하면 무조건 에러가 발생한AVR-GCC②

행만 체크하지 말고 좀더 넓게 보라.

컴파일이나 링크에서 에러가 없었는데 원하는 실행 결과가 나오지③

않으면 프로그램을 디버깅하기 전에 의 데이터 시트를 다시AVR

보고 의 기능을 먼저 살펴보라MCU

에러 메시지도 없었고 을 사용하는데도 의심의 여지가 없으면AVR④

본격적으로 소스를 파고 들어라.

전역변수를 사용할 때는 주의가 필요하다 처리속도문제.( )⑤

최적화 옵션을 올바르게 지정하라.⑥ 실행속도와 실행코드양의 반비례( )

대용량의 상수 데이터 테이블을 프로그램 메모리에 저장하는데는⑦

Page 28: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 28 -

정확한 처리가 요구된다 메모리문제.( )

수학함수를 지원하는 라이브러리 파일을 링크하려면 사용자가 지정⑧

해 주어야 한다.

에도 스타트업 파일이 있다AVR-GCC .⑨

도 함수이며 함수를 명확히 정의해야 한다main() , void .ꊈ

참고문헌 및 사이트⋇

1) I LOVE ATMGA128 황해권 배성준 복두출판/

2) AVR BIBLE 송용수 배성준 복두출판/

마스터 윤덕용 사3) AVR ATMEGA128 Ohm

리눅스4) 8.0 서자룡 혜지원

5) datasheet163L

수업자료6) ftp://hir.chosun.ac.kr/ /AVR

MaroGCC User Guide

유의사항avr gcc

avr sram control

마이크로프로세서 장AVR _1

마이크로프로세서 장AVR _3

우키의7) http://micro.new21.org/avr/ AVR World

황해권님의 테라뱅크8) http://terabank.co.kr/

홈페이지9) http://gcc.gnu.org/ gcc

윤교수의 마이크로 프로세서 월드10) http://control.cntc.ac.kr/cpu/

11) http://www.atmel.com 홈페이지atmel

홈페이지12) http://winavr.sourceforge.net WINAVR

Page 29: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 29 -

3. I/O, 7-Segment and Relay Control

을 사용하여 할 수 있는 가장 기본적인 기능은 자체 내에 가진 입출력 포트에 신호AVR

를 제어하는 것이다 포트 는 내부 풀업저항을 갖는 양방향 입출력포트이며. A, B, C, D

약 의 출력전류를 갖고 있어 출력전류만으로 를 점멸할 수 있다20mA led .

포트를 제어하는 레지스터는 포트 방향 레지스터 포트 출력 레지스터(DDRn), (PORTn),

포트 입력핀 어드레스 로 세 개의 레지스터를 이용한다(PINn) .

포트를 입력으로 이용할 때는 포트 방향 레지스터 에 을 넣어 입력으로 설정(DDRn) '0'

한 후 포트 입력핀 어드레스 의 데이터를 읽어오면 된다 포트를 출력으로 사용할, (PINn) .

때는 포트 방향 레지스터에 을 넣어 출력으로 설정한 후 포트 출력 레지스터'1' , (PORTn)

로 데이터를 써 넣으면 된다.

여기서 주의해야 할 부분은 데이터 입력시 조건이다 포트 방향 레지스터를 입력으로.

설정하고 데이터를 입력받을 때 포트 출력 레지스터의 조건에 따라 포트 입력 레지스터,

의 상태가 달라지기 때문이다 포트 출력 레지스터로 을 출력하면 포트 입력 레지스. '1' ,

터가 내부 풀업이 연결된 형태로 구성되므로 외부에서 풀업저항을 추가할 필요가 없게

된다 하지만 다른 디바이스와 핀을 공유할 때는 해당핀을 입력이나 출력으로 사용하지. ,

않을 때 포트 출력 레지스터에 을 출력시켜 해당핀을 하이 임피던스 상태로 만들어, '0'

주어야 한다.

와 포트를 위와 같이 연결하고 포트의 해당핀을 로 세트시키면 가 꺼LED AVR ‘1’ LED

지고 으로 클리어 하면 가 켜진다‘0’ LED .

포트 제어1) I/O

은 개의 라인이 있어서 비트씩 개 의 포트AVR163L 32 I/O 8 4 (PORTA, PORTB, PORTC, PORTD)

로 구성되어 있다 각 단자는 내부적으로 풀덥된 비트 양방향 병령 포트이다. I/O 8 .

포트A(PORTA7 ~ PORTA0)①

는 컨버터의 입력 신호로 이용되고 컨버터로 이용하지 않을시에는 내부 풀PORTA AD AD

업저항을 가지는 입출력 포트로서 이용된다 출력 전류는 로서 출력에 직접적으. 20mA LED

로 이용할수 있다 또한 입력포트로 사용될시 내부 풀업저항이 설정되어 있을때 신. low

호가 입력신호로서 인가된다 신호 인가시에는 는 단계의 전압을 갖는다. RESET PORTA 3 .

Page 30: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 30 -

PA0 아날로그 디지털 컨버터 입력신호ADC0 ( 0)

PA1 아날로그 디지털 컨버터 입력신호ADC1 ( 1)

PA2 아날로그 디지털 컨버터 입력신호ADC2 ( 2)

PA3 아날로그 디지털 컨버터 입력신호ADC3 ( 3)

PA4 아날로그 디지털 컨버터 입력신호ADC4 ( 4)

PA5 아날로그 디지털 컨버터 입력신호ADC5 ( 5)

PA6 아날로그 디지털 컨버터 입력신호ADC6 ( 6)

PA7 아날로그 디지털 컨버터 입력신호ADC7 ( 7)

의 다른기능PORTA

외장 사용하지 않고 의 내부 를 사용할 수 있다ADC AVR163L ADC .

포트B(PORTB7 ~ PORTB0)②

PB0 타이머 카운터 외부 카운터입력T0 ( / 0 )

PB1 타이머 카운터 외부 카운터입력T1 ( / 1 )

PB2 아날로그 비교기 양의 입력AIN0 ( )

PB3 아날로그 비교기 음의 입력AIN1 ( )

PB4 슬레이브 선택입력SS (SPI )

PB5 버스 마스터 출력 슬레이브 입력MOSI (SPI / )

PB6 버스 마스터 입력 슬레이브 출력MISO (SPI / )

PB7 버스 직렬 클럭SCK (SPI )

Page 31: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 31 -

내부 풀업 저항을 가지는 입출력 포트로서 이용된다 출력 전류는 로서 출력에. 20mA LED

직접적으로 이용할 수 있다 또한 입력포트로 사용될시 내부 풀업저항이 설정되어 있을때.

신호가 입력신호로서low 인가된다 신호 인가시에는 는 단계의 전압을 갖는. RESET PORTB 3

의 다른 기능PORTB

채널에 대해서 마스터 클럭 출력과 슬레이브 클럭 입력으로 가SCK- Bit 7 : SPI SPI

슬레이브로서 인에이블 되었을 때 이핀은 의 설정에 관계없이 입력으로 설정된다, DDB7

가 마스터로서 인에이블 되었을때 이 핀의 데이터 방향은 에 의해 제어된다 핀SPI , DDB7 .

이 입력으로 설정되었을 때 풀 업은 비트에 의해 제어될 수 있다, - PORTB7 .

채널에 대해서 마스터 데이터 입력과 슬레이브 데이터 출력으로MISO- Bit 6 : SPI

가 마스터로서 인에이블 되었을 때 이 핀은 의 설정에 관계없이 입력으로 설정SPI , DDB6

된다 가 슬레이브로 설정되었을 때 이 핀의 데이터 방향은 에 의해 제어된다. SPI , DDB6 .

이 핀이 입력으로 설정되었을 때 풀 업은 비트에 의해 제어될 수 있다, - PORTB6 .

채널에 대해서 마스터 데이터 출력과 슬레이브 데이터 입력으로MOSI- Bit 5 : SPI SPI

가 슬레이브로 인에이블 되었을 때 이 핀은 의 설정에 관계없이 입력으로서 설SPI , DDB5

정된다 가 마스터로서 인에이블 되었을 때 이 핀의 데이터 방향은 에 의해 제. SPI , DDB5

어된다 이핀이 입력으로 설정되었을 때 풀 업은 비트에 의해 제어될 수 있다. , - PORTB5 .

슬레이브 포트 선택 입력으로서 가 슬레이브로 인에이블 되었을 때- Bit 4 : SPI ,

이 핀은 의 설정에 관계없이 입력으로서 설정된다 슬레이브로서 이 핀이 가 될DDB4 . LOW

때에 는 활성화된다 가 마스터로서 인에이블 되었을 때 이 핀의 데이터 방향은SPI . SPI ,

에 의해 제어된다 이핀인 입력으로서 설정되었을 때 풀 업은 비트의 설정DDB4 . , - PORTB5

에 의해 제어될 수 있다.

아날로그 비교기 음의 입력이며 입력으로 설정되고 내부 풀 업 저AIN1- Bit 3 : , MOS -

항이 단락 되었을 때 이 핀은 내장 아날로그 비교기의 음의 입력으로 사용된다, .

아날로그 비교기 양의 입력이며 입력으로 설정되고 내부 풀 업 저AIN0 - Bit2 : , MOS -

항이 단락 되었을 때 이 핀은 내장 아날로그 비교기의 양의 입력으로 사용된다, .

타이머 카운터 의 카운터 소스T1 - Bit 1 : / 1 .

타이머 카운터 의 카운터 소스T0 - Bit 0 : / 0 .

핀의 사용SPI

핀 방향 마스터, SPI 방향 슬레이브, SPI

MOSI 사용자 정의 입력

MISO 입력 사용자정의

SCK 사용자정의 입력

사용자정의 입력

Page 32: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 32 -

포트C (PORTC7 ~ PORTC0)③

내부 풀업 저항을 가지는 입출력 포트로서 이용된다 출력 전류는 로서 출력에. 20mA LED

직접적으로 이용할 수 있다 또한 입력포트로 사용될시 내부 풀업저항이 설정되어 있을.

때 신호가 입력신호 로서 인가된다 신호 인가시에는 는 단계의 전압을low . RESET PORTB 3

갖는다 또한 아래와 같은 특수한 기능을 같는다. .

PC0 선 시리얼 버스 클럭 신호SCL ( 2 )

PC1 선 시리얼 버스 데이터 입력 출력 신호SDA ( 2 / )

PC6 타이머 오실레이터 핀TOSC1 ( 1)

PC7 타이머 오실레이터 핀TOSC2 ( 2)

타이머 카운터 의 기능을 사용할 경우 클럭 발생을 위한 수정발진TOSC1, TOSC2 : / 0 RTC

자 접속단자 크리스탈 오실레이터 연결. ( )

채널의 데이터 입출력 신호SDA - Bit 1 : TWI 로서 레지스터의 비트TWCR TWEN 가 될'1'

경우 은 입출력 포트가 아닌PORTC1 SD 로서 동작하게 된다A . 내부에는 필터가 존재PORTC1

하며 오픈 콜렉터로서 동작한다.

채널의 클럭 입출력 신호로서 레지스터의 비트가 될SCL - Bit 0 : TWI TWCR TWEN '1'

경우 은 입출력 포트가 아닌 즉 시리얼 클럭 입출력 핀으로서 작동하게 된다PORTC0 SCL .

와 마찬가지로 내부에 필터가 존재한다SDA .

포트D (PORTD7 ~ PORTD0)④

Page 33: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 33 -

내부 풀업 저항을 가지는 입출력 포트로서 이용된다 출력 전류는 로서 출력에. 20mA LED

직접적으로 이용할 수 있다 또한 입력포트로 사용될시 내부 풀업저항이 설정되어 있을때.

신호가 입력신호로low 서 인가된다 신호 인가시에는 는 단계의 전압을 갖. RESET PORTD 3

는다.

의 다른 기능PORTD

PD0 입력RXD (UART )

PD1 출력TXD (UART )

PD2 외부 인터럽트 입력INT0 ( 0 )

PD3 외부 인터럽트 입력INT1 ( 1 )

PD4 타이머 카운터 출력 비교 매치 출력OC1B ( / 1 B )

PD5 타이머 카운터 출력 비교 매치 출력OC1A ( / 1 A )

PD6 타이머 카운터 입력 캡처ICP ( / 1 )

PD7 타이머 카운터 출력 비교매치 출력OC2 ( / 2 )

수신 데이터로서 의 데이터 입력핀이다 의 수신기가 인에이블RXD - Bit 0 : UART . UART

되었을 때 이 핀은 의 값에 상관없이 입력으로 설정된다 가 이 핀을 입력으, DDRD0 . UART

로 설정되었을 때 의 의 값은 내부 풀 업을 턴온 시킨다, PRTD ‘1’ - .

송신 데이터로서 의 데이터 출력 핀이다 의 송신기가 인에이TXD - Bit 1 : UART . UART

블 되었을 때 이 핀은 의 값에 상관없이 출력으로 설정된다, DDRD1 .

은 외부 인터럽트 소스이다 핀은 의 외부 인터럽트 소스INT0 - Bit 2 : INT0 . PD2 MCU

로 사용된다.

은 외부 인터럽트 소스이다 핀은 의 외부 인터럽트 소스INT1 - Bit 3 : INT1 . PD3 MCU

로 사용된다.

는 출력 비교 매치 출력이다 핀은 타이머 카운터 의 비교매OC1B - Bit 4 : OC1B PD4 / 1

치 동작에서 외부 출력으로 사용된다 핀은 이 기능을 사용하기 위해서는 출력을. PD4

으로 설정되어야 한다(DDD4='1') .

는 출력 비교 매치 출력이다 핀은 타이머 카운터 의 비교매OC1A - Bit 5 : OC1A PD5 / 1

치 동작에서 외부 출력으로 사용된다 핀은 이 기능을 사용하기 위해서는 출력을. PD5

으로 설정되어야 한다(DDD5='1') .

입력 캡처 핀이다 핀은 타이커 카운터 의 캡처모드에서 트리거 신ICP - Bit 6 : . PD6 / 1

호로 사용된다.

타이머 카운터 출력 비교 매치 출력이다 핀은 타이머 카운터 의OC2 - Bit 7 : / . PD7 / 2

비교매치 동작에서 외부 출력으로 사용된다.

Page 34: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 34 -

2) 7-SEGMENT Control

는 개를 배열하여 놓은 것으로서 기계 장치의 상태 표시나 에러 표시를 하는FND LED 8

데 많이 사용되고 표시소자 중의 하나이다 세그먼트의 제어는 앞에서 배웠던LED . 7- LED

제어와 같은 방법에 의해서 동작할 수 있으며 일정한 글자 형식으로 나타낼 수 있다, .

그림 은 세그먼트의 핀 구조와 외형도를 나타내고 있다5-1 7- .

세그먼트는 그림 와 같이 공통 단자에 전원에 연결하고 입력 단자에 를 인7- 5-1 +5V 0V

가하였을 때 해당하는 에 불이 들어오는 애노드 공통형과 그림 아래와 같이 공통단LED 5-1

자에 의 전원에 연결하고 입력단자에 를 인가하였을 때 해당하는 에 불이 들0V +5V , LED

어오는 캐소드 공통형인 가지로 나뉘어진다 세그먼트로 을 표시하기 위해서는2 . 7- 1 b, c

를 켠다 가 켜지면 의 숫자를 나타낸다 이와 같은 방법으로 모LED . a, b, g, e, d LED 2 .

든 숫자를 나타낸다 또한 진수 표현으로 등의 영문자도 표현이 가. , 16 A, B, C, D, E, F

능하다.

그림 세그먼트의 분류와 내부도7

Page 35: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 35 -

R30330

VCC

a

b

c

d

e

fg

U8

FND

12

3

4

5

67

8

910

ed

COM2

c

DOT

ba

COM1

fg

R26330

R29330

R17330

VCC

a

b

c

d

e

fg

U1

FND

12

3

4

5

67

8

910

ed

COM2

c

DOT

ba

COM1

fg

R18330

R31330

PD4

R28330

R8330

R13330

U2

74HC595

89

10

13

14

16151234567

1112

GNDQ'H

SCLR

G

SER

VCCQAQBQCQDQEQFQGQH

SCKRCK

R1330

R9330

R34330

R6330

R24330

R23330

R27330

R16330

R19330R20330

VCC

R11330

FND

a

b

c

d

e

fg

U5

FND

12

3

4

5

67

8

910

ed

COM2

c

DOT

ba

COM1

fg

R22330

R7330

R25330

R2330

VCC

a

b

c

d

e

fg

U3

FND

12

3

4

5

67

8

910

ed

COM2

c

DOT

ba

COM1

fg

U9

74HC595

89

10

13

14

16151234567

1112

GNDQ'H

SCLR

G

SER

VCCQAQBQCQDQEQFQGQH

SCKRCK

PD6

R21330

R10330

J1

FND POWER

1 2

U4

74HC595

89

10

13

14

16151234567

1112

GNDQ'H

SCLR

G

SER

VCCQAQBQCQDQEQFQGQH

SCKRCK

R32330

PD5

R3330

R14330

R12330

R15330

U6

74HC595

89

10

13

14

16151234567

1112

GNDQ'H

SCLR

G

SER

VCCQAQBQCQDQEQFQGQH

SCKRCK

R33330

VCC

릴3) 레이 제어

릴레이는 전자석과 철편으로 구성되어 전자석에 전기가 흐르면 철편이 빨려들어가고

스위치가 으로 되는 것이 작동 원리입니다 릴레이가 외부 기기 제어용으로서 많이 이ON .

용되어 왔던 것은 코일 부분과 접점 부분이 완전하게 절연되어 있어서 전기적으로 외부

기기와 절연할 수 있으며 불과 수 로 동작하는 에서 수백 의 전기를 할 수, V MPU V On/Off

있기 때문입니다.

Page 36: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 36 -

릴레이의 단점

동작속도가 느립니다- .

아무리 고속고속 제품이라도 수 의 동작 시간을 필요로 합니다msec .

이것은 기구적으로 작동하기 때문에 방법이 없습니다.

노이즈가 발생합니다-

접점이 접촉한 순간에 스파크가 발생하여 그로인한 노이즈가 발생합니다.

이러한 스파크의 발생을 억제하기위하여 다이오드와 스파크 킬러가 많이 이용됩니다.

메커니컬 릴레이

다음 그림은 프린트 기판 실장 타입 릴레이의 예입니다 접점의 허용 전류에따라 다양.

한 크기와 종류가 있으며 동시에 움직이는 점점의 수에 따른 종류도 다양합니다.

솔리드스테이트 릴레이 SSR)(

반도체로 구성된 릴레이로 그 원리는 포토 커플러와 동일하며 발광 다이오드와 빛,  

트리거 타입의 트라이액을 마주보게 하여 몰드 한 것입니다 트라이액이기 때문에 제로.

크로스 스위치로 동작하여 전류를 제로크로스로 할 수 있게 되어 있습니On/OffAC

다 소형이며 스파크가 발생하지 않고 절연되는 메리트가 있기 때문에 릴레이 대신에 많.

이 사용되고 있습니다 다음그림은 의 예입니다 하이브리드 로 제로 크로스 회로SSR IC. .

등을 구현합니다.

Page 37: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 37 -

포토 릴레이MOS

포토 커플러와 완전히 동일한 구성에서 포토 셀과 발광 다이오드를 마주보게 몰드한

것으로 포토셀에는 형 가 내부에서 접속 구성되어 있습니다 이 형 에는 내MOS FET MOS FET.

압이 이상의 것도 있어서고압 고전류 제어도 할 수 있습니다 대표적인 포토V400 .

릴레이입니다 소형으로 큰 전압을 제어하는 것이 가능합니다.MOS .

기타

입력 제어 와 대용량 부하제어용으로 모우터등을 손쉽게 제어할 수 있다DC DC 500V

릴레이를 이용하여 로 제어하기AVR 163L 220V

Page 38: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 38 -

의 포트에서 출력되는 전류로 포토커플러 안에 있는 를 하면 릴레이가 구AVR I/O LED ON

동되는 원리로 동작합니다 포토커플러는 빛으로 신호를 전달하기 때문에 의. AVR163L 5V

와 릴레이측을 전기적으로 분리시킬수 있으며 노이즈 등이 전달되지 않는다 릴레이측에.

부착된 다이오드는 코일이 할때 역기전류를 막아주고 저항값은 옴이 적D1 ON/OFF R1 330

당하다.

RELAY COM3

U11

ATQ209

1

2

3

4

5 6

7

8

9

10+

B1

COMM1

A1

5 6

A2

COMM2

B2

-

RELAY NO0

RELAY NC2

PA2

RELAY NO1

RELAY COM2

PA0

D7

LED

C

R51

RESISTOR SIP 5

12345

RELAY NC0

RELAY NC1

RELAY

PA1

RELAY NO3

D8

LED

RELAY COM1

D3

LED

VCC

U10

ATQ209

1

2

3

4

5 6

7

8

9

10+

B1

COMM1

A1

5 6

A2

COMM2

B2

-

RELAY NC3

RELAY NO2

U12

ATQ209

1

2

3

4

5 6

7

8

9

10+

B1

COMM1

A1

5 6

A2

COMM2

B2

-

U13

ATQ209

1

2

3

4

5 6

7

8

9

10+

B1

COMM1

A1

5 6

A2

COMM2

B2

-

RELAY COM0

D4

LED

PA3

Page 39: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 39 -

예제 교통신호등 만들기1.

#include <mega163.h>

#include <delay.h>

점등// led

void main(void)

{

unsigned char led = 0xff;

DDRA = 0xff;

while(1)

{

led -= 1 ;

delay_ms(1000) ;

if( led < 0x10 )

{

led = 0xff ;

}

PORTA = led ;

delay_ms(1000) ;

}

}

교통신호등//

unsigned char tb[5]={0xfb,0xfd,0xfe,0xf9,0xfc};

void main(void)

{

int i;

DDRA = 0xff;

do {

녹색PORTA=tb[0]; /* LED on */

delay_ms( 500 ); 녹색 켜지는 시간/* LED */

녹색은 켜진 상태에서 노란색 번 깜박임/* LED 4 */

for( i = 0; i < 4; i ++ )

{

PORTA=tb[3] ;

시간delay_ms( 1000 ); /* ON */

PORTA=tb[0];

시간delay_ms( 1000 ); /* OFF */

}

적색/* LED on */

PORTA=tb[2]; 적색을 초 켜고/* 0.5 */

delay_ms( 500 );

for( i = 0; i < 4; i ++ )

{

Page 40: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 40 -

PORTA=tb[4];

시간delay_ms( 1000 ); /* ON */

PORTA=tb[2]; 녹색은 켜고 노란색은 꺼짐/* P1 = 0xfb;

대치해도 됨 (0b11111011) */

시간delay_ms( 1000 ); /* OFF */

}

}while( 1 ); 구간을 무한 반복/* do while */~

}

예제 릴레이 제어2.

릴레이를 이용한 쉬프트//

void main(void)

{

unsigned char led;

DDRA=0xFF;

led = 0x01;

while(1)

{

PORTA = led;

led = led << 1;

if( (led & 0x10) == 0x10)

{

led = 0x01;

}

delay_ms(1000);

}

}

예제 제어3. 7-segment

char seg1[] =

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x8f,0x80,0x90,0x7f,0x83,0xc6,0xa1,0x86,0x8e};

void main(void)

{

unsigned char i;

DDRC=0xFF;

while(1)

{

for(i=0;i<11;i++)

{

PORTC= seg1[i]; // ~ seg1[i]

delay_ms(1000);

}

}

}

Page 41: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 41 -

예제 를 이용한4. 74hc595 7-segment

#define SER PORTD.5

#define SCK PORTD.6

#define RCK PORTD.7

void write_HC595(unsigned char udata)

{

unsigned char i;

RCK = 1;

for(i=0;i<8;i++)

{

SCK = 1;

SER = udata & 0x80;

SCK = 0;

udata = udata << 1;

}

RCK = 0;

}

char seg1[] =

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x8f,0x80,0x90,0x7f,0x83,0xc6,0xa1,0x86,0x8e};

void main(void)

{

unsigned char i;

while(1)

{

for(i=0;i<16;i++)

{

write_HC595(seg1[i]);

delay_ms(1000);

}

}

}

Page 42: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 42 -

4. Atmega163L Interrupt

인터럽트란1) ?

가 현재 처리학 는 일보다 급하게 처리해야 할 사건이 발생했을 때 현재 수행CPU hdlT ,

중인 일을 잠시 중단하고 급한 일을 처리한 후에 본래의 일을 다시 수행하는 것을 말한

다.

인터럽트를 사용하면 프로그램을 순서대로만 처리하지 않기 때문에 발생 시기를 예측

할 수 없는 사건을 처리하는데 효과적이다.

인터럽트 처리과정2)

인터럽트가 준비된 장치는 인터럽트 요구 플래그 비트를 세트하고 에게 인터럽트(1) CPU

를 요구한다 인터럽트 발생.( )

는 인터럽트 확인 신호를 보내고 를 받은(2) CPU (INTA : interrupt acknowledge) , INTA

입출력 장치는 인터럽트 요구 신호를 삭제 한다(INTR : interrupt request) .

는 레지스터 등을 스택에 저장한다(3) CPU PC, PSW, (PUSH)

는 인터럽트 서비스 루틴 의 주소를 프로그램 카운터 에 적재한다(4) CPU (ISR) (PC) .

인터럽트 서비스 루틴을 수행한다(5) .

레지스터 등을 스택으로부터 복귀한다(6) PSW, .(POP)

본래의 메인 프로그램으로 복귀한다(7) .

다음 그림과 같이 표현될 수 있다.

Page 43: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 43 -

의 인터럽트 벡터3) Atmega163L

VectorNo.

ProgramAddress

Source Interrupt Definition

1 $000(1) RESETExternal Pin, Power-on Reset, Brown-out Reset

and Watchdog Reset

2 $002 INT0 External Interrupt Request 0

3 $004 INT1 External Interrupt Request 1

4 $006 TIMER2 COMP Timer/Counter2 Compare Match

5 $008 TIMER2 OVF Timer/Counter2 Overflow

6 $00A TIMER1 CAPT Timer/Counter1 Capture Event

7 $00C TIMER1 COMPA Timer/Counter1 Compare Match A

8 $00E TIMER1 COMPB Timer/Counter1 Compare Match B

9 $010 TIMER1 OVF Timer/Counter1 Overflow

10 $012 TIMER0 OVF Timer/Counter0 Overflow

11 $014 SPI, STC Serial Transfer Complete

12 $016 UART, RXC UART, Rx Complete

13 $018 UART, UDRE UART Data Register Empty

14 $01A UART, TXC UART, Tx Complete

15 $01C ADC ADC Conversion Complete

16 $01E EE_RDY EEPROM Ready

17 $020 ANA_COMP Analog Comparator

18 $022 TWSI 2-wire Serial Interface

인터럽트 사용을 위해 알아야할 의 레지스터들4) MCU ...

4-1 The Status Register SREG–

Bit7-I: Global interrupt Enable․외부 인터럽트 핀을 가동하기 위해서는 반드시 가Global interrupt Enable bit set(1)

되어야 만 한다 만약 가 되어 있다면 어떤 인터럽트. Global interrupt Enable clear(0)

도 동작할 수 없다 각각의 인터럽트 사용가능은. (INT0, INT1) General Interrupt Mask

에서 설정할 수 있다Register(GIMSK)

실제 코딩할 때 예

또는 로 써주면 된다#asm("sei"); SREG I = 0x80; .

나머지 은 인터럽트 사용 과 무관하기 때문에 넘어갑니다Bit 6~0 (enable) .․

Page 44: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 44 -

4-2 The General Interrupt Mask Register GIMSK–

외부 인터럽트Bit 7 - INT1 : 1․가 되고 의 가 될 때 외부 인터INT1 bit set(1) Status Register(SREG) bit7-I set(1)▷

럽트 핀은 활성화 된다.

에 있는MCU General Control Register(MCUCR) Interrupt Sense Control▷

는 가 상승 에지 에서 동작할지 하강 에0,1bits(ISC11 and ISC10) INT1 (risring edge)

지 에서 동작할지를 결정한다(falling edge) .

핀은 핀으로 설정되어 있더라도 인터럽트는 요청될 수 있다 중복사용 가INT1 output (▷

능)

외부인터럽트Bit 6 - INT0 : 0․가 되고 의 가 될 때 외부 인터INT0 bit set(1) Status Register(SREG) bit7-I set(1)▷

럽트 핀은 활성화 된다.

에 있는MCU General Control Register(MCUCR) Interrupt Sense Control▷

는 가 상승 에지 에서 동작할지 하강 에0,1bits(ISC01 and ISC00) INT0 (risring edge)

지 에서 동작할지를 결정한다(falling edge) .

핀은 핀으로 설정되어 있더라도 인터럽트는 요청될 수 있다 중복사용 가INT0 output (▷

능)

Bit 5 - Res: Reserved Bits․이 는 에서 제한되어있는 이고 읽기값이 정의되지 않았다bit ATmega163L bit .▷

Bit 4~0 - Res: Reserved Bits․이 들은 에서 제한되어있는 들이고 읽기값이 항상 이다bit ATmega163L bit 0(zero) .▷

각각의 인터럽트 인에이블 사용예

만 가능INT0 GIMSK = 0x40;

만 가능INT1 GIMSK = 0x80;

모두가능INT0, INT1 GIMSK = 0xC0;

4-3 The General Interrupt Flag Register GIFR–

․Bit 7 - INF1: External Interrupt Flag1

Page 45: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 45 -

핀의 에지 또는 논리적인 변화가 인터럽트 요청을 일으킬 때 대응하는 인터INT1 (edge)▷

럽트 플래그 인 이 된다(interrupt flag) INF1 set(1) .

의 와 대응하는 인터럽트 가능 인 의 이 로 설정되면SREG I-bit bit GIMSK INT1 set(1) ,▷

는 로 점프한다MCU interrupt vector .

인터럽트 루틴이 실행될때 는 자동으로 된다 또는 에 비트에 논리적flag clear(0) . INF1▷

으로 을 쓰면 클리어가 된다 또 이 레벨 인터럽트로 설정되면 비트는“1” INF1 , INF1

자동으로 클리어 된다.

Bit 6 - INF0: External Interrupt Flag0․핀의 에지 또는 논리적인 변화가 인터럽트 요청을 일으킬 때 대응하는 인터INT0 (edge)▷

럽트 플래그 인 이 된다(interrupt flag) INF0 set(1) .

의 와 대응하는 인터럽트 가능 인 의 이 로 설정되면SREG I-bit bit GIMSK INT0 set(1) ,▷

는 로 점프한다MCU interrupt vector .

인터럽트 루틴이 실행될때 는 자동으로 된다 또는 에 비트에 논리적flag clear(0) . INF1▷

으로 을 쓰면 클리어가 된다 또 이 레벨 인터럽트로 설정되면 비트는“1” INF1 , INF1

자동으로 클리어 된다.

과 은 채터링 방지를 위해서 사용한다(INF0 INF1 .)

Bit 5~0 - Res: Reserved Bits․이 들은 에서 제한되어있는 들이고 읽기값이 항상 이다bit ATmega163L bit 0(zero) .▷

4-4 MCU Control Register MCUCR :–

레지스터는 및 일반적인 의 기능을 설정하는 기능이MCUCR interrupt sense control MCU

있다.

Bit 7 - Res: Reserved Bit․이 는 에서 제한되어있는 이고 읽기값이 항상 이다bit ATmega163L bit 0(zero) .▷

Bit 6 - SE: Sleep Enable․지시가 실행되었을때 가 가 되려면 는 되어야만 한SLEEP MCU Sleep mode SE bit set(1)▷

다.

Bit 5,4 - SM1/SM0 : Sleep Mode select Bits 1 and 0․이 들은 아래표와 같은 사용가능한 를 선택한다bit Sleep Mode .

Sleep Mode Select

Bit 3,2 - ISC11, ISC10 : Interrupt Sense Control 1 Bit 1 and Bit 0․외부인터럽트 은 와 대응하는 의 인터럽트 마스크를 설정1(INT1) SREG I Flag GIMSK (set)

함으로써 발생된다 핀의 레벨과 에지를 활성화하는 것은 아래표에 정의되어있다. INT1 .

Page 46: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 46 -

ISC11 ISC10 설명

0 0 의 에서 인터럽트를 발생한다INT1 LOW LEVEL .

0 1 의 논리적인 변화에서 인터럽트를 발생한다INT1 .

1 0 의 하강 에지에서 인터럽트를 발생한다INT1 .

1 1 의 상승 에지에서 인터럽트를 발생한다INT1 .

Interrupt 1 Sense Control

Bit 1,0 - ISC01, ISC00 : Interrupt Sense Control 0 Bit 1 and Bit 0․외부인터럽트 은 와 대응하는 의 인터럽트 마스크를 설정0(INT0) SREG I Flag GIMSK (set)

함으로써 발생된다 핀의 레벨과 에지를 활성화하는 것은 아래표에 정의되어있다. INT0 .

ISC01 ISC00 설명

0 0 의 에서 인터럽트를 발생한다INT0 LOW LEVEL .

0 1 의 논리적인 변화에서 인터럽트를 발생한다INT0 .

1 0 의 하강 에지에서 인터럽트를 발생한다INT0 .

1 1 의 상승 에지에서 인터럽트를 발생한다INT0 .

Interrupt 0 Sense Control

과 의 인터럽트 타입 결정의 예INT0 INT1

INT0, INT1 LOW LEVEL MCUCR = 0x00

INT0-LOW LEVEL & INT1- FALLING EDGE MCUCR = 0x08

INT0-LOW LEVEL & INT1- RISING EDGE MCUCR = 0x0C

INT0-FALLING EDGE & INT1-RISING EDGE MCUCR = 0x0E

논리적 변화INT0- & INT1- FALLING EDGE MCUCR = 0x09

INT0-FALLING EDGE & INT1-FALLING EDGE MCUCR = 0x0A

실습예제5)

위에서 공부한 레지스터들의 특성을 이용해 인터럽트 프로그래밍을 실습한다.

예제 인터럽트 실험1. 1

아래와 같은 회로를 작성하고 프로그램1) 모두 점등된 상태에서 을 누르PORTB0~7 INT0

면 세 번 깜빡이고 다시 켜지는 프로그램을 작성한다 단 인터럽트 타입은 하강에지이.(

다.)

Page 47: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 47 -

실습 회로도< >

프로그램< >

#include <mega163.h>

void delay(unsigned int m)

{

unsigned int i, j;

for(i=0;i<m;i++)

for(j=0;j<1000;j++);

}

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

unsigned int i;

for(i=0; i<3; i++)

{

PORTB = 0x00;

delay(200);

PORTB = 0xff;

delay(200);

}

}

void main(void)

{

DDRB=0xff;

/RESETPD7

PD1PD2PD3PD4PD5PD6

PD0

R1 10K R 10K

VCC VCC

C20.1u

C10.1u

SW3

int0 SW

1

4

2

3

SW4

int1 SW

1

4

2

3R330*8EA

PB2(AIN0)PB1(T1)PB0(T0)

PB3(AIN1)

PB7(SCK)PB6(MISO)PB5(MOSI)PB4(SS)

VCC

VCC

J1

L CON

11

22

33

44

55

66

77

88

99

1010

1111

1212

1313

1414

1515

1616

1717

1818

1919

2020

J2

H CON21 2122

22232324 242525262627 272828292930 303131323233 333434353536 363737383839 3940 40

Page 48: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 48 -

GIMSK=0x40; // External Interrupt(s) initialization

MCUCR=0x02; // INT0: On INT1: Off

GIFR=0x40; // INT0 Mode: Falling Edge

#asm("sei") // Global enable interrupts

while (1)

{

PORTB=0x00;

}

}

예제 인터럽트 실험2. 2

의 가 모두 켜진 상태에서 을 누르면 왼쪽으로 가 하나씩 꺼지면서PORTB0~7 LED INT0 LED

이동하고 을 누르면 오른쪽으로 가 하나씩 꺼지면서 이동하는 프로그램을 작성하INT1 LED

라 단 인터럽트 타입은 은 하강에지 은 이다( INT0 , INT1 LOW LEVEL .)

프로그램< >

#include <mega163.h>

unsigned int led =0x00;

void delay(unsigned int m)

{

unsigned int i, j;

for(i=0;i<m;i++)

for(j=0;j<1000;j++);

}

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

led = led << 1;

if(led == 0x00)led = 0x01;

PORTB = led;

}

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void)

{

led = led >> 1;

if(led == 0x00)led = 0x80;

delay(100);

PORTB = led;

}

void main(void)

{

PORTB=0x00;

Page 49: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 49 -

DDRB=0xFF;

// External Interrupt(s) initialization

GIMSK=0xC0; // INT0: On INT1: On

MCUCR=0x02; // INT0 Mode: Falling Edge, INT1 Mode: Low level

GIFR=0xC0;

// Global enable interrupts

#asm("sei")

while (1);

}

예제 인터럽트 실험3. 3

에 연결된 가 하나씩 오른쪽으로 이동하는 상태에서 이 발생하면PORTB LED ( ) INT0 LED 8

개를 번 깜빡이고 나서 다시 정상적인 동작 를 하나씩 오른쪽으로 이동 하도록3 , (LED )

하고 이 발생하면 개를 번 깜빡이고 나서 다시 정상적인 동작 를 하나INT1 LED 8 3 , (LED

씩 왼쪽으로 이동 하도록 하는 프로그램입니다 단 모두 하강에지 사용) ( , INT0,INT1 )

프로그램< >

#include <mega163.h>

unsigned char dir=0;

void delay(long int i)

{

while(i--);

}

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

unsigned int i;

dir = 0;

for(i=0; i<3; i++)

{

PORTB = 0x00;

delay(100000);

PORTB = 0xff;

delay(100000);

}

}

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void)

{

unsigned int i;

dir = 1;

for(i=0; i<3; i++)

Page 50: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 50 -

{

PORTB = 0x00;

delay(100000);

PORTB = 0xff;

delay(100000);

}

}

void main(void)

{

unsigned char led = 0xfe;

DDRB = 0xff;

PORTB = led;

// External Interrupt(s) initialization

GIMSK=0xC0; // INT0: On INT1: On

MCUCR=0x0A; // INT0 Mode: Falling Edge, INT1 Mode: Falling Edge

GIFR=0xC0;

// Global enable interrupts

또는#asm("sei") // SREG I = 0x80;

while(1)

{

delay(100000);

switch (dir)

{

case 0:

led = (led << 1) | 0x01;

if(led == 0xff) led = 0xfe;

PORTB = led;

break;

case 1:

led = (led >> 1) | 0x80;

if(led == 0xff) led = 0x7f;

PORTB = led;

break;

}

}

}

Page 51: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 51 -

5. Timer & Real-time clock

타이머 카운터 은 개의 일반적인 타이머 카운터를 제공한다 개의/ ATmega 163 3 / . 2 8bit

타이머 카운터 이하 와 한개의 가 그것이다/ ( T/C) 16bit T/C .

가 이고 타이머 카운터는 이다 는 외부* T/C 0, T/C 2 8bit , 16bit / T/C 1 . T/C 2

에 의해 비동기적으로 킹 될 수 있다 이 외부 는Oscillator clock . oscillator RTC(Real

로 사용될 수 있도록 짜리 에 최적화 되어 있다Time Clock) 32.768Hz Watch-Crystal .

과 은 같은 짜리 로 부터 각각의 라인을 가지고 있다T/C 0 1 10bit Prescaler Selection .

는 자신만의 를 가지고 있다T/C 2 Prescaler .

이 두개의 는 레지스터의 특정 에 의해서 이 가능하Prescaler SFIOR bit Setting Reset

다.

이 들은 내부의 시간기준에 의한 에 의해서나 외부 핀의 트리거에 의해T/C Clock ,

이 가능하다Counting .

그림 과 의T/C 0 1 Prescaler

그림 의T/C 2 Prescaler

Page 52: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 52 -

과 은 가지의 선택이 가능하다 각각T/C 0 1 4 Prescaled . CK/8, CK/64, CK/256, CK/1024

이다 레지스터의 를 하면 는 되며 과. SFIOR PSR10 bit Setting Prescaler Reset , T/C 0 T/C

은 이 를 공유 하므로 양쪽 에 모두 영향을 미친다1 Prescaler T/C .

로의 는 기본적으로 메인 시스템 인 이며 레지스터의T/C 2 Clock Source Clock CK , ASSR

를 해서 비동기적으로 핀 의 을 로 사용할 수 있다AS2bit Setting PC6 (TOSC1) Clock Source .

이것은 를 로 사용 가능하게 해준다T/C 2 RTC .

가 되면 핀 과 핀 는 포트 로 부터 끊기게 된다AS2bit Setting PC6 (TOSC1) PC7 (TOSC2) C .

이렇게 해서 을 핀과 핀에 연결하여 외부 로 사용할 수 있Crystal PC6 PC7 , Clock Source

다 는 특별히 에 에 최적화 되어 있다 레지스터의. Oscillator 32.768Khz Crystal . SFIOR

를 하면 이 는 된다PSR2bit Setting Prescaler Reset .

그림 타이머 카운터 의 블럭 다이어 그램8bit T/C 0

는 로 프리 스케일된 혹은 외부 핀을 선택할 수 있다8bit T/C 0 Clock Source CK, CK, .

추가적으로 는 에 의해 정지 될 수T/C 0 TCCR0 (Timer/Counter0 Control Register) (stop)

있다 이외에 는 의 컨트롤 상태를 가지고 있다. TCCR0 T/C 0 .

오버플로우 상태는 로 알 수 있다TIFR(Timer/Counter Flag Register) .

인터럽트 제어는 레지스터 에서 한다TIMSK(Timer/Counter Interrupt Mask Register) .

만일 이 외부적으로 를 사용하게 되면 이 외부 신호는 의T/C 0 Clock Source , CPU

주파수와 동기화 되게 된다 외부적 신호를 정확하게 하기 위해 최Oscillator . Sampling

소한 외부 의 전이 시간은 내부 의 한 주기는 되어야 한다 외부Clock CPU Clock . Clock

신호는 내부 의 라이징 에지에서 된다CPU Clock - Sampling .

낮은 으로 보다 고밀도와 정확성이 높은 타이머 카운터로 쓸수 있으며 반Prescaling / ,

대로 높은 으로 낮은 속도를 보이는 함수나 자주 사용되지 않는 부분에 대해Prescaling ,

유용하게 사용할 수 있다.

Page 53: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 53 -

레지스터TCCR0

까지는 사용되지 않으며 항상 으로 읽힌다bit 7~3 0 .

의 기능은 그림과 같다bit 2,1,0 .

그림 의. TCCR0 2,1,0 bit (CS02, CS01, CS00)

정지기능은 의 기능을 제공하며 모드는Timer Enable/Disable , Prescaled CK CK

로부터 하게 스케일 된다 만일 외부 핀 모드로 사용되면Oscillator Directly . , PB0/(T0)

의 변이가 카운터의 으로 사용된다 이 핀이 설사 출력으로 설정 되어 있어도 그Clock . (

렇다. )

레지스터는 업 카운터로 동작하며 읽기 쓰기가 가능하다 만TCNT0( Timer Counter 0) - / .

일 가 쓰기 동작중일때 가 발생되면 쓰기 동작을 완료한 후 바로TCNT0 Clock Source ,

한다Counting .

타이머 카운터16bit

의 은 와 마찬가지로 외부 핀을 로 사16bit T/C 1 T/C0 CK, Prescaled CK, Clock Source

용 할 수 있다 레지스터로 정지가 가능하. TCCR1B (Timer Counter1 Control Register B)

다 각각의 상태 플래그 오버 플로우 비교매치 캡쳐이벤트 는 레지스터로 알 수. ( , , ) TIFR

있다 의 제어는 와 레지스터로 한다 인터럽트 제어는 레지스. T/C 1 TCCR1B TCCR1A . TIMSK

터에서 수행한다.

만일 이 외부적으로 를 사용하게 되면 이 외부 신호는 의T/C 1 Clock Source , CPU

주파수와 동기화 되게 된다 외부적 신호를 정확하게 하기 위해 최Oscillator . Sampling

소한 외부 의 전이 시간은 내부 의 한 주기는 되어야 한다 외부Clock CPU Clock . Clock

신호는 내부 의 라이징 에지에서 된다CPU Clock - Sampling .

Page 54: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 54 -

은 와 레지스터를 통한 두개의 출력 비교T/C 1 OCR1A(Output Compare Register 1A) OCR1B

기능을 제공한다 데이타 는 이를 통해 의 값과 비교가 가능하다. source T/C 1 .

그림 의 블럭 다이어그램T/C 1

출력비교 기능은 매치를 통해 카운터 초기화를 지원하며 양쪽모두 출력비교핀compareA ,

을 활성화 시킬수 있다 는 짜리 으로도 사용되(Output Compare Pins) . T/C 1 8,9,10bit PWM

어 질 수 있다 모드에서는 레지스터가 중앙 펄스 방식. PWM OCR1A/OCR1B (centered-

의 독립적 듀얼 글리치 프리 으로 작동한다 이외에pulses) - - (dual glitch-free) PWM . , T/C

이 모드에서 속도를 배 빠르게 조정될 수 있는데 이때는 중앙펄스 방식이 아니게1 PWM 2 ,

된다.

의 입력감지 기능은 외부 발생 이벤트에 대한 입력감지핀 의 트리거T/C 1 (ICP)

로 입력 캡쳐 레지스터 의 입력 감지 기능을 수행 할 수 있게 한다 입력(trigger) (ICR) .

감지 관련 은 컨트롤 레지스터 에 의해 행해진다 추가적으로Setting T/C 1 (TCCR1B) .

는 아날로그 비교기 를 입력 트리거로 할 수 있다TCCR1B (Analog Comparator) Setting .

입력 감지핀의 구성은 다음 그림과 같다.

Page 55: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 55 -

그림 입력감지핀 의 구조(ICP)

만일 노이즈 제거 기능이 활성화 되어 있으면 실제 입력 이벤트의 트리거 조건은 개, 4

의샘플마다 모니터 된다 그리고 이 개의 샘플은 모두 같아야 한다. 4 .

타이머 카운터 컨트롤 레지스터16bit A - TCCR1A

출력비교 모드 과* Bit 7,6 -COM1A1, COM1A0 : 1A, bit 1 0

과 제어 는 아래의 의 모든 출력 핀에 대한 정의를 담당한다COM1A1 COM1A0 bit T/C1 .

즉 출력비교 에 영향를 미치는 모든 출력 핀들에 대해서이다, OC1A( A) .

이는 포트에 대해 변경 가능한 기능으로 이에 해당하는 방향 제어 가 로I/O , bit 1

되어 있어야 하며 제어와 관련된 구성은 아래 그림 와 같다Setting , 9 .

출력비교 모드 과* Bit 5,4 -COM1B1, COM1B0 : 1B, bit 1 0

과 제어 는 아래의 의 모든 출력 핀에 대한 정의를 담당한다COM1B1 COM1B0 bit T/C1 .

즉 출력비교 에 영향를 미치는 모든 출력 핀들에 대해서이다, OC1B( B) .

이는 포트에 대해 변경 가능한 기능으로 이에 해당하는 방향 제어 가 로I/O , bit 1

되어 있어야 하며 제어와 관련된 구성은 아래 그림과 같다Setting , .

그림 출력비교 모드 선택1

또는Note: X=A B

모드에서는 위의 들은 각기 다른 기능을 하는데 사용된다PWM bit .

* Bit3 - FOC1A : Force Output Compare 1A

이 를 로 하는 것은 비교매치 출력 핀 을 미리 되어 있는bit 1 Setting , PD5 Setting COM1A1

Page 56: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 56 -

과 에 따라 바꾸도록 한다COM1A0

만일 과 가 같은 사이클에 되면 이 새로운 은 다음 비교매COM1A1 COM1A0bit Write , Setting

치까지 혹은 강제 비교매치 전 가짜효력을 발생하지 않는다 는 내의 비, . FOC bit Timer

교매치를 기다리지 않고 출력핀을 바꾸는데 사용될 수 있다 즉 과 를, . , COM1A1 COM1A0bit

자동적으로 프로그램 되게 하여 비교매치가 발생된 것처럼 할 수 있다 그러나 인터럽, . ,

트는 발생하지 않으며 과 가 되어 있다 하더라고 를 클리어 하지는, CTC1 TCCR1B set Timer

않는다 가 해당 핀에 효과를 발휘하기 위해서는 해당되는 핀은 출력핀으. FOC1A bit I/O

로 선택되어 있어야 한다 는 항상 으로 읽히며 의 은 모. FOC1Abit 0 , FOC1Abit Setting PWM

드에 영향을 주지 않는다.

* Bit2 - FOC1B : Force Output Compare 1B

위와 동일하다 단 로 변경. COM1A1,COM1A0 -> COM1B1, COM1B0

선택 틀* Bit1,0 - PWM11, PWM10 : PWM bit

이 들은 의 관련된 모드를 선택한다bit T/C 1 PWM .

그림 모드 선택PWM

타이머 카운터 컨트롤 레지스터16bit B - TCCR1B

* Bit 7 - ICNC1: Input Capture 1 Noise Canceler (4 CKs)

가 으로 되어 있으면 입력 감지 트리거 잡음 제거 기능은 비 활설화 된다ICNC1 bit 0 , .

입력 감지 신호는 입력감지핀 의 최초 라이징 펄링 에지 에서ICP( ) / - (rising/falling edge)

트리거된다.

만일 가 로 되어 있으면 의 개의 연속된 이 측정되며ICNC1 bit 1 Setting , ICP 4 sample ,

개 모두가 에서 된 대로 하이 또는 로우 가 되어야 입력4 ICES1 bit Setting (high) (low)

감지 트리거로 인정 된다 실제 샘플링 주파수는 주파수가 된다. XTAL Clock .

* Bit 6 - ICES1 : Input Capture 1 Edge Select

만일 가 이면 의 내용은 의 신호가 펄링 에지일때ICES1 bit 0 , T/C1 ICP - ,ICR1(Input

로 전이되며 로 되어 있으면 라이징 에지일때 전이된다Capture Register) , 1 Setting , - .

Page 57: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 57 -

보류된* Bit 5,4 -Res : bit

보류된 들이며 항상 으로 읽힌다bit 0 .

* Bit 3- CTC1 : Clear Timer / Counter 1 on Compare Match

만일 이 로 되어 있으면 은 매치후 사이클 이내에CTC1 1 Setting , T/C 1 compareA Clock

으로 되며 으로 되어 있으면 을 계속하며 비교매치에 영$0000 Reset , 0 Setting , Counting ,

향을 주지 않는다.

만일 이 사용되고 있고 레지스터가 로 이 되어 있다면Prescaling 1 , compareA C Setting ,

이 되어 있을경우 아래와 같이 카운트 할 것이다CTC1 Setting .

C-1, C, 0, 1 .......

만일 가 나누기 로 되어 있을 경우 타이머 카운트는 아래와 같다Prescaler 8 Setting , .

C-1,C-1,C-1,C-1,C-1,C-1,C-1,C-1, C, C, C, C, C, C, C, C, 0, 0, 0, 0, 0, 0, 0, 0,

1, 1, 1, ....

모드에서는 이 는 다른 기능을 하며 만일 모드에서 이 가 으로 되어 있으PWM bit , PWM bit 0

면 은 업 다운 카운터로 작동 한다 만일 로 되어 있으면 타이머 카운터가 최고T/C 1 / . 1 , /

치값에 도달하였을 경우 다시 랩 하도록 되어 있다, (wrap) .

* Bit 2,1,0 - CS12, CS11, CS10 : Clock Select 1, Bit 2,1,0

선택 은 의 를 결정한다Clock bit 2,1,0 T/C 1 Prescaler source .

그림 실렉트clock 1 Prescaler

정지조건은 를 가동 정지 할 수 있게 해주며 프리스케일모드는Timer / , CK Oscillator

으로부터 바로 스케일 된다 만일 에 외부 핀 모드가 사용되면 핀이 비로 출Clock . T/C 1 ,

력으로 설정되어 있다 하더라도 의 전이가 카운터를 시킬것이다 이 기능PB1/(T1) Clock .

은 사용자의 가 을 콘트롤 할 수 있도록 해 준다S/W Counting .

Page 58: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 58 -

타이머 카운터 와1 TCNT1H TCNT1L

이 레지스터는 의 된 값을 저장하고 있다 이 두개의 레지스터에16bit T/C 1 Prescaled .

읽기와 쓰기를 행할때 는 동시에 접근하기 위하여 짜리 레지스터를 사용한, CPU 8bit TEMP

다 이 임시 레지스터는 레지스에 접근할때도 사용된다 메인프로그. OCR1A, OCR1B, ICR1 .

램과 인터럽트 루틴에 의해 레지스터에 접근이 이루어 질때 다른 메인프로그램과 인터,

럽트 루틴의 접근을 방지하기 위해 인터럽트는 비 활성화 되어 있어야 한다.

타이머 카운터 쓰기TCNT1 /

가 에 쓸때 쓰기위한 데이터는 레지스터에 써지며 다음 에 쓸CPU TCNT1H , TEMP , TCNT1L

때 이 가 레지스터와 조합되어 의 모든 데이타가 레지스터에 동시에byte TEMP 16bit TCNT1

쓰이게 된다 따라서 의 레지스터의 쓰기 작동에서 가 먼저 접근되어져야. , 16bit TCNT1H

한다.

타이머 카운터 읽기TCNT1 /

가 로 부터 읽을때 의 내용은 로 전송되고 상위 인 의CPU TCNT1L , TCNT1L CPU byte TCNT1H

내용은 레지스터에 전송된다 가 다음 의 내용을 읽을때는 레지스터로TEMP . CPU TCNT1H TEMP

부터 값을전달 받는다 따라서 의 레지스터 읽기 작동에서는 의 내용이 먼. , 16bit TCNT1L

저 접근 되어져야 한다.

은 모드에서 읽기 쓰기 동작에 업 다운 카운터로 동작한다 만일 이 쓰T/C 1 PWM / / . T/C 1

여지고 가 선택되어져 있을 경우 은 쓰는 값으로 값을 하고Clock Source T/C 1 Setting

사이클 동안 을 계속 하게 된다Timer Clock Counting .

타이머 카운터 출력 비교 레지스터1 - OCR1A, OCR1B

출력 비교 레지스터는 의 읽기 쓰기 레지스터이다 의 이 가지고 있는16bit / . T/C 1 OCR

값은 계속적으로 의 값과 비교된다 비교매치시의 행동은 제어 상태 레지스T/C 1 . T/C 1 /

터에서 설정한다 소프트웨어로 레지스터에 값을 쓰는 것은 다음번 사이. T/C T/C Clock

클 동안의 비교매치를 중지 한다 이는 가 초기화 되었을때의 즉각적인 인터럽(block) . T/C

트를 방지한다.

비교매치는 비교 이벤트에 따라 의 사이클 이내에 비교 인터럽트 플래그를- CPU Clock - -

한다 도 레지스터이기 때문에 레지스터가 쓰여지는 동작을 할Setting . OCR 16bit OCR1A/B

때 개의 가 동시적으로 접근되게 하기 위하여 레지스터를 사용한다2 byte TEMP .

Page 59: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 59 -

가 의 상위 바위트 에 쓰기를 할때 일단 레지스터에 써지며CPU OCR (OCR1AH,OCR1BH) TEMP ,

하위 에 쓸때 레지스터의 내용도 동시에 의 상위 에 써지게 된다 따라byte TEMP OCR byte .

서 의 레지스터 쓰기 접근이 이루어 질때는 상위 바위트 먼저 써야 한다, 16bit .

레지스터는 과 에 접근할 때도 쓰여진다 따라서 메인프로그램과 인터럽TEMP TCNT1 ICR1 .

트 루틴에 의해 레지스터에 접근이 이루어 질때 다른 메인프로그램과 인터럽트 루틴의,

접근을 방지하기 위해 인터럽트는 비 활성화 되어 있어야 한다.

타이머 카운터 1 Input Caputer Register - ICR1H, ICR1L

입력 감지 레지스터는 의 읽기 전용 레지스터이다 의 라이징 펄링 에지16bit . ICP / (

의 에 따라 가 검출되면 현재의 레지스터의 값은 으로 전송된ICES1 Setting ) , T/C 1 ICR1

다 이와 동시에 입력 감지 플래그 도 로 된다. (ICF1) 1 Setting .

은 레지스터이므로 으로부터 읽기 작업시 동시적으로 상 하위 값을ICR1 16bit ICR1 / byte

읽어오기 위해 레지스터가 사용된다 하위 를 가 읽으면 이값 이TEMP . byte CPU (ICR1AL)

로 전송되면서 동시에 레지스터에 상위 값 이 쓰이게 된다 다음CPU TEMP byte (ICR1AH) .

가 상위 를 읽을때 레지스터에 저장된 값을 읽어오게 된다 그러므로CPU byte TEMP . 16bit

의 레지스터 읽기 동작에서는 하위 를 먼저 읽어와야 한다byte .

Page 60: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 60 -

레지스터는 에서도 사용되므로 메인 프로그램과 인터럽트 루TEMP TCNT1, OCR1A, OCR1B

틴에 의해 레지스터 접근이 이루어 질때 다른 메인프로그램과 인터럽트 루틴의 접근을

방지하기 위해 인터럽트는 비 활성화 되어 있어야 한다.

타이머 카운터 모드1 PWM

모드가 선택될 경우 과 레지스터는 와 핀에PWM T/C 1 OCR1A/OCR1B PD5(OC1A) PD4(OC1B)

출력하는 듀얼 프리 러닝 글리치 프리 그리고8,9,10 bit - (free-running), - (glitch-free)

페이즈 코렉트 이 된다 이 모드에서는 은 업 다운 카운터로 동- (phase-correct) PWM . T/C 1 /

작하며 부터 까지 그림 참조 한다 다음 다시 으로 다운 카운트 하$0000 TOP ( 16 )Counting . 0 -

며 이 사이클을 반복한다, .

카운터값이 또는 레지스터의 설정에 따라 다르다 의OCR1A OCR1B 8,9,10( ) LSB(Least

와매치될때 핀이 레지스터의 또는Significantbit) PD5(OC1A)/PD4(OC1B) TCCR1A COM1A1/COM1A0

의 설정값에 따라 되거나 클리어 된다COM1B1/COM1B0 Setting .

선택적으로 은 위에서 설정된 값의 배의 속도로 모드가 되도록 조정될 수, T/C 1 2 PWM

있다 역주 오버플로우 모드일경우 업 다운 카운터의 배 속도로 가 매치되게 된다.( : / 2 LSB .

그림 참조 이경우 과 는 와 핀에 출력하는 듀- 19 ) T/C 1 OCR1A/OCR1B PD5(OC1A) PD4(OC1B)

얼 프리 러닝 글리치 프리 이 된다8,9,10 bit - (free-running), - (glitch-free) PWM .

그림 타이머 값과 주파수TOP

그림 에서 보인 바와 같이 모드는 의 해상도로 운용될 수 있다, PWM 8,9,10bit . OCR1A,

의 쓰이지 않는 들은 하드웨어적으로 으로 된다 즉 과OCR1B, TCNT1 bit 0 Setting . , TCNT1

의 부터 까지 으로 된다 해상도의 이 선택된OCR1A,OCR1B bit9 15bit 0 Setting . (9bit PWM

경우 이는 가지 해상도 모드에서 사용자가 쓰이지 않는 들에 대해서 읽기 수정 쓰) 3 bit - -

기 작업 할때에 신경쓰지 않아도 되도록 한다.

그림 모드에서의 모드 실렉트PWM Compare1

Page 61: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 61 -

모드에서는 레지스터의 가 쓰여질때 값이 임시 저장소에PWM OCR1A/OCR1B 8,9,10 LSB ,

전송된다 이 값은 이 값에 도달하였을때 래치 된다 이것은. T/C 1 TOP (latch) . OCR1A/OCR1B

의 비동기적 쓰기 이벤트에 의한 이상한 펄스 생성 글리치 을 방지한다 각각(odd) PWM ( ) .

의 모드에 대해 참조하기 위해서는 그림 과 를 참조하라18 19 .

그림 비동기적 래칭에 의한 영향OCR1

그림 오버플로우 모드에서의 비동기적 래칭에 의한 영향OCR1

래치와 쓰기 동작 사이의 와 값을 읽을 경우 임시저장소의 값이 읽히게 된OCR1A OCR1B

다 이는 항상 최근에 에 쓰여진 값이 읽힌다는 뜻이다. OCR1A/OCR1B .

만일 레지스터가 이나 값을 가지고 있고 업 다운 모드가 선택되었을OCR1X $0000 TOP / PWM

경우 을 경우 는 다음 비교 매치시에 의OC1A/OC1B COM1A1/COM1A0, COM1B1/COM1B0 Setting

에 따라 로우 나 하이 로 업데이트 된다 여기에 대해선 그림 을 참고하라(low) (high) . 20 .

오버플로우 모드에서는 값이 일 경우에만 가 로우나 하이로 출력PWM OCR1X TOP OC1A/OC1B

유지 된다.

Page 62: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 62 -

그림 가 이나 일때의 출력OCR1X $0000 TOP PWM

오버플로우 모드에서는 위의 그림이 오직 일 경우에만 해당된다 모PWM OCR1X = TOP . PWM

드에선 오버플로우 플래그 이 카운터가 값을 지나갔을때 된Timer 1(TOV1) $0000 Setting

다 오버플로우 모드에서는 는 평상시 타이머 카운터 모드일때와 같이 플래그가. PWM TOV /

된다 타이머 오버플로우 인터럽트 은 정확시 평상시 타이머 카운터 모드일때와Setting . 1 /

같이 동작한다 즉 전역 인터럽트가 활성화 되어 있고 이 세트되면 실행된. (global) TOV1

다 이것은 플래그와 인터럽트에도 동일하게 적용된다. TOC1 .

타이머 카운터8bit / 2

그림 타이머 카운터 의 블럭 다이어그램/ 2

Page 63: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 63 -

타이머 카운터 는 이하 프리스케일드 외부 크리스탈 입력8bit / 2 ( T/C 2) CK, CK,

을 로 사용할 수 있다 에서 언급한 정지 기능도 제공한다TOSC1 clock source . T/C 1 . (T/C

의 참조1 TCCR2 )

상태플래그 오버플로우와 비교매치 는( ) TIFR(Timer/Counter Interrupt Flag Register)

에서 찾을수 있다 제어신호는 에서 찾을수 있. TCCR2(Timer/Counter Control Register 2)

다 인터럽트 활성 비활성 은 에. / setting TIMSK(Timer/Counter Interrupt Mask Register)

서 찾을수 있다.

만일 가 외부적으로 를 사용하게 되면 이 외부 신호는 의T/C 2 clock source , CPU

주파수와 동기화 되게 된다 외부적 신호를 정확하게 하기 위해 최oscillator . Sampling

소한 외부 의 전이 시간은 내부 의 한 주기는 되어야 한다 외부clock CPU clock . clock

신호는 내부 의 라이징 에지에서 샘플링 된다CPU clock - .

낮은 으로 보다 고 밀도와 정확성이 높은 타이머 카운터로 쓸수 있으며 반Prescaling / ,

대로 높은 링으로 낮은 속도를 보이는 함수나 자주 사용되지 않는 부분에 대Prescaling ,

해 유용하게 사용할 수 있다.

는 짜리 으로도 사용되어 질 수 있다 이 모드에서는 와 이T/C 2 8bit PWM . T/C 2 OCR

중앙 펄스 방식 의 독립적 듀얼 글리치 프리 으(centered-pulses) - - (dual glitch-free) PWM

로 작동한다.

Timer/Counter 2 Control Register -TCCR2

* Bit 7 - FOC2: Force Output Compare

이 를 로 하는 것은 비교매치 출력 핀 을 미리 되어 있는bit 1 setting , PD7(OC2) setting

과 에 따라 바꾸도록 한다 만일 과 가 같은 사이클에 되COM21 COM20 COM21 COM20bit Write

면 이 새로운 은 다음 비교매치까지 혹은 강제 비교매치 전까지 효력을 발생하, setting ,

지 않는다 는 타이머 내의 비교매치를 기다리지 않고 출력핀을 바꾸는데 사용. FOC bit ,

될 수 있다 즉 과 를 자동적으로 프로그램 되게 하여 비교매치가 발생. , COM21 COM20bit ,

된 것처럼 할 수 있다 그러나 인터럽트는 발생하지 않으며 가 셋트되어 있다 하. , , CTC2

더라고 타이머를 클리어 하지는 않는다 가 해당 핀에 효과를 발휘하기 위해서. FOC2 bit

는 해당되는 핀은 출력핀으로 선택되어 있어야 한다 는 항상 으로 읽히며I/O . FOC2bit 0 ,

의 은 모드에 영향을 주지 않는다FOC2bit setting PWM .

이 를 함으로써 의 모드* Bit 6 - PWM2: Pulse Width Modulatior Enable bit SET T/C 2 PWM

가 활성화 되도록 한다 자세한 것은 의 항목을참조하라. T/C 1 .

과* Bit 5,4 - COM21, COM20: Compare Output Mode bit 1 0

과 제어 는 아래의 의 모든 출력 핀에 대한 정의를 담당한다COM21 COM20 bit T/C 2 .

Page 64: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 64 -

즉 에 영향을 미치는 모든 출력핀들에 대해서이다 이는 포트에 대해 변경, PD7(OC2) . I/O

가능한 기능으로 이에 해당하는 방향 제어 가 로 되어 있어야 하며 제어, bit 1 setting ,

와 관련된 구성은 아래 그림과 같다.

그림 비교 모드 선택

모드에 대해서는 이 들은 다르게 동작한다Note: PWM bit .

* Bit 3 - CTC2: Clear Timer/Counter on Compare Match

만일 가 로 되어 있으면 은 비교 매치후 사이클 이내에 으CTC2 1 setting , T/C 2 clock $00

로 되며 으로 되어 있으면 카운팅을 계속하고 비교매치에 영향을 주지reset , 0 setting , ,

않는다 만일 프리스케일링 이 사용되고 있고 비교 레지스터가 로 이 되어 있. 1 , C setting

다면 가 되어 있을경우 아래와 같이 카운트 할 것이다, CTC2 setting .

C-1, C, 0, 1 .......

만일 프리스케일러가 나누기 로 되어 있을 경우 타이머 카운트는 아래와 같다8 setting , .

C-1,C-1,C-1,C-1,C-1,C-1,C-1,C-1, C, C, C, C, C, C, C, C, 0, 0, 0, 0, 0, 0, 0, 0,

모드에서는 이 는 다른 기능을 하며 만일 모드에서 이 가1, 1, 1, .... PWM bit , PWM bit

으로 되어 있으면 은 업 다운 카운터로 작동 한다 만일 로 되어 있으면 타이머0 T/C 2 / . 1 ,

카운터가 에 도달하였을 경우 다시 랩 하도록 되어 있다/ $FF , (wrap) .

* Bit 2,1,0 - CS22, CS21, CS20 : Clock Select Bit 2,1,0

선택 은 의 프리스케링 를 선택한다clock bit 2,1,0 T/C 2 source .

정지기능은 타이머의 활성 비활성 기능을 제공한다 프리스케일 모드는 으로/ . PCK2 clock

부터 직접 스케일된다.

Page 65: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 65 -

Timer/Counter 2 -TCNT 2

이 레지스터는 의 값을 가지고 있다8bit T/C 2 .

는 업 다운 카운터 기능을 수행하며 모드에서 읽기와 쓰기를 지원 한다T/C 2 / (PWM ) .

만일 가 쓰여질때 가 선택되면 타이머 사이클 동안에 카운팅T/C 2 clock source , clock

을 하고 다음에 쓰기 수행을 한다.

Timer/Counter 2 Output Compare Register - OCR2

레지스터는 읽기 쓰기를 지원하는 레지스터이다 레지스터는 와 계속OCR / 8bit . OCR2 T/C 2

적으로 비교되어야 할 값을 가지고 있게된다 비교매치의 행동은 에서 정의되어 있. TCCR2

다 소프트웨어적으로 레지스터에 쓰는 것은 다음 의 사이클 동안의. T/C 2 T/C 2 clock

비교매치를 잠시 중단 시킨다 이것은 가 초기화 되었을때의 즉각적인 인터럽(block) . T/C2

트 발생을 방지한다 비교매치는 비교 이벤트에 따라 비교 사이클 이내에 인. CPU clock

터럽트 플래그 를 시킨다(compare interrupt flag) setting .

모드Timer/Counter 2 PWM

모드가 선택되면 는 값에 도달하였을때 랩 하던가 아니면 업 다운PWM , T/C 2 $FF (wrap) /

카운터로 작동한다 만일 업 다운 모드로 선택되어 있으면 와 는 핀. / , T/C 2 OCR2 PD7(OC2)

에 출력하는 의프리러닝 글리치 프리 그리고 페이즈8bit (free-running), - (glitch-free), -

코렉트 으로 작동한다 만일 오버플로우 모드로 선택되어 있으면(phase-correct) PWM . ,

와 는 의 프리러닝 글리치 프리 으로 작동하며 속도는 업 다운 모드의T/C 2 OCR2 8bit , - PWM , /

배가 된다2 .

모드 업 다운 오버플로우 모드PWM ( / , )

가지의 서로 다른 모드가 레지스터의 에 의해 선택되어 질수 있다 만2 TCCR2 CTC2 bit .

일 가 클리어 되어 있고 모드가 선택되어 있으면 는 업 다운 카운터로 동CTC2 PWM , T/C 2 /

작한다 부터 까지 카운트 하고 다시 으로 다운 카운팅 한다 카운터 값이. $00 $FF $00 - . OCR

레지스터와 매치되게 되면 레지스터의 의 값에 따라 핀은TCCR2 COM21/COM20bit PD7(OC2)

되거나 클리어 된다 만일 가 되어 있고 모드가 선택되어 있으면setting . CTC2 setting PWM ,

는 랩 하면서 부터 까지 카운트 한다 즉 가 되면 바로 부터 다T/C 2 (wrap) $00 $FF . ( $FF $00

시 업 카운팅 한다.)

Page 66: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 66 -

핀은 의 값에 따라 타이머 카운터가 오버플로우 되거나 카운터PD7(OC2) COM21/COM20bit , / ,

값이 레지스터 값에 매치될때 되거나 클리어 된다OCR setting .

그림 모드에서의 비교 모드 선택PWM

모드에서는 레지스터에 값을 쓸때 먼저 그 값이 임시장소에 저장된다 그리고PWM OCR2 .

이 값은 가 값에 도달하였을때 에 래치 되게 된다 이것은 비동기적T/C 2 $FF OCR2 (latch) .

의 쓰기로 인한 이상한 펄스 생성 글리치 을 방지한다 그림 과 를 참고하OCR2 PWM ( ) . 18 19

라 래치와 쓰기 동작 사이의 값을 읽을 경우 임시저장소의 값이 읽히게 된다 이는OCR2 .

항상 최근에 에 쓰여진 값이 읽힌다는 뜻이다OCR2 .

레지스터가 이나 값을 가지고 있을 경우 그리고 모드가 선택되어 있을OCR2 $00 $FF , PWM

경우 핀은 에 따라 다음 비교 매치시에 로우나 하이로 업데이트 된PD7(OC2) COM21/COM20

다 이에 대해서는 그림 을 참조하라 모드중 오버플로우 모드에서는 가 오직. 28 . PWM OCR2

일 경우에만 이 로우나 하이로 유지되게 된다$FF PD7(OC2) .

그림 출력 또는 일때PWM OCR2 = $00 $FF

업 다운 모드에서는 카운터가 방향으로 막 전환 하였을때/ PWM $00 TOV2(Timer Overflow

가 된다 오버플로우 모드일때는 는 평상시 타이머 카운터 모드와 같이Flag) setting . TOV /

된다 타이머 오버플로우 인터럽트는 평상시의 타이머 카운터 모드와 정확히 같setting . /

게 동작한다 즉 전역 인터럽트가 활성화 되어 있고 가 되면 실행 된다. , TOV2 Set .

의 주파수는 타이머 주파수를 으로 나눈 값이 된다PWM clock 510 .

Page 67: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 67 -

Asynchronous Status Register -ASSR

사용되지 않음* Bit 7~4 :

그리고 항상 으로 읽힌다0 .

* Bit 3 - AS2 : Asynchronous Timer/Counter 2

이 가 이면 는 내부 시스템 인 로 부터 을 입력 받는다 만일 이bit 0 T/C 2 clock CK clock .

가 이면 는 핀으로부터 을 입력 받는다 와 은 외부bit 1 , T/C 2 PC6(TOSC1) clock . PC6 PC7

크리스탈과 연결되며 이때 외부 로는 사용되지 못한다 이 가 변경되면 와I/O . bit TCNT2

그리고 값은 알수없는 값으로 바뀌게 된다OCR2 TCCR2 (corrupted)

* Bit 2- TCNT2UB : Timer/Counter2 Update Busy

가 비 동기적으로 작동되고 가 쓰여지면 이 는 로 된다T/C 2 , TCNT2 (written) bit 1 .

만일 가 임시 저장소로부터 업데이트 되면 이 는 하드웨어적으로 으로 된다TCNT2 bit 0 .

이 가 이라는 것은 가 새로운 값으로 업데이트될 준비가 되어 있음을 뜻한다bit 0 TCNT2 .

* Bit 1- OCR2UB : Output Compare Register 2 Update Busy

가 비 동기적으로 작동되고 가 쓰여지면 이 는 로 된다T/C 2 , OCR2 (written) bit 1 .

만일 가 임시 저장소로부터 업데이트 되면 이 는 하드웨어적으로 으로 된다OCR2 bit 0 .

이 가 이라는 것은 가 새로운 값으로 업데이트될 준비가 되어 있음을 뜻한다bit 0 OCR2 .

* Bit 0 - TCR2UB : Timer/Counter Control Register 2 Update Busy

가 비 동기적으로 작동되 가 쓰여지면 이 는 로 된다T/C 2 , TCCR2 (written) bit 1 .

만일 가 임시 저장소로부터 업데이트 되면 이 는 하드웨어적으로 으로 된다TCCR2 bit 0 .

이 가 이라는 것은 가 새로운 값으로 업데이트될 준비가 되어 있음을 뜻한다bit 0 TCCR2 .

만일 위의 와 관계된 가지 레지스터중 하나라도 이와 관련된 플레그T/C 2 3 , update busy

가 로 되어 있을때 쓰기명령이 수행되면 새로 쓰여진 값은 이상하게 될 것이고1 ,

예기치 못한 인터럽트가 발생될 수 있다.

와 레지스터 값을 읽을때는 다른 메커니즘으로 작동된다 의 값을TCNT2,OCR2 TCCR2 . TCNT2

읽을때는 실제 타이머 값이 바로 읽히고 와 값을 읽을땐 임시저장소의 값이, OCR2 TCCR2

읽힌다.

Page 68: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 68 -

의 비동기 작동T/C 2

가 비동기적으로 작동될땐 다음의 사항을 고려하여야 한다T/C 2 .

주의 비동기적 킹과 동기적 킹간의 변환시 타이머 관련 레지스터인: clock clock TCNT2,

그리고 값이 예상치 못한 값이 될수 있다 안전하게 킹을 변환 하기 위OCR2 TCCR2 . clock

해서는 아래의 순서가 필요하다.

1. 와 를 으로 함으로써 의 인터럽트를 디스에이블 시킨다OCIE2 TOIE2bit 0 T/C 2 .

2. 를 해당하는 로 선택한다AS2 clocksource .

3. 와 에 새로운 해당 값을 쓴다TCNT2 OCR2, TCCR2 .

4. 다시 비동기적으로 전환하기 위해서는 를 대기한다: TCN2UB, OCR2UB, TCR2UB .

5. 의 인터럽트 플래그를 클리어 한다T/C 2 .

6. 필요할 경우 인터럽트를 인에이블 시킨다 는 의 워치 크리스. * oscillator 32.768Khz

털에 최적화 되어 있다 외부 을 핀에 적용시키는것은 의 부적절한 동. clock TOSC1 T/C 2

작을 야기시킬수 있다 의 메인 은 보다 최소한 배이상 빨라야. CPU clock oscillator 4

한다.

7. 또는 에 값을 쓴다TCCR2, TCNT2, OCR2 .

8. 해당되는 플래그가 으로 될때까지 기다린다Update Busy 0 .

9. 파워 세이브 모드로 진입한다.

와 에 값을 쓸때는 일단 이 값들이 임시 저장 레지스터에 저장되고* TCNT2, OCR2 TCCR2

의 번째 양의 에지 에서 쓰여진다 사용자는 이 임시 저장 레지스TOSC1 2 (positive edge) .

터의 값이 목표에 쓰여지기 전에 값을 쓰지 않도록 주의하여야 한다 이 임시 저장 레지.

스터는 타이머 관련 개의 레지스터 각각 따로 있다 이 말은 에 값을 쓰는 행위가3 . TCNT2

에 쓰는 행위에 영향을 미치지 않는다는 뜻이다 임시저장 레지스터값이 목표 레지OCR2 .

스터에 쓰여졌는지는 관련 부분을 참고하라ASSR .

가 웨이크업 장치로 선택되고 또는 에 값을 쓴후 파워 세이브* T/C2 , TCNT2,OCR2 TCCR2 -

모드로 진입할때는 사용자는 진입하기전 이 값들이 다 쓰일때까지 기다려(Power save) ,

야 한다 그렇지 않을 경우 마이크로컨트롤유닛 은 값이 다 바뀌지 않고 슬립. , (MCU)

모드에 들어갈 수 있다 이것은 특히 출력비교 인터럽트가(sleep) . 2( Output Compare 2)

웨이크업 디바이스로 사용될때 중요하다 출력비교 기능은 나 가 다 쓰여질때. OCR2 TCNT2

까지는 디스에이블 되기 때문이다.

만일 쓰기 싸이클 이 다 끝나지 않고 가 으로 돌아오기 전에- (write-cycle) OCR2UB bit 0

마이크로컨트롤유닛이 슬립모드에 들어가면 디바이스는 더이상 비교매치 인터럽트를 받

지 못하며 마이크로컨트롤유닛은 깨어나지 못하게 된다(wake-up) .

만일 가 파워세이브 모드에서 웨이크업 장치로 사용되고 사용자가 다시 파워 세* T/C 2 ,

이브 모드로 진입하려 하면 다음 사항을 주의하여야 한다 인터럽트 로직은 최소한 하. :

나의 사이클이 필요하다 웨이크업과 파워세이브 모드로 다시 진입하는데 걸리는TOSC1 .

시간이 하나의 사이클 보다 작을 경우 인터럽트는 발생하지 않는다 즉 디바이스TOSC1 . ,

는 웨이크업 하는데 실패할 것이다 만일 사용자가 다시 파워세이브 모드로 진입하는 시.

Page 69: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 69 -

간이 충분한지 확신하지 못할경우 의 최소 한 사이클 이상을 보장받기 위해 다음과TOSC1

같은 알고리즘이 사용될 수 있다.

비동기 모드가 선택된 경우 파워 다운 모드시는 를 위한* - (power-down) T/C 2 32.768kHz

는 작동하지 않는다 파워다운으로 부터의 웨이크 업이나 파워업 후oscillator . , reset

는 안정화 되기전까지 최소한 초의 시간이 필요하다는 것을 사용자는 알고oscillator 1

있어야 한다 최소한 파워다운으로 부터의 웨이크 업이나 파워업 후 사용자는 초. , reset 1

정도 기다리는 것이 바람직하다 와 관련된 모든 레지스터의 내용은 파워다운후 웨. T/C 2

이크업시 불안정한 신호로 인해 잃어버린 것으로 간주하는것이 바람직하다, clock .

타이머가 비동적으로 사용될때 파워 세이브 모드로부터의 웨이크업에 대한 설명 만* , - :

일 인터럽트를 만나게 되면 타이머 의 다음 사이클에 웨이크업 루틴이 개시된다, clock .

이는 프로세서가 카운터 값을 읽기 전보다 최소한 한 사이클 빠르다는 것을 뜻한다 웨.

이크업 후에 사이클동안 마이크로콘트롤유닛은 대기 하며 이후 인터럽트 루4clock (halt)

틴을 재개하고 다음 다음의 명령을 계속한다SLEEP .

비동기적 수행동안 인터럽트 플래그와 비동기 타이머간의 동기화는 개의 프로세서 사* 3

이클과 하나의 타이머 사이클이 필요하다 타이머는 프로세서가 타이머 값을 읽고 인터.

럽트 플래그를 하기 전보다 최소 한 사이클 이상 빠르다 출력비교핀은 타이머setting .

시간동안에 변경되며 프로세서 시간동안에 동기화 되지 못한다clock clock .

비동기 타이머가 인에일블 된 상태에서 웨이크업을 하게되면 파워 세이브 모드로* , -

들어가기전의 값을 읽을 때 약간의 시간 간격이 있다 비동기 의 에지TCNT2 . clock (edge)

발생 후 값을 제대로 읽을 수 있게 된다 타이머의 비교 오버플로우 함수는 이TCNT2 . ( /

행동에 영향을 받지 않는다 정확한 값을 읽기 위해서는 다음의 과정이 필요하다. ) .

▪ 나 에 아무 값이나 쓴다OCR2 TCCR2 .

▪ 해당되는 플래그가 이 될 때까지 기다린다Update Busy 0 .

▪ 값을 읽는다 나 는 하드웨어에 의해 값이 아무렇게나 바뀌지 않고TCNT2 . OCR2 TCCR ,

언제나 정확한 값을 읽을 수 있다는 것을 기억하라.

실습회로

PB3

VCC

Y132.768KHz

PB5

U20

DS1302

2

3

4

567

1

8X1

X2

GND

RSTI/O

SCLK

NC

VCC

PB4

Page 70: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 70 -

#include <mega16.h>

#include <stdio.h>

// Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x15

#endasm

#include <lcd.h>

// DS1302 Real Time Clock functions

#asm

.equ __ds1302_port=0x1B

.equ __ds1302_io=0

.equ __ds1302_sclk=1

.equ __ds1302_rst=2

#endasm

#include <ds1302.h>

// Declare your global variables here

unsigned char h,m,s;

void main(void)

{

char lcdBuffer[16] ;

PORTA=0x00;

DDRA=0x00;

PORTB=0x00;

DDRB=0x00;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x00;

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

GICR|=0x00;

Page 71: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 71 -

MCUCR=0x00;

MCUCSR=0x00;

TIMSK=0x00;

ACSR=0x80;

SFIOR=0x00;

rtc_init(0,0,0);

// LCD module initialization

lcd_init(16);

while (1)

{

/* initialize the DS1302 RTC:

use trickle charge,

with 1 diode and 8K resistor */

/* read time from the DS1302 RTC */

rtc_get_time(&h,&m,&s);

//lcd_clear() ;

lcd_gotoxy(0,0);

sprintf(lcdBuffer,"%2u:%2u:%2u", h, m, s);

lcd_puts(lcdBuffer);

};

}

Page 72: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 72 -

시리얼 통신6.

은 전이중방식 분리된 받기와 보내기 레지스터ATmega163(L) (full duplex- ) Universal

를 지원한다Asynchronous Receiver and Transmitter(UART) .

보 레이트 제너레이터 는 어느 보 레이트라도 생성 가능l - (Baud rate Generator) -

낮은 크리스탈 주파수에서도 높은 보 레이트 생성 가능l -

또는 비트 데이타 지원l 8 9

노이즈 필터링l

오버런 감지l (Overrun)

프레이밍 에러 감지l (Framing)

잘못된 스타트 비트 감지l

등 개의 독립된 인터럽트l TX Complete, TX Data Register Empty, RX Complete 3

멀티프로세서 통신 모드l

더블 스피드 모드l UART

데이타 송신1)

트랜스미터의 블럭다이어그램은 아래와 같다UART .

그림 트랜스미터UART

데이터의 전송은 전송될 데이터를 레지스터 에 쓰는것으로 시작된다 다UART I/O (UDR) .

음의 경우 의 데이터는 전송쉬프트 레지스터로 이동된다 이전 문자가 쉬프트 아웃UDR . s -

되고 스탑비트 이후에 새로운 문자가 에 쓰여진 경우 쉬프트 레지스터는 곧바로 로드UDR

된다.

Page 73: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 73 -

이전 문자가 쉬프트 아웃되고 스탑비트 이전에 새로운 문자가 에 쓰여진 경우 쉬프- UDR

트레지스터는 현재 전송되는 문자의 스탑비트가 쉬프트 아웃되고 나면 로드된다 로. UDR

부터 데이타가 쉬프트 레지스터로 이동되고 나면 상태 레지스터 의UART (USR) UDRE(UART

비트가 세트된다 이 비트가 세트되고 나면 는 다음 문자를Data Register Empty) . UART

받을수 있는 상태가 된다.

의 데이터가 비트 쉬프트 레지스터로 전송됨과 동시에 쉬프트레지스터의 비UDR 10(11)

트 스타트 비트 과 비트 스탑비트 은 세트된다 만이일 비트의 데이터 워드0( ) 9,10( ) . 9

가 선택되면 의 비트가 셋트된상태 의 비트는 전송쉬프트레지스터(word) (USR CHR9 ) USR TXB8

의 비트 로 전송된다 보 레이트의 클락에 맞추어 쉬프트 레지스터의 전송 작업은9 . - TXD

핀을 통해 스타트 비트를 쉬프트 아웃 시키고 다음으로 데이타의 부터 전송시키기 시LSB

작한다 스탑 비트까지 모두 쉬프트 아웃 되고 나면 쉬프트레지스터는 에 새로운 데. UDR

이터가 쓰여졌을 경우 이를 로드한다 로딩동안에 는 셋트된다 스탑 비트가 쉬프트. UDRE .

아웃 된 후에도 보낼 데이터가 에 쓰여져 있지 않으면 는 에 데이타가 쓰여질UDR UDRE UDR

때까지 세트된 상태로 남아있게 된다 새로운 데이터가 안 쓰여지고 핀을 통해서 한. TXD

비트 길이동안 스탑비트가 계속되면 의 전송종료 플래그USR TXC(Transmit Complete

가 셋트된다Flag) .

의 비트가 셋트되면 전송은 인에이블 된다 이 비트가 으로 되면 핀UCR TXEN UART . 0 PD1

은 일반 핀으로 설정 된다 비트가 셋트되어있을때는 전송은 핀과 연결I/O . TXEN UART PD1

되며 의 비트의 설정과 관계없이 핀은 강제적으로 출력으로 결정된다DDRD DDD1 PD1 .

데이타 수신2)

그림 리시버UART

Page 74: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 74 -

리시버의 프론트 엔드 로직은 핀을 보 레이트보다 배 빠른 속도로 샘플링 한다- RXD - 16 .

라인이 아이들인 동안 하나의 논리적 의 샘플은 스타트 비트의 펄링 에지0 -

로 해석되며 스타트 비트 검출 절차가 시작된다 샘플 을 첫번째 샘(falling-edge) , . 1 0

플로 한다 계속되는 에서 로의 전이로 리시버는 핀으로 부터 번째 샘플을. 1 0 RXD 8,9,10

샘플링 한다 이 개의 샘플중 개이상의 샘플이 논리적으로 일경우 스타트 비트는 노. 3 2 1

이즈 스파이크로 인식되어 제외될 것이며 리시버는 다시 에서 으로의 전이를 기다리, 1 0

게 될 것이다.

그림 리시버의 데이터의 샘플링

주의 위의 그림 은 가 배속 모드로 동작할 땐 적용되지 않는다 자세한 것은: 3 UART 2 .

배속 전송 을 참고하라 스탑비트가 리시버로 들어가게 되면 스탑비트의 개중 다수"2 " . , 3

가 이 되어야 스탑비트로 인그림 리시브 데이터의 샘플링 인정된다1 3. .

개이상의 비트가 논리적으로 이면 의2 0 USR(UART Status Register) FE(Framing Error)

비트가 셋트된다 레지스터를 읽기전에 프레임 에러를 체크하기 위해 사용자는 비. UDR FE

트를 체크할 필요가 있다.

문자전송 사이클에서 적절한 스탑 비트가 들어왔는지는 데이터가 에 전송되고UDR USR

의 플래그가 셋트된 것으로 알 수 있다 은 물리적으로 독립된 개의 레지스터로RXC . UDR 2

하나는 송신을 위해서 하나는 수신을 위해서 사용된다 데이터가 읽히면 수신 데이터. UDR

레지스터에 접근되고 데이터가 써지면 송신 데이터 레지스터에 접근된다 만일 비, UDR . 9

트 데이터 워드가 선택되면 의 비트가 셋트되어 있을때 데이터가 전송될때(UCR CHR9 ) UCR

의 비트가 쉬프트 레지스터의 번째비트로 로드된다RXB8 9 .

문자를 전송받고 나서 레지스터의 플래그가 셋트되어 있으면 레지UCR OR(Over Run) UDR

스터를 읽을수 없다 이는 마지막 데이터 바이트가 쉬프트레지스터로 전송된후 이 데이.

터가 로 전송될 수 없음을 의미하며 이 데이터는 잃어버리게 된다 비트는 버퍼화UDR . OR

되며 적절한 데이터가 로부터 읽혀질때 업데이트 된다 이와같이 사용자(buffered) UDR .

는 로드가 많거나 보레이트가 높을경우에는 오버런을 감지하기 위해 비트를 체크CPU , OR

할 필요가 있다.

의 비트가 클리어되면 리시버는 디스에이블 된다 이것은 핀이 일반 핀UCR RXEN . PC0 I/O

으로 사용됨을 뜻한다 비트가 셋트되면 리시버는 핀과 연결된다 이는. RXEN UART PD0 .

의 비트 상태와 관계없이 핀이 입력으로 동작함을 의미한다 가 에DDRD DDD0 PD0 . PD0 UART

의해서 입력으로 동작되면 비트는 핀 상에서 풀 업 저항으로 제어될 수PORTD0 - (pull-up)

있다 의 비트가 셋트되면 스타트비와 스탑비트와 함께 송수신 데이터는 비트가. UCR CHR9 9

된다 번때 비트 데이터는 의 비트가 된다 이 데이터는 에 데이타가 쓰여. 9 UCR TXB8 . UDR

져서 전송이 시작 되기 전에 원하는 값으로 설정이 되어야 한다 수신시 번째 데이터. 9

비트는 의 비트에 쓰여지게 된다UCR RXB8 .

은 데이터레지스터 를 읽기전에 읽어야 한다 데이터 레지스터는 각각의 수신USR (UDR) .

Page 75: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 75 -

바이트에 대해 한번만 읽혀 질 수 있음을 주의해야 한다 그렇지 않으면 은 부적절한. USR

값으로 갱신되어 있을 수 있다.

3) SPI

시리얼 주변장치 인터페이스-

핀의 기능- SS

데이터 모드-

시리얼 주변장치 인터페이스①

시리얼 주변장치 인터페이스 는 과 주변장치 또는 여러개의(SPI) ATMERGA163 ATMEGA163

간의 고속의 동기적 데이터 전송을 할 수 있게 한다 는 아래의 기능들이. ATMEGA163 SPI

있다.

전이중 방식의 선식 동기 데이터 전송1. 3

마스터 슬레이브 모드2. /

또는 우선 데이터 전송3. LSB MSB

가지의 프로그래밍 가능한 비트 레이트4. 7 - (BIT-RATES)

전송종료 인터럽트 플래그5.

쓰기충돌 플래그 프로텍션6.

휴먼모드 로 부터의 웨이크 업7. (IDLE MODE)

배속 마스터 모드8. 2 (CK/2) SPI

그림 블록 다이어그램SPI

Page 76: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 76 -

마스터 슬레이브 간의 연결은 그림 에 나와 있다 핀은 마스터 모드에서CPU 2 . PB7(SCK)

는 클락 아웃풋으로 슬레이브 모드에서 클락 인풋으로 사용된다 데이터 레지스터에. SPI

값을 쓰면 클락 생성이 시작되고 쉬프트 하면서 핀으로 출력되며 슬레이브 모PB5(MOSI) ,

드 의 핀으로 전송된다 한 바이트가 모두 쉬프트 되고나면 클락 생성CPU PB5(MOSI) . SPI

기는 정지 되며 전송종료 플래그 를 셋트 한다 만일 레지스터의 인터럽, (SPIF) . SPCR SPI

트 인에이블 비트 가 셋트되어 있으면 인터럽트가 발생한다 독립적인 슬레이브(SPIE) .

장치가 되기 위해서는 슬레이브 선택라인 가 로우 로 셋트되어 있어야SPI PB4(SS) (low)

한다 마스터와 슬레이브의 독립적인 개의 쉬프트 레지스터는 한개의 비트 원형 쉬프. 2 16

트 레지스터로 생각하여야 한다 이는 그림 를 보면 알 수 있다 데이타가 마스터에서. 2 .

슬레이브로 쉬프트 될 때 반대방향으로도 쉬프트 된다 하나의 쉬프트 사이클 동안 슬레.

이브와 마스터의 데이타는 서로 바뀌게 되는 것이다.

그림 마스터 슬레이브 연결SPI -

이시스템은 보내는 쪽에서는 싱글버퍼 방식이며 받는 쪽에서는 더블(single-bufferd) ,

버퍼 방식이다 이는 보내는 데이타가 모두 전송되기 전까지 의 데(double-bufferd) . SPI

이타 레지스터에 전송되는 바이트를 쓰지 않는다는 것을 의미한다 다음번 데이타 바이.

트가 모두 쉬프트되어 데이타 레지스터에 들어 오기 전까지 받은 데이타를 데이타SPI SPI

레지스터로 부터 읽어야 하며 그렇지 않을 경우 받아놓은 바이트는 잃어버리게 될 것,

이다.

가 인에이블 되면 와 핀의 방향은 그림 처럼 오버라이드 될 것SPI MOSI, MISO, SCK SS 3

이다.

그림 핀 오버라이드SPI

Page 77: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 77 -

핀에 대해서는 문서의Note: user defined SPI "I/O Ports- PortB-Altanate functions of

를 참고 하라PORTB" .

핀의 기능SS②

가 마스터로 구성이 되면 레지스터의 비트가 셋트 사용자는 핀의 방향SPI (SPCR MSTR ) SS

을 결정할 수 있다 핀이 출력으로 결정되면 이 핀은 일반적인 출력핀으로 사용 가능. SS

하며 시스템에는 영향을 미치지 아니한다 핀이 입력으로 결정되면 이 핀은 마스터SPI . SS

작동에 영향을 주지 않기 위해 하이 로 유지 되어야 한다 만일 의 마스터SPI (high) . SPI

모드에서 핀이 입력으로 되어있고 주변장치들에의해 로우 로 변하게 되면 시스SS (low) SPI

템은 다른 마스터가 이 를 슬레이브로 선택한 줄 알고 인터럽트를 발생시키고 데이타SPI

전송을 시작하게 될 것이다 버스 컨텐션 을 피하기 위해 시스템은. - (bus contention) SPI

다음의 행동을 취할 것이다.

레지스터의 비트를 클리어하고 시스템을 슬레이브로 전환한다 시스1. SPCR MSTR SPI . SPI

템이 슬레이브로 바뀌면 와 핀은 입력으로 전환된다MOSI SCK .

인터럽트가 인에이블된 상태에서 레지스터의 플래그가 셋트되고 레2. SPI SPSR SPIF SREG

지스터의 가 셋트되면서 인터럽트 루틴이 수행된다I-bit .

그러므로 인터럽트 드리븐 전송이 마스터 모드로 사용이 되면서 핀이 로우로 변- SPI , SS

환될 여지가 있을땐 인터럽트가 항상 비트가 셋트되어 있는지를 체크하여야 한다MSTR .

만일 슬레이브 선택으로 비트가 클리어되면 사용자에 의해서 다시 마스터 모드로 동MSTR

작되도록 셋트 되어야 한다 가 슬레이브로 구성되면 핀은 항상 입력이다 핀이. SPI SS . SS

로우로 유지되면 는 활성화 되고 는 출력으로 된다 그외의 다른 핀들은 모두 입SPI MISO .

력으로 된다 가 하이로 변경되면 모든 핀은 입력으로 바뀌고 는 패시브. SS SPI (passive)

로 전환된다 이는 더이상 들어오는 데이타를 받지 않는다는 뜻이다 핀이 하이로 변. . SS

경되면 이때 한번 로직은 리셋함을 주의하라 데이타 전송중일때 가 하이로 변경되SPI . SS

면 는 보내는것과 받는것을 즉시 중단하며 이때 전송중이던 데이타는 모두 잃어버린SPI

것으로 간주하여야 한다.

데이터 모드③

시리얼 데이타를 주고받는 양상과 폴라리티 에는 가지의 조합이 존재한SCK (polarity) 4

다 비트와 비트로 이 가지 중에서서 한가지를 결정해서 쓸 수 있다 의 데. CPHA CPOL 4 . SPI

이타 전송 포맷은 아래 그림들과 같다.

그림 일때의 전송 포맷CPHA=0, DORD=0 SPI

Page 78: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 78 -

그림 일때의 전송 포맷CPHA=1, DORD=0 SPI

콘트롤 레지스터SPI - SPCR

* Bit 7 - SPIE : SPI Interrupt enable

이 비트는 의 전역 인터럽트 비트가 인에이블 되어 있고 레지스터의 비트SREG , SPSR SPIF

가 셋트되면 인터럽트가 수행될 수 있도록 한다SPI .

* Bit 6 - SPE : SPI Enable

비트가 셋트되면 는 인에이블 된다 어떤 관련 작동이라도 구현되기 위해서는SPE SPI . SPI

이 비트가 셋트 되어야 한다.

* Bit 5 - DORD : Data Order

비트가 셋트되면 데이타 워드중 가 먼저 전송된다DORD LSB .

비트가 클리어 되면 데이타 워드중 가 먼저 전송된다DORD MSB .

* Bit 4 - MSTR : Master/Slave Select

이 비트가 셋트되면 마스터 모드로 선택되고 클리어되면 슬레이브 모드로 선택된SPI , SPI

다 비트가 셋트된 상태에서 핀이 입력으로 되어 있고 로우 로 변환되면. MSTR SS (low) MSTR

비트는 클리어되면서 레지스터의 비트가 셋트된다 사용자는 다시 마스터 모드SPSR SPIF .

로 전환하기 위해 비트를 셋 하여야 한다MSTR .

* Bit 3 - CPOL : Clock Polarity

이 비트가 셋트되면 가 아이들 상태일때 하이로 된다 이 클리어되면, SCK (idle) . CPOL SCK

는 아이들 상태일때 로우로 된다 그림 와 를 참조 하라. 4 5 .

* Bit 2 - CPHA : Clock Phase

과 이 두비트는 마스터로 선택된 장Bit 1,0 - SPR1, SPR0 : SPI Clock Rate Select 1 1

치의 의 속도를 조정한다 과 는 슬레이브에게는 영향을 주지 않는다 와SCK . SPR1 SPR0 . SCK

오실레이터의 클락 주파수 와의 관계는 아래의 그림을 참조하라Fck .

Page 79: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 79 -

*

상태 레지스터SPI - SPSR

* Bit 7- SPIF : SPI Interrupt Flag

시리얼 전송이 완료되면 비트는 셋트되며 전역 인터럽트가 활성화 되어 있고SPIF , SPCR

레지스터의 비트가 셋트되어 있으면 인터럽트가 발생한다 마스터 모드에서 가SPIE . SPI SS

입력으로 되어 있고 가 로우로 변환 되면 이 또한 플래그를 셋트한다 는, SS SPIF . SPIF

해당하는 인터럽트 핸들링 벡터를 수행하고 나면 하드웨어적으로 클리어 된다 또한.

비트가 셋트된 상태에서 처음 상태레지스터를 읽게되면 비트는 클리어된다SPIF SPI SPIF .

* Bit 6 - WCOL : Write COLision Flag

비트는 데이타 레지스터가 전송중에 쓰여질때 셋트 된다 비트와WCOL SPI (written) . WCOL

비트는 비트가 세트된 상태에서 처음 상태 레지스터를 읽을때 클리어 된다SPIF WCOL SPI .

사용되지 않음 항상 으로 읽힌다* Bit 5..1 - 0 .

배속 비트* Bit 0 - SPI2X : 2 SPI

이 비트가 셋트 되면 마스터 모드일때 의 속도 주파수 는 배가 된다 그림 을SPI ( SCK ) 2 . 6

참조하라 이는 최소의 시간이 클락 시간이 된다는 뜻이다 가 슬레이브로. SCK 2 CPU . SPI

되어 있으면 는 오직 또는 이보다 낮은 주파수에서만 작동됨이 보장된다SPI Fck/4 .

의 는 프로그램 메모리나 의 다운로딩 업로딩에 사용될 수 있다 다ATmega163 SPI EEPROM / .

른것은 이 문서의 메모리 프로그래밍 부분을 참조하라" "

데이터 레지스터SPI - SPDR

데이타 레지스터는 읽기 쓰기 레지스터로 쉬프트 레지스터와 레지스터 파일간SPI / SPI

에 데이타 전송에 사용된다 이 레지스터에 쓰는것으로 전송을 시작하고 이 레지스터를. ,

읽는 것은 쉬프트레지스터의 리시브 버퍼로부터 읽게된다- .

Page 80: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 80 -

모듈이란4) RF ?

는 의 약자이다 모듈은 라디오 주파수를 사용하여 무선 통신을RF Radio Frequency . RF

할 수 있게 모듈화 시켜 놓은 것을 말한다 여기서 말하는 라디오 주파수는 라디오 방송.

국 주파수를 말하는 것이 아니라 우리가 흔히 말하는 전파라고 부르는 전자파를 말한다.

모듈은 주파수 변조 방식 발진 방식 데이터의 종류 출력 강도 등과 같은 항목에RF , , , ,

따라 다양하게 분류할 수 있다 모듈은 단독으로 또는 전자 장비와 연결되어 우리 주. RF

변에서 많이 사용되고 있다 휴대폰 원격 시동기 무선 데이터 수집기 등이 사용 예이. , ,

다 향후에는 모든 통신이 무선화 방향으로 진행되어 가고 있음으로 급속한 성장이 전망.

된다.

BiM-UHF

영국 버전 와 유럽 버전 은 반이중 소형 무선BiM-418-F( ) BiM-433-F( ) (half duplex) UHF

모듈이다 통신 속도는 까지 가능하며 빌딩 내에서는 약 열린 공간에서는. 40Kbps 30m,

까지 통신이 가능하다 주파수는 영국 버전인 제품 와 유럽 버120m . 418.00MHz( :BiM-418-F)

전인 제품 가 있다 전원은 단일전원을 사용한다433.92MHz( :BiM-433-F) . 5V(4.5~5.5V) .

주파수 통신 속도 통신 거리 출력 강도 수신 감도 사용 전압 안테나 길이

BiM-418-

F

418.00

MHz40K bps

30~120

m-6 dBm

-107

dBm

4.5~5.5

V16.5 cm

BiM-433-

F

433.92

MHz40K bps

30~120

m-6 dBm

-107

dBm

4.5~5.5

V15.5 cm

주( ) 모듈 위에서 보면 주파수 조정용 트리머 반고정 콘덴서 가 보이는데 사용자는 이것( )

을 절대로 돌려서는 않된다 이것은 출하전에 이미 정밀한 제너레이터를 사용하여 셋. RF

업되어 있기 때문이다.

그림 모듈BiM

Page 81: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 81 -

TX2, RX2

는 송신 모듈이고 는 수신 모듈이다 통신 속도는 까지 가능하며TX2 RF Data RX2 . 40Kbps

빌딩 내에서는 약 열린 공간에서는 까지 통신이 가능하다 주파수는 영국 버전70m, 300m .

인 제품 와 유럽 버전인 제품418.00MHz( :TX2-418, RX2-418-F) 433.92MHz( :TX2-433,

가 있다 용과 용 제품이 따로 있다RX2-433-F) . 5V(4~6V) 3V(RX2:3~4V, TX2:2.2V~4V) .

주파수 통신 속도 통신 거리 출력 강도 수신 감도 사용 전압 안테나 길이

TX2

418.00

MHz

433.92

MHz

40K bps75~300

m

-6 dBm

+9 dBm

4.0~6.0

V

16.5 cm

15.5 cm

RX2

418.00

MHz

433.92

MHz

40K bps75~300

m

-100

dBm

4.0~6.0

V

16.5 cm

15.5 cm

주 에 이상을 넣으면 전파 허가를 요하는 출력이 발생할 수도 있습니다( ) TX2 6V .∙

는 버전과 번전이 있는데 위 표는 버전에 해당함TX2, RX2 3V(2.2~4.0V) 5V 5V .∙

는 저속 버전과 고속 버전이 있는데 수신 감도는 버RX2 -A( 14K bps) -F( 40K bps) , -F∙

전의 것임.

그림 TX2

Page 82: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 82 -

그림 RX2

의 사용법MARO RF BD1

전원 공급①

보드가 사용하는 전원은 단일 전원이다 전원 공급은 밧데리를 사용하는 경우에5V . 9V

는 에 넣어주고 어뎁터를 사용하는 경우에는 에 넣어준다 그냥 를 사용하는JP1 , 9V J1 . 5V

경우에는 로 공급한다 회로도 참조 전원은 반드시 앞에 세가지 중에 하나의 방법으JP7 ( ).

로만 공급해 주어야한다 잭에 전원을 넣는 경우에는 코어가 인데 역전원 방지 회. J1 (+)

로가 있으니 일단 끼워보고 전원 에 불이 들어오지 않으면 바꿔 끼우면된다 를LED D2 . 5V

직접 공급하는 경우에는 번 핀에 를 번 핀에 를 넣어 주어야 한다JP7 1 GND 2 VCC .

그림 실크인쇄도

Page 83: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 83 -

안테나 연결②

안테나는 의 번 핀 보드의 오른쪽 핀 에 연결한다 사용 가능한 안테나의 종류는JP6 2 ( ) .

각 모듈의 데이터 쉬트를 참조하고 휩 안테나를 사용하는 경우에는 앞에 표에 나, (whip)

온 길이를 사용하면 된다.

을 사용한 통신BiM③

은 송신과 수신이 모두되는 통신 모듈이다 은 에 연결하면 된다 연결시에BiM . BiM M1 . 1

번 핀의 위치를 다시 한번 확인해라 송신 모드와 수신 모드의 선택은 두 가지 방법으로.

할 수있다 하나는 하드웨어적으로 점퍼로 설정하는 것이고 다른 하나는 소프트웨어적. ,

으로 선택하는 것이다 먼저 송신 모드로 설정하려면 에 아무 것도 연결하지 않으면. JP4

된다 수신 모드로 설정하기 위해서는 의 번과 번에 점퍼 블록을 꽂아주어야 한다. JP4 1 2 .

송수신 모드의 전환을 소프트웨어적으로 설정하기 위해서는 시리얼 통신을 하기 위한

개의 선 즉 외에 라는 신호선을 하나 더 사용해야 한다 까지 받3 , RXD, TXD, GND RTS . RTS

아들이기 위해서는 을 통해서 시리얼 포트와 연결한다 를 사용하지 않는 경우에JP3 . RTS

는 를 사용하면된다 신호로 송수신 모드를 전환하기 위해서는 의 번과 번JP2 . RTS JP4 2 3

에 점퍼 블록을 꽂아주어야 한다.

그림 시리얼 케이블의 결선도

를 사용한 데이터 전송TX2④

를 사용하는 경우에는 에 모듈을 연결하면 된다 의 설정에 무관TX2 M2 . JP4 .

를 사용한 데이터 수신RX2⑤

를 사용하는 경우에는 점퍼 를 연결해 주어야한다 연결 방법은 의 두 개RX2 SMD JP5 . JP5

의 사각 패드가 붙을 수 있도록 납땜을 해주면 된다 의 설정에 무관. JP4 .

기타⑥

와 는 대역의 주파수이다418 MHz 433 MHz UHF(Ultra High Frequency) .•

과 는 에 의하여 제어되는 방식을 사용한다BiM TX2 SAW FM(Frequency Modulation) .•

과 는 이다BiM RX2 double conversion FM superhet receiver .•

과 또는 모듈과 서로 주파수만 같다면 통신이 가능하다BiM TX2 RX2 .•

모듈을 사용하기 위해서는 다음 사항을 지켜야 한다BiM, TX2, RX2 .•

펄스 폭(T:Pulse width time): 25us < T < 2ms∘수신 안정화 신호 수신기 내부에는 데이터 슬라이서라는 것이 들어 있다(preamble): .∘

이 것이 정상동작하기 위해서는 최소 이상의 연속된 또는 값이 필요하다 이3ms 10B 01B .

Page 84: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 84 -

렇게 연속된 과 의 스트림을 프리앰블이라고 한다 프리앰블은 테이터 스트림을 보내1 0 .

기 전에는 반드시 필요하다 한번 스트림을 보내고 잠시 후 다시 보내기 위해서는 다시.

프리앰블을 보내 주어야한다 프리앰블의 길이 정도로 길게 하면 더욱 안정된 통신. 5ms

을 할 수 있다.

마크 스페이스 비율 을 다른 말로 마크 을 다른 말로 스페이스 라고/ : 0 (Mark), 1 (Space)∘한다 데이터 슬라이서는 매 동안 마크와 스페이스의 평균 개수의 비율이 경. 4 ms 50:50

우에 가장 잘 동작하게 되어 있다 비율 정도까지도 허용이 되지만 노이즈 발생의. 30:70

가능성이 증가한다 예를 들어 한 바이트만을 볼 때 는 마크가 개 스페이스가. 10011100B 4

개 임으로 정확히 의 비율이다 따라서 전송하려는 데이터를 임의 위치에서부터4 50:50 . 4

씩 잘랐을 때 마크와 스페이스의 비율이 한쪽으로 너무 치우치는 경우에는 에러가 발ms

생할 수 있다.

카리스마 보드를 사용하여 시리얼 통신을 하기 위해서는 패킷 통신을 하여야 한다 패.•

킷이란 하나의 데이터를 보낼 때 앞뒤로 무엇인가를 붙이거나 하여 어떠한 포맷화 시켜

포장하는 것을 말한다 다음 예는 레디오메트릭스사에서 추천하는 패킷 방법 중에 하나.

이다.

이상의 프리앰블3ms FFh (FFh) Start byte (01h)data

bytesCRC or Check Sum

주 프리앰블은 보통 또는 를 딜레이 없이 계속해서 이상 포트에 값을( ) AAh( 55H) 3ms∙

출력함으로서 만들 수 있다 마크 스페이스 비율. cf) AAh = 10101010B => 50:50 :

시리얼 포트로 들어오는 연속된 값 중에 정확한 스타트 비트를 찾기 위해 필요FFh :∙

(FFh) : Optional∙

고유의 스타트 바이트Start byte : .∙

(01h) : Optional∙

계속되는 나 는 곤란하다 더욱이 이상으로 데이터를 전송data bytes : FFh 00h . 20kbps∙

하기 위해서는 마크 스페이스 비율이 을 유지할 수 있는 특별한 코딩 방법이 필요: 50:50

하다 사의 모듈 설명서 참조 간단한 예로.(RADIOMETRIX BiM ) 17h, 1Bh, 1Dh, 1Eh,...4Eh,

와 같은 바이트 값만을 사용하는 방법도 있다 이진수로 쓴 뒤 원인53h,...87h,8Bh..... .(

을 생각해 보라.)

CRC or Check Sum : Optional∙

이상에서 보듯이 모듈을 사용한 시리얼 통신은 그리 간단하지 않으며 하이퍼 터미RF ,•

널과 같은 일반적인 시리얼 통신 프로그램으로는 프리앰블을 만든다거나 송수신을 전환

한다거나 하는 것이 쉽지않다 거의 불가능하다 사용자가 스스로 통신 프로그램을 작성( ).

해야한다.

Page 85: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 85 -

및7. LCD Graphics LCD

는 년대 말부터 본격적으로 실용화에 대한 연구가 진LCD(Liquid Crystal Display) 1960

행되어 년대 말에 어느 정도의 제품기술이 안정되었을 정도로 매우 짧은 역사를 가1980

지고 있는 평판 디스플레이 소자이다 이것은 지금도 세계 각국의 치열한 기술개발 경쟁.

속에서 다른 새로운 평판 디스플레이 소자들과도 시장 경쟁을 벌이고 있는 제품이다.

란1) LCD

는 개의 편광성 유리기판 사이에 위치하는 액정의 분자 배열상태에 따라 각 화소LCD 2

별로 외부의 자연광 또는 백라이트 광원으로부터 나오는 빛을 선택적으로 차단하거나 통

과시킴으로써 영상을 만드는 평판 디스플레이 소자이다 액정 분자는 길다란 막대 모양.

으로 되어 있는데 이것들은 모두 상하의 유리기판면과 수평인 방향으로 배열되도록 만들

어져 있다 그러나 여기서 액정의 방향성을 주기 위해서 수평을 유지하면서 비틀림각을. ,

만들게 되는데 이 비틀림각의 차이에 따라 는 도 형과 수, LCD TN(90 ; TWISTED NEMATIC) S

도 형으로 나누어진다(180-270 ;TWISTED NEMATIC) .

형에 비하여 형 의 약점은 액정의 복굴절 특성을 주로 이용하기 때문에 화면TN STN LCD

이 모드 모드 모드로 되어 모드를 얻을 수 없다는 것이다YELLOW , BLUE , GRAY BLACK&WHITE .

에서 이러한 광왜곡 현상을 보상하기 위하여 보상판을 사용하게 되는데 이러한 보상LCD ,

판으로서 액정 패널을 하나 더 사용하여 이중으로 처리한 것을 형이라 하고 보상DSTN ,

필름을 사용하는 것을 형이라고 한다 오늘날 형 는 세그먼트 처럼 간단한FSTN . TN LCD 7 LCD

구조에 주로 사용되며 그냥 이라고하면 일반적으로 을 지칭할 정도로 형, STN FSTN FSTN

를 많이 사용하는데 이는 좀더 높은 해상도를 가지는 도트 매트릭스 구조의 텍스트LCD ,

형 및 그래픽형 모듈에 널리 사용된다LCD .

소자는 각 화소별로 나뉘어져 빛을 제어하는 액정 패널 이 패널의 외부에서 각화LCD ,

소별로 액정의 분자 배열을 바꾸기 위하여 전기적인 신호를 보내주는 구동회로 광원을,

제공하는 백라이트 회로 등으로 구성된다 그런데 위에서 소개한 수동형 소자들은. , LCD

가로와 세로 방향의 전극을 격자형태로 배열하고 동작시키고자 하는 화소의 화소를 교,

차하여 지나가는 가로 및 세로 위치의 전극에 전압을 인가하여 화상을 표시하므로 구조,

가 간단하고 제작 비용이 저렴하나 전체 화면이 커질수록 전력소비도 커지기 때문에 대

화면이나 고해상도를 구현하기 어려워지는 단점이 있다 그런데. , TFT(THIN FILM

로 대표되는 능동형 소자는 각 화소에 인가되는 전압을 하기 위하TRANSISTOR) LCD ON/OFF

여 저전압으로 구동되는 스위치를 사용하므로 전체적으로 소비전력이 적고 각 화소TFT ,

를 개별적으로 매우 빠르게 제어할 수있으므로 고해상도의 대화면 구조에 적합하며 시각

적 특성도 더욱 우수한 장점을 가진다.

의 구조2) LCD

개의 유리기판 사이에서 수평방향으로 비틀어져 배열되어 있던 액정 분자들은 한 쪽2

의 편광판을 통과한 빛이 액정의 분자 배열을 따라 꼬여지면서 교차된 다른 편광판을 통

과하게 함으로써 전압을 가하지 않은 상태에서 빛을 통과시키는 기능을 수행한다 그러.

나 외부에서 양쪽 평광판 사이에 전압이 인가되면 모든 액정 분자들이 전계의 방향으로,

Page 86: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 86 -

일정하게 배열되어 빛을 직진하도록 함으로써 한쪽 편광판을 통하여 들어온 빛이 그래도

교차된 다른 편광판에 전달되어 차단되므로 빛이 통과할 수 없게 된다.

모든 액정 분자들은 긴 막대 모양으로 되어 있고 장축 방향의 유전율과 장축에 수직인

방향의 유전율이 달라서 유전 이방성을 가지는데 여기서 형 는 액정 분자들, POSITIVE LCD

의 장축 방향 유전율이 수직 방향의 유전율보다 더 커서 모든 액정 분자들이 전계와 평

행 방향으로 배열되는 특성을 가지고 있고 형 는 액정 분자들의 수직 방향, NEGATIVE LCD

유전율이 장축 방향의 유전율보다 더 커서 모든 액정 분자들이 전계와 수직 방향으로 배

열되는 특성을 가진다 대부분의 는 형으로 되어 있다. LCD POSITIVE .

하지만 일반적으로 형 라고 하면 아래그림과 같이 빛이 투과하는 바탕 부, POSITIVE LCD

분에 대하여 영상을 표현하고자 하는 부분이 빛이 차단되어 나타나는 형태를 가리키며,

반대로 형 라고 하면 빛이 차단되는 바탕 부분에 대하여 영상을 표현하고자NEGATIVE LCD

하는 부분이 빛이 투과되어 나타나는 형태를 가리킨다.

텍스트형 모듈의 특징3) LCD

의 단일 전원으로 동작한다+5V .①

개의 칩에 등을 내장한1 CG(Character Generator) ROM, CG RAM, DD(DISPLAY DATA) RAM②

콘트롤러 및 드라이버 를 사용하므로 전체적인 크기가 작아서 사용하기 편리LCD LSI

하다 추가적인 드라이버 가 사용되는 경우도 있다. LSI

마이크로프로세서와의 인터페이스 접속 핀번호 및 신호명 가 거의 표준화되어 있으( )③

며 비트 또는 비트 데이터 버스로 접속할 수 있다 그러나 모듈은 일반적인, 8 4 . LCD

인터페이스용의 반도체 소자들에 비하면 액세스 시간이 상당히 길어 동작이 느린I/O

편이므로 접속에 유의해야 한다.

각 문자를 또는 도트의 매트릭스 방식으로 표시한다5*7( 5*10) .④

일반적인 영문 문자를 모두 표시 일본어를 포함하여 문자 할 수 있으며ASCII ( 192 ) ,⑤

최대 개까지의 사용자 정의 문자를 만들어 사용할 수도 있다8 .

문자를 표시할 때 커서의 위치가 자동으로 증가하며 커서를 임의의 위치로 이동시킬,⑥

수도 있다 물론 화면에서 커서를 보이거나 보이지 않게 설정할 수도 있다. , .

과 에 가 데이터를 쓰는 것은 물론이고 그 내용을 읽어들일 수도 있DD RAM CG RAM CPU⑦

다.

백라이트 기능을 갖는 모델의 경우에는 어두운 곳에서도 화면을 선명하게 볼 수 있⑧

다.

그러나 이중에서 를 사용한 백라이트형 모델은 소비전력이 상당히 크며 이나, LED , EL

형의 백라이트는 추가적인 장치를 요구하므로 이를 사용하려면 경제적 비용이 증CCFL

가된다.

Page 87: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 87 -

그래픽형 모듈의 특징4) LCD

의 전원 이외에 정도의 구동전압을 필요로하며 이밖에도 이나+5V -10V LCD , EL CCFL①

백라이트 방식에서는 지정된 교류전원을 필요로 한다.

콘트롤러를 사용하는 경우와 콘트롤러가 없이 드라이버만으로 구성되는 경우가LSI②

있다 드라이버는 공통 드라이버와 세그먼트 드리아버로 나누어지는데 이것이 별개. ,

의 로 되어 있기도 하고 개의 로 통합된 모델도 있다LSI 1 LSI .

마이크로프로세서와의 인터페이스 접속 핀번호 및 신호명 가 거의 표준화 되어 있지( )③

않아서 대부분의 제품에서 서로 다르다 이 때문에 대부분의 제품에서 인터페이스의.

하드웨어적인 호환성이 없다.

내부 제어 명령이 대부분의 콘트롤러나 드라이버 마다 서로 달라서 기능적인 호LSI④

환성이나 소프트웨어의 호환성이 거의 없다 액세스 시간이 텍스형 모듈에 비하. LCD

여 더욱 느린 편이다.

콘트롤러를 사용한 모델에서는 내부적으로 문자에 대한 폰트를 가지고 있지ASCII⑤

만 드라이버만으로 구성되는 모델에서는 이러한 기능이 없으므로 영문 문자들, ASCII

도 사용자가 화면에 비트맵 그래픽 방식으로 그려주어야 한다 이 때문에 그래픽형.

모듈의 구동 소프트웨어는 텍스트형에 비하여 상당히 복잡해진다LCD .

콘트롤러를 사용한 모델에서는 내장 폰트와 사용자에 의한 비트맵 그래픽 제어를 선⑥

택적으로 사용할 수 있다.

콘트롤러가 있는 모델에서 내장 문자를 표시할 때 커서의 위치가 자동으로 증가하⑦

며 커서를 임의 위치로 이동시킬 수도 있다 물론 화면에서 커서를 보이거나 보이, . ,

지 않게 설정할 수도 있다 비트맵 그래픽 방식으로 제어할 때도 한 번 데이터를 출.

력하면 데이터 번지는 오른쪽으로 증가한다RAM .

백라이트 기능을 갖는 모델의 경우에는 어두운 곳에서도 화면을 선명하게 볼 수 있⑧

다.

그러나 이중에서 를 사용한 백라이트형 모델은 소비전력이 상당히 크며 이나, LED , EL

형의 백라이트는 추가적인 장치를 요구하므로 이를 사용하려면 경제적 비용이 증가CCFL

된다.

그래픽형 모듈5) HG25501NG-EW LCD

콘트롤러를 가지고 있는 그래픽형 모듈의 예로서 이는 소자S1D13305 LCD LCD S1D1335

를 사용하는 해상도의 반투과성 및 백라이트형 이다256*128 WHITE EL LCD .

의 구조와 사양HG25501NG-EW①

먼저 이 모듈의 내부 구조를 블록도로 나타내면 아래그림과 같다 여기서 사용하LCD .

는 콘트롤러 공통 드라이버 세그먼트 드라이버 소자는 이 모듈의 모델이나 버LCD , , LCD

전에 따라 약간씩 달라져 왔다 이 모듈의 외형도는 아래그림과 같다 이것은 대부. LCD .

분의 그래픽 모듈과 달리 접속 핀이 개인 콘넥터로 되어 있고 우측 하단에 위치하LCD 17

며 또한 백라이트 전원 단자는 모듈의 우측단 중간에 위치한다, EL LCD .

Page 88: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 88 -

접속 콘넥터의 핀이름과 그기능을 요약하면 아래표와 같다HG25501NG-EW .②

드라이브 동작전압은 아래그림에 보이는 것처럼 외부에서 별도로 의 전원을LCD -15V③

접속하여 이로부터 가변될 수 있는 를 공급해야 하는 것에 유의해야 한다Vo

Page 89: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 89 -

6) HLCD

Page 90: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 90 -

구동 회로도

Page 91: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 91 -

구동프로그램 그래픽 에 조선대학교를 쓰기< > LCD

#include <mega16.h>

#include <delay.h>

#define GLCD_A0 PORTC.0

#define GLCD_RW PORTC.1

#define GLCD_E PORTC.2

#define GLCD_CS PORTC.3

#define G_DATA PORTA

#define GLCD_RET PORTD.7

#define GLCD_C PORTC

#define LCD_RS PORTD.0

#define LCD_RW PORTD.1

#define LCD_E PORTD.2

하위 비트만 사용#define L_DATA PORTB // 4

unsigned int xy_data;

unsigned char font[5][32] =

조{{ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 //, 0x1F , 0xFC , 0x00 , 0x80 , 0x00 , 0x80 , 0x01 , 0x40, 0x02 , 0x20 , 0x0C , 0x18 , 0x30 , 0x06 , 0x00 , 0x80, 0x00 , 0x80 , 0x00 , 0x80 , 0x00 , 0x80 , 0x3F , 0xFE},

선{ 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0x08 , 0x04 , 0x08 //, 0x04 , 0x08 , 0x0C , 0xF8 , 0x0A , 0x08 , 0x11 , 0x08, 0x20 , 0x88 , 0x40 , 0x48 , 0x00 , 0x08 , 0x00 , 0x08, 0x10 , 0x08 , 0x10 , 0x00 , 0x10 , 0x00 , 0x0F , 0xF8},

대{ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x24 , 0x1F , 0x24 //, 0x20 , 0x24 , 0x20 , 0x24 , 0x20 , 0x24 , 0x20 , 0x24, 0x20 , 0x3C , 0x20 , 0x24 , 0x20 , 0x24 , 0x20 , 0x24, 0x21 , 0xA4 , 0x1E , 0x24 , 0x00 , 0x24 , 0x00 , 0x24},

학{ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0x84 //, 0x00 , 0x04 , 0x3F , 0xE4 , 0x00 , 0x07 , 0x0F , 0x84, 0x10 , 0x44 , 0x10 , 0x44 , 0x0F , 0x84 , 0x00 , 0x00, 0x0F , 0xF8 , 0x00 , 0x04 , 0x00 , 0x04 , 0x00 , 0x04 },

교{ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 //, 0x1F , 0xF8 , 0x00 , 0x04 , 0x00 , 0x04 , 0x00 , 0x04, 0x00 , 0x04 , 0x04 , 0x44 , 0x04 , 0x44 , 0x04 , 0x48, 0x04 , 0x48 , 0x04 , 0x48 , 0x04 , 0x40 , 0x3F , 0xFE}};unsigned char flash font3[1024] =

{

0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00이미지 형식의 데이터//BMP (128*64)

, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x3F , 0xC6 , 0x00 , 0x00 , 0x3F , 0xB6 , 0x0F , 0x00, 0x3F , 0x36 , 0x00 , 0xC0 , 0x06 , 0x06 , 0x3F , 0xC0, 0x3F , 0xC6 , 0x30 , 0x06 , 0x3F , 0xB6 , 0x1F , 0x86, 0x3F , 0x36 , 0x3F , 0xFE , 0x7F , 0xC6 , 0x3F , 0xC6, 0x0F , 0x1E , 0x30 , 0x06 , 0x0E , 0x36 , 0x39 , 0xC6, 0x03 , 0xF6 , 0x3F , 0xFE , 0x7F , 0xC7 , 0x00 , 0xC6, 0x19 , 0x9E , 0x3F , 0xFE , 0x1A , 0x76 , 0x30 , 0xDE

Page 92: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 92 -

, 0x03 , 0xF6 , 0x07 , 0x70 , 0x31 , 0x87 , 0x00 , 0xC7, 0x19 , 0x86 , 0x3F , 0xFE , 0x1B , 0x76 , 0x30 , 0xDE, 0x03 , 0x36 , 0x0E , 0x38 , 0x31 , 0x86 , 0x00 , 0xC7, 0x30 , 0xC6 , 0x30 , 0x06 , 0x1B , 0x36 , 0x39 , 0xC6, 0x03 , 0xF6 , 0x18 , 0x0C , 0x31 , 0x86 , 0x00 , 0xC6, 0x00 , 0x06 , 0x30 , 0x06 , 0x31 , 0xB6 , 0x1F , 0x86, 0x03 , 0xF6 , 0x3F , 0xFF , 0x1F , 0x06 , 0x00 , 0xC6, 0x00 , 0x70 , 0x3F , 0xFE , 0x31 , 0xB6 , 0x0F , 0x06, 0x03 , 0x36 , 0x3F , 0xFF , 0x0E , 0x00 , 0x00 , 0x06, 0x00 , 0xF8 , 0x3F , 0xFE , 0x00 , 0x36 , 0x00 , 0x06, 0x00 , 0x36 , 0x00 , 0x00 , 0x3F , 0xFE , 0x06 , 0x06, 0x01 , 0x8C , 0x00 , 0x00 , 0x00 , 0x36 , 0x00 , 0x06, 0x00 , 0x36 , 0x3F , 0xFE , 0x3F , 0xFE , 0x06 , 0x06, 0x01 , 0x8C , 0x00 , 0xC0 , 0x00 , 0x36 , 0x00 , 0x06, 0x00 , 0x36 , 0x3F , 0xFE , 0x00 , 0x06 , 0x06 , 0x06, 0x01 , 0x8C , 0x00 , 0xC0 , 0x00 , 0x36 , 0x00 , 0x06, 0x00 , 0x36 , 0x00 , 0x06 , 0x00 , 0x06 , 0x06 , 0x06, 0x00 , 0xF8 , 0x3F , 0xFF , 0x00 , 0x36 , 0x00 , 0x06, 0x00 , 0x36 , 0x00 , 0x06 , 0x00 , 0x06 , 0x3F , 0xFE, 0x00 , 0x70 , 0x3F , 0xFF , 0x00 , 0x36 , 0x00 , 0x06, 0x00 , 0x36 , 0x00 , 0x06 , 0x00 , 0x06 , 0x3F , 0xFE, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x0F , 0xF1 , 0x81 , 0x80 , 0x00, 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x0F , 0xF1 , 0x9F , 0xF1 , 0x80, 0x78 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x31 , 0x9F , 0xFF , 0x80, 0xDC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x31 , 0x8C , 0x6F , 0x81, 0x8E , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x31 , 0x8C , 0x6F , 0x83, 0x07 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x31 , 0x8C , 0x6F , 0x86, 0x03 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0xC1 , 0x88, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x0F , 0xFF , 0x83 , 0x81 , 0x8F, 0xFF , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x0F , 0xFF , 0x80 , 0x00 , 0x0F, 0xFF , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x0C , 0x01 , 0x8C , 0x00 , 0x00, 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x0C , 0x01 , 0x8C , 0x00 , 0x00, 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x0C , 0x01 , 0x8C , 0x00 , 0x00, 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x0F , 0xFF , 0x8F , 0xFF , 0x80, 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x0F , 0xFF , 0x8F , 0xFF , 0x80, 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00

Page 93: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 93 -

, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x0C , 0x0C , 0x61 , 0x8C , 0x01 , 0xE0 , 0x3E , 0x00, 0xF8 , 0x07 , 0x83 , 0xF0 , 0x78 , 0x1F , 0x3E , 0x00, 0xFF , 0x8C , 0x61 , 0x8C , 0x03 , 0xF0 , 0xFF , 0x83, 0xFE , 0x0F , 0xC3 , 0xF0 , 0xFC , 0x3F , 0xBE , 0x00, 0xFF , 0x8E , 0x7F , 0xBC , 0x07 , 0x39 , 0xC1 , 0xC7, 0x07 , 0x1C , 0xE3 , 0x01 , 0xCE , 0x71 , 0xC6 , 0x00, 0x63 , 0x0E , 0x7F , 0xBC , 0x06 , 0x19 , 0x80 , 0xC6, 0x03 , 0x18 , 0x63 , 0x01 , 0x86 , 0x61 , 0xC6 , 0x00, 0x63 , 0x0C , 0x61 , 0x8C , 0x06 , 0x1B , 0x00 , 0x6C, 0x01 , 0x98 , 0x66 , 0x41 , 0x86 , 0x60 , 0xC6 , 0x00, 0x63 , 0x0C , 0x7F , 0x8C , 0x60 , 0x1B , 0x00 , 0x6C, 0x01 , 0x80 , 0x67 , 0xF0 , 0xFC , 0x61 , 0xC6 , 0x00, 0x3E , 0x0C , 0x7F , 0x8C , 0x60 , 0x33 , 0x00 , 0x6C, 0x01 , 0x80 , 0xC7 , 0x38 , 0xFC , 0x7B , 0x86 , 0x00, 0x1C , 0x00 , 0x00 , 0x00 , 0x00 , 0xE3 , 0x00 , 0x6C, 0x01 , 0x83 , 0x82 , 0x19 , 0xCE , 0x3F , 0x86 , 0x00, 0x7F , 0xFC , 0x00 , 0x00 , 0x01 , 0xC3 , 0x00 , 0x6C, 0x01 , 0x87 , 0x00 , 0x19 , 0x87 , 0x0F , 0x06 , 0x00, 0x7F , 0xFC , 0x60 , 0x00 , 0x03 , 0x81 , 0x80 , 0xC6, 0x03 , 0x0E , 0x0E , 0x19 , 0x87 , 0x03 , 0x06 , 0x00, 0x00 , 0x0C , 0x60 , 0x00 , 0x07 , 0x01 , 0xC1 , 0xC7, 0x07 , 0x1C , 0x06 , 0x39 , 0xCF , 0x06 , 0x06 , 0x00, 0x00 , 0x0C , 0x60 , 0x00 , 0x67 , 0xF8 , 0xFF , 0x83, 0xFE , 0x1F , 0xE3 , 0xF0 , 0xFE , 0x06 , 0x06 , 0x00, 0x00 , 0x0C , 0x7F , 0xFC , 0x67 , 0xF8 , 0x3E , 0x00, 0xF8 , 0x1F , 0xE1 , 0xE0 , 0x7C , 0x0C , 0x06 , 0x00, 0x00 , 0x0C , 0x7F , 0xFC , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00};

비트형 제어명령 함수void LCD_command(char com_data) //4

{

DDRB = 0xff;

LCD_RS = 0;

명령어 쓰기 모드LCD_RW = 0; //LCD RS 0, RW 0 =

인에이블LCD_E = 1; //

상위 비트 전송L_DATA = ((com_data>>4)&0x0f); // 4

delay_us(1);

LCD_E = 0; //E=0

delay_us(1);

Page 94: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 94 -

LCD_E = 1;

하위 비트 전송L_DATA = (com_data&0x0f); // 4

delay_us(1);

LCD_E = 0; //E=0

delay_us(50);

}

비트형 데이터 출력 함수void LCD_data(unsigned char com_data) //4

{

DDRD = 0xff;

LCD_RS = 1;

데이터 쓰기 모드LCD_RW = 0; //LCD RS 1, RW 0 =

인에이블LCD_E = 1; //

상위 비트 전송L_DATA = ((com_data>>4)&0x0f); // 4

delay_us(1);

LCD_E = 0; //E=0

delay_us(1);

LCD_E = 1;

상위 비트 전송L_DATA = (com_data&0x0f); // 4

delay_us(1);

LCD_E = 0; //E=0

delay_us(50);

}

void LCD_string(unsigned char comm, unsigned char flash *string)

문자열 데이터 플래시 메모리에 할당// -

{

위치 데이터 전송LCD_command(comm); //

while(*string != '₩0')

{

LCD_data(*string);

string++;

}

}

그래픽 명령어 전송 함수void GLCD_command(unsigned char comm) // LCD

{

그래픽 선택 신호GLCD_CS = 0; // LCD

GLCD_A0 = 1;

에 명령어 쓰기 모드GLCD_RW = 0; // A0 1, RW 0 = LCD

인에이블GLCD_E = 1; //

포트 를 통하여 명령어 전송G_DATA = comm; // A

GLCD_E = 0;

그래픽 선택 취소GLCD_CS = 1; // LCD

}

그래픽 데이터 전송 함수void GLCD_data(unsigned char data) // LCD

{

그래픽 선택 신호GLCD_CS = 0; // LCD

GLCD_A0 = 0;

에 데이터 쓰기 모드GLCD_RW = 0; // A0 0, RW 0 = LCD

인에이블GLCD_E = 1; //

포트 를 통하여 문자 데이터 전송G_DATA = data; // A

Page 95: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 95 -

GLCD_E = 0;

그래픽 선택 취소GLCD_CS = 1; // LCD

}

그래픽 클리어 함수void GLCD_text_cle(unsigned int cle) // LCD

{

unsigned int i;

커서 위치 선정 명령GLCD_command(0x46); //

GLCD_data(0x00);

실제 커서 위치 번지GLCD_data(0x00); // '0000'

그래픽 에 문자 데이터 전송 명령어GLCD_command(0x42); // LCD

for(i=0;i<cle;i++)GLCD_data(0x00);

번지 부터 번지 까지 으로 채우기 화면 전체를 클리어//0 4096 0x00 , ?

}

커서 위치 선정 함수void GLCD_goxy(unsigned int xy) //

{

커서 위치 선정 명령GLCD_command(0x46); //

GLCD_data(xy & 0x00ff);

바이트 형식의 페이터 파라미터GLCD_data(xy >> 8); //2

}

도트 형식의 이미지 출력 함수void font_out() //128*64 BMP

{

unsigned int h,c;

이미지가 표출되는 위치 데이터xy_data=2023; //

GLCD_goxy(xy_data);

바이트 데이터를 순차적으로 전송GLCD_command(0x42); // 1024

for(h=0;h<1024;h++)

{

GLCD_data(font3[h]);

if(c==15)

{

xy_data+=32;

GLCD_goxy(xy_data);

GLCD_command(0x42);

}

c++;

if(c==16)c=0;

}

}

조선대학교 출력 함수void data_out() //" "

{

unsigned int i,g,k,l,y,t;

t=1000;

도트 형식의 이미지 출력 함수 호출font_out(); //128*64 BMP

조선대학교 좌시프트 번지 위치부터for(y=44;y>23;y--) //" " , 44

번지 위치 까지 이동23

{

Page 96: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 96 -

xy_data=y;

g=0;

k=0;

l=xy_data;

그래픽 에 문자 데이터 전송 명령어GLCD_command(0x42); // LCD

조선대학교 문자를 표출 시키기 위한 문for(k=0;k<5;k++) //" " 5 for

{

도트 형식의 문자로 표출 시키기 위한 문for(i=0;i<32;i++) //16*16 for

{

문자 데이터를 포트 로 출력GLCD_data(font[k][i]); // A

바이트 형식의 데이터를 두번 가로로 보내고if(g==1) //1

아래 칸으로 이동

{

xy_data+=32;

GLCD_goxy(xy_data);

바이트 형식의 데이터를 두번 가로로 보내고GLCD_command(0x42); //1

아래 칸으로 이동

}

g++;

if(g==2)g=0;

}

도트 형식의 이미지 출력 함수 호출//font_out(); //128*64 BMP

한글자씩 표출하고 지연되는 시간delay_ms(t); //

xy_data = l+2;

l+=2;

}

t=0;

좌시프트 지연시간 초 지연delay_ms(500); // 0.5

시프트시 잔상제거GLCD_text_cle(2022); //

}

}

초기화 설정 함수void GLCD_init(void) //LCD

{

delay_ms(10);

GLCD_command(0x40);

GLCD_data(0x30);

GLCD_data(0x87);

GLCD_data(0x07);

GLCD_data(0x1f);

GLCD_data(0x31);

GLCD_data(0x7f);

GLCD_data(0x20);

GLCD_data(0x00);

GLCD_command(0x44);

GLCD_data(0x00);

GLCD_data(0x00);

GLCD_data(0x7f);

GLCD_data(0x04);

GLCD_data(0x87);*/

GLCD_command(0x4c);

Page 97: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 97 -

GLCD_command(0x5a);

GLCD_data(0x00);

GLCD_command(0x5b);

GLCD_data(0x0d);

GLCD_command(0x59);

GLCD_data(0x04);

}

초기화 설정 함수void LCD_init(void) //LCD

{

delay_ms(50);

LCD_command(0x28);

delay_ms(4);

LCD_command(0x28);

delay_us(100);

커서LCD_command(0x0c); //Display On, Off

delay_us(100);

오른쪽으로 증가 화면 시프트LCD_command(0x06); //Entry mode set - , X?

delay_us(100);

화면 지우기LCD_command(0x01); //LCD

delay_ms(2);

}

void main(void)

내부 레지스터 초기설정 값{ //

PORTA=0x00;

포트 를 출력으로 설정DDRA=0xFF; // A

PORTB=0x00; //?

DDRB=0x0f;

PORTC=0x00;

DDRC=0xff;

PORTD=0x80;

DDRD=0x8f;

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

MCUCR=0x00;

MCUCSR=0x00;

TIMSK=0x00;

Page 98: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 98 -

ACSR=0x80;

SFIOR=0x00;

그래픽 초기화 함수 호출GLCD_init(); // LCD

초기화 함수 호출LCD_init(); //LCD

그래픽 클리어 함수 호출GLCD_text_cle(4096); // LCD

LCD_string(0x80," LCD graphic ");

LCD_string(0xc0," test ");

while (1)

{

data_out();

};

}

Page 99: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 99 -

서보 모터 제어8. RC

서보는 관성이 작아 정밀제어가 가능한 모터 즉 서보 모터와 개의 감속기어 각을DC 5 ,

젤수 있는 보륨 가변저항 그리고 제어 회로로 구성된 모듈이다( ), .

일반적으로 서보 혹은 서보라고 부르며 그 용도는 이름 그대로R/C R/C(Radio Control)

모형에 사용된다 입력단자는 개로 그중 빨강은 전원이고 검정은 그리고 노. 3 +4.8~6V 0V

랑은 제어용 단자이다.

서보는 까지의 동작 범위를 가지고 있다-90 ~ 0 ~90 .◦ ◦ ◦◯전원은 까지 사용되며 조금 넘어도 무리는 가지만 동작은 한다4.8V ~ 6V .◯토크는 구동축에서 거리에서 들 수 있는 무게를 나타내는데 이하부터1Cm 1Kg◯

이상까지 다양하다20Kg .

사이즈는 엄지 손가락만한 것부터 주먹의 반 만한 것까지 있다.◯사이즈와 토크는 보통 비례관계이며 무게도 이와 같다.◯무게는 여 에서 까지 있다10 g 200g .◯각속도는 를 회전 하는 대 걸리는 시간으로 보통 이다60 0.15~0.4sec .◦◯

Page 100: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 100 -

현제 사용중인 서보는 하이텍사에서 제작한 모델로HS-422

동작 전압은 이고 토크는 일때4.8V ~ 6V 4.8V 3.1Kg/Cm

이고 일때 이며 무게는 으로 형 서보중6V 3.5Kg/Cm 45.5g Standard

하나입니다.

제어방법1)

의 과 의 이 조합된 신호20msec low level 0.7~2.3msec high level

로 제어됩니다 은 서보의 구동각을 좌우하며 는 는. high level 0.7msec -90 , 1.5msec 0 ,◦ ◦

그리고 는 에 대응된다 서보모터의 제어는 신호를 기반으로 하며 일반2.3msec 90 . PWM ,◦

모터와 달리 일정 주기로 주어야 정확한 각도 조절이 가능하다DC .

일반적인 신호는 다음과 같다 이 신호에서 이 되는 구간의 시간을 조절함으PWM . PWM 1

로써 서보 모터의 제어가 가능하다 한주기를 로 하고 이 되는 시간을 로. 20msec 1 0.7ms

맞추게 되면 최대 촤향 주기로 서보모터가 최대 좌향으로 이동하게 된다.

이 되는 시간을 로 맞추게 되면 서보 모터의 중간이 된다1 1.5ms .

이 되는 시간을 로 맞추게 되면 서보 모터의 최대 우향 주기가 된다1 2.3ms .

이렇게 이 되는 시간을 와 사이의 시간으로 조절하면 원하는 각도로의 회전1 0.7ms 2.3ms

이 가능하다.

Page 101: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 101 -

와 의 특징2) analog servo digital servo

analog servo①

아날로그회로는 구성되어 연속된 입력신호에 의해 제어 각이 결정된다 신호 자체가.

아날로그를 동작시키는 원리로 작동되며 신호가 없으면 모터는 오동작을 하거나 아무동

작을 하지 않은 오픈상태가 된다 전원이 없는 상태와 동일하다. .

제어 펄스의 주기가 토크와 직결되어 주기가 일 때와 일 때의 수치가 다르20msec 5msec

다 실험에 의하면 주기가 짧을수록 토크는 크며 목표 각에 이르는 속도 또한 빠르다. .

반면 주기가 길수록 토크는 작아지며 목표 각에 이르는데 오랜 시간이 걸린다 시간이야.

초 이내지만 토크의 차이는 많이 나므로 이점을 고려해가면서 프로그래밍해야 한다1~2 . .

이는 펄스의 주기를 서보 내에서 모터의 제어 주기로 사용하기 때문에 나타나는 현상으

로 아날로그 서보에서만 나타나는 현상이다 외부에서 서보에 회전 부하가 걸리면 펄스.

의 주기에 맞추어 목표 각으로 가기위한 모터제어가 일어난다 모터제어는 일. high level

때만 일어나며 의 시간 값을 각 값으로 이용하므로 주기가 짧으면 그만큼 자high level

주 모터가 제어 될 것이고 주기가 길다면 모터는 가끔 제어될 것이다 결국 모터의 제어.

량은 일정시간동안은 의 총량이 된다high level .

digital servo②

디지털회로로 구성되어 입력신호에 의해 각이 결정되나 아날로그서보와 달리 신호를

로 간주해 통신을 하는 원리로 동작합니다 그러므로 연속된 신호가 없어도 각을 유data .

지 할 수 있으며 제어주기와 상관없이 동작하므로 토크의 변화도 없다.

서보 제어시 알아두어야 할 사항3)

서보의 속도는 로 너무 빠르기 때문에 주의해야 할 사항이 있다 스펙대로60 /0.2sec .◦

라면 모터의 움직임은 불과 초 사이에 움직일 것이다 큰 폭으로 각도가 변하는 경우0.1 .

모터에 무리가 가 얼마 안가서 고장이 날것이다 이러한 점을 예방하기 위해서는 특별한.

루프를 프로그램에 넣어야 한다 바로 움직여야 하는 각을 여러 개로 나누는 루프를 말.

한다 에서 까지의 각이 있다면 한번에 까지 가는 것이 아니라 개로 나누어. 30 60 60 10◦ ◦ ◦

서 이렇게 나온 각을 가지고 이각을 초에 하나씩 대입을 하여 펄스33 , 36 , 39 ... 0.1◦ ◦ ◦

를 생성한다 그러면 초에 만 움직이게 되는 것으로 모터에 무리가 안 가게 된다. 0.1 3 .◦

그리고 더 부드러운 모션을 원한다면 각을 더 세분하면 된다.

Page 102: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 102 -

사용하여 프로그래밍하기4) CodeVision AVR

프로젝트 만들기< new >

칩 선택 포트 설정< > < >

외부 인터럽트 설정 타이머 카운터 설정 설정< > < / > < LCD >

Page 103: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 103 -

활성화 화면< >

예제 프로그램5)

#include <mega128.h>

#include <delay.h>

#include <lcd.h> 헤더 파일 선언부//

#include <stdio.h>

#define total_Servo 40000 // 20ms

#define Servo_start 전처리 명령어 사용하여 사용하기 편리하게 함1400 // 0.7ms

#define Servo_end 4600 // 2.3ms

구별char servo_flag = 0, SW_on_off = 0; // high low Flag

원하는 희망각unsigned int angle_target = 3000 ; // 사용할 변수 선언

int speed = 1; // Sevor_speed

char sbuf[30]; 사용에 필요한// lcd Sbuf

#asm

.equ __lcd_port=0x15

#endasm

interrupt [TIM1_OVF] void timer1_ovf_isr(void)

{

타이머 정지TCCR1B=0x00; //

if(servo_flag == 0 ) // out_high

Page 104: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 104 -

{

servo_flag = 1; 와 구분하기 위한// high low Flag

PORTF = 0x01; 포트 에 번 비트를// F 0 high

TCNT1H = ( ( 65535 - angle_target ) >> 8 ) & 0xff ;

타이머 주기 설정 상위// ( )

TCNT1L = ( 65535 - angle_target ) & 0xff ;

타이머 주기 설정 하위// ( )

}

else if (servo_flag == 1 ) // out_low

{

servo_flag = 0; 와 구분하기 위한// high low Flag

PORTF = 0x00 ; 포트 에 번 비트를// F 0 low

TCNT1H = ((65535 - (total_Servo - angle_target ) ) >>8 ) & 0xff ;

타이머 주기 설정 상위// ( )

TCNT1L = ( 65535 - ( total_Servo - angle_target ) ) & 0xff ;

타이머 주기 설정 하위// ( )

SW_on_off = 1; 스위치 체터링을 위한// Flag

}

TCCR1B=0x02;

}

// External Interrupt 0 service routine

오른쪽으로 이동interrupt [EXT_INT0] void ext_int0_isr(void) //

{

스위치 체터링을 위한if (SW_on_off == 1 ) // Flag

{

SW_on_off = 0; 스위치 체터링을 위한// Flag

서보 모터의 회전 각도 선정 일때 도씩angle_target += (speed * 100); // 1 5

최외각 각도까지 갔을때 처리if (angle_target >= Servo_end ) //

{

angle_target = Servo_end ;

}

}

}

// External Interrupt 1 service routine

왼쪽으로 이동interrupt [EXT_INT1] void ext_int1_isr(void) //

{

if (SW_on_off == 1 )

{

SW_on_off = 0;

일때 도씩angle_target -= (speed * 100); // 1 5

if (angle_target <= Servo_start )

{

angle_target = Servo_start ;

}

}

}

Page 105: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 105 -

// External Interrupt 2 service routine

interrupt [EXT_INT2] void ext_int2_isr(void) // speed up

{

스위치 체터링을 위한if (SW_on_off == 1 ) // Flag

{

SW_on_off = 0; 스위치 체터링을 위한// Flag

최고의 이동 각도 까지 갔을때 처리if (speed >= 5 ) //

{

speed = 5;

}

스위치 눌렀을때 처리else if (speed < 5 ) //

{

speed ++;

}

}

}

// External Interrupt 3 service routine

interrupt [EXT_INT3] void ext_int3_isr(void) //speed down

{

if (SW_on_off == 1 ) 스위치 체터링을 위한// Flag

{

SW_on_off = 0; 스위치 체터링을 위한// Flag

if (speed <= 1) 최고의 이동 각도 까지 갔을때 처리//

{

speed = 1;

}

스위치 눌렀을때 처리else if (speed > 1 ) //

{

speed --;

}

}

}

void main(void)

{

PORTA=0x00;

DDRA=0x00;

PORTB=0x00;

DDRB=0x00;

PORTC=0x00;

DDRC=0x00;

스위치 사용을 위해 상태 유지PORTD=0x0f; // high

DDRD=0x00;

PORTE=0x00;

DDRE=0x00;

PORTF=0x00;

서보 모터 신호 선을 위해 출력으로 선언DDRF=0x0f; //

PORTG=0x00;

DDRG=0x00;

Page 106: ATMEGA16시리즈를이용한 하드웨어설계및프로그래밍cfs7.blog.daum.net/upload_control/download.blog?fhandle...능하다 하버드아키텍쳐구조의특징상 개의명령처리는

- 106 -

TCCR1A=0x00;

분주비TCCR1B=0x02; // 8 2000.000 kHz

TCNT1H=0x00;

TCNT1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

OCR1CH=0x00;

OCR1CL=0x00;

EICRA=0x00;

EICRB=0x00;

외부 인터럽트 허용 레지스터 까지 인터럽트 설정EIMSK=0x0F; // INT0~INT3

EIFR=0x0F;

// Timer(s)/Counter(s) Interrupt(s) initialization

타이머 카우터 이 발생하는 인터럽트 허용TIMSK=0x04; // / 1

ETIMSK=0x00;

아날로그 비교기의 동작을 금지 소비전력 감소ACSR=0x80; // ,

SFIOR=0x00;

// LCD module initialization

lcd_init(16);

// Global enable interrupts

#asm("sei")

화면 지움lcd_clear(); // LCD

폰트 위치 지정lcd_gotoxy(0,0); // lcd

에 뿌려줌lcd_putsf(" hi ^^ "); // lcd hi ^^ 

delay_ms(1000); 초 시간 지연// 1

while (1)

{

// Place your code here

lcd_gotoxy(0,0); 폰트 위치 지정// lcd

에 뿌려줌sprintf(sbuf,"%5u , %5u", speed, angle_target ); // lcd

lcd_puts(sbuf); 에 를 출력한다// LCD sbuf

초 시간 지연delay_ms(100); // 0.1

lcd_clear(); 화면 지움// LCD

};

}