개발자/Arduino

ATtiny13a 기반 가장 작은 제어 시스템

지구빵집 2022. 3. 3. 09:20
반응형

 

 

 

어떤 주제에 대해 알려면 적어도 책 한 권은 읽어야 하고, 포스팅은 10개 이상 해야 한다. 그것도 잘 아는 상태가 아니라 주제를 이해하는 정도로 하려면 말이다. 제대로 포스팅을 하려면 한 시간이 걸리니 10개를 하려면 10시간이고, 기술 서적을 한 권 읽은 것과 비슷하다. 새로운 프로젝트와 제품 개발을 위해 ATtiny13에 대해 공부하고 있다.

 

ATtiny13a 기반 가장 작은 제어 시스템 

 

겨우 아침 일찍 일어나고 부에 대해 공부한지 5개월로 들어서고 있는데 허리 조금 아프다고 모든 게 무너진다. 벌써 지친건가? 아니면 너무 운동을 열심히 해서 균형이 무너진건가 모르겠다. 아직 시작도 안 했다. 제대로 책임도 지지 않았고, 대가를 치르지도 않았고, 희생한 적도 없다. 다그치고 더 몰아 붙여야 한다. 

 

 

오늘은 가장 작은 마이크로 컨트롤러 제어 시스템을 알아본다. ATtiny13a 기반으로 Arduino 통합 개발환경(IDE)에서 실습을 진행하기로 한다. 아두이노 IDE 스케치에 대해서 잘 모른다면 해당 링크를 참고하시기 바랍니다.

 

준비물

 

  • ATtiny13A 마이크로컨트롤러.
  • 프로그램은 ISP 프로그래머를 통해 직접 다운로드되므로 부트로더를 구울 필요가 없습니다.
  • (선택 사항) USB ISP 프로그래머(프로그래머가 없는 경우 Nano를 사용하여 다운로더를 만들고 칩 공장 기본 퓨즈 매개변수를 사용하여 컴파일 및 다운로드).
  • (옵션) 0.1uF 디커플링 커패시터 1개(실제 애플리케이션에서는 VCC와 GND 사이에 디커플링 커패시터를 추가해야 합니다. VCC←→커패시터←→GND).

 

ATtiny13 과 ATtiny13a 에 대한 정보 참고

 

데이터 용량

 

  • 1K Bytes(1024 Bytes) 프로그래밍 가능 플래시 메모리, 이것이 우리 프로그램의 용량입니다.
  • 64바이트 EEPROM, 일부 데이터를 저장할 수 있으며 정전 후 저장됩니다.
  • 64바이트 온칩 SRAM, 프로그램 실행 메모리 

 

채널 인터페이스 

 

  • 8핀 PDIP/SOIC 패키지
  • 6개의 프로그래밍 가능한 I/O 핀이 있으며 그 중 5개는 Arduino에서 사용할 수 있지만 RST 핀은 일반 IO로 사용할 수 없습니다.
  • 한 개의 8비트 타이머/카운터
  • 두 개의 PWM 채널
  • 4채널 10비트 ADC(그 중 하나는 RST, Arduino는 사용할 수 없음)
  • 각 I/O 핀의 DC 전류는 20mA(최대 40mA)입니다.
  • 작동 전압 1.8-5.5V(최대 6V) 

 

Arduino IDE에서 ATTiny13A 제어 명령 지원 

 

  • map()
  • random()
  • randomSeed()
  • millis()
  • micros()
  • delay()
  • delayMicroseconds() *not precise
  • analogRead()
  • analogWrite()
  • pinMode()
  • digitalRead()
  • digitalWrite() 

 

Arduino IDE에서 ATTiny13A 참조 라이브러리 지원 

 

  • eeprom.h
  • io.h
  • iotn13.h
  • iotn13a.h
  • power.h
  • sleep.h 

 

프로그래밍 지침 

 

1. ATTiny13A 핀의 수가 적고 외부 수정 발진기가 IO의 2개 채널을 차지하기 때문에 대부분의 애플리케이션은 내부 클록을 사용합니다. 그러나 이 경우 delay()와 같은 지연 함수는 내부 발진기가 외부 요인(전압, 온도 등)에 의해 간섭을 받아 특정 오류(2% ~ 10% 사이일 수 있음)가 발생하므로 정확하지 않습니다. 

예를 들어 겨울에 작성된 프로그램은 여름에 잘 작동하지 않을 수 있습니다. 시간에 엄격하지 않은 프로그램에서는 걱정할 필요가 없습니다.

 

2. ATTiny13A Flash는 용량이 1024바이트로 작기 때문에 간단한 내용만 쓸 수 있습니다. 프로그램이 조금 더 복잡하면 더 어려울 것입니다. 

 

 

참고 자료 

 

http://www.geek-workshop.com/thread-15984-1-1.html

http://www.geek-workshop.com/thread-15446-1-1.html

http://www.geek-workshop.com/thread-7574-2-1.html

http://plclive.com/a/product/2016/0427/435.html

http://www.geek-workshop.com/thread-9681-1-1.html

http://www.360doc.com/content/14/0114/19/2340477_345286827.shtml 

 

핀 맵은 아래와 같습니다.

 

ATTiny13A Pinmap

 

 

Turn: watchdog code 

 

#define Pin 4
bool test = 0;

void setup()
{
        pinMode(Pin,OUTPUT);
        digitalWrite(Pin,test);

        //Set and start watchdog,
        MCUSR &= ~(1<<WDRF);  //Clear WDRF
        WDTCR |= (1<<WDCE) | (1<<WDE);  //Set signal
        WDTCR |= (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0);  //Set WDP and start watchdog WDE, which must be completed within 4 cycles, here is 2s cycle

        for (byte i = 0; i <3; i++)
        {
                digitalWrite(Pin,test = !test);
                delay(50);
        }
}

void loop()
{
        //Feed the dog
        __asm__ __volatile__ ("wdr");

        digitalWrite(Pin,test = !test); delay(300);

        //Turn off the watchdog 
        //WDTCR |= (1<<WDCE) | (1<<WDE);//Set the signal 
        //WDTCR = 0x00;//Clear the WDE bit
}

 

 

【Fuse Programming】 

 

설명 

1. 공장 기본 설정을 사용하는 경우 이 내용을 건너뛰십시오.

2. 퓨즈가 없는 경우 프로그램 다운로드 시 개발보드를 공장 출하시 기본값으로 설정해야 합니다.

3. AVR 퓨즈 비트의 올바른 구성은 다음 문서를 참조하십시오.  

 

 

ATtiny13 퓨즈 공장 기본값 

 

ATtiny13 퓨즈의 공장 기본값은 낮은 값 6A, 높은 값 FF, 확장 비트 0입니다.

옵션은 다음과 같습니다.

  • 내부 RC 발진기 9.6MHz 사용, 시작 시간 14CK+64ms
  • 시스템 클록을 8로 나눈 값 사용(즉, 주파수가 1.2MHz로 감소)
  • 정전 감지 비활성화
  • ISP 프로그래밍 활성화 암호화 없음(메모리 보호 기능이 활성화되지 않음) 

 

준비 도구 

 

1. 하드웨어: USB ISP 라이터

2. 소프트웨어: PORGISP 프로그래밍 소프트웨어

3. 마이크로컨트롤러: ATtiny13A 

 

ISP 배선 

 

아래 그림과 같이 ATtiny13A의 ISP 케이블 6개를 USBISP의 해당 포트에 연결합니다. 

 

ATtiny13A의 ISP 케이블 6개를 USBISP의 해당 포트에 연결

 

ATtiny13A의 ISP 케이블 6개를 USBISP의 해당 포트에 연결

 

 

퓨즈 연소 

 

1. USBISP를 컴퓨터의 USB 포트에 연결하면 시스템이 자동으로 드라이버를 설치합니다.

2. PROGISP 프로그래밍 소프트웨어를 열고 PRGISP 버튼이 밝은지 확인하고 칩을 ATtiny13A로 선택한 다음 "..." 버튼을 클릭하여 퓨즈 프로그래밍 창 인터페이스를 불러옵니다.

3. 퓨즈 굽기 창 인터페이스에서 마법사 모드로 들어가(편리하고 직관적인 설정을 위해) 낮은 비트 7A, 높은 비트 FB, 확장 비트 0을 설정한 다음 "쓰기"를 클릭하여 프로그래밍을 완료합니다. 

 

퓨즈 프로그래밍 시 주의사항 

 

1. 외부 리셋을 비활성화하면 안 됩니다. 그렇지 않으면 칩을 프로그래밍할 수 없습니다.

2. "ISP 프로그래밍 활성화"를 선택해야 합니다.

3. 외부 클럭이든 내부 RC 발진기이든 주파수가 높을수록 전력 소모가 커집니다. 더 낮은 주파수의 내부 RC 발진기 외에도 내부 RC 클록 주파수를 줄이려면 클록을 8로 나눌 수도 있으며 주파수는 원래의 1/8이 됩니다. 

 

 

퓨즈 연소 요약 

 

퓨즈 프로그래밍 옵션, 4개 항목만 선택(낮은 7A, 높은 FB, 확장 비트 0):

1. 전원 차단 감지 레벨은 2.7V(또는 전원 차단 감지 비활성화)

2. ISP 프로그래밍 활성화

3. 내부 RC 발진기(9.6 중); 시작 시간: 14CK+64ms

4. 암호화 없음 

 

【아두이노 IDE에서 프로그램 다운로드】 

 

준비 도구 

 

1. 개발 보드 관리자에서 ATtiny13(ATtiny13A와 호환) MCU에 대한 지원을 추가합니다.

2. 다운로드 방법 1: Arduino + USB ISP 프로그래머 + PROGISP 프로그래밍 소프트웨어

3. 다운로드 방법 2: Arduino + Nano에서 만든 다운로더 

 

개발 보드 관리자에 ATtiny13 추가 

 

1. Arduino IDE를 엽니다.

2. 메뉴에서 "파일" → "기본 설정"을 선택하고 "추가 개발 보드 관리 주소" 버튼을 선택합니다.

3. URL 추가: https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json

4. "개발 보드 관리자"를 열고 "ATtiny13"을 검색하고 버전을 선택하고 다음을 설치합니다.

5. 다른 방법: 인터넷에서 Arduino ATtiny13 지원 파일(예: "core13_022_arduino_1_6")을 다운로드하고 메시지에 따라 설치합니다. 

 

다운로드 방법 1: Arduino+USB ISP 라이터+PROGISP 프로그래밍 소프트웨어 

 

1. 아두이노: 

 

1. 메뉴 "도구" → "개발 보드": "ATTiny13"을 선택합니다.

2. 메뉴 "도구" → "BOD": "2.7v"를 선택합니다. (퓨즈를 설정하지 않았다면 여기서 “Disabled”를 선택합니다.)

3. 메뉴 “Tools” → “Clock”: “9.6 MHz internal osc”를 선택합니다. (퓨즈를 설정하지 않은 경우 여기에서 "1.2MHz"를 선택합니다.)

4. 메뉴 "도구" → "GCC 플래그": "기본값"을 선택합니다.

5. 메뉴 "프로젝트" → "컴파일된 바이너리 파일 내보내기". 

 

2. USB ISP 라이터: 

 

ATtiny MCU를 올바르게 연결하고(퓨즈 프로그래밍 연결 방법 참조) 컴퓨터에 연결합니다. 

 

3. PROGISP: 

 

1. 단일 칩 마이크로컴퓨터를 ATtiny13A로 선택합니다(단일 칩 마이크로컴퓨터의 실제 모델에 따라 선택됨).

2. "파일" → "플래시 로드" 메뉴에서 Arduino에서 내보낸 바이너리 파일을 선택합니다.

3. 메뉴 "명령" → "지우기".

4. 메뉴 "명령" → "플래시에 쓰기".

5. 메뉴 "명령" → "플래시 확인", 확인 성공 후 장치에 연결하여 실행할 수 있습니다. 

 

 

다운로드 방법 2: Arduino + Nano에서 만든 다운로더 

 

1. Nano를 사용하여 다운로더 만들기:

 

1. Nano를 컴퓨터에 연결하고 Arduino를 열고 Nano를 개발 보드로 선택하고 포트 번호(나중에 ISP로 ATTiny13 프로그램을 다운로드할 때도 사용되는 Nano의 포트 번호)를 선택합니다.

2. 샘플 파일 열기: ArduinoISP

3. 샘플 파일을 컴파일하여 업로드하면 다운로더가 완성됩니다.

 

2. ATtiny13A MCU를 나노 다운로더에 연결합니다.

 

  • ATtiny13A 핀 7은 NanoPin 13에 연결(SCK 인터페이스로)
  • ATtiny13A 핀 6은 NanoPin 12에 연결(MISO 인터페이스로)
  • ATtiny13A 핀 5는 NanoPin 11에 연결(MOSI 인터페이스로)
  • ATtiny13A 핀 1은 NanoPin 10에 연결됩니다(RESET 인터페이스로, 이것은 Nano RST가 아님을 유의하십시오)
  • ATtiny13A 핀 8은 나노 5V에 연결
  • ATtiny13A 핀 4는 나노 GND에 연결

 

3. Arduino에서 프로그램을 다운로드(업로드):

 

1. 메뉴 "도구" → "개발 보드": "ATTiny13"을 선택합니다.

2. 메뉴 "도구" → "BOD": "2.7v"를 선택합니다. (퓨즈를 설정하지 않았다면 여기서 “Disabled”를 선택합니다.)

3. 메뉴 “Tools” → “Clock”: “9.6 MHz internal osc”를 선택합니다. (퓨즈를 설정하지 않은 경우 여기에서 "1.2MHz"를 선택합니다.)

4. 메뉴 "도구" → "GCC 플래그": "기본값"을 선택합니다.

5. 메뉴 "도구" → "포트": Nano가 있는 포트를 선택합니다.

6. 메뉴 "도구" → "프로그래머": "Arduino를 ISP로"를 선택합니다.

7. 메뉴 "프로젝트" → "프로그래머를 사용하여 업로드".

8. 다운로드(업로드)가 완료되면 ATtiny13A의 장치에 연결하여 효과를 시도할 수 있습니다.  

 

 

참고

Arduino-the smallest system (based on ATtiny13A) 

 

 

 

 

 

반응형