명령어 집합 | |
CISC | AMD64 ● x86 ● · M68K · 68xx · Z80 · 8080 · MOS 65xx · VAX |
RISC |
AArch64
ARM ·
RISC-V
● ·
MIPS
● ·
DEC Alpha ·
POWER
PowerPC ·
CELL-BE LoongArch · OpenRISC · PA-RISC · SPARC · Blackfin · SuperH · AVR32 AVR |
VLIW EPIC |
E2K · IA-64 · Crusoe |
1. 개요
Atmel에서 만든 범용 RISC 마이크로컨트롤러. 2016년 Microchip Technology가 인수 합병하면서 산하 브랜드의 마이크로컨트롤러가 되었다. 안에 CPU, ROM, RAM, 플래시 메모리, ADC, DAC, GPIO가 다 들어있다. PIC와 함께 독립된 상표 형식으로는 8비트 마이크로컨트롤러 업계에서 가장 잘 알려져 있으며[1], 특히 ISP(In-System Programming) 인터페이스를 갖추고 있어서 별도의 롬 라이터 없이 PC에서 프린터 포트나 시리얼 포트, USB 인터페이스에 연결하는 ISP 장비를 통해 손쉽게 프로그램을 짜 넣을 수 있어서 인기가 많다. 저렴한 가격에 ROM, RAM 걱정 없이 프로그램을 넣을 수 있기 때문에 많은 대학교의 전자공학과에서 마이크로컨트롤러나 임베디드 시스템과 관련된 과목에서 AVR을 대상으로 강의하는 경우가 많다. 특히 학부 4학년 때 졸업작품용으로 높은 인기를 구가하고 있다.재미있는 것은 겨우 8비트급 마이크로컨트롤러임에도 불구하고 RISC를 표방하고 있다. 이는 마이크로컨트롤러계의 CISC라고 할 수 있는 인텔 8051에 비해 명령어 길이가 일정하고 범용 레지스터 숫자가 많으며 하버드 아키텍처가 도입되었고 메모리 공간이 비교적 일정하게 구성되어 있다는 RISC적인 특징을 가지고 있기 때문.[2]
Microchip이 인수한 이후 Microchip 상표를 사용하며 Atmel 브랜드를 서서히 지워나가고 있다.
2. 용도
전기밥솥, 엘리베이터 제어, 자동 판매기 등 높은 성능이 전혀 필요 없고 가격이 싸야 하는 제어 장치 부분은 앞으로도 계속 8비트 마이크로컨트롤러가 사용될 것이다. 심지어 인텔 8051은 1980년에 개발되어서 30년 넘게 사용되고 있다. 물론 공정이나 인터페이스 등은 현대화 되었지만 기본 아키텍처는 30년된 그대로. 그래서 각종 용도별 어셈블리 및 C 소스 프로그램이 온 천지에 널려있다... Arduino 플랫폼 중 가장 기본이 되고 많이 사용되는 아두이노 우노 또한 이 AVR 기반이다. 커스텀 키보드에도 USB를 지원하는 ATMega32 계열 MCU가 자주 사용된다.AVR도 여러 모델이 있지만 그 중 ATMEGA128이 가장 인기가 좋다. 한마디로 말해 학부 4학년 수준에서 사용하기에 미칠듯이 적절하다. 가격, 기능, 확장성 등의 적절함은 말할 것도 없고 예제 코드가 정말 넘쳐난다. 프로세서만 단독으로 구매하면 보통 1.5만원 미만이고 외부 장치 연결을 위해 이런저런 포트들을 덕지덕지 달고 있는 모듈 타입도 10만원을 채 넘지 않는다. 그냥 사다가 RS232C 포트나 UART 포트에 꽂은 뒤 매뉴얼에 적힌 코드를 그대로 복붙해서 다운로드만 해도 의도한 대로 동작하는 모듈들이 많다.[3] 이 정도로 예제 코드가 넘쳐나는데 ATMEGA128로 원하는 것을 못 만든다면… 애초에 ATMEGA128을 제대로 다룰 줄 모르든가 아니면 ATMEGA128 정도의 프로세서로는 만들 수 없는 물건일 가능성이 높다. 당장 구글에서 ATMEGA128 작품으로 검색만 해봐도 정말이지 신기한 물건들이 많이 나온다. #. 그리고 ATMEGA128로도 아두이노로 만들수 있다.[4] 졸업작품 만들때도 가장 좋다.
3. 장단점
가장 큰 장점은 전기적 특성이 매우 강하다는 것. 핀이 공급하거나 받을수 있는 전류 한계치가 다른 마이크로컨트롤러에 비해 높다. I/O에서 감당 가능한 전류가 40mA로 다른 마이크로컨트롤러들의 경우 이것의 절반이거나 10분의 1 정도밖에 안되는 경우도 허다하다. [5]따라서 다른 마이크로컨트롤러라면 불가능한 설계도 어느 정도 가능하며 다른 마이크로컨트롤러라면 죽었을 상황에서도 살아있는 경우가 있다. 예를 들면 LED를 별도의 회로 없이 제어하거나 FET를 별도의 드라이브 회로 없이 제어한다던가.물론 8비트 마이크로컨트롤러인 만큼 연산 능력이나 클럭 속도, 메모리 어드레스 영역은 상당히 제한된다. AVR 시리즈 중 고급형에 해당하는 ATMega급의 최대 동작 속도가 20MHz에 머물고 있으며, 그나마 이는 일부 모델만 해당되고 대부분은 16MHz가 한계이다. 대부분의 경우 FPU가 없을 뿐만 아니라 32비트 부동소수점을 제대로 처리하기에는 워드 길이가 8비트로 크게 제약되는 나머지 소프트웨어적인 부동소수점 연산 처리도 쉽지 않으므로 복잡한 수학 연산 성능은 거의 없다고 생각하는 편이 좋다. 단 ATMega급은 대부분 정수 곱셈 연산 유닛은 내장하고 있으므로 라인트레이서 정도의 제어 연산은 무난하게 수행 가능하다. 따라서 고성능을 필요로 하는 정밀 제어 분야에서는 DSC( DSP + 마이크로컨트롤러, TI가 대세)나 ARM(Cortex-M 시리즈 및 Cortex-A 시리즈, 삼성 및 ST 등이 강세)에 발려서(...) 시장 진입조차 어렵다. 몇 년 전까지만 해도 8비트급과 16/32비트급 컨트롤러의 시장 영역이 상당히 달랐으나 2010년경 출하량 기준으로 16비트급 컨트롤러가 1위, 매출 기준으로는 32비트급이 1위를 차지하면서 8비트급 컨트롤러의 점유율이 확연히 줄어드는 추세이다. #
그러나 8비트 마이크로컨트롤러의 특성 상 구조가 간단하다. 32비트급 이상의 고속 MPU에서 주로 볼 수 있는 CPU 코어에 관련된 MMU나 DRAM 컨트롤러 등의 여러 장치들의 특성을 사전에 익힐 필요가 없고 OS를 끼고 돌아가는 경우가 적기 때문에 그에 관련된 내용도 따로 스터디할 필요가 없다. 즉 부팅하고 바로 유저가 작성한 코드로 점프하면 되기 때문에 다루기 쉽다는 것이지, C 코드 문법이 쉽다는 의미가 아니다. 유지보수가 간단하며, I/O핀이 전기적으로 강인한 경우가 많고, 워낙 오랫동안 사용되어 오면서 검증된 안정성과 무엇보다도 32비트급 마이크로컨트롤러에 비해 단가가 매우 싸기 때문에 단순 제어 분야에서는 현업에서도 여전히 널리 사용되고 있다.
[1]
다만 북미나 유럽 쪽은 한국에서는 거의 안 쓰는 MC68H 계열 마이크로컨트롤러도 많이 사용한다.
[2]
실제로 인텔 8051의 내부 구조는 지저분하기로 악명 높다. 그러나 악명 높은 내부 구조는 컴파일러느님이 알아서 커버해 주실테니 상관없겠지 하버드 아키텍처는 사실 인텔 8051도 결과적으로는 도입이 되어 있기는 하다. 성능 향상을 도모하기 위해 데이터 메모리 영역과 코드 메모리 영역을 분리한 것이 아니라 인텔 8051이 태생적으로 너무 구식이어서 Mask ROM에 프로그램 코드가 들어가도록 설계되었고 연산 결과를 재기록해야 해서 Mask ROM에 넣는 게 불가능한 변수형 데이터만 소량의 내부 RAM에서 돌아가도록 만들었고, 그 때문에 내부 구조가 지저분하다고 평가 받고 있다. 그야말로 구시대의 잔재.
[3]
미리 커스텀된 부트로더 적용한 제품에 한정된다. 흔히 교육용 샘플.
[4]
MegaCore
[5]
단 모든 AVR이 40mA 출력을 감당하는건 아니다. Arduino등에서 많이 쓰이는 Mega328같은 칩은 12mA 정도로 낮은 경우도 있으며(물론 이정도도 타 MCU보다는 높긴하다) 핀당 전류가 높다고 해도 MCU전체가 받을수 있는 싱크/소스 전류 한계치가 있기 때문에 저 40mA를 다 쓸수있는것은 아니다.