• 검색 결과가 없습니다.

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

N/A
N/A
Protected

Academic year: 2022

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

Copied!
106
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

시리즈를 이용한 ATMEGA 16

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

월자 차 수정본 2005. 7 2

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

공학박사 강 원 찬

(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

(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 시리즈 이므로 이를 중심으로 설명하겠습니다.

(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

(5)

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

(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단계의 전압을 갖는다 또한 아래와 같은 특수한 기능을 같는다

(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

(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

(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비트의 스텍 포인터는 입출력에 해당하는 어드레스에 접근하게 된다

(10)

메모리 맵

데이터 은 아키텍쳐 구조에

1024byte SRAM AVR

해당하는 5가지의 어드레스 모드에 의해 접근하 기 용이하다. AVR 아키텍쳐의 메모리 공간은 아 래와 같이 선형의 규칙적인 메모리 맵을 갖는다 인터럽트 모듈은 입출력 어드레스 공간상에 이를 제어할수 있는 레지스터를 가지는데 모든 인터럽 트는 프로그램 메모리의 시작부분에 해당하는 벡 터테이블에 분리된 인터럽트 벡터를 가진다.

또한 해당 인터럽트는 그들의 어드레스 위치에 따라 우선권을 가지는데 이때 낮은 어드레스를 갖는 인터럽트일수록 더 높은 우선권을 가진다.

(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까지 간접 어드레스로 지정 포인터 레지스터 특징을 가진다.

(12)

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

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

리와 데이터 메모리에 접근하는 어드레싱 모드를 지원한다. 아래는 AVR 아키텍쳐가 지원 하는 각기 다른 어드레싱 모드를 그림으로 나타내었다.

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

아님을 미리 밝혀둔다

실행코드는 레지스터 D에

들어있는 값이다.

※ 명령 코드는 과 에 들어있으며r d 결과값은 에 저d 장

(13)

※ 명령 코드는 IO메모리에 있으며 은 원본이

n 나 목적레지스터

※ Rd/Rr은 원본이나 목적 레지스터를 가진다

※ 명령 코드는 어드레스 y나 z 레지스터 안의 데이터와 6비트 인스트럭션 워드에 포함된 어드레스와 더하여 나온 값이다

※ 명령 코드는 x,y,z 레지스터 안의 데이터가 된다

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

씩 감소된다 오퍼랜드 어드레스는

1 . x,y,z

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

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

션 전에 씩 증가된다 오퍼랜드 어드. 레스는 x,y,z 레지스터 안의 증가된 데이터가 된다

(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

파형생성시 이용된다

타이머 카운터에 관한/ 인터럽트가 발생하면 인터럽트 요청을 하는

플래그들이 있는 레지스터 입니다.

(15)

레지스터 - TCCRn

레지스터의 구조는 위와 같다. 위에서 하위 3비트 CS0n 값을 설정함으로서 프리스케일 러값을 설정할수 있다 각 값에 대한 프리스케일러 값은 아래와 같다.

레지스터 - TIFR

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

TOV0 / 0 . OCF0

그입니다. 위 두 비트는 인터럽트가 발생해서 인터럽트 서비스 루틴을 실행하면 0 으로 클리어 되고, 플래그에 1 을 쓰면 0 으로 클리어 됩니다.

레지스터 - TIMSK

레지스터의 구조는 위와 같다 위에서 TOIEn 값을 설정하여 타이머 카운터 오버플로우시/ 인터럽트가 발생가능토록 설정할수 있다

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

먼저 SREG 레지스터를 보면 아래 그림과 같습니다 이중에서 최상위 비트. I 는 전체 인터럽트를 허용 마스크 하는 기능을 합니다/ . 즉 I 비트가 1 로 셋 되어 있어야 전체 인 터럽트가 가능해 집니다.

(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 .

(17)

시리즈별 비교분석표 Atmega

구 분 a t m e g a 1 2 8 a t m e g a 1 6 3 a t m e g a 1 0 3

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 b y te 4

S R A M ( B y t e s ) 4096 1000 4096

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

F .m a x ( M H z ) 6 8

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

1 6 -b i t T i m e r s 1 1

8 -b i t T i m e r 2 2 2

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

R T C Y e s Y e s Y e s

S P I 1 1 1

U A R T 2 1 1

T W I Y e s

I S P Y e s y e s y e s

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

A n a l o g C o m p a r a t o r y e s y e s y e s

B r o w n O u t D e t e c t o r y e s y e s

W a t c h d o g y e s y e s y e s

O n C h i p O s c i l l a t o r y e s y e s H a r d w a r e M u l t i p l i e r y e s

I n 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 m o r y y e s

(18)

시리즈 의 기본 회로도 Atmega Atmega163L

(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 .

(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 컴파일러를 이

(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 .

(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으로 옮겨서 할당하지 않고 일부 섹션 만을 외부 메모리에 할당할 수도 있다.

(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와 같음

(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 .

(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 : .

(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 .

(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을 사용하는데도 의심의 여지가 없으면

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

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

최적화 옵션을 올바르게 지정하라.

⑥ (실행속도와 실행코드양의 반비례)

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

(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

(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 .

(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 버스 직렬 클럭)

(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 사용자정의 입력

사용자정의 입력

(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)

(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

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

(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

(35)

R30 330

VCC

a

b

c

d e f

g U8

FND 1 2 3

4

5 6 7 8

9 10 e d COM2

c

DOT b a COM1

f g

R26 330

R29 330 R17

330

VCC a

b

c

d e f

g U1

FND 1 2 3

4

5 6 7 8

9 10 e d COM2

c

DOT b a COM1

f g

R18 330

R31 330

PD4

R28 330 R8

330

R13 330

U2

74HC595 8 9

10

13 14 16 15

1 2 3 4 5 6 7

11 12

GND Q'H

SCLR

G SER VCC QA QB QC QD QE QF QG QH

SCK RCK R1

330

R9 330

R34 330 R6

330

R24 330 R23

330

R27 330 R16

330

R19 330 R20

330

VCC

R11 330

FND

a

b

c

d e f

g U5

FND 1 2 3

4

5 6 7 8

9 10 e d COM2

c

DOT b a COM1

f g

R22 330 R7

330

R25 330 R2

330

VCC a

b

c

d e f

g U3

FND 1 2 3

4

5 6 7 8

9 10 e d COM2

c

DOT b a COM1

f g

U9

74HC595 8 9

10

13 14 16 15

1 2 3 4 5 6 7

11 12

GND Q'H

SCLR

G SER VCC QA QB QC QD QE QF QG QH

SCK RCK

PD6

R21 330 R10

330 J1

FND POWER 1 2

U4

74HC595 8 9

10

13 14 16 15

1 2 3 4 5 6 7

11 12

GND Q'H

SCLR

G SER VCC QA QB QC QD QE QF QG QH

SCK RCK

R32 330

PD5 R3

330

R14 330 R12

330 R15

330

U6

74HC595 8 9

10

13 14 16 15

1 2 3 4 5 6 7

11 12

GND Q'H

SCLR

G SER VCC QA QB QC QD QE QF QG QH

SCK RCK

R33 330 VCC

3) 레이 제어

릴레이는 전자석과 철편으로 구성되어 전자석에 전기가 흐르면 철편이 빨려들어가고 스위치가 ON으로 되는 것이 작동 원리입니다. 릴레이가 외부 기기 제어용으로서 많이 이 용되어 왔던 것은 코일 부분과 접점 부분이 완전하게 절연되어 있어서 전기적으로 외부 기기와 절연할 수 있으며, 불과 수 V로 동작하는 MPU에서 수백 의 전기를V On/Off 할 수 있기 때문입니다.

(36)

릴레이의 단점

동작속도가 느립니다

- .

아무리 고속고속 제품이라도 수 msec의 동작 시간을 필요로 합니다. 이것은 기구적으로 작동하기 때문에 방법이 없습니다.

노이즈가 발생합니다 -

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

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

메커니컬 릴레이

다음 그림은 프린트 기판 실장 타입 릴레이의 예입니다 접점의 허용 전류에따라 다양. 한 크기와 종류가 있으며 동시에 움직이는 점점의 수에 따른 종류도 다양합니다.

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

반도체로 구성된 릴레이로 그 원리는 포토 커플러와 동일하며,  발광 다이오드와 빛 트리거 타입의 트라이액을 마주보게 하여 몰드 한 것입니다 트라이액이기 때문에 제로. 크로스 스위치로 동작하여 AC 전류를 제로크로스로 On/Off 할 수 있게 되어 있습니 다.소형이며 스파크가 발생하지 않고 절연되는 메리트가 있기 때문에 릴레이 대신에 많 이 사용되고 있습니다 다음그림은. SSR의 예입니다 하이브리드. IC로 제로 크로스 회로 등을 구현합니다.

(37)

포토 MOS 릴레이

포토 커플러와 완전히 동일한 구성에서 포토 셀과 발광 다이오드를 마주보게 몰드한 것으로 포토셀에는 MOS형 FET가 내부에서 접속 구성되어 있습니다.이 MOS형 FET에는 내 압이 400V 이상의 것도 있어서고압 고전류 제어도 할 수 있습니다. 대표적인 포토

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

MOS .

기타

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

DC DC 500V

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

(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

(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 ++ ) {

참조

관련 문서

그러나 개 정법에서는 “배려를 요하는 개인정보(要配慮個人情報)”로서 별도로 규율하고 있다.. 일명 개인정보 제공에 있어서 opt-out 방식을 부 분적으로 채택하고 있는

n Dynamic simulation-based power estimation with coarse-grained net model from power macro model database and testbench.. i is

□ 경제학에서는 이러한 소득상승에 따른 출산율 하락현상을 선택 이론구조 (choice-theoretic framework)로서 설명함... 이에 대응하여 합계출산율은

The front panel design may differ by chassis. A front panel module mainly consists of power switch, reset switch, power LED, hard drive activity LED, speaker and etc.

또한 기존 조명과 비교하여 조명의 형태를 다양하게 가공할 수 있다는 장점을 가지고 있어 LED 조명을 사용할 경우 실내 공간 활용 효율을 높일

GI S 내부 부분방전이 발생되면 센서를 통해 신호 검출이 가능하다.검출된 신호 패턴분석을 통해 부분방전 종류 구분이 가능하나 소량의 센서를 이용하여 On-l

Wrapping ... LED Strip   LED 것을 말한다 따라서. 수명이 약 만 시간으로 장수명이다 또한 충격이 강하고 안정적이기에 반영구적으로 사용할 10. 째로 고체발광으로서

컨테이너 전용선,살물선 및 LNG선박으로 구성된 선단을 운영하는 회사 로서 지정병원을 운용하고 있으며,선박에서 발생하는 선원의 상해에 대비