ATtiny85 핀 구성, 블록 다이어그램 및 프로그래밍

게시됨 11월 05, 2026

ATtiny85는 8핀 패키지에 8KB 플래시, 512바이트 SRAM, 6개의 사용 가능한 GPIO 핀을 제공하여, 보드 공간이 제한된 비용 중심의 설계와 과기능의 마이크로컨트롤러에 실용적입니다. 1.8-5.5 V에서 동작하며, 4채널의 10비트 ADC를 포함하고, Universal Serial Interface를 통한 소프트웨어 기반 직렬 통신을 지원합니다. 아래에서는 핀 배치, 내부 아키텍처, 프로그래밍 워크플로우, 그리고 실제로 빌드할 때 중요한 트레이드오프에 대해 살펴보겠습니다.

주요 요점:

  • 6개의 GPIO 핀이 ADC, PWM, 직렬 기능을 공유합니다; 신중한 핀 할당은 실제 레이아웃에서 자원 충돌을 방지합니다.
  • RESET 핀은 퓨즈를 통해 GPIO로 재구성할 수 있지만, 이 경우 고전압 프로그래밍에 묶이게 됩니다 - 커밋 전에 디버그와 생산 워크플로우를 계획하세요.
  • USI는 I²C 및 SPI에 대해 수동 비트 배깅을 요구합니다; 저속 주변기기에는 작동하지만 하드웨어 주변기기에 비해 펌웨어 복잡성이 증가합니다.
  • ADC 안정성은 전원 공급 품질과 접지에 의존합니다; ADC 노이즈 감소 슬립 모드는 기본 노이즈가 있을 때 결과를 측정 가능하게 향상시킵니다.
  • GPIO 핀은 데이터시트에 따라 최대 40 mA 절대 출력을 가진다. 하지만 핀당 20 mA 이상 지속 작동은 열화가 가속화되며, 항상 외부에서 고전류 부하를 완충한다.

기술 사양

매개변수 가치
CPU 8비트 AVR RISC
작동 전압 1.8-5.5 V
플래시 메모리 8 KB
SRAM 512 바이트
EEPROM 512 바이트
GPIO 핀 6
원딜 10비트, 4채널
타이머 두 개의 8비트
클럭 속도 최대 20 MHz(외부 주파수), 8 MHz(내부 RC, 기본값)
패키지 PDIP-8, SOIC-8, TSSOP-8, QFN/MLF-20
온도 범위 -40에서 +125 °C
직렬 인터페이스 USI (SPI 또는 I²C용 소프트웨어 구성 가능)
감전 감지 네
워치독 타이머 네

Figure 1. ATtiny85 PDIP-8 package

핀 구성

핀 주요 기능 대체 기능
1 PB5 (리셋) PCINT5, ADC0, dW (디버그와이어)
2 PB3 PCINT3, XTAL1, CLKI, ADC3
3 PB4 PCINT4, XTAL2, CLKO, ADC2
4 GND 그라운드
5 PB0 모시, 디, SDA, AIN0, OC0A, AREF, PCINT0
6 PB1 MISO, DO, AIN1, OC0B, OC1A, PCINT1
7 PB2 SCK, USCK, SCL, ADC1, T0, INT0, PCINT2
8 VCC 전원 공급

Figure 2. ATtiny85 pinout diagram with alternate function labels

모든 GPIO 핀은 최소 세 가지 함수를 다중화합니다. 경험상, 가장 흔한 충돌은 SPI 프로그래밍(PB0, PB1, PB2 사용)과 동일한 핀에 있는 애플리케이션 주변기기 사이에서 발생합니다. 응용 회로가 핀에 무겁게 부하를 가하거나 고정 상태에 머무르면 ISP 프로그래밍이 간헐적으로 실패할 수 있습니다. ATtiny85와 SPI 라인의 외부 부품 사이에 직렬 저항(220-470 Ω)을 추가하면 프로그래머가 업로드 시 애플리케이션 회로를 무시할 수 있습니다.

핀 1은 내부 풀업으로 기본적으로 리셋됩니다. RSTDISBL 퓨즈를 통해 GPIO(PB5)로 설정하면 추가 I/O 핀이 하나 주지만, 표준 ISP를 통해 재프로그래밍할 수 있는 기능은 사라집니다. 이에 따라 고전압 병렬 프로그래밍(HVPP)이 필요하며, 이는 전문 프로그래머가 필요하고 생산 워크플로우에 복잡성을 더합니다. 팀들이 RESET을 비활성화해 여섯 번째 핀을 얻으려 했지만, 프로젝트 후반부에 현장 업데이트가 비현실적으로 변하는 것을 발견한 사례도 봤습니다.

블록 다이어그램과 내부 아키텍처

Figure 3. ATtiny85 simplified block diagram showing CPU, memory, timers, ADC, and I/O ports

ATtiny85는 프로그램 저장용 별도의 8KB 플래시와 런타임 데이터를 위한 512바이트 SRAM을 사용하는 하버드 아키텍처를 사용합니다. 플래시 내구성은 페이지당 10,000회의 쓰기/지우기 사이클로 평가되며; EEPROM은 100,000 사이클 등급을 가지고 있습니다. 애플리케이션이 보정 데이터나 로그를 자주 쓰면 EEPROM 한계에 예상보다 빨리 도달하게 됩니다 - 여러 주소에 쓰기를 분산시키거나 고사이클 수를 위해 외부 저장소로 전환해야 합니다.

두 개의 8비트 타이머(Timer0와 Timer1)는 PWM을 생성하고, 외부 이벤트를 집계하며, 인터럽트를 트리거합니다. 타이머0는 더 단순하며 일반적으로 기본 PWM 또는 지연 기능에 사용됩니다. Timer1에는 고주파 PWM을 생성할 수 있는 PLL 모드가 포함되어 있는데(5V 전원 공급 PB1/PB4에서 최대 64 MHz까지 가능), 이는 적외선 반송파 생성이나 고주파 디밍과 같은 응용 분야에 유용합니다.

워치독 타이머는 펌웨어가 멈추면 칩을 초기화할 수 있지만, 절전 모드에서는 저전력 인터벌 타이머로도 작동합니다. 한 배터리 구동 설계에서는 워치독을 사용해 8초마다 ATtiny85를 깨우고 센서를 측정한 후 다시 절전 모드로 전환했는데, 평균 전류 소모량은 10 μA 미만으로 유지되었습니다.

전원 공급 및 클럭 구성

ATtiny85는 내부 8 MHz RC 발진기를 8로 나누어 실제 1 MHz 클럭을 제공하는 퓨즈를 탑재하고 있습니다. 이 보수적인 기본값은 전체 전압 범위에서 작동하지만 성능은 제외합니다. 5V 동작의 경우, 내부 발진기를 최대 8 MHz로 작동시키도록 퓨즈를 재구성하는 것이 간단하며 외부 부품이 필요하지 않습니다.

정확한 타이밍이 필요할 때 - 예를 들어 표준 보트율의 UART나 주파수 카운터의 경우 - 내부 발진기의 ±10% 공장 보정이 충분히 엄격하지 않습니다. 외부 16 MHz 또는 20 MHz 크리스털은 정확도를 ±50 ppm까지 향상시키지만 두 개의 커패시터를 추가하고 PB3/PB4 용량을 차지합니다. 통신이 많은 애플리케이션에는 그 트레이드오프가 가치가 있지만, 이미 핀 제한이 있다면 고통스럽습니다.

블라운아웃 감지(BOD)는 공급 전압이 떨어질 때 CPU가 무효 명령을 실행하는 것을 방지합니다. BOD를 2.7V 또는 4.3V로 활성화하면 절전 전류에 약 20-25μA가 추가됩니다. 서브마이크로암페어 슬립을 목표로 하는 배터리 설계의 경우, 펌웨어에서 BOD를 비활성화하고 저전압 상태를 처리해야 할 수도 있습니다 - 전원 차단 시 가끔 발생하는 글리치 위험을 감수해야 합니다.

GPIO 특성 및 부하 한계

각 GPIO 핀은 Microchip의 데이터시트에 따르면 최대 40 mA까지 공급하거나 싱크할 수 있지만, 이는 파괴적인 한계일 뿐 작동 규격은 아닙니다. 권장 핀당 연속 전류는 20mA이며, 내부 접지 바운스와 래치업 위험을 피하기 위해 모든 핀의 총 전류는 200mA 이하로 유지되어야 합니다.

취미 프로젝트에서는 GPIO에서 LED를 직접 구동하는 것이 흔하지만, 순방향 전압과 전류는 신중하게 고려해야 합니다. 표준 빨간 LED는 5V 전원에서 20 mA에서 2V 순방향 강하를 할 때 최소 150 Ω 저항이 필요합니다. 누군가가 'LED가 너무 어두워서' 47 Ω을 사용한 보드를 디버깅한 적이 있습니다 - 몇 시간 동안은 작동하다가 GPIO가 영구적으로 고장 났습니다.

20 mA 이상의 부하 - 모터, 릴레이, 솔레노이드, 심지어 고출력 LED까지 - 에는 외부 MOSFET 또는 BJT를 사용하세요. 2N7002 N채널 MOSFET은 저렴한 가격에 10 kΩ 게이트 저항기로 수백 밀리암페어 클린을 전환합니다. 전류 용량을 늘리기 위해 GPIO 핀을 병렬로 연결하려 하면 신뢰성이 떨어집니다; 핀 임피던스의 미세한 차이가 전류 분배의 불균형과 잠재적 손상을 초래합니다.

ADC 운영 및 소음 관리

10비트 ADC는 0-VCC(또는 내부 1.1V 또는 2.56V 기준)를 0에서 1023까지의 값으로 변환합니다. 해상도는 10비트이지만, 노이즈 환경에서 파워 서플라이 잡음을 해결하지 않으면 유효 비트 수(ENOB)가 8비트 또는 7비트까지 떨어질 수 있습니다.

제 경험상 ADC 안정성을 높이는 세 가지가 있습니다:

  1. 칩 가까이에 커패시터를 분리하기. VCC 및 GND 핀에서 5mm 이내에 100 nF 세라믹과 10 μF 전해콘을 병렬로 배치하면 고주파 스위칭 잡음을 차단했습니다.
  2. ADC 노이즈 감소 절전 모드. 변환 중 CPU를 멈추면 칩 내 디지털 스위칭 잡음이 제거됩니다. 차이는 측정 가능해요: 이 모드를 활성화해도 노이즈 플로어가 ±8 LSB에서 ±2 LSB로 떨어지는 걸 봤어요.
  3. 아날로그 접지 또는 스타 접지를 분리하세요. ADC가 PWM 구동 부하와 반환 경로를 공유할 경우, PWM에서 나오는 접지 전류가 ADC 측정에 노이즈를 주입합니다. ADC 레퍼런스용 전원 공급 장치로 전용 접지 트레이스를 연결하면 결과가 눈에 띄게 향상됩니다.

ADC는 또한 특정 핀 쌍에서 선택적으로 게인(1×, 8×, 20×, 32×)을 선택할 수 있는 차동 입력 모드를 지원합니다. 이 방법은 튜토리얼에서는 거의 문서화되지 않지만, 열전대나 변형 게이지 브리지 같은 작은 미동 신호에는 잘 작동합니다. 게인은 입력 범위 감소와 오프셋 오차 증가를 초래하므로 보정이 매우 중요합니다.

USI를 통한 직렬 통신

범용 직렬 인터페이스(USI)는 직렬 프로토콜을 지원하는 최소한의 하드웨어 블록이지만, 대부분의 작업은 펌웨어에 남겨둡니다. 이 기능은 시프트 레지스터, 카운터, 기본 클럭 생성 기능을 포함하며, 저속에서 중간 속도에서 비트뱅 I²C 또는 SPI를 구현할 수 있습니다.

USI가 잘 작동할 때:

  • 100 kHz에서 단일 I²C 센서와 통신하는 것.
  • ATtiny85가 항상 마스터인 SPI 디스플레이 또는 DAC를 구동하는 경우.
  • 펌웨어 복잡성이 허용되는 프로토타이핑 또는 소량 설계.

USI가 문제가 될 때:

  • 멀티마스터 I²C 또는 클럭 스트레칭 시나리오; USI는 이런 부분을 자동으로 처리하지 않습니다.
  • 1 MHz 이상의 고속 SPI; 전용 하드웨어 없이는 타이밍이 어렵습니다.
  • UART가 필요한 응용 분야 - UART 하드웨어가 없기 때문에 비트뱅(bit-bang) 처리가 되어 CPU 사이클을 소모하고 타이밍이 복잡해집니다.

저는 TinyWireM 같은 USI 기반 I²C 라이브러리를 BMP280과 SSD1306 OLED 같은 센서와 성공적으로 사용해본 적이 있습니다. 하지만 I²C 장치가 SCL을 낮게 유지(클럭 스트레칭)했는데 라이브러리가 이를 감지하지 못해 펌웨어가 멈추는 경우를 몇 시간 동안 디버깅한 적도 있습니다. 교훈: 이상적인 조건의 실험대가 아니라 실제 주변기기와 함께 USI 코드를 일찍 테스트하세요.

아두이노 IDE로 ATtiny85 프로그래밍

Figure 4. Arduino as ISP wiring diagram for ATtiny85 programming

아두이노 IDE를 통해 ATtiny85를 프로그래밍하려면 Spence Konde의 ATTinyCore나 David Mellis의 구형 attiny 패키지와 같은 서드파티 보드 정의를 추가해야 합니다. 이 코어들은 'digitalWrite()'와 'analogRead()'와 같은 아두이노 기능을 ATtiny85 하드웨어에 매핑합니다.

ISP 프로그래밍용 배선:

ATtiny85 핀 ISP 프로그래머 신호
1 (리셋) 리셋
5 (PB0) 모시
6 (PB1) 미소
7 (PB2) SCK
8 (VCC) +5V (또는 목표 전압)
4 (GND) GND

전용 USBtinyISP, USBasp, 또는 "Arduino as ISP"로 설정된 아두이노 보드를 사용할 수 있습니다. 아두이노를 ISP로 사용할 경우, 업로드 중 리셋을 막기 위해 ARDUINO의 RESET과 GND 사이에 10 μF 커패시터를 설치하세요.

보드 설정이 중요해요:

  • 올바른 클럭 속도(내부 1 MHz, 8 MHz, 외부 16 MHz)를 선택합니다.
  • "Burn Bootloader"를 한 번 선택해 퓨즈 설정을 작성하세요 - 이 단계는 부트로더를 설치하지 않으며(ATtiny85는 부트로더를 사용하지 않음), 선택한 클럭에 맞춰 퓨즈를 설정합니다.
  • 퓨즈 설정 후에는 "Sketch > Upload Using Programmer"를 통해 스케치를 업로드하거나 환경설정에서 프로그래머를 기본값으로 설정하세요.

아두이노 핀 번호는 물리적 핀과 직접 일치하지 않습니다. 예를 들어, 아두이노 디지털 핀 0은 PB0(물리적 핀 5)에 해당하고, 아두이노 디지털 핀 2는 PB2(물리적 핀 7)에 해당합니다. 배선 전에 핵심 문서나 핀 배치 다이어그램을 꼭 확인하세요.

최소 작동 회로

Figure 5. Minimal ATtiny85 schematic with LED and decoupling capacitor

최소한의 회로는 다음만 필요합니다:

  • VCC(핀 8)는 3.3V 또는 5V 전원에 연결됩니다.
  • GND(핀 4)는 접지에 연결되어 있습니다.
  • VCC와 GND 사이에 IC 가까이에 위치한 100 nF 세라믹 커패시터.
  • 선택적으로, 전원 공급 장치가 잡음이 있을 경우 RESET 1(핀 1)에 10 kΩ 풀업 저항을 사용할 수 있습니다 - 보통 내부 풀업으로 충분합니다.

전류 제한 저항기(5 V는 220-470 Ω, 3.3 V는 최소 150 Ω)가 있는 LED가 PB0(핀 5)에 연결되어 시각적 피드백을 제공합니다. 내부 8 MHz RC 발진기는 기본적으로 작동하므로 외부 크리스털이 필요하지 않습니다.

이 구성은 깜빡임 테스트, PWM 실험, 초기 펌웨어 개발에 신뢰성 있게 작동합니다. 생산이나 소음에 민감한 용도에서는 100 nF 세라믹과 병렬로 10 μF 벌크 커패시터를 추가하여 과도 전류 요구를 처리합니다.

흔한 문제와 실질적인 해결책

문제 근본 원인 해답
ISP 업로드가 "장치 서명 불일치"로 실패함 IDE에서 잘못된 칩이 선택되었거나, 퓨즈가 외부 클럭으로 설정되어 있고 크리스탈이 없거나 보드 선정 여부를 확인하고; 퓨즈가 잘못되었다면, 외부 클럭 신호를 PB3에 연결하거나 HVPP를 사용해
ADC 수치가 무작위로 이동하거나 점프합니다 전원 공급 소음, 디커플링 커패시터 누락, 접지 불량 VCC/GND 근처에서 100 nF + 10 μF 디커플링을 더하면; ADC 노이즈 감소 모드를 활성화하고; 아날로그와 디지털 접지 경로 분리
I²C/SPI 통신이 간헐적으로 실패함 USI 타이밍 오류, 클럭 속도 불일치, 또는 외부 풀업 누락 (I²C) 시계 선택과 퓨즈 설정을 다시 한 번 점검하세요; I²C용 SDA/SCL에 4.7 kΩ 풀업을 추가하고; 펌웨어에서 버스 속도를 줄이기
GPIO 핀이 몇 시간 동안 작동하다가 반응을 멈춥니다 전류 한계를 넘어 구동되거나 전압 스파이크에 노출된 핀 LED 저항 값을 확인하세요; 고전류 부하에는 MOSFET을 버퍼링하고; 핀이 외부 케이블에 연결되면 과도 보호 장치(다이오드 또는 TVS) 추가하세요
코드가 잘못된 속도로 실행되거나 타이밍이 맞지 않음 클럭 퓨즈 설정이 Arduino IDE 보드 선택과 일치하지 않음 클럭 설정을 변경한 후 부트로더를 소각(퓨즈 설정); 스코프나 논리 분석기로 실제 클럭 주파수를 검증하기

RESET 퓨즈가 실수로 비활성화될 때:

RSTDISBL 퓨즈를 설정하고 ISP 접근을 잃으면 일반 프로그래머는 작동하지 않습니다. AVR 드래곤(단종되었지만 중고로 구할 수 있음)과 같은 고전압 병렬 프로그래머(HVPP)나 아두이노 기반 오픈소스 설계가 필요합니다. 이 방식은 특정 핀을 정의된 상태로 유지하면서 RESET 핀에 12V를 가해, 퓨즈 설정과 상관없이 칩을 프로그래밍 모드로 강제합니다. 복구는 가능하지만 귀찮고 시간이 많이 걸립니다.

ATtiny85를 언제 써야 할까 (그리고 언제 안 써야 할까)

잘 맞아요:

  • 간단한 제어 작업: LED 드라이버, 센서 리더기, 소형 디스플레이.
  • 8핀 패키지로 보드 면적을 절약하는 공간 제약 설계.
  • 슬립 모드를 활용하는 배터리 구동 애플리케이션(워치독 꺼짐 시 전원 종료 시 ~0.1 μA까지 감소).
  • 단위당 1센트가 대량에서 중요한 비용 민감 설계.

핏이 안 맞아요:

  • 여러 개의 직렬 주변기기가 동시에 필요한 응용 분야(UART + SPI + I²C) - 펌웨어 복잡도가 폭발적으로 증가합니다.
  • 고속 통신 또는 엄격한 타이밍 요구 - USI와 단일 스레드 실행에 의해 제한됨.
  • 개발 속도가 비용보다 더 중요한 프로젝트; ATmega328P나 STM32로 옮기면 하드웨어 UART, SPI, I²C를 제공하고, 골칫거리도 줄어듭니다.

저는 ATtiny85를 LED 조명 컨트롤러, 배터리 모니터, IR 원격 수신기에서 성공적으로 사용해봤습니다. 하지만 프로젝트 중간에 UART 디버그 포트와 SPI 플래시 로깅 등 대형 칩에서는 간단하지만 ATtiny85에서는 고생스러운 요구사항이 추가되면서 포기하기도 했습니다.

결론

ATtiny85는 크기, 비용, 전력이 주요 제약이고 기능이 명확히 정의된 한계 내에 머무르는 설계에서 여전히 유효합니다. 공유 기능을 가진 6개의 GPIO 핀은 신중한 핀 할당이 필요하며, 소프트웨어 기반 USI는 하드웨어 주변기기보다 더 많은 펌웨어 작업을 요구합니다. ADC 성능은 전원 공급 장치에 크게 의존하며, GPIO 전류 한계는 실제로 존재합니다 - 이를 초과하면 핀이 영구적으로 고장납니다.

설계에 확정하기 전에 퓨즈 설정, RESET 핀 트레이드오프, ISP 프로그래밍 워크플로우를 이해하면 비용이 많이 드는 후반 단계의 예상치 못한 상황을 방지할 수 있습니다. 적합한 용도에 맞춰 ATtiny85는 최소한의 공간으로 신뢰할 수 있는 제어를 제공합니다. 더 복잡한 경우에는 펌웨어 부담과 하드웨어 제약이 비용 절감을 상쇄하는지 평가하세요.