안녕하세요! 지난 편에서 왜 하드웨어 없이 마이크로컨트롤러를 배우는지, 그리고 ATmega328P를 선택한 이유에 대해 이야기했습니다. 이번 편에서는 본격적으로 개발 환경을 구축해보겠습니다.
무엇을 설치해야 하나요?
우리가 설치할 도구들은 크게 두 가지입니다:
AVR 개발 툴체인
- AVR-GCC: ATmega328P용 C 컴파일러
- AVR-LibC: ATmega328P용 표준 라이브러리
- AVRDUDE: 컴파일된 프로그램을 업로드하는 도구
SimulIDE 시뮬레이터
- 회로를 그리고 시뮬레이션하는 통합 환경
- ATmega328P와 다양한 부품들을 가상으로 연결
- 실시간 디버깅과 모니터링 기능
운영체제별 설치 가이드
설치 과정은 운영체제마다 조금씩 다릅니다. 본인의 운영체제에 맞는 섹션을 따라해주세요!
Windows에서 설치하기
1단계: AVR 툴체인 설치
Windows에서는 WinAVR 또는 Atmel Studio를 사용할 수 있지만, 우리는 더 현대적인 방법을 사용하겠습니다.
방법 1: MSYS2 사용 (추천)
- MSYS2 공식 사이트에서 설치 파일 다운로드
- 설치 후 MSYS2 터미널에서 다음 명령어 실행:
bash
pacman -S mingw-w64-x86_64-avr-gcc
pacman -S mingw-w64-x86_64-avr-libc
pacman -S mingw-w64-x86_64-avrdude
방법 2: 미리 컴파일된 패키지 사용
- AVR-GCC for Windows 다운로드
- 압축을
C:\avr-gcc
에 해제 - 시스템 환경변수 PATH에
C:\avr-gcc\bin
추가
2단계: SimulIDE 설치
- SimulIDE 다운로드 페이지에서 Windows 버전 다운로드
- 설치 파일 실행하여 설치 완료
3단계: 설치 확인
명령 프롬프트에서 다음 명령어로 설치 확인:
cmd
avr-gcc --version
avrdude -?
macOS에서 설치하기
1단계: Homebrew 설치 (없는 경우)
터미널에서 다음 명령어 실행:
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2단계: AVR 툴체인 설치
bash
brew tap osx-cross/avr
brew install avr-gcc
brew install avrdude
3단계: SimulIDE 설치
- SimulIDE 다운로드 페이지에서 macOS 버전 다운로드
- DMG 파일을 마운트하고 Applications 폴더로 드래그
4단계: 설치 확인
터미널에서 확인:
bash
avr-gcc --version
avrdude -?
Linux에서 설치하기
Ubuntu/Debian 계열
1단계: AVR 툴체인 설치
bash
sudo apt update
sudo apt install gcc-avr avr-libc avrdude
2단계: SimulIDE 설치
bash
# DEB 패키지 다운로드 및 설치
wget https://simulide.com/downloads/simulide_1.0.0-1_amd64.deb
sudo dpkg -i simulide_1.0.0-1_amd64.deb
# 의존성 문제 해결 (필요시)
sudo apt-get install -f
Fedora/CentOS 계열
1단계: AVR 툴체인 설치
bash
sudo dnf install avr-gcc avr-libc avrdude
2단계: SimulIDE 설치
bash
# RPM 패키지 다운로드 및 설치
wget https://simulide.com/downloads/simulide-1.0.0-1.x86_64.rpm
sudo rpm -i simulide-1.0.0-1.x86_64.rpm
Arch Linux
1단계: AVR 툴체인 설치
bash
sudo pacman -S avr-gcc avr-libc avrdude
2단계: SimulIDE 설치
bash
# AUR에서 설치
yay -S simulide
3단계: 설치 확인
bash
avr-gcc --version
avrdude -?
첫 번째 프로젝트: “Hello, LED!”
이제 설치가 완료되었으니 첫 번째 프로젝트를 해보겠습니다. 전통적인 “Hello World” 대신 “Hello, LED!”를 만들어보죠!
1단계: SimulIDE에서 회로 구성
- SimulIDE 실행
- 새 회로 만들기: File → New
- 부품 배치:
- 좌측 부품 패널에서
ATmega328P
검색하여 배치 LED
검색하여 배치Resistor
검색하여 저항 배치
- 좌측 부품 패널에서
- 회로 연결:
- ATmega328P의 **PB5 핀(19번)**을 저항의 한쪽 끝에 연결
- 저항의 다른 쪽 끝을 LED의 **양극(긴 다리)**에 연결
- LED의 **음극(짧은 다리)**을 GND에 연결
- ATmega328P의 **VCC(7번, 20번)**를 +5V에 연결
- ATmega328P의 **GND(8번, 22번)**를 GND에 연결
2단계: 코드 작성
프로젝트 폴더를 만들고 main.c
파일을 생성합니다:
c
#include <avr/io.h>
#include <util/delay.h>
int main(void) {
// PB5 핀을 출력으로 설정 (Arduino의 13번 핀)
DDRB |= (1 << PB5);
while(1) {
// LED 켜기
PORTB |= (1 << PB5);
_delay_ms(1000);
// LED 끄기
PORTB &= ~(1 << PB5);
_delay_ms(1000);
}
return 0;
}
3단계: Makefile 생성
같은 폴더에 Makefile
을 생성합니다:
makefile
# 마이크로컨트롤러 설정
MCU = atmega328p
F_CPU = 16000000UL
# 컴파일러 설정
CC = avr-gcc
CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -Wall -Wextra
# 소스 파일
SRC = main.c
TARGET = main
# 컴파일 규칙
all: $(TARGET).hex
$(TARGET).elf: $(SRC)
$(CC) $(CFLAGS) -o $@ $^
$(TARGET).hex: $(TARGET).elf
avr-objcopy -O ihex $< $@
# 정리
clean:
rm -f *.elf *.hex *.o
.PHONY: all clean
4단계: 컴파일
터미널에서 프로젝트 폴더로 이동한 후:
bash
make
성공하면 main.hex
파일이 생성됩니다.
5단계: SimulIDE에서 실행
- ATmega328P 더블클릭하여 설정 창 열기
- Program 항목에서
main.hex
파일 선택 - 시뮬레이션 시작: 상단의 재생 버튼 클릭
- LED가 1초마다 깜빡이는 것 확인
성공! 그런데 지금 이건 무슨 일이 일어난 걸까요? 하나씩 알아보죠.
코드 해석
c
DDRB |= (1 << PB5);
DDRB
: Data Direction Register B- PB5 핀을 출력 모드로 설정
c
PORTB |= (1 << PB5);
PORTB
: Port B 출력 레지스터- PB5 핀에 HIGH(5V) 출력 → LED 켜짐
c
PORTB &= ~(1 << PB5);
- PB5 핀에 LOW(0V) 출력 → LED 꺼짐
비트 연산의 마법
(1 << PB5)
: 1을 PB5만큼 왼쪽으로 시프트 (0b00100000)|=
: OR 연산으로 특정 비트만 1로 설정&= ~
: AND 연산으로 특정 비트만 0으로 설정
🔧 환경 설정 팁
1. 경로 설정 확인
설치 후 명령어가 인식되지 않는다면:
- Windows: 환경변수 PATH 확인
- macOS/Linux:
.bashrc
또는.zshrc
확인
2. 권한 문제 (Linux/macOS)
SimulIDE 실행 권한이 없다면:
bash
chmod +x /path/to/simulide
3. 의존성 문제
SimulIDE가 실행되지 않는다면 필요한 라이브러리 설치:
bash
# Ubuntu/Debian
sudo apt install libqt5widgets5 libqt5gui5 libqt5core5a
# macOS (Homebrew)
brew install qt5
다음 편 예고
다음 편에서는 오늘 만든 LED 깜빡이는 프로그램을 자세히 분석해보겠습니다.
- 레지스터가 정확히 무엇인지
- 비트 연산이 왜 필요한지
- 하드웨어와 소프트웨어가 어떻게 상호작용하는지
그리고 LED 하나가 아닌 여러 개의 LED로 다양한 패턴을 만들어보는 실습도 진행할 예정입니다!
문제가 생겼나요?
설치 과정에서 문제가 생기거나 궁금한 점이 있으시면 댓글로 남겨주세요. 각 운영체제별로 상세한 스크린샷과 함께 업데이트된 가이드를 제공할 예정입니다.
환경 구축이 완료되셨다면 다음 편도 기대해주세요!