본문 바로가기

My Project/교통정리로봇

[교통정리로봇] 프로젝트 문서 2. 관련연구(다섯번째)


 

   다. AVR(로봇)

(1) AVR이란 무엇인가?

AVR 은 Alf(Bogen) Vergard(Wollen) Risc의 약자로서 ATMEL사에서 제작된 RISC 구조의 MCU 입니다. 가격적인 측면에서는 약간 고가이지만 1 사이클에 1 명령이 수행되는 고속의 MCU라는 점, ISP (In System Programming)이라는 기능을 통해 매우 저렴하게 개발환경을 구축할 수 있다는 점, RISC 타입이고, Harvard Architecture의 특징으로 C언어에서 우수한 성능을 발휘한다는 점, 막강한 각종 컴파일러가 무료로 제공된다는 점, 이밖에 ADC, PWM, SPI 등등의 고기능을 손쉽게 구현할 수 있다는 장점이 있습니다. 또 AVR에는 수많은 종류가 있습니다. AVR도 여러 종류가 생산되는데 크게 3종류로 ATtiny 계열, AT90s 계열, ATmega 계열이 있으며, 각각의 계열에도 여러 종류의 AVR을 판매하고 있습니다. 각각 해당 사이트에 접속해서 여러 AVR을 살펴보면 수많은 AVR이 있습니다. 어떤 것을 골라야 하나 망설이게 되지만, AVR의 핵심적인 부분은 모두 동일하며 어떤 기능을 더 많이 보유하고 있는가, 램 및 롬의 용량은 어떻게 되는가에 대한 소소한 차이일 뿐입니다.


(2) AVR 종류

AVR에 속하는 마이크로컨트롤러 계열은 거의 같은 구조의 CPU를 사용하고 있으므로 기본구조가 동일하고 기본 명령어 또한 같지만, 메모리의 크기라든가 특수기능의 내장여부에 따라, ATtiny family, AT90S family, ATmega family로 분류가 됩니다.

ATtiny family는 모든 모델명이 ATtiny로 시작하는 4비트 범용 마이크로컨트롤러입니다. 내부에

1K Byte에서 2K Byte 정도의 플래시 메모리를 가지고 있으며, 간단한 응용분야에 사용하는 것을 목표로 개발되어 기능이나 성능이 비교적 낮지만 가격이 저렴한 장점을 가지고 있습니다. 여기에 해당되는 모델들은 8핀에서 28핀 정도의 작은 외형으로 대부분 외부 시스템 버스가 없고, 외부 클록 입력 단자가 없는 대신 시스템 클럭을 발생하는 전체 발진 회로를 내장하는 경우가 대부분입니다.

AT90S family는 ATtiny family와 ATmega family의 중간정도 사양을 가진 8bit 마이크로 컨트롤러로서 모든 모델명이 AT90S로 시작합니다. 내부에 1K Byte에서 8K Byte 정도의 플래시 메모리를 가지고 있으며, 512 Byte 이하의 EEPROM과 SRAM을 내장하고 있습니다. 여기에 해당되는 모델들은 20핀에서 40핀 정도이며, ATtiny와 ATmega의 패밀리에 비하여 뚜렷한 특징이나 장점이 없어서 시장에서 사장되는 추세입니다.

ATmega family는 그야말로 메가급 8비트 범용 마이크로컨트롤러이며, 모든 모델명이 ATmega로 시작합니다. 내부에 8K Byte에서 256K Byte정도의 플래시 메모리를 가지고 있으며, 가장 규모가 크고 성능이 높은 응용분야에 사용하는 것을 목표로 개발되어 가격이 높지만 마이크로컨트롤러에 필요한 거의 모든 특수기능을 내장하고 있습니다. 여기에 해당되는 마이크로 컨트롤러들은 28핀에서 100핀 정도이고, 16MHz에서 평균적으로 16MIPS의 명령처리 속도를 갖습니다.

이번 프로젝트에서 사용하는 칩은 ATmega family의 ATmega128칩을 사용하여 프로젝트를 할 것입니다.

 

ATmega128 칩

 

ATmega128

(3) ATmega128 특징

■ 고성능, 저전력 AVR 8-bit 마이크로 컨트롤러

■ 진보된 RISC 구조

 • 133 가지의 강력한 명령어 : 대부분의 명령이 한 클럭에 동작

 • 32개의 8비트 범용 작업 레지스터+주변장치 제어 레지스터

 • 16MHz의 클럭을 사용할 경우 16MIPS까지 실행

 • 2사이클에 곱셈이 되는 곱셈기를 내장

■ 비휘발성의 프로그램(Flash), 데이터 메모리(Eeprom)

 • 내부의 프로그램 가능한 128k byte의 Flash 내장

 • Flash : 10,000번 쓰기/지우기 가능

 • 독립적인 락비트를 가진 추가적인 부트 코드 영역을 가짐

 • 프로세서 내부의 부트 프로그램에 의한 ISP(In-System Programming) 프로그램

 • 4k 바이트의 EEPROM : 100,000 쓰기/지우기 가능

 • 4k 바이트의 내부 SRAM

 • 추가적인 64k 바이트의 외부 메모리 확장 가능

 • 소프트웨어의 보안을 위한 프로그램 가능한 락비트

 • ISP 프로그램을 위한 SPI 인터페이스 핀

■ JTAG(IEEE std. 1149.1 Compliant) 인터페이스

 • 온 칩 디버그를 가능

 • Flash, EEPROM를 쓰거나 Fuses와 Lock bit를 설정 가능 

■ 주변장치 특징

 • 2개의 8비트 타이머/카운터

 • 2개의 확장 16비트 타이머/카운터

 • 2개의 8비트 PWM 채널

 • 6개의 2~6비트로 설정할 있는 분해능을 가진 PWM 채널

 • 출력 비교 Modulator

 • 8채널 10비트 ADC (8개의 한 개 단자 채널, 7개의 차동 채널, 2개의 Gain 설정 차동 채널)

 • 2선을 이용한 시리얼 통신(TWI)

 • 2개의 전 이중 시리얼 통신 포트

 • 마스터/슬레이브 SPI 시리얼 인터페이스

 • 내부 오실레이터를 가진 프로그램 가능한 와치독 타이머

 • 칩 내부의 아날로그 비교기

■ 특별한 마이크로 컨트롤러 특징

 • 외부 내부 인터럽트

 • 6개의 슬립모드 : 아이들, ADC 노이즈 감소, 파워절약, 파워다운, 대기, 확장대기

 • 소프트웨어로 선택 가능한 클럭 주파수

 • 풀업 디스에이블 기능

■ 53개의 설정가능한 입출력(I/O) 포트, 64핀 TQFP와 64핀 MLF

■ 동작 전압, 클럭 주파수

 • ATmega128L : 2.7-5.5V, 0-8MHz

 • ATmega128 : 4.5-5.5V, 0-16MHz

(4) ATmega128 핀 구조 및 기본적인 핀 기능

■ ATmega128 핀 구조

 



■ 기본적인 핀 기능

PIN 이름

PIN 번호

내    용

VCC 

21, 52

• 전원

GND 

22, 53

• 접지

Port A

(PA7~PA0) 

51 ~ 44

• 포트 A는 내부 풀업 저항을 갖는 8비트의 양방향 입출력 포트

• 외부 메모리를 엑세스하는 경우에는 A7~A0의 어드레스 /

  D7~D0의 데이터 포트로 사용

Port B

(PB7~PB0) 

10 ~ 17

• 포트 B는 내부 풀업 저항을 갖는 8비트의 양방향 입출력 포트

Port C

(PC7~PC0) 

35 ~ 42

• 포트 C는 내부 풀업 저항을 갖는 8비트의 양방향 입출력 포트

• 외부 메모리를 엑세스하는 경우에는 A8~A15의 어드레스 출력

  포트로 사용

Port D

(PD7~PD0) 

25 ~ 32

• 포트 D는 내부 풀업 저항을 갖는 8비트의 양방향 입출력 포트

Port E

(PE7~PE0) 

2 ~ 9

• 포트 E는 내부 풀업 저항을 갖는 8비트의 양방향 입출력 포트

Port F

(PF7~PF0) 

61 ~ 54

• 포트 F는 내부 풀업 저항을 갖는 8비트의 양방향 입출력 포트

Port G

(PG4~PG0) 

33, 34, 43,

18, 19

• 포트 G는 내부 풀업 저항을 갖는 5비트의 양방향 입출력 포트

RESET 

20

• 리셋 입력. CPU 리셋. 최소 50ns가 Low(0V)가 되어야 함

XTAL1 

24

• 오실레이터 입력

XTAL2 

23

• 오실레이터 출력

AVCC 

64

• AVCC는 포트 F의 A/D 컨버터를 위한 전압을 공급하는 핀

• ADC를 사용하지 않는다면 VCC에 연결,

• ADC를 사용할 경우에는 LPF를 통하여 VCC에 연결해야 함

AREF 

62

• AREF는 A/D 컨버터를 위한 아날로그 레퍼런스 핀

PEN 

1

• PEN은 SPI 시리얼 프로그램 모드를 위한 프로그램 인에이블 핀

• 전원 투입에 의한 리셋 시에 Low 상태를 유지하면 CPU가 SPI 직렬

  통신에 의한 프로그래밍 모드로 들어가도록 허용하는 기능을 수행

• 평상시에는 VCC에 연결