본문 바로가기

메이커 Maker

ATtiny10 USBasp 프로그래머 가이드

반응형

 

ATtiny10 프로그래밍 가이드

 

이 글에서는 아두이노 IDE를 사용하여 마이크로칩의 소형 6핀 프로세서인 ATtiny10을 프로그래밍하는 방법을 설명합니다. 이 칩은 소형 가젯과 웨어러블 기기를 제작하거나 다른 프로젝트의 인터페이스 로직을 설계하는 데 매우 적합하며, "작은"이라는 이름에 걸맞는 성능을 보여줍니다.

 

레고맨

 

다음 섹션에서는 C 언어로 ATtiny10을 프로그래밍하는 방법과 저렴한 ISP 프로그래머를 사용하여 프로그램을 다운로드하는 방법을 설명합니다. 또한, 몇 가지 간단한 애플리케이션과 예제 프로그램을 함께 보여줍니다.

 

ATtiny10 기반 전체 프로젝트는 다음 예를 참조하세요.

 

소개

 

저처럼 각 애플리케이션에 최대한 간단한 칩을 사용하는 것을 선호한다면 ATtiny10이 마음에 드실 겁니다 . [1] 6핀 프로세서로, 0805 SMD 저항과 크기가 거의 같고, 가격은 약 35펜스/35센트입니다. 다음과 같은 기능을 제공합니다.

 

  • 내부 클럭은 8MHz이며, 기본적으로 1MHz로 사전 조정됩니다.
  • 3개의 I/O 라인.
  • 2개의 16비트 PWM 아날로그 출력.
  • 8비트 아날로그 입력 3개.
  • 아날로그 비교기.
  • 입력 캡처와 이벤트 카운터가 있는 16비트 타이머입니다.
  • 감시 타이머.
  • 프로그램 메모리는 1024바이트, RAM은 32바이트, EEPROM은 없습니다.

 

이러한 모든 기능은 대형 AVR 칩 사용자에게는 익숙할 것입니다. 핀아웃은 다음과 같습니다(스펜스 콘데의 설계 규칙을 따름).

 

 

ATtiny10핀아웃

 

 

내부 발진기의 정확도는 10% 이내이지만, 소프트웨어에서 1% 이내로 보정할 수 있습니다. RESET을 네 번째 I/O 라인으로 설정하면 추가 프로그래밍이 필요 없지만, 이 글에서는 다루지 않습니다.

 

브레드보드에서 ATtiny10을 사용하려면 Sparkfun [2] 에서 제공하는 것과 같은 SOT23 브레이크아웃 보드에 장착할 수 있습니다 .

 

ATtiny10 프로그래밍

 

Arduino Uno의 ATmega328과 같은 대형 AVR 칩을 프로그래밍하는 데 사용되는 SPI 프로토콜과 달리 ATtiny10은 5개의 와이어만 필요한 TPI(Tiny Programming Interface)라는 프로그래밍 프로토콜을 사용합니다.다행히 Thomas Fischl의 훌륭한 USBasp 프로그래머가 이 프로토콜을 지원합니다 [3] .직접 만들거나 그의 사이트에서 주문하거나 eBay [4] , Banggood [5] 등에서 널리 구할 수 있습니다. ISP 프로그래밍을 위해 10핀-6핀 어댑터가 있는 것을 구입하는 것이 좋습니다.현재 버전의 Arduino IDE는 ATtiny10을 지원하므로 다른 AVR 칩과 마찬가지로 C로 프로그래밍하고 프로그램을 쉽게 업로드할 수 있습니다.Arduino 코어는 사용 가능한 프로그램 메모리의 거의 절반을 사용하므로 프로그래밍하는 가장 좋은 방법은 레지스터에 직접 액세스하는 것이며 아래 코어 함수의 대안 섹션에서 이를 수행하는 방법에 대한 개요를 제공합니다 .

 

ATtiny10을 프로그래밍하는 방법은 다음과 같습니다.

 

GitHub 저장소 ATtiny10Core 의 지침에 따라 ATtiny10Core 를 설치하세요 .

 

이렇게 하면 보드 메뉴 에 ATtiny10Core 제목이 추가됩니다 .

 

Arduino IDE 편집기에 프로그램을 입력합니다.

 

예를 들어, 아래에 주어진 Blink 예제 프로그램을 시도해 보세요.

 

다음 다이어그램과 같이 USBasp를 ATtiny10에 연결합니다.

 

 

 

USBasp 프로그래머를 ATtiny10에 연결합니다.

 

도구 메뉴 에서 보드를 선택 하고 ATtiny10Core 제목 아래에서 ATtiny10/9/5/4 옵션을 선택하세요 . 이것이 유일한 옵션입니다.

 

칩 메뉴 에서 원하는 칩을 선택합니다 (예: ATtiny10 ).

 

도구 메뉴의 프로그래머 옵션 에서 USBasp를 선택합니다 .

 

업로드를 선택하여 프로그램을 업로드합니다.

 

LED가 0.5Hz로 깜박여야 합니다.

 

미니 브레드보드에서의 테스트 설정은 다음과 같습니다.

 

 

 

USBasp 프로그래머를 사용하여 미니 브레드보드에서 ATtiny10 Blink 프로그램을 테스트합니다.

 

ATtiny10을 사용한 몇 가지 예는 다음과 같습니다.

 

Blink 예제

이것이 바로 널리 쓰이는 Blink 프로그램입니다.

 

void setup () {
  DDRB = 1;                       // PB0 as an output
  TCCR0A = 1<<COM0A0 | 0<<WGM00;  // Toggle OC0A, CTC mode
  TCCR0B = 1<<WGM02 | 3<<CS00;    // CTC mode; use OCR0A; /64
  OCR0A = 15624;                  // 1 second; ie 0.5Hz
}

void loop () {
}

 

 

이를 실행하려면 다음과 같이 LED를 PB0에 연결하세요.

 

 

 

ATtiny10을 사용하여 LED를 깜박이는 회로입니다.

 

Timer/Counter0을 사용하여 1MHz 시스템 클록을 프리스케일러 값 64로 나누고, 그 다음 15625로 나누어 1초 주기로 출력 PB0을 토글합니다.

 

아날로그 주파수 발생기

 

다음 프로그램은 아날로그 입력 ADC1(PB1)의 전위차계에서 전압을 읽은 다음, 이를 사용하여 Timer/Counter0의 비교 일치 레지스터 OCR0A를 설정하여 전위차계로 주파수를 제어할 수 있는 PB0에서 사각파를 생성합니다.

 

 

void setup () {
  DDRB = 1;                       // PB0 as an output
  // Set up ADC on PB2
  ADMUX = 1<<MUX0;                // ADC1 (PB1)
  ADCSRA = 1<<ADEN | 3<<ADPS0;    // Enable ADC, 125kHz clock
  // Set up waveform on PB0
  TCCR0A = 1<<COM0A0 | 3<<WGM00;  // Toggle OC0A, Fast PWM
  TCCR0B = 3<<WGM02 | 4<<CS00;    // Fast PWM with OCR0A as TOP; /256
}

void loop () {
  ADCSRA = ADCSRA | 1<<ADSC;      // Start
  while (ADCSRA & 1<<ADSC);       // Wait while conversion in progress
  OCR0A = ADCL;                   // Copy result to frequency output
}

 

 

비교 일치 값을 변경하고 있으므로 이 애플리케이션에서는 비교 일치 값을 이중 버퍼링하는 Fast PWM 모드를 사용해야 합니다. 회로는 다음과 같습니다.

 

 

 

ATtiny10에서 생성된 사각파의 주파수를 조정하기 위해 전위차계를 사용하는 회로입니다.

 

1MHz/256/256 또는 약 15Hz에서 1MHz/256/1 또는 3.9kHz 사이의 주파수를 생성합니다.

 

핵심 기능에 대한 대안

 

다음 섹션에서는 Arduino 핵심 기능이 제공하는 일부 기능을 달성하기 위해 ATtiny10을 프로그래밍하는 데 대한 몇 가지 팁을 제공합니다.

 

핀모드

 

핀을 입력으로 할지 출력으로 할지 지정하려면 DDRB 레지스터의 해당 비트를 각각 0 또는 1로 설정합니다. 예를 들어, 핀 1과 3을 출력으로 정의하고 나머지 핀은 입력으로 남겨두려면 다음과 같이 합니다.

 

DDRB = 0b0101;         // Equivalent to pinMode(1, OUTPUT); pinMode(3, OUTPUT);

 

입력 풀업

 

ATmega328이나 ATtiny85와 같은 기존 AVR 칩과 달리, ATtiny10은 별도의 풀업 레지스터인 PUEB를 사용하여 풀업 저항을 활성화합니다 . 입력 핀에 풀업을 설정하려면 이 레지스터의 해당 비트를 설정합니다. 예를 들어, 입력 핀 2에 풀업 저항을 설정하려면 다음과 같이 합니다.

 

PUEB = 0b0010;         // Equivalent to pinMode(2, INPUT_PULLUP);

 

출력에 풀업을 설정하는 것은 의미가 없다는 점에 유의하세요.

 

디지털 쓰기

 

출력 상태를 설정하려면 PORTB 레지스터의 해당 비트를 설정합니다. 예를 들어, 비트 1을 Low로, 비트 3을 High로 설정하려면(두 비트가 출력으로 정의되었다고 가정):

 

PORTB = 0b0100;        // Equivalent to digitalWrite(1, LOW); digitalWrite(3, HIGH);

 

입력 상태를 변경해도 효과가 없습니다.

 

디지털 읽기

 

I/O 핀의 상태를 읽으려면 PINB 레지스터를 읽으세요.

 

int temp = PINB;

 

아날로그쓰기

 

PWM을 이용한 아날로그 출력에는 OC0A(PB0)와 OC0B(PB1)를 사용할 수 있습니다. 먼저 해당 핀의 타이머/카운터를 PWM 모드로 설정해야 합니다. 예를 들어 PB0을 다음과 같이 사용할 수 있습니다.

 

TCCR0A = 2<<COM0A0 | 3<<WGM00; // 10-bit PWM on OC0A (PB0), non-inverting mode
TCCR0B = 0<<WGM02 | 1<<CS00;   // Divide clock by 1
DDRB = 0b0001;                 // Make PB0 an output

 

아날로그 값을 쓰려면 해당 출력 비교 레지스터인 OCR0A에 값을 써야 합니다.

 

OCR0A = 1000;                  // Equivalent to analogWrite(0, 1000)

 

5V 전원을 사용하면 PB0가 1000/1024 * 5V 또는 4.88V로 설정됩니다.

 

아날로그 읽기

 

아날로그 입력에 I/O 핀을 사용하려면 먼저 아날로그-디지털 변환기(ADC)를 구성해야 합니다. 예를 들어 ADC0을 사용하려면 다음과 같이 합니다.

 

ADMUX = 0<<MUX0;               // ADC0 (PB0)
ADCSRA = 1<<ADEN | 3<<ADPS0;   // Enable ADC, 125kHz clock

 

 

핀에서 아날로그 값을 읽으려면 변환을 시작해야 하며, 변환이 준비되면 ADC 레지스터를 읽어야 합니다.

 

 

ADCSRA = ADCSRA | 1<<ADSC;     // Start
while (ADCSRA & 1<<ADSC);      // Wait while conversion in progress
int temp = ADCL;               // Copy result to temp

 

Delay

 

delay() 를 간단히 대체하려면 대략적으로 적절한 타이밍을 제공하도록 조정된 루프를 사용할 수 있습니다.

 

void delay (int millis) {
  for (volatile unsigned int i = 34*millis; i>0; i--);
}

 

 

이는 Blink 프로그램을 작성하는 또 다른 방법을 제공합니다. 카운터 변수 i는 반드시 volatile 로 정의해야 하며 , 그렇지 않으면 컴파일러가 루프 밖에서 최적화하여 지연을 제거합니다.

 

더 정확한 지연을 위해 millis() 와 같은 타이머를 구현하려면 Timer/Counter0을 타이머로 설정하거나 Watchdog Timer를 사용할 수 있습니다.

 

업데이트

 

2021년 3월 6일: 최신 버전의 Arduino IDE에서 ATtiny10Core를 사용할 때 발생하는 문제를 해결하기 위해 설계된 새로운 ATtiny10Core 및 Boards Manager 설치에 대한 설명을 업데이트했습니다. 혼란을 방지하기 위해 아래 토론에서 관련 댓글을 삭제했습니다.

 

2022년 1월 11일: 최신 2018년 버전을 가리키도록 ATtiny10 데이터시트 링크를 업데이트했습니다. 이전 2016년 버전에서는 I/O 포트 풀업 동작을 잘못 설명했습니다.

 

  1. ^ ATtiny10 Datasheet on Microchip.
  2. ^ Sparkfun SOT23 to DIP Adapter on Sparkfun.
  3. ^ USBasp - USP programmer for Atmel AVE controllers on www.fischl.de.
  4. ^ USBASP ISP Programmer Cable Adapter from Boos Bits on eBay.
  5. ^ USBASP 3.3 5V AVR Downloader Programmer on Banggood.

 

튜토리얼의 문서를 직접 참고하려면 마우스 아래의 이 링크를 따라가세요. 다른 프로젝트도 참고하세요.

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩