SimulIDE로 ATmega328P 시뮬레이션 환경 만들기

안녕하세요! 지난 편에서 왜 하드웨어 없이 마이크로컨트롤러를 배우는지, 그리고 ATmega328P를 선택한 이유에 대해 이야기했습니다. 이번 편에서는 본격적으로 개발 환경을 구축해보겠습니다.

무엇을 설치해야 하나요?

우리가 설치할 도구들은 크게 두 가지입니다:

AVR 개발 툴체인

  • AVR-GCC: ATmega328P용 C 컴파일러
  • AVR-LibC: ATmega328P용 표준 라이브러리
  • AVRDUDE: 컴파일된 프로그램을 업로드하는 도구

SimulIDE 시뮬레이터

  • 회로를 그리고 시뮬레이션하는 통합 환경
  • ATmega328P와 다양한 부품들을 가상으로 연결
  • 실시간 디버깅과 모니터링 기능

운영체제별 설치 가이드

설치 과정은 운영체제마다 조금씩 다릅니다. 본인의 운영체제에 맞는 섹션을 따라해주세요!


Windows에서 설치하기

1단계: AVR 툴체인 설치

Windows에서는 WinAVR 또는 Atmel Studio를 사용할 수 있지만, 우리는 더 현대적인 방법을 사용하겠습니다.

방법 1: MSYS2 사용 (추천)

  1. MSYS2 공식 사이트에서 설치 파일 다운로드
  2. 설치 후 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: 미리 컴파일된 패키지 사용

  1. AVR-GCC for Windows 다운로드
  2. 압축을 C:\avr-gcc에 해제
  3. 시스템 환경변수 PATH에 C:\avr-gcc\bin 추가

2단계: SimulIDE 설치

  1. SimulIDE 다운로드 페이지에서 Windows 버전 다운로드
  2. 설치 파일 실행하여 설치 완료

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 설치

  1. SimulIDE 다운로드 페이지에서 macOS 버전 다운로드
  2. 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에서 회로 구성

  1. SimulIDE 실행
  2. 새 회로 만들기: File → New
  3. 부품 배치:
    • 좌측 부품 패널에서 ATmega328P 검색하여 배치
    • LED 검색하여 배치
    • Resistor 검색하여 저항 배치
  4. 회로 연결:
    • 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에서 실행

  1. ATmega328P 더블클릭하여 설정 창 열기
  2. Program 항목에서 main.hex 파일 선택
  3. 시뮬레이션 시작: 상단의 재생 버튼 클릭
  4. 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로 다양한 패턴을 만들어보는 실습도 진행할 예정입니다!

문제가 생겼나요?

설치 과정에서 문제가 생기거나 궁금한 점이 있으시면 댓글로 남겨주세요. 각 운영체제별로 상세한 스크린샷과 함께 업데이트된 가이드를 제공할 예정입니다.


환경 구축이 완료되셨다면 다음 편도 기대해주세요!