글을 시작하기 앞서 제가 사용하고 있는 제품들입니다.
ATMEGA128 학습용 USB 보드 (AB-M128USB-C V2.0)
AVR용 USB-ISP V03.6 (AD-USBISP V03.6)
12V 1A SMPS아답타 (SE-PW12V)
시리얼 케이블 3P-9P DSUB(SE-3T9)
USB to Serial DB9 RS232 컨버터 케이블 모듈 [SZH-CVBE-005]
제가 사용하고 있기도 하고 많은 사람들이 사용하는 MCU이기에 ATmega128기준으로 이야기하겠습니다.
좀 더 자세한 내용이 필요하신 분은 ...(더보기)를 클릭하시면 됩니다.
내용 대부분은 윤덕용 박사님의 AVR ATmega128 정복에서 발췌하였으며, 데이터시트를 참고하였습니다.
ATmega128은 미국 Atmel사의 AVR 시리즈 마이크로콘트롤러입니다.
AVR 시리즈 마이크로콘트롤러의 특징
1. 명령어는 16비트 버스 폭의 하드웨어로 처리되지만,
데이터는 8비트 워드 길이를 기반으로 하는 특이한 8비트 마이크로콘트롤러이다.
2. 진보된 RISC 구조와 파이프라인 처리 방식을 사용하여
소비전력이 매우 적으면서도 대부분의 명령을 단일 클록 사이클에 실행한다.
3. 누산기 중심형이 아니라 32개의 범용 레지스터를 가지는 레지스터 중심형 구조이며,
단순한 어드레싱 모드와 간결한 프로그램 코드 사이즈를 가지도록 하는 등 C언어 프로그램에 매우 유리하도록 설계되었다.
4. 하버드 구조를 사용하여 프로그램 메모리와 데이터 메모리를 동시에 액세스할 수 있으므로 성능이 향상되었다.
5. 프로그램 메모리는 모델에 따라 1KB에서 256KB를 가지고 있는데,
이것은 모두 MCU 소자에 내장되므로 외부에는 프로그램 메모리를 접속할 수 없다.
6. 프로그램용의 내장 플래시 메모리에는 직렬통신 방식의 ISP 기능을 이용하여
사용자가 쉽게 프로그램을 다운로드할 수 있다.
이 플래시 메모리는 10,000번까지 반복하여 다시 프로그래밍하는 것이 가능하다.
7. 모델에 따라 64바이트에서 4KB까지 EEPROM을 내장하고 있어서 데이터 백업이 가능하다.
이 EEPROM은 100,000번까지 반복하여 프로그래밍하는 것이 가능하다.
8. 모델에 따라 데이터 메모리로서 64바이트에서 8KB까지 비교적 용량이 큰 SRAM을 내장하고 있다.
9. 모델에 따라 병렬 I/O 포트, 내장 시스템 클록 발진기, 8비트 타이머, 16비트 타이머, 워치독 타이머,
UART 또는 USART, SPI, TWI, 아날로그 비교기, 10비트 A/D 컨버터, PWM 줄력,
RTC(Real Time Counter), BOD(Brown Out Detector) 등 매우 다양한 I/O 기능을 가지고 있다.
10. 외부에 버스를 가지는 모델에서는 이 외부 시스템 버스를 이용하여 데이터 메모리 또는 I/O 디바이스를 확장할 수 있다.
그러나, 프로그램 메모리는 확장하지 못한다.
11. 다양한 인터럽트 소스와 인터럽트 처리 기능을 가지고 있다.
12. 모델에 따라 약 90~135개 정도의 명령을 가지며, 고성능인 상위 모델에서는 하드웨어 곱셈기를 내장하고 있어서
2클록 사이클에 실행되는 곱셈 명령을 사용할 수 있다.
13. 슬립 모드라고 불리는 여러 가지의 파워절약 모드를 가지고 있다.
14. 다양한 응용 분야에 적합한 모델을 선택적으로 사용할 수 있도록 기능 및 성능에 따라
ATtiny, AT90, ATmega 둥 3가지의 패밀리가 있다.
ATmega128의 특징
1. 고성능이면서 저소비전력 형의 8비트 마이크로콘트롤러 이다.
2. 진보된 RISC 구조를 사용하여 16MHz에서 평균적으로 16MIPS의 명령처리 속도를 나타낸다.
3. 133종의 명령 세트를 가지며, 이것들 중의 대부분은 1클록 사이클에 실행된다.
4. 32개의 8비트 범용 작업 레지스터를 가지며,
이밖에 2사이클에 실행되는 곱셈기와 많은 I/O 제어용 레지스터를 가지고 있다.
5. 128KB의 ISP 방식 프로그램용 플래시 메모리를 가지고 있으며, 이것은 10,000번까지 지우고 다시 쓸 수 있다.
ISP를 수행하기 위한 전용 SPI 통신 인터페이스 핀 PDI, PDO, SCK를 가지고 있다.
6. 4KB의 데이터 저장용 EEPROM을 가지고 있으며, 이것은 100,000번까지 지우고 다시 쓸 수 있다.
7. 4KB의 데이터 저장용 SRAM을 가지고 있다.
8. 외부에 약 60KB의 데이터 메모리를 인터페이스할 수 있다.
memory-mapped I/O방식을 사용하므로 외부 I/O도 이 데이터 메모리 영역에 접속하여 사용한다.
9. 내장 메모리의 프로그래밍과 온칩 디버그 기능을 수행하기
위하여 JTAG(IEEE Standard 1149.1) 인터페이스 기능을 가진다.
10. 시스템 클록을 발생하는 내부 RC 오실레이터 회로를 가지고 있으며,
또한 외부에 크리스탈이나 세라믹 레조네이터를 접속할 수 있는 발진회로도 내장하고 있다.
11. 6개의 8비트 병렬 I/O 포트 및 1개의 5비트 병렬 I/O 포트를 가지고 있다.
12. 2개의 8비트 타이머/카운터(0, 2)와 2개의 16비트 타이머/카운터(1, 3)를 가지고 있다.
이들 타이머/카운터는 2개의 8비트 PWM 출력, 6개의 2〜16비트 PWM 출력, 출력비교 단자 등과 관련되어 동작한다.
13. 8채널 10비트 A/D 컨버터를 가지고 있다.
14. 2개의 전이중 통신이 가능한 USART 직렬통신 포트를 가지고 있다.
15. SPI 및 TWI 직렬통신 포트를 가지고 있다.
16. 아날로그 비교기를 가지고 있다.
17. 리셋 벡터와 8개의 외부 인터럽트를 포함하여 총 35개의 인터럽트 벡터를 가지고있다.
18. 슬립 모드로서 6개의 파워 절약 모드를 가지고 있다.
19. ATmega103 호환 모드를 가진다.
20. 64핀 TQFP(Thin Quad Flat Package) 또는 64핀 MLF(Micro Lead Frame) 패키지가 있다.
21. ATmega128은 4.5~5.5V의 전원 전압에서 0~16MHz의 시스템 클록에서 동작하며,
ATmega128L은 2.7-5.5V에서 0~8MHz로 동작한다.
22. 일반 상업용(crommercial) 버전은 0°C〜+70°C의 온도 범위에서 사용할 수 있고,
산업용(industrial) 버전은 -40°C~+85°C의 온도 범위에서 사용할 수 있다.
그리고 데이터시트를 참고하시면 ATmega128에 관련된 모든 내용을 확인하실 수 있습니다.
atmel_atmega128_manual.pdf
Atmel사에서 IDE 소프트웨어인 AVR Studio를 제공하는데 지금은 Atmel Studio라는 이름으로 배포되고 있습니다.
지금 atmel사 홈페이지가 안들어가져서 다운을 못받고 있는데 다행히 미리 받아둔게 있어서 여기에 올리겠습니다.
as-installer-7.0.1931-web.exe
Atmeal Studio 7.0 입니다. 파일을 실행하면
위의 체크박스에 체크를 해주면 Next를 누를 수 있습니다. 아래의 체크박스는 누르셔도 안누르셔도 됩니다.
ATmega128은 8-bit MCU이니 가장 위에것만 체크해서 다운받아도 되겠지만 저는 그냥 전부 체크 하겠습니다.
이후에도 그냥 쭉 다음으로 넘어가면 문제없이 설치될 것 같습니다.
설치가 완료되면 Atmel Studio 7.0을 실행해줍니다.
이렇게 File - New - Project 순서로 프로젝트를 만들수도 있고
지금 가려져있지만 Start라는곳의 New Project를 눌러서 만들수도 있습니다.
New Project창이 나오면 GCC C Executable Project를 클릭하여 OK를 누르면 됩니다.
저는 ATmega128을 사용할것이므로 Device Family에서 ATmega를 골라 ATmega128을 선택해줍니다.
AVR에 프로그램을 다운받기 위해 ISP를 사용하는데 Atmel Studio에 장치를 등록해야합니다.
Tool -> Add target을 누르면
이런 화면이 나오고 적절하게 선택하면 됩니다. 제 ISP는 STK500이라 되어있지만
mkII라고 되어있는 경우도 많으니 당황하지 마시고 mkII를 선택하시면 됩니다.
내 ISP의 포트가 안보이는 경우
그런데 이 ISP를 등록하는데 문제가 생기는 경우가 많습니다.
그럴때 해결방법은 주로
zadig-2.4.exe
위 파일을 받은 후
이렇게 한 후 Replace Driver를 눌러주시거나
CP210x_VCP_Windows_XPServer%2B2003Vista7_8_81.zip
위 압축파일을 받은 후 압축해제를 하여
자신의 운영체제에 맞는 exe파일을 실행하면 대부분 문제가 해결됩니다.
그 후 None on이라 돼어있는 망치모양 아이콘을 클릭하면
이런 창이 나오고 여기서
이렇게 선택해 주시면 됩니다. 이제 마지막으로
Tool -> Device Programming 으로 들어가면
이런 화면이 나오는데 Tool과 Device, Interface를 선택한 후 Apply를 누르시면 됩니다.
마지막으로 ATmega128은 4.5~5.5V이므로 이 사이로 VTarget과 ARef를 맞춰주시고
Clock generator는 중간정도로 맞춰주시면 된다고 합니다.
지금 저희 집 컴퓨터가 이상하게 동작은 똑바로 되는데 Device Programming을 들어가면
위, 위 사진처럼 나옵니다. 이부분은 저도 아직 해결방법을 모르겠습니다.
이제 프로그램을 작성하고 나면 프로그램을 작성하시면 됩니다.
프로그램을 작성한 후 초록색 화살표를 클릭하거나 핫키(F5)를 사용하여
컴파일을 하고, AVR에 프로그램을 설치할 수 있습니다.
정석적인 방법으로는 프로그램을 컴파일 한 이후 Device Programming에 들어가서
Memories의 Program을 누르면 AVR에 프로그램이 설치됩니다.
이상으로 AVR을 시작하는 기본적인 방법에 대한 설명이었습니다.