이제 Github 토론 섹션이 있습니다. 문제가 확실히 핵심적인 결함인 경우, 토론을 따라잡는 것보다 문제를 우선시하기 때문에 문제를 생성하면 문제를 해결하는 데 걸리는 시간이 줄어듭니다.
이는 2.6.x에 존재하는 많은 버그를 수정합니다.
2.6.x는 기능을 추가하는 동시에 직렬의 향상된 플래시 공간을 도입하고, 와이어는 데이터를 손상시키지 않고 슬레이브를 절전 모드에서 깨울 수 있으며 훨씬 더 많은 내용을 변경 로그를 참조하세요.
arduino.cc에서 다운로드한 Arduino IDE 버전만 사용해야 하며 절대 Linux 패키지 관리자에서 다운로드하면 안 됩니다. 패키지 관리자는 종종 Arduino IDE를 갖고 있지만 이를 수정 했습니다. 이는 Arduino 또는 일반적인 임베디드 개발에 대해 전혀 알지 못함에도 불구하고 이를 성공적으로 수정하기 위해 알아야 할 사항은 훨씬 적습니다. 해당 버전은 이러한 현명하지 못한 수정으로 인해 발생하는 미묘하지만 심각한 문제로 악명이 높습니다. 이 코어는 해당 버전에서 작동하지 않을 것으로 예상되며 이러한 이유로 패키지 관리자에서 제공되는 IDE 버전을 수정하기 위한 수정은 이루어지지 않습니다.
이것은 Arduino 클라이언트의 버그입니다.
1.8.13과 2.x 사이의 IDE 버전에서는 심각한 새로운 결함이 발생했습니다. 그러나 IDE 버전 1.8.2 및 이전 버전에는 심각한 수정되지 않은 결함이 있습니다. 나는 그들이 마침내 작동하는 IDE 버전을 가지고 있다고 믿으며 최신 버전이 내 코어를 올바르게 설치할 수 있다고 믿습니다.
megaTinyCore 2.6.0 이전에는 arduino 폴더에 코어를 수동으로 설치할 때 megaTinyCore를 수동으로 설치하면 이 버그로 인해 IDE V1.8.14가 충돌할 수 있었습니다. 1.8.14 이상 사용자는 megaTinyCore 버전 2.6.0을 사용해야 합니다.
나는 AliExpress에서 많은 전자 제품을 구입합니다. 이곳은 중국 회사가 만든 물건을 판매하는 훌륭한 시장이며 서구 세계의 개인이 다른 방식으로 사용할 수 없는 수많은 구성 요소를 포함하여 대부분 일반 제품입니다(예: 최소 주문은 릴 또는 이와 유사한 것입니다. 이름 없는 중국 칩 제조업체와 협력하는 부품 공급업체). 특히 칩이 역사적으로 부족한 상황에서 주요 서구 제조업체의 최신 반도체 제품 라인을 위한 좋은 장소는 아닙니다. 최신 AVR 장치는 해당 채널을 통해 사용할 수 있을 때 가짜이거나 결함이 있는 것으로 자주 보고됩니다 (예: 416이라고 생각하고 재설정 시 전원을 올바르게 실행하지 않을 수 있는 ATtiny412). 그 문제에 있어서 당신은 아마도 AliExpress에서 AVR 마이크로컨트롤러를 사고 싶지 않을 것입니다 . Arduino Nano 클론과 같은 조립 보드는 일반적으로 타사 LGT8 칩이 있는 보드를 피하고 ATmega168p가 있는 보드를 조심하면 작동합니다. '328p 대신 - 그러나 베어 칩으로 판매될 때 가짜 마이크로컨트롤러에 대한 보고가 많이 있습니다(실제로 언급된 가짜 ATtiny85에 대해 들었습니다) ATtiny13s; 위조되는 것은 최신 AVR만이 아닙니다. 이러한 가짜 칩이 어디서 왔는지에 대한 흥미로운 이론이 많이 있으며, Microchip은 이 문제에 대해 전혀 침묵을 지켰습니다.
이 문서는 온라인에서 가장 잘 볼 수 있으므로(좋아하는 텍스트 편집기에서 마크다운 파일을 여는 것과 반대) 링크를 클릭할 수 있고 인라인 이미지가 표시되며 아마도 가장 중요한 것은 테이블이 때때로 올바르게 렌더링되도록 하는 것입니다. 다시 말하지만, 이 [문서는 github에서 찾을 수 있습니다](https://github.com/SpenceKonde/megaTinyCore](https://github.com/SpenceKonde/megaTinyCore)
이전 버전에서는 도구 -> 프로그래머 메뉴에서 프로그래머를 제대로 처리하지 못하여 설치된 코어 수가 늘어날수록 UX가 급격히 저하됩니다. 적합하지 않습니다. 1.8.14(1.8.17, 1.8.18 및 1.8.19 포함)로 시작하는 최신 버전에서는 platform.txt를 제대로 구문 분석하지 못하기 때문에 "패닉: 주요 버전을 찾을 수 없음" 오류가 발생할 수 있습니다. 2.6.0부터 출시 직전에 platform.txt를 수동으로 수정해 왔기 때문에 이는 문제가 되지 않습니다.
보드 관리자를 통해 megaTinyCore를 설치하면 필요한 버전의 툴체인이 자동으로 설치됩니다. 모든 0/1/2 시리즈 부품은 추가 단계 없이 지원됩니다. 2.2.7까지 우리는 2020년 6월 현재 최신 ATpack과 함께 Arduino7 버전의 avr-gcc(gcc 7.3.0 및 avrlibc 3.6.1)를 사용했습니다. 2.2.7부터 우리는 툴체인의 Azduino 빌드를 사용하기 시작했습니다. 새로 지원되는 모든 부품에 대해 ATpack을 업데이트했습니다. 2.2.7은 Azduino3을 사용했고, 2.3.0+는 Azduino4를 사용했으며, 2.6.0부터 Azduino5를 사용합니다(두 가지를 모두 설치하면 1/4GB의 HDD 공간과 40MB의 다운로드 대역폭을 절약하는 것 외에는 우리에게 아무런 이점도 제공하지 않습니다). 보드 관리자를 통한 megaTinyCore 및 DxCore.
수동 설치는 더 복잡합니다. 특히 2 시리즈에 대한 지원을 원하는 경우에는 더욱 그렇습니다. 자세한 내용은 설치 가이드를 참조하세요.
tinyAVR 0-시리즈, 1-시리즈 및 현재 2-시리즈용 Arduino 코어입니다. 이러한 부품은 "클래식"tinyAVR 부품(ATTinyCore에서 지원)에 비해 향상된 아키텍처를 가지며, 주변 장치가 개선되고 특정 명령에 대한 실행 시간이 향상됩니다(이는 고급 AVR Dx 시리즈와 관련하여 유사합니다. 공식 Nano Every 및 Uno Wifi Rev. 2에 사용되는 ATmega4809와 같은 megaAVR 0 시리즈 칩(Arduino 팀은 이를 무릎 보호하기 위해 최선을 다했지만)을 저렴한 소형 패키지로 제공합니다. ATtiny 라인의 전형적인 모습입니다. 이러한 모든 부품에는 하나 이상의 하드웨어 UART, SPI 및 TWI 인터페이스(예: ATtiny85와 같은 USI 쓰레기 없음), 강력한 이벤트 시스템, 구성 가능한 사용자 정의 논리, 하나 이상의 온칩 아날로그 비교기가 포함되어 있습니다. , 놀랍도록 정확한 내부 오실레이터, 1 시리즈의 경우 실제 DAC 출력 채널, 2 시리즈의 경우 멋진 차동 ADC입니다.
또한,tinyAVR 0/1/2 시리즈 부품은 저렴 합니다. 최고급 부품인 3226 및 3227은 32k 플래시와 3k SRAM(Uno/Nano/ProMini에서 사용되는 ATmega328p의 2k SRAM과 비교) 실행됩니다. 수량은 미화 1달러가 조금 넘습니다. 8k 클래식 AVR ATtiny 부품보다 적습니다("AVR 지침 세트, PIC 가격"). 이 모든 부품은 외부 크리스털 없이 16MHz 또는 20MHz(4.5-5.5v)에서 작동하도록 평가되었으며 내부 발진기는 UART 통신에 충분히 정확합니다.
이들은 고전적인 ATtiny 부품처럼 전통적인 ISP가 아닌 UPDI 프로그래밍을 사용합니다. 자세한 내용은 아래를 참조하세요. UPDI 프로그래머를 얻는 것은 간단합니다. jtag2updi를 사용하여 기존 328p 기반 Arduino를 프로그래머로 사용할 수 있습니다. 또는 더 저렴한 하드웨어로 더 나은 결과를 얻으려면 포함된 SerialUPDI를 사용하여 USB 직렬 어댑터 와 저항기(그리고 바람직하게는 다이오드)를 사용할 수 있습니다. 도구를 사용하거나 Microchip 프로그래머(개발 보드, Atmel-ICE 또는 SNAP의 mEDBG/nEDBG/EDBG 기반 프로그래머) 또는 모든 UPDI 프로그래밍 중 하나와 함께 AVRdude를 사용할 수 있습니다. 그 중 하나를 에뮬레이션하는 도구입니다(제가 아는 한, 모두 지원합니다. avrdude가 지원하는 것이 있고 내 핵심이 지원하지 않는 것이 있으면 문제를 열어 알려주세요!).
직렬 부트로더인 Optiboot_x(클래식 Arduino Uno 부트로더와 동일한 코드 베이스를 기반으로 하지만 이후 크게 변경됨)가 이러한 부분에서 지원됩니다(0/1 시리즈 지원은 현재 활성화되어 있으며 2 시리즈는 5월 첫째 주에 지원될 예정입니다) ; 새 부품에 대한 조정은 간단합니다.) 기존 직렬 포트를 통해 프로그래밍할 수 있습니다. 이에 대한 자세한 내용과 관련 옵션은 아래 Optiboot 섹션을 참조하세요. 부트로더를 설치하려면 UPDI 프로그래머가 필요합니다. 제가 Tindie에서 판매하는 조립된 브레이크아웃 보드는 사전 부트로드된 상태로 제공됩니다(요구 시 부트로드됨). 즉, Optiboot의 사용자 경험은 일반적인 자동 재설정 회로와 함께 사용할 수 있는 하드웨어 재설정 핀이 부족하기 때문에 0/1 시리즈 부품과 14핀 2 시리즈 부품에서 약간 실망스럽습니다. 직렬 포트가 열릴 때 자동으로 부트로더로 재설정됩니다. UPDI 프로그래밍을 완전히 비활성화하거나(초기 부트로딩 후 퓨즈 설정이나 부트로더를 변경해야 하는 경우 HV 프로그래머 필요) UPDI를 활성화한 채로 두고 전원을 공급한 후 8초 이내에 업로드를 시작해야 합니다. 20핀 및 24핀 2 시리즈 부품은 "대체 재설정 핀"을 지원하므로 기존 Arduino처럼 작동할 수 있습니다.
UPDI 프로그래밍 인터페이스는 프로그래밍(및 디버깅 - 범용 프로그래밍 및 디버깅 인터페이스 )을 위한 단일 와이어 인터페이스로, TinyAVR 0/1/2 시리즈 및 기타 모든 최신 AVR 마이크로 컨트롤러에 사용됩니다. . 언제든지 Microchip에서 특수 목적으로 제작된 UPDI 프로그래머를 구입할 수 있지만 Microchip의 (아주 복잡한) IDE 대신 Arduino IDE를 사용하는 경우에는 권장되지 않습니다. 공식 Microchip 프로그래머들에게는 Linux 문제에 대한 광범위한 보고가 있습니다. UPDI 프로그래머를 만드는 데는 두 가지 매우 저렴한 대안 접근 방식이 있으며, 두 가지 모두 Arduino 커뮤니티가 공식 프로그래머보다 더 많은 경험을 가지고 있습니다.
megaTinyCore가 존재하기 전에는 단일 저항기를 추가하여 수정된 직렬 어댑터를 사용하여 UPDI 지원 마이크로컨트롤러에 업로드하기 위한 간단한 Python 프로그램인 pyupdi라는 도구가 있었습니다. 하지만 pyupdi는 Arduino IDE에서 쉽게 사용할 수 없었기 때문에 선택 사항이 아니었습니다. 2.2.0부터 megaTinyCore는 이식 가능한 Python 구현을 제공하여 수많은 가능성을 열어줍니다. 원래 우리는 pyupdi를 조정할 계획이었지만 작성자와 여러 Microchip 직원의 촉구에 따라 대신 동일한 직렬 포트 업로드를 포함하는 "더 강력한" 도구인 pymcuprog를 기반으로 이 기능을 개발하고 "Microchip에서 유지 관리"했습니다. 기능은 성능 최적화 없이만 가능합니다. 수동으로 설치하는 경우 이 업로드 방법을 사용하려면 운영 체제에 적합한 Python 패키지를 추가해야 합니다(시스템 Python 설치로는 충분하지도 않고 필요하지도 않음).
배선에 대한 정보는 SerialUPDI 문서를 읽으십시오.
2.3.2부터 성능이 크게 향상되고 저항기 대신 다이오드를 사용하는 배선 방식의 입증된 신뢰성과 jtag2updi 펌웨어의 결함을 고려하여 이것이 이제 권장되는 프로그래밍 방법입니다. 이 버전에서는 프로그래밍 속도가 20배까지 향상되었으며 이제 jtag2updi로 가능했던 속도를 훨씬 능가합니다. (jtag2updi를 통한 프로그래밍은 "SLOW" 속도 옵션인 57600에서 SerialUPDI를 통한 프로그래밍과 대략 속도가 비슷합니다. baud; 일반 230400 baud 버전은 SLOW 버전이나 jtag2updi보다 약 3배 빠른 속도로 프로그램되는 반면, "TURBO" 옵션(실행 속도: 460800 보드이며 업로드 속도가 일반 버전보다 약 50% 증가합니다. TURBO 속도 버전은 따라잡기 위해 UPDI 클럭을 더 빠르게 실행해야 하기 때문에 4.5v 이상에서 실행되는 장치에서만 사용해야 합니다. 모든 직렬 어댑터와 호환됩니다. 이는 성능 향상을 위한 의도적인 절충안입니다. 하지만 이를 통해 4초 안에 32kB 스케치를 업로드하고 확인할 수 있습니다.
세 가지 디자인이 반복되고 있습니다. 둘 다 직렬 포트인 듀얼 포트 직렬 어댑터, 하나의 포트가 항상 UPDI인 듀얼 포트 직렬 어댑터, 모드를 선택하는 스위치를 갖춘 단일 포트, 그리고 옵션인 애드온 보드를 통해 모뎀 제어선의 상태를 나타내는 LED입니다.
이를 통해 직렬용 6핀(표시된 대로 FTDI 핀아웃) 및 3핀(UPDI용)을 사용하여 SMT JST-XH 커넥터 또는 dupont 커넥터를 사용할 수 있습니다.
이들 세 가지 모두 3.3 또는 Vusb(공칭 5V)를 공급하거나 Vusb 및 3V3을 모두 전원에서 분리할 수 있으며 대상 장치는 5.5V > Vdd > 1.8V로 전원이 공급될 것으로 예상됩니다. 이 경우에 사용되는 로직 레벨은 적용되는 모든 전압이 됩니다. 듀얼 직렬 장치에서는 VccIO 전원 레일이 공유된다는 점에 유의하세요! 둘 다 동일한 전압에서 실행되어야 하며, 동일한 장치여야 합니다. 그렇지 않으면 어댑터가 전원을 공급하도록 설정되고 전원이 차단되어야 합니다.
어댑터 모델 및 운영 체제에 따라 다른 타이밍 설정이 필요한 것으로 나타났습니다. 그러나 대부분의 어댑터를 사용하는 Linux/Mac에서 230400보드도 실패하지 않도록 설정하는 데 필요한 설정은 Windows에서 훨씬 더 큰 시간 패널티를 부과합니다. Windows에서는 OS의 직렬 처리가 느려서 지연이 필요하지 않습니다.
여기에 언급된 "쓰기 지연"은 페이지 지우기-쓰기 명령이 실행을 완료할 수 있도록 허용하는 것입니다. 이 작업에는 0이 아닌 시간이 걸립니다. 어댑터에 따라 USB 대기 시간 및 암시적 2 또는 3바이트 버퍼(USART와 유사하며 아마도 내부적으로 구현될 수 있습니다. 하드웨어 버퍼 깊이가 2바이트에 불과하기 때문에 도착하는 세 번째 바이트는 갈 곳이 없습니다)가 발생할 수 있습니다. 명시적인 지연 없이 작동할 수 있을 만큼 충분합니다. 또는 도중에 실패하여 "Error with st"를 보고할 수도 있습니다. 어댑터의 대기 시간 제한 시간이 빠를수록, OS의 직렬 처리 속도가 빠를수록 문제가 발생할 가능성도 커집니다. prog.py를 수동으로 실행하는 경우 이는 -wd
명령줄 매개변수로 제어됩니다. 2.5.6부터 이 쓰기 지연은 요청된 실제 시간(ms 단위)에 더 가깝습니다. 이전에는 1이면 충분할 때 수 ms의 세분성이 있었고 결과적으로 부과된 페널티는 잔혹 했습니다. 특히 윈도우.
선택 가이드:
460800+ 보드는 사양을 유지하기 위해 타겟이 4.5V+에서 실행되어야 합니다(실제로는 그렇게 높을 필요는 없지만 16MHz에서 안정적일 수 있을 만큼 충분히 높은 전압이어야 합니다. 우리는 230400 보드 이상의 모든 속도에 대해 인터페이스 클럭을 최대로 설정합니다. 일부 어댑터는 때때로 이 단계 없이 460800에서 작동하는 반면(그 자체로는 이상합니다.) 460800 보드는 460800 보드 맞죠?) 대부분은 그렇지 않으며 SerialUPDI에는 어댑터가 무엇인지 확인할 방법이 없습니다.
CH340 기반 어댑터는 대부분의 플랫폼에서 대기 시간이 충분히 높으며 쓰기 지연 없이 거의 항상 모든 속도에서 작동합니다. 모든 옵션은 쓰기 지연을 사용하지 않고 작동합니다.
거의 모든 어댑터는 쓰기 지연을 사용하지 않고 230.4k의 Windows에서 작동합니다. 직렬 어댑터 역할을 하도록 프로그래밍된 일부 기본 USB 마이크로컨트롤러(예: SAMD11C)를 포함하여 드물게 그렇지 않은 경우도 있습니다.
플랫폼에 관계없이 CH340 기반 어댑터를 제외하면 거의 아무것도 쓰기 지연 없이 460.8k 이상에서 작동하지 않습니다.
Windows에서는 많은 어댑터(실제로 이를 지원해야 하는 어댑터라도)가 921600 보드로 전환하는 데 실패합니다. 이유는 모르겠습니다. 증상은 시도할 때 몇 초 동안 일시 중지된 후 115200보드로 업로드되는 것입니다. 지금까지 내가 성공했던 유일한 제품은 이상하게도 CH340이었습니다.
쓰기 지연이 있는 Windows의 460800 보드는 쓰기 지연이 없는 230400 보드보다 느린 경우가 많습니다. Linux/Mac에서는 그렇지 않으며 페이지 크기가 작을수록 쓰기 지연으로 인한 성능 저하가 커집니다.
다른 옵션이 작동하지 않거나 Vcc = < 2.7V에서 프로그래밍할 경우 57600 보드를 사용해야 합니다.
460800보드는 TX와 RX 사이의 쇼트키 다이오드에 10k 저항이 배치된 일부 어댑터에서 쓰기 지연 없이 작동합니다. 이 경우 쓰기 지연이 활성화되지 않으면 작동하지 않습니다. 아니요, 어떻게 이런 일이 일어날 수 있는지 이해가 되지 않습니다!
위에서 볼 수 있듯이 이 정보는 대체로 경험적입니다. 행동을 예측하는 방법은 아직 알려져 있지 않습니다.
eBay/AliExpress에서 약 2달러에 구입할 수 있는 가짜 어댑터를 포함한 FTDI 어댑터(FT232, FT2232, FT4232 등)는 Windows에서 기본적으로 16ms의 극도로 긴 대기 시간을 갖습니다. 기다려야 하는 대기 시간 지연 기간을 제한하기 위해 선택한 길이에도 불구하고 이렇게 하면 2.2초의 업로드가 15초 이상으로 연장됩니다. 허용 가능한 업로드 속도를 얻으려면 이를 변경해야 합니다.
제어판, 장치 관리자를 엽니다.
포트 확장(COM 및 LPT)
포트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오.
포트 설정 탭을 클릭하세요.
"고급..."을 클릭하여 고급 설정 창을 엽니다.
"BM 옵션" 섹션에서 "Latency Timer" 메뉴를 찾으세요. 이 메뉴는 16으로 설정되어 있을 것입니다. 이를 1로 변경하세요.
고급 옵션 창을 종료하려면 확인을 클릭하고 속성을 종료하려면 다시 클릭하세요. 장치 관리자가 하드웨어 목록을 새로 고치는 것을 볼 수 있습니다.
이제 업로드가 훨씬 빨라질 것입니다.
하나는 클래식 AVR Uno/Nano/Pro Mini로 만들 수 있습니다. 저렴한 나노 클론이 일반적인 선택이며, 배선을 연결한 다음 그대로 둘 수 있을 만큼 충분히 저렴합니다. 우리는 더 이상 이 프로세스에 대한 자세한 문서를 제공하지 않습니다. jtag2updi는 더 이상 사용되지 않습니다. 아직 사용하고 있다면 도구->프로그래머 메뉴에서 jtag2updi를 선택해야 합니다. 이는 이전에 권장된 옵션이었습니다. 지속적인 jtag2updi 버그와 유지 관리되지 않는 'avrdude' 도구(무엇보다도 이 도구로 만든 모든 UPDI 업로드에 허위 오류 메시지를 삽입함)에 대한 의존성으로 인해 이 방법은 더 이상 권장되지 않습니다.
분명히 Arduino는 최신 avrdude의 32비트 버전을 패키징하지 않습니다. 32비트 Linux 대신 버전 17을 가져오는 것을 제외하고 arduino18(최신)의 복사본인 새로운 도구 정의를 정의했습니다. 이는 해당 플랫폼에서 사용할 수 있는 최고 버전이기 때문입니다. Arduino17 버전은 일부 Microchip 프로그래밍 도구를 사용한 업로드를 올바르게 지원하지 않습니다.
이는 현재 마지막 몇 가지 릴리스에만 사용되며 이 플랫폼 오류에 avrdude를 사용할 수 없음을 수정해야 합니다.
tinyAVR 2 시리즈
ATtiny3227,1627,827,427
ATtiny3226,1626,826,426
ATtiny3224,1624,824,424
tinyAVR 1 시리즈
ATtiny3217,1617,817,417
ATtiny3216,1616,816,416
ATtiny1614,814,414,214
ATtiny412,212
tinyAVR 0 시리즈
ATtiny1607,807
ATtiny1606,806,406
ATtiny1604,804,404,204
ATtiny402,202
X가 문자이고 #이 숫자인 "AVR##XX##"과 같은 이름의 모든 것 - 이를 위해 내 DxCore가 필요합니다.
모든 클래식(2016년 이전)tinyAVR 부품 - 거의 모두 내 다른 코어 ATTinyCore 중 하나에서 지원됩니다.
ATtiny 25/45/85, 24/44/84, 261/461/861, 48/88, 두 개의 작은 것과 하나(이상한 43 및 4313/2313), 그리고 2.0.0에서는 26과 최종 -4(현대 AVR 방향에 대한 실험의 힌트를 보여줌), ATtiny 441/841, 1634 및 828에 더해 더 낯선 26.
AVR 부품 제품군 목록과 함께 작동하는 Arduino 코어에 대해서는 이 문서를 참조하세요 . 거의 모든 것에는 일반적으로 나 자신이나 MCUdude가 지원을 제공하는 코어가 있습니다.
모든 최신 AVR을 다루는 이 문서를 참조하세요.
특징 | 0 시리즈 | 1 시리즈 | 1+시리즈 | 2시리즈 |
---|---|---|---|---|
플래시 | 2천~16천 | 2천~8천 | 16k/32k | 4k-32k |
핀 수 | 8-24 | 8-24 | 14-24 | 14-24 |
스램 | 128b-1k | 128b-512b | 2천 | 512b-3k |
TCD | 아니요 | 예 | 예 | 아니요 |
TCB | 1 | 1 | 2 | 2 |
ADC | 1x10비트 | 1x10비트 | 2x10비트 | 1x12비트 PGA 포함 |
VREF 핀 | 아니요 | 아니요 | 예 | 예 |
교류 | 1 | 1 | 3 | 1 |
이벤트 * | 3찬 | 6찬 | 6찬 | 6찬 |
CCL ** | 2 LUT | 2 LUT | 2 LUT | 4 LUT |
*
2 시리즈tinyAVR(및 모든 Non-Tiny 최신 AVR)을 제외한 이벤트 채널은 동기식(시스템 클럭에 대한) 및 비동기식의 두 가지 유형으로 나뉩니다. 모든 생성기를 동기 채널과 함께 사용할 수 있는 것은 아니며 일부 이벤트 사용자는 동기 채널만 사용할 수 있으며 채널 목록의 일관성이 떨어지고 더 많습니다. 이 광기는 첫 번째 기회에 포기되었습니다. 심지어 mega0도 그러한 구별을 없앴습니다.
**
2 시리즈 및 소형이 아닌 부품만 CCL 상태를 기반으로 인터럽트를 실행할 수 있습니다.
모든 부품에는 대부분의 핀(PORTA 및 PORTB 0-1, 4-5의 모든 핀)에서 사용할 수 있는 아날로그 입력이 있습니다. 1-시리즈+의 두 번째 ADC는 PORTC의 핀을 입력으로도 사용할 수 있습니다(사용 방법에 대한 자세한 내용은 아날로그 참조 참조).
예산 옵션입니다. 지원되기는 하지만 권장되지는 않습니다. 이것은tinyAVR 1 시리즈가 16k에서 얻는 "부스트"를 결코 얻지 못하고, 어떤 구성에도 두 번째 TCB가 없고, TCD도 없고, 단 3개의 이벤트 채널만 있으며, 그 중 어느 것도 RTC 이벤트 출력을 전달할 수 없습니다. 이 부품에는 1 시리즈와 같은 2개의 CCL LUT가 있으며 14, 20, 24핀 구성에서 최대 16k 플래시(8핀 부품의 경우 4k만)와 최대 1k SRAM을 사용할 수 있습니다.
여기에는 0 시리즈와 마찬가지로 2k, 4k 또는 8k 플래시와 128, 256 또는 512b RAM이 있습니다. TCD는 있지만 두 번째 ADC, 삼중 AC 구성 또는 두 번째 TCB는 없습니다.
갑자기 16k에서 1 시리즈 부품이 훨씬 더 흥미로워집니다. 더 큰 플래시와 함께 훨씬 더 큰 칩에 적합해 보이는 주변 장치가 있으며 16k이든 32k이든 모두 2k의 SRAM을 얻습니다. 두 번째 ADC 전체는 AVR 중에서 고유합니다. AVR Dx 시리즈에서 개선된 형태로 나타난 많은 기능들을 테스트하는 자리였던 것 같습니다. 가격은 16k 1 시리즈의 훨씬 뛰어난 주변 장치를 설명하지 않는 것으로 보입니다.
위 표에서 볼 수 있듯이 2시리즈는 업그레이드라기보다는 사이드그레이드에 가깝습니다. 그들은 훨씬 더 나은 ADC를 가지고 있고 이벤트 시스템과 CCL은 "정상"이며 더 많은 RAM을 가지고 있으며 14핀 부분은 32k 플래시와 함께 사용할 수 있습니다(3214는 분명히 계획되었지만 취소되었습니다. 제거되기 전에 잠시 동안 ATPACK에 있어야 함)
지금까지 올바른 선택이 확실하지 않은 경우 어떤 시리즈를 사용하고 싶은지에 대한 간략한 요약을 작성했습니다.
"megaavr" 하드웨어 패키지에 대한 공식 Arduino 보드 정의에서는 megaAVR 0 시리즈 부품(tinyAVR 0 시리즈 및 1 시리즈에 사용된 것과 거의 동일)의 새로운 아키텍처를 "megaavr"이라고 암시합니다. " - 공식적인 용어는 아닙니다. Microchip은 "megaAVR"이라는 용어를 사용하여 기존 스타일의 주변 장치나 최신 주변 장치 등 모든 "ATmega" 부품을 지칭합니다. 한 제품군 또는 다른 제품군의 모든 AVR 부품을 지칭하는 공식 용어는 없으며 Microchip 직원은 내부적으로 그러한 용어가 있다는 사실조차 부인했습니다. 각 세트의 부품이 서로 공통점이 많고 다른 세트와 공통점이 거의 없는 두 세트의 부품을 어떻게 제조할 수 있는지 잘 모르겠습니다. 둘 중 하나를 언급하는 문구를 만드는 사람은 아무도 없습니다.
이 문서에서는 2.0.2 이전에 Arduino 규칙을 사용했으며 그로부터 1년이 훨씬 넘었음에도 불구하고 여전히 megaAVR이라고 부르는 곳을 계속 찾고 있습니다. 이 문제가 발견되면 github 문제를 사용하여 신고해 주세요. avr
및 megaavr
이라는 용어는 여전히 내부적으로 사용됩니다(예: 라이브러리에서 특정 라이브러리가 호환되는 부분을 표시하거나 실행 대상에 따라 파일의 다른 버전을 구분하기 위해). 이는 계속될 것입니다. Arduino 팀이 Uno WiFi Rev. 2 및 Nano Every의 코어로 시작한 것과의 호환성을 위해 이를 고수해야 합니다.
어쨌든 두 그룹을 지칭하려면 몇 가지 단어가 필요하지만 Microchip은 해당 단어를 제공하지 않았습니다. 공식적인 용어가 없는 경우 2016년 이전 AVR 장치(PORTx, DDRx 등의 핀 레지스터 포함)를 " 클래식 AVR "이라고 부르고 Arduino에서 megaavr을 " 현대 AVR "이라고 부르는 장치를 언급했습니다. 또한 I/O 모듈이 클래식 AVR과 거의 비슷하지만 명령어 세트 버전이 상당히 낮고 일반적인 플래시 크기가 1k 이하인 일부 부품도 있습니다. 이들은 AVR의 AVRrc(축소 코어용) 변형을 사용하는 반면, 대부분의 클래식 AVR은 AVRe 또는 AVRe+를 사용하고 최신 AVR은 AVRxt를 사용합니다. AVRrc 부품은 이 코어에서 지원되지 않으며 이러한 매우 실망스러운 부품에 대해 논의해야 하는 불행한 경우에는 " Reduced Core AVR " 부품이라고 부르겠습니다. 그들을 위한 더 다채로운 문구. 어떠한 디자인에서도 감소된 코어 AVR을 사용하지 않는 것이 좋습니다. 그것들이 쓸모없다는 것이 아니라 단지 형편없을 뿐입니다. " 최신 AVR "(새로운 주변 장치 및 AVRxt 명령 세트를 갖춘 AVR) - Ex 시리즈, Dx 시리즈,tinyAVR 0/1/2 또는 mega0을 모든 새로운 디자인에 사용하는 것이 좋습니다.
새로운tinyAVR 2 시리즈용 데이터시트 - 데이터시트는 16,000개의 부품만 "포함"하지만 동일한 핀 수를 가진 부품 간에 기능 차이가 없다고 명확하게 명시합니다(즉, "황금" 부품은 없음). 16k/32k 1-시리즈), 핀 수가 다른 부품 사이에서만, 핀 수에 따라 결정됩니다(즉, 24핀 부품의 기능은 14핀 부품에 있습니다. 14핀에 필요한 핀이 없고 핀 없이는 사용할 수 없는 경우를 제외하고). 14, 20 및 24핀 부품은 모두 4k, 8k, 16k 및 32k 플래시로 나열됩니다. 이러한 플래시 크기 옵션에는 각각 512, 1024, 2048 및 3072바이트의 SRAM이 제공됩니다(즉, 4k 및 8k 부품은 SRAM의 두 배입니다). 4/8k 부품은 128바이트의 EEPROM을 가지며 더 큰 부품은 256바이트를 얻습니다. 14핀 부품은 SOIC 및 TSSOP로 제공되고, 20핀 부품은 (와이드) SOIC, SSOP 등으로 제공됩니다. 1616과 같은 작은 QFN(이번에는 해당 패키지에 32k 부품도 제공했지만 하나를 얻는 행운을 빕니다. 모든 곳에서 이월 주문되었습니다. 단일 점수를 얻을 수 없었습니다.) 및 동일한 VQFN의 24핀 3217.
TWI, SPI, USART0, AC0은 NVMCTRL과 마찬가지로 변경되지 않습니다(부트로더에 필요한 변경 사항은 두 번째 USART 지원과 관련해서만 변경되었습니다). 시계 옵션은 변경되지 않습니다. TCB0 및 TCB1은 Dx 시리즈 버전으로 업그레이드되었습니다. 클럭 오프 이벤트 옵션, 캐스케이드 및 OVF 및 CAPT에 대한 별도의 INTCTRL 비트(좋은 추가 기능이지만 코어 자체와 관련은 없음), 모든 부품에는 두 TCB가 모두 있습니다. 이제 2개와 1개가 아닌 4개의 CCL LUT와 2개의 시퀀서를 갖게 되며 CCL이 있는 다른 부품처럼 인터럽트를 실행할 수 있습니다(tinyAVR 0/1 시리즈와는 달리). 가장 흥미로운 기능 중 하나는 예상대로 두 번째 USART가 있다는 것입니다(귀하가 듣는 소음은 ATtiny841 및 ATtiny1634가 구석에서 흐느끼는 소리입니다). PORTMUX 레지스터는 이제 나머지 최신 AVR과 마찬가지로 이름이 지정되었지만 각 TCA WO 채널의 핀에 대한 개별 제어 기능을 잃지 않았습니다. EVSYS는 이제 작지 않은AVR-0/1 시리즈 부품에서와 같이 작동합니다(이는 환영할 만한 변화입니다. 0/1 시리즈는 특이한 제품이었고 EVSYS가 다른 방식 중 일부는 짜증났습니다. ). TCD0, AC1/2, DAC0 및 ADC1의 1 시리즈 기능은 사라졌습니다 . 대신 ADC0은 훨씬 더 화려하고 거의 알아볼 수 없으며, 실제 차동 ADC를 특징으로 하는 인수 이후 출시된 최초의 새로운 AVR입니다. (훌륭한 차등 옵션을 갖춘 믿을 수 없을 만큼 화려한 ADC를 갖고 있지만 새 제품에 비하면 완전히 구식인 불쌍한 '841의 또 다른 고통스러운 통곡을 대기열에 추가하세요.)... 내가 본 다양한 주제에 대한 게시물의 양으로 판단 나는 차동 ADC가 대부분의 희망 목록의 최상위에 있지는 않았지만 주요 칩 고객 목록의 최상위에 있었기 때문에 우리가 얻고 있는 것입니다. 그리고 Dx 시리즈의 ADC 대신 적절한 차동 ADC를 얻을 때가 가까워졌습니다. 그리고 정말 정말 환상적이에요. 아래를 참조하세요.
megaTinyCore는 AnalogRead() 구현과 오버샘플링 및 PGA를 사용하는 더욱 강력한 기능을 제공합니다(아래 아날로그 기능 섹션 참조).
아, 그리고 한 가지 더... UPDI 핀 구성에는 UPDI, I/O 또는 재설정과 같은 기존 옵션이 있고 새로운 옵션인 PA0의 UPDI와 PB4의 하드웨어 RESET 핀이 있습니다! Optiboot는 마침내 적어도 PB4가 있는 부품, 즉 14핀 부품에서는 실행 가능하고 편안한 옵션이 될 것입니다. 이것은 또한 (내 Tindie 매장 판매가 어떤 징후라면) 가장 인기 있는 종류이기도 합니다.
3시리즈 나올 것 같나요? 나는 그렇지 않습니다. DD와 EA는 분명히 그들을 뒤쫓고 있으며 TinyAVR 영역에서 전략적 위치를 차지하고 있습니다. megaAVR 0 시리즈 이후 megaAVR을 했던 것처럼 브랜드가 사라지는 것도 시간문제라고 생각합니다. 이것이 반드시 나쁜 것은 아닙니다. 모든 Dx 및 EA 시리즈 부품은 핀 매핑 및 동작이 매우 유사하며 이는 매우 좋습니다. 작은 장치는 덜 체계적이지만 더 많은 주변 장치에 핀을 배포합니다. 지침 원칙은 "주변 장치가 남지 않음"인 것 같습니다. 모든 것이 고정된 마스터 플랜을 따르는 Dx 및 EA 시리즈의 핀 매핑과 대조됩니다. 부품에는 지정된 핀이 있거나 없거나, 그렇지 않은 경우 해당 기능을 사용할 수 없습니다. 두 그룹 모두 홀리 핀아웃에 "예외"를 만들려고 생각하는 엔지니어들을 채찍질하는 일을 하는 제품 관리자가 있는 것 같습니다. 클래식tinyAVR에서)
tinyAVR의 핀 번호 지정이 이상하고 Microchip의 잘못입니다. 포트 내의 핀 번호가 이상하게 지정되었습니다. PA0이 UPDI이고 일반적으로 사용할 수 없다는 점을 제외하면 순서대로 시작되고 PORTB의 핀 번호가 역순으로 지정됩니다. 그런 다음 PORTC는 PORTA와 동일한 시계 반대 방향 번호로 돌아갑니다. 나에게 휴식을 주세요! 전통적으로 첫 번째 핀에 핀 0을 사용하고 칩을 프로그래밍하기 어렵게 만드는 퓨즈를 설정하지 않고는 사용할 수 없는 핀을 마지막 번호로 지정했습니다. Arduino 코드의 기록되지 않은 규칙을 깨지 않고 A0부터 시작하여 시계 반대 방향으로 번호를 매길 수 있었으면 좋았을 것입니다. 누군가는 내가 핀 매핑에 대해 잘못된 결정을 내렸다고 주장할 수 있습니다. 아마도 PA0(퓨즈 세트가 아니면 사용할 수 없으며 이 경우 칩을 프로그래밍하기 어렵습니다)을 핀 0으로 시작한 다음 시계 반대 방향으로 핀 번호를 매겼어야 했습니다. 그러나 PORTB 핀 번호를 거꾸로 매기지 않는 한 모든 포트가 순서대로 되어 있으면 할 수 있는 그런 종류의 트릭을 여전히 수행할 수 없습니다. 모든 핀에 순서대로 번호가 매겨져야 한다는 기대를 없앨 수 있다면(그리고 PIN_Pxn 표기법만 사용하면) 상당한 비용 절감을 실현할 수 있습니다.
나는 2~4년 안에 AVR DA, DB, DD가 나올 것으로 예상합니다. DU(USB 1개), EA 및 D/E/F 시리즈 부품(8개(또는 최소 14개)) 및 128k 플래시와 새로운 ADC를 갖춘 64핀 부품. 그리고 ATtiny 브랜드 외에는 아무것도 없습니다. 아마도 남은 가장 큰 질문은 ATmega2560을 총 100개의 핀(아마도 80-88개는 I/O)과 최대 256k의 플래시 옵션을 갖춘 최신 AVR로 교체할 것인지 여부입니다. 이는 세 가지 문제를 제시합니다. 첫째, 56개의 I/O 핀을 지나면 더 이상 VPORT 레지스터가 남아 있지 않습니다. 낮은 I/O 공간은 28개의 VPORT와 4개의 GPIOR로 가득 차 있습니다. 4개의 추가 포트를 어떻게 처리합니까? (2560에서는 더 느리게 액세스되고 단일 사이클 액세스가 없는 2등급 포트였습니다. 여기에 부록 A에서 사용할 수 있는 opcode가 얼마나 적은지에 대한 타당성에 대해 몇 가지 생각이 있습니다. 두 번째, 위반 플래시의 128k 장벽을 사용하려면 17비트 프로그램 카운터로 이동해야 합니다. 모든 점프에는 추가 사이클이 필요하고 모든 리턴에는 추가 사이클이 필요합니다. 마지막으로 AVR DB 램 비율이 유지되면 이 "D 256K의 플래시 에서 32k의 RAM이 있습니다. , 동일한 주소 공간에있는 SFR을위한 공간이 없습니다.
Tindie 상점에서 레귤레이터, Updi 헤더 및 시리얼 헤더와 베어 보드와 함께 브레이크 아웃 보드를 판매합니다. 내 매장에서 구매하면 핵심에 대한 추가 개발을 지원하며 Arduino와 함께 흥미 진진한 새로운 부품을 사용하기 좋은 방법입니다. 현재 Attiny1624 보드를 사용할 수 있지만, 새로 개정 된 PCB 설계가 보드 하우스에서 돌아와서 Alt-Reset 핀에서 Autoreset을 활성화 할 때까지 20 핀 부품은 조립 보드로 판매되지 않습니다. 14 핀 보드 개정이 다가오고 있습니다. 대체로 화장품이라고 생각했습니다. 마지막 여러 배치에서 가독성이 악화되는 것처럼 보였으므로 노란색 솔더 마스크는 가야했습니다. 새로운 보드는 또한 현재 0.7 "간격 대신 핀 행 사이에 0.6"간격을 표준화하므로 예를 들어 가공 된 핀 헤더를 넣고 와이드 딥 소켓에 연결하거나 꽂을 수 있습니다. 해당 행 간격에 최적화 된 프로토 타이핑 보드와 함께 사용하십시오. 조립 된 0 시리즈 보드가 중단되고 있으며 일단 매진되면 재입고되지 않습니다. 32K를 사용할 수 있으면 16K 2 시리즈 부품에 대해서도 마찬가지입니다.
2 시리즈 및 EA 시리즈의 ADC는 현대 AVR 시대에 AVR에 출시 된 최고의 ADC입니다. 그 두 가지 외에. 가장 가까운 비교는 최고 수준의 기능 (T841, MEGA2560 및 (놀랍게도) T861이 가장 강력한 경쟁자)를 갖춘 차등 ADC를 얻은 클래식 AVR입니다. 클래식 AVR 시절에 일부 부품이 쏟아진 미친 100x 및 200x 게인은 얻을 수 없지만, 증폭 된 것이 단순히 소음이라는 것이 얼마나 명확하지 않았습니다 (차별적 ADC로 연주 한 경험이 제한된 경험을 고려할 때 나는 "아마도 대부분의 것, 그리고 당신이 내가 하드웨어를 디자인하게한다면, 나는 아날로그를 모른다!")라고 말할 것입니다. 이 새로운 ADC는 진정한 차등 기능 (DA 및 DB 시리즈와 달리)과 현재까지 다른 현대 AVR에서 사용할 수있는 모든 것보다 머리와 어깨가 올라가는 능력이 높습니다. 프로그래밍 가능한 게인 증폭기는 새로운 기능이며, 사람들이 어떤 종류의 아날로그 측정의 위업이이를 벗어날 수 있는지 여부는 여전히 남아 있습니다. 확실히 유망한 것처럼 보입니다. PGA를 사용하지 않는 1x 게인에서 PGA 사용과 PGA를 사용하지 않는 것의 차이점과 그렇게하는 이점과 단점의 차이점을 이해하는 것이 특히 흥미로울 것입니다. (마이크로 칩은 일반적인 경우 작업에 대한 올바른 ADC 구성을 선택하는 방법에 대해 논의한 문서에 의해 잘 보증 될 것입니다. 나는 Microchip과 내가 말한 사람과 우선 순위가 높았다는 점을 제기했습니다. 상황은 크게 개선되었지만, DOC 그룹은 여전히 어떤 종류의 구체적인 권장 사항을 제시하지 말라고 지시 받았다 .
오버 샘플링 및 소멸을 목적으로 1024- 샘플 축적을 추가하는 것은 환영의 추가이지만 오프셋 오류의 크기와 관련성을 과소 평가하는 것도 환영합니다. (1024 개의 샘플을 가져 가면 (모두 오프셋 오류가 주어진), 17 비트 ADC 측정을 생성하기 위해 합계를 소멸시킵니다. 단일 측정에서 5 개의 LSB 였는데, 1024 개의 샘플을 축적하고 Decimate에서 오프셋 오류가 160이면 그것을보고 신호가 소음이 아니라고 생각하는 것이 매우 쉽습니다.
새로운 ADC가 장착 된 최초의 풀 크기 (비 타인) 칩은 최대 64k 플래시의 28-48 핀 패키지로 제공됩니다. 2 시리즈에서 EA 시리즈로 어떤 것이 바뀌는 지에 대한 일반적인 추측이있었습니다. 대답은 혼란스러운 손잡이 중 하나가 제거되었고, 누적 된 측정을위한 자동 표시가 자르는 것 같습니다 (
타입 D 타이머는 기본 PWM 핀 설정의 20/24 핀 1 시리즈 부품에서 PWM에만 사용됩니다. 작은 부분에서는 총 PWM 핀 수를 늘릴 수 없습니다. WOC 및 WOD 핀 (각각 PC0 및 PC1)만이 TCA 중심 PWM을 아직 가지고 있지 않습니다. 따라서 AlogWrite ()는 분할 모드 (16 비트 PWM)를 끄거나 유형 D 타이머 (주파수 조정과 같은)를 사용하여 향상시켜 활성화 된 기능을 지원하지 않으므로 더 나빠질 수 있습니다. 두 가지 유형의 타이머 대신 PWM을 켜거나 끌 수있는 루틴을 저장하려면 추가 공간이 필요합니다. 이것은 작은 플래시 부품에서 무시할 수 없습니다. 600 바이트의 순서입니다. TCD PWM 핀에서 호출 된 경우 DigitalWrite ()의 경우 150, AlogWrite ()의 경우 450. Optimizer는이 경우 해당 기능의 일부를 최적화 할 수 있어야 합니다 .이 기능에 사용 된 핀에는 TCD PWM 핀이 포함되어 있지 않기 때문입니다. 참고 최적화는 독립적으로 고려할 것입니다.
거의 모든 AVR과 달리 (아마도 3 가지 예를 생각할 수 있으며 그 중 하나만이 "Unbonus"가 아닌 "보너스"입니다), 가족 내의 플래시 크기를 기반으로 한 추가 "보너스"기능이 있습니다. . 16K 및 32K 버전 (전용)에는 몇 가지 추가 기능이 있습니다 (가격은 가격에 고려되지 않은 것으로 보이지 않음) - 모두 16K 또는 32K이든 2K의 RAM을 가지고 있으며 3 개의 아날로그 비교기 (창 모드 포함)가 있습니다. 옵션), 두 번째 - 필사적으로 필요한 - 타입 B 타이머 - 그리고 두 번째 ADC가있는 모든 것 중에서 가장 이상합니다.
클래식 AVR과 달리이 부분에서 플래시는 메모리의 나머지 부분과 동일한 주소 공간에 매핑됩니다 . 즉, pgm_read_*_near()
플래시에서 직접 읽을 필요가 없음을 의미합니다. 이로 인해 컴파일러는 const
으로 선언 된 변수를 Progmem에 자동으로 넣고 적절하게 액세스합니다. 더 이상 Progmem으로 명시 적으로 선언 할 필요가 없습니다. 여기에는 인용 된 문자열 리터럴이 포함되므로 F () 매크로는 더 이상 필요하지 않지만 일부 타사 라이브러리와의 호환성을 유지하기 위해 F ()는 여전히 인수 대변인이라고 선언합니다.
그러나 가변 대중을 명시 적으로 선언하는 경우 클래식 AVR과 마찬가지로 pgm_read
기능을 사용해야합니다. 메모리 매핑 플래시가있는 부품에서 변수가 선언되면 포인터는 오프셋입니다 (주소는 주소 공간의 시작이 아닌 플래시 시작과 관련이 있습니다). pgm_read_*_near()
매크로를 사용할 때 동일한 오프셋이 적용됩니다. pgm_read_*_near
기능을 사용하여 물건을 선언하고 액세스하는 것은 제대로 작동하지만 느리게 작동하지만 소량의 플래시를 낭비합니다 (단순히 변수를 선언하는 것과 비교할 때). 2.1.0 이상의 일정한 문자열을 갖는 f () 매크로도 마찬가지입니다 (2.1.0 이전의 기간 동안 F()
아무것도하지 않았지만 제 3 자 라이브러리에 문제가 발생했습니다). 저자는 문제가 도서관이 아닌 핵심에 관한 것이며, 내 선택은 효율성을 낮추거나 사용자가 인기있는 라이브러리에 대한 액세스를 거부하는 것이 었습니다). F()
매크로를 사용하면 일부 제 3 자 라이브러리와의 호환성 ( F()
의 반환을 강요 한 특정 사례는 그런 종류가 아니 었습니다. 우리는 실제로 내가 알고있는 것들을 f ()-aS-Noop 코드, 결과적으로 몇 바이트를 덜 플래시를 차지했습니다).
자동차 버전도 작동해야합니다. 이 부분에서 항상 16 MHz 유래 클럭 속도를 선택해야합니다. 20MHz 작동을 지원하지 않으며 조정 된 시계 옵션을 사용해서는 안됩니다.
이제 우리는 Megatinycore에 의해이 모든 것이 어떻게 노출되는지에 대해 이야기 할 수있는 좋은 부분에 대해 이야기합니다. 최상의 결과를 얻기 위해 핀을 참조하는 방법에 대한 문제로 시작한 다음 다양한 서브 시스템에 대한 자세한 내용을 가진 문서에 대한 일련의 링크로 끝나기 전에 핵심 기능, 메뉴 옵션으로 이동합니다.
특히 비표준 하드웨어에서 Analogread () 및 DigitalRead ()에 대한 핀을 참조하는 방법에 대한 간단한 문제는 Arduino 사용자들 사이에서 지속적인 혼란의 원인이되었습니다. 비난의 대부분은 핀을 언급하는 방법에 관한 Arduino 팀 (및 그들 앞에 배선의 저자)이 내린 결정에 달려 있다고 생각합니다. 일부 핀을 "아날로그 핀"으로 지정하면 사람들은 해당 핀이 디지털 작업에 사용할 수 없다고 생각하게됩니다 (PWM을 출력 할 수있는 핀이있는 방법과 같은 "아날로그 입력이있는 핀")로 생각됩니다. 핀이 전통적으로 혁신되었다는 사실은 물을 더욱 진흙 투성이시켰다. 비표준 클래식 AVR 부품의 경우, 부품을 "UNO와 비슷하게"또는 다른 목적으로 만들기 위해 수년에 걸쳐 다양한 저자가 생성 한 다수의 양립 할 수없는 "핀 매핑"에 의해 문제가 종종 더 나빠집니다 (AttinyCore는 특별합니다. 이런 식으로 엉망으로, 일부 부품은 완전히 다른 핀 매핑을 갖는 부분으로, 적어도 하나의 경우, 대체 매핑 중 하나는 아날로그 핀을 디지털로 변환하기 위해 추가 조회 테이블이 부족하지 않아야합니다. 핀).
이 코어는 Arduino 핀 번호를 할당하기위한 간단한 체계를 사용합니다. 핀은 핀 0으로 VCC에 가장 가까운 I/O 핀에서 시작하여 시계 반대 방향으로 진행하여 (대부분) 사용 가능한 Updi 핀을 건너 뜁니다. 그런 다음 Updi PIN은 마지막 핀 번호에 할당됩니다 (위에서 언급 한 바와 같이 GPIO로 설정되지 않더라도 Updi PIN (아날로그 및 디지털 읽기 작업)을 읽을 수 있음). 우리는 이것을 최후의 수단으로 추천합니다. updi 핀에는 항상 GPIO 핀으로 설정되지 않을 때 풀업이 활성화되어 있으며 Updi Enable 시퀀스와 비슷하게 보이는 신호는 바람직하지 않은 작동을 유발합니다.
PIN 아이덴티티에 대한 모든 혼란을 방지하고 모호성을 제거하기 위해 PIN_PXN 표기법을 사용하여 인쇄 된 핀의 숫자 또는 이름이 다른 개발 보드를 사용하지 않는 한 핀을 참조하는 것이 좋습니다. 이렇게하면 코드의 다른 유사한 하드웨어로의 이식성을 최대화하고 관련 데이터 시트에서 사용중인 핀에 대한 정보를보다 쉽게 찾아 볼 수 있습니다.
이것은 pins #defines
를 참조하는 권장 방법입니다 . x
PIN_Pxn
a, b 또는 c이며 n
은 숫자 0-7입니다 (아래 설명 된 pin_an 정의와 혼동되지 않음). 이들은 문제의 핀의 디지털 핀 번호로 해결됩니다. 다른 코드 경로를 거치지 않습니다. 그러나 대부분의 주변 장치와 마찬가지로 특정 핀 (포트 별)과 연결된 주변 장치와 함께 제품 라인에서 작동하는 코드를 작성하는 특정 유틸리티가 있습니다. 문서의 여러 데모 코드가이를 활용합니다. 직접 포트 조작도 가능하며 실제로 몇 가지 강력한 추가 옵션을 사용할 수 있습니다. 직접 포트 조작을 참조하십시오.
PIN_Pxn
Pxn
이 아니라 PIN_xn
아닙니다.
단일 번호가 문서 또는 코드에서 핀을 참조하는 데 사용되는 경우 항상 "Arduino 핀 번호"입니다. 이들은 핀 아웃 차트에서 주황색 (Analogread ()가 가능한 핀) 및 파란색 (핀의 경우)으로 표시된 핀 번호입니다. 핀을 참조하는 다른 모든 방법은 해당 Arduino 핀 번호로 #definsed됩니다.
코어는 또한 An
및 PIN_An
상수를 제공합니다 (여기서 n
은 0에서 11까지 숫자). 공식 코어와 마찬가지로 PIN_An
아날로그 채널 N과 공유되는 핀의 디지털 핀 번호로 정의됩니다. 이는 ADC0 채널 번호를 나타냅니다. 이 이름 지정 시스템은 많은 클래식 AVR 코어에서 사용 된 것과 유사 하지만 여기서는 해당 Arduino 핀 번호로 정의되어 있습니다 . 디지털 핀에서 아날로그 채널 번호를 가져와야하는 경우 digitalPinToAnalogInput(pin)
매크로를 사용하지만 고급 ADC 라이브러리를 작성하는 경우에만 필요합니다.
이 부분 (음, 1/2 시리즈는 최소한 0 시리즈는 예산을 축소하지 못하고 몇 센트 더 저렴한 예산 옵션으로 예산 옵션을 의미했습니다). 그리고 강력한 주변 장치; 최고급은 작은 가격으로 클래식 메가 바르 부품보다 동등하거나 더 나은 것입니다. Megatinycore의 설계의 지침 원칙 중 하나는 다른 코어와 마찬가지로 지원되는 부품이 최대한의 잠재력에 도달하거나 Arduino의 한계 내에서 가능한 한 가까운 곳에 도달 할 수 있도록하는 것입니다. 이 (매우 큰) 섹션은 이러한 부분의 특징과 MegatinyCore에 의해 노출되는 방법과 코어 자체의 기능을 다룹니다. 이 (매우 큰) 섹션은 각 기능 영역을 다루려고 시도합니다. 칩 기능을 사용하고 문제가있는 경우 작업중인 기능을 찾으십시오!
내부 20MHz (4.5V -5.5V- 5V 시스템의 일반)
16MHz 내부 (4.5V -5.5V- 5V 시스템의 일반)
10MHz 내부 (2.7V -5.5V- 3.3V 시스템의 경우 일반)
8MHz 내부 (2.7V -5.5V- 3.3V 시스템의 경우 일반)
5MHz 내부 (1.8V-5.5V)
4MHz 내부 (1.8V-5.5V)
2MHz 내부 (1.8V-5.5V, 제대로 테스트되지 않음)
1MHz 내부 (1.8V-5.5V, 제대로 테스트되지 않음)
20MHz 외부 시계 (4.5V-5.5V, 제대로 테스트되지 않음)
16 MHz 외부 시계 (4.5V-5.5V, 제대로 테스트되지 않음)
12MHz 외부 시계 (2.7V-5.5V, 제대로 테스트되지 않음)
10MHz 외부 시계 (2.7V-5.5V, 제대로 테스트되지 않음)
8MHz 외부 시계 (2.7V-5.5V, 제대로 테스트되지 않음)
6 MHz 내부 (조정, 테스트되지 않은)
5MHz 내부 (조정, 제대로 테스트되지 않음)
4MHz 내부 (조정, 제대로 테스트되지 않음)
2MHz 내부 (조정, 제대로 테스트되지 않음)
1MHz 내부 (조정, 제대로 테스트되지 않음))
7 MHz 내부 (조정, 마조히스트 용, 테스트되지 않은)
8MHz 내부 (조정, 제대로 테스트되지 않음)
10MHz 내부 (조정, 제대로 테스트되지 않음)
12 MHz 내부 (조정, 테스트되지 않은)
14 MHz 내부 (조정, 마조히스트 용, 테스트되지 않은)
16 MHz 내부 (조정)
20MHz 내부 (조정)
24 MHz 내부 (조정, 오버 클럭, 제대로 테스트되지 않음)
25 MHz 내부 (조정, 오버 클럭, 제대로 테스트되지 않음)
30MHz 내부 (조정, 오버 클럭, 제대로 테스트되지 않은) -0/1- 시리즈는 "20MHz"OSCCFG 퓨즈 설정이 필요합니다. 2 시리즈 부품은 "16 MHz"를 선택한 상태에서 30에 도달 할 수 있거나 도달 할 수 없습니다.
32 MHz 내부 (조정, 오버 클럭, 제대로 테스트되지 않은) - 2 시리즈 만, 매우 낙관적 인 오버 클럭킹은 불안정 할 수 있습니다.
24MHz 외부 시계 (오버 클럭, 제대로 테스트되지 않음)
25 MHz 외부 클럭 (오버 클럭, 제대로 테스트되지 않음)
30MHz 외부 시계 (오버 클럭, 제대로 테스트되지 않음)
32MHz 외부 시계 (오버 클럭, 제대로 테스트되지 않음)
우리는 오버 클럭 된 부품의 전압 또는 온도 범위에 대한 주장을하지 않습니다. 마일리지는 변할 것으로 예상되지만 일반적으로 F 사양 대 N 또는 U 사양 부분에서는 더 나을 것으로 예상됩니다.
중요 - 조정 된 옵션을 선택하기 전에 튜닝에 대해 읽으십시오!
이 클럭 속도에 대한 자세한 내용은 Clock Reference 에서 확인할 수 있습니다.
표시된 전압은 제조업체 사양에 따라 작동하는 전압입니다 (. 작동 온도 범위의 범위를 밀어 내지 않는 한,이 부품은 일반적으로 훨씬 더 잘 작동합니다 (2 시리즈는 일반적으로 32MHz 및 5V @ 실내 온도에서도 내부 발진기에서도 작동합니다. 0 /1- 시리즈는 전원 공급 장치가 안정적인 5.0-5.5V라면 외부 시계와 함께 32MHz에서 일반적으로 작동합니다).
Sketch를 Updi를 통해 업로드 할 때 OSCCFG
퓨즈를 설정하는 데 필요한 조치가 필요하지 않습니다. Optiboot를 통해 업로드 할 때 퓨즈를 변경할 수 없으므로 부트 로더가 소진 될 때 선택한 것은 무엇이든 사용되는 것이며, "Burn Bootloader"또는 Updi를 통해 스케치를 업로드하면 변경됩니다.
모든 내부 발진기 클럭 속도 옵션 "튜닝 된"옵션이 선택되지 않는 한 공장 기본 교정을 사용합니다.이 경우 교정은 튜닝 참조 에 문서화 된대로 조정됩니다. 이것은 20MHz에 융합 된 Optiboot 칩에서 16MHz 작동을 수행하는 데 사용될 수 있으며 그 반대도 마찬가지입니다.
제조업체의 속도 등급에 대한 자세한 내용은 속도 등급 참조를 참조하십시오. 그것들은 작동하도록 보장되는 전압 및 클럭 속도입니다. 이 부분은 예상치 못한 일부 설명의 결함이 사람이나 재산 (자동차, 산업 장비, 비행기, 원자로 - 원자로 - 부품이 오작동 한 경우 죽을 수있는 장소)에 위험을 초래할 수있는 응용 분야에서 사용하기에 적합합니다. 반대의 이유 때문에 유사한 신뢰성 요구 사항이있는 군사 신청도 믿습니다. 전형적인 취미 사용자는 안정성 문제의 잠재력에 대해 훨씬 편안 할 것입니다. 충돌은 성가신 것 이상이며, 확장 온도 범위 부품의 극한이 우리가 필요로하는 것보다 훨씬 훨씬 뛰어납니다. 보드에 방수 코팅이 있었다고 가정하면 N 등급 부품은 끓는 물 냄비에서 속도 등급 당 작동 할 수 있어야합니다. 그리고 그것은 단지 N-SPEC입니다. F-SPEC는 125에 좋을 것입니다!
확장 온도 부품이 오버 클럭이 더 잘 맞는다는 것이 확립되었습니다 . 125C에서 20MHz에서 실행되도록 사양되는 부분은 실온에서 32MHz에서 실온에서 실행할 가능성이 더 높아질 것으로 예상됩니다.
버전 2.4.0 현재, 우리는 이제 "공식 마이크로 칩 보드"옵션을 제공합니다. 이것은 A7 대신 해당 보드에 LED가있는 핀으로 LED_BUILTIN
정의하는 것 외에는 특별한 일이 아닙니다. Macro PIN_BUTTON_BUILTIN
사용자 버튼을 사용하여 핀으로 정의하고 비와 "업로드"를 작성합니다. -optiboot 버전은 항상 온보드 프로그래머/디버거를 사용합니다. 도구 -> 프로그래머는 "Burn Bootloader"및 "Programmer를 사용하여 업로드"에만 사용됩니다. Attiny416 Xplained Nano의 경우 직렬 포트의 대체 핀을 사용하는 부트 로더 버전을 선택합니다. Serial.swap (1)를 완료 한 것처럼 USART0의 대체 핀을 자동으로 사용하지 않습니다. - 직렬 핀의 기본 교환을 지원할 수있는 기능은 향후 업데이트로 나옵니다. 핀 스웨이 메커니즘의 기본 기계의 다른 변화와 함께 플래시 사용을 줄일 수 있습니다.
위에서 언급 한 바와 같이, 이들은 32 비트 Linux 플랫폼에서 올바르게 작동하지 않을 수 있습니다. 이것은 내가 통제 할 수 없습니다. 나는 avrdude binaries를 구축하지 않습니다 . 나는 이미 너무 많다.
blink()
더 많은 플래시를 취하는 이유는 무엇입니까?둘 다 동일한 Attiny817을 가지고 있습니다! 어떻게 다를 수 있습니까?
마찬가지로 Xplained Mini에서 사용되는 PIN_PB4
: PC0과 달리 PIN_PC0
사용하도록 변경하면 깜박임이 더 많은 플래시를 취할 수 있습니다. Xplained Pro에서 사용하는 PB4는 그렇지 않습니다. 그것은 DigitalWrite ()가 사용되는 유일한 핀이므로 컴파일러는 PWM을 지원하는 핀에서 PWM 출력을 끄는 기능을 포함하여 해당 핀의 DigitalWrite ()에 필요하지 않은 것을 자유롭게 최적화 할 수 있습니다. . DigitalWrite ()가 두 장치에서 PWM을 지원하는 핀에서 (플래시 사용 결과가 높음) 또는 DigitalWrite ()가 DigitalWriteFast ()로 대체되어 플래시를 사용하는 경우 (그러나 원한다고 가정하면 DigitalWrite ()가 DigitalWrite ()로 대체되는 경우 차이가 사라집니다. 'pwm을 출력하는 핀에서 부르십시오).
Updi 프로그래머가 코드를 업로드하는 데 사용될 때마다, "안전하게"설정할 수있는 모든 퓨즈 (보드를 벽돌로 쓸 위험없이, HV 프로그래머에 액세스 할 수없는 경우 보드를 벽돌화). 내장 구성 옵션이 설정됩니다. 따라서 언급 한 경우를 제외하고 동작은 항상 선택된 도구 메뉴와 일치합니다. 요약하면, 이것들은 다음과 같이 처리됩니다.
WDTCFG will not be changed - it is not configured by megaTinyCore except to reset it to the factory default when doing "burn bootloader".
BODCFG will not be changed - not safe, you could set the BOD level to 4.3 on a 3.3v system, and then it would need to get > 4.3v applied to reprogram it. If it is on the same circuit board as parts that would be damaged, this is a difficult situation to recover from.
OSCCFG will be set
TCD0CFG will not be changed - it is not configured by megaTinyCore except to reset it to the factory default when doing "burn bootloader".
SYSCFG0 will not be changed - not safe
SYSCFG1 will be set
APPEND will not be changed - it is not configured by megaTinyCore. There is insufficient demand to justify the development effort.to make use of this as DxCore does
BOOTEND will be set
LOCKBIT will not be changed - it is not configured by megaTinyCore; supporting the lockbits presents several additional complications, and commercial users with need of this facility are unlikely to be using the Arduino IDE to program production units.
BODCFG
안전하지 않습니다. 보드보다 높은 전압으로 설정하고 더 높은 작동 전압을 공급할 때까지 보드를 "벽돌"할 수있게되므로 보드를 "브릭"할 수 있기 때문입니다. 이 전압을 견딜 수없는 장치와 동일한 PCB에 납땜 된 경우 특히 어색 할 수 있습니다.
SYSCFG0
RSTPINCFG
사는 곳이기 때문에 안전하지 않습니다. 이를 변경하면 HV Updi 프로그래밍을 통해 보드를 획득 할 수 없게 만들 수 있으며 모든 사람이 HV Updi 프로그래머가있는 것은 아닙니다. 미래의 경우/프로그래머로 선택할 수있는 HV Updi 기능을 보장하는 프로그래머가 (즉, HV 프로그래머와 만 작동하는 도구 -> 프로그래머 옵션을 만들 수있게됩니다)이 퓨즈를 사용할 때 자동으로 설정됩니다. 그 프로그래머.
결과적 으로 2.2.0 이상으로, Updi를 사용하여 업로드 할 때 16MHz 유래와 20MHz 유래 속도를 전환하기 위해 더 이상 '부트 로더를 굽지 않아도됩니다.
이 코어는 항상 링크 시간 최적화를 사용하여 플래시 사용량을 줄입니다. TinyAVR 0/1/2 시리즈 부품을 지원하는 모든 버전의 컴파일러도 LTO를 지원하므로 AttinyCore와 마찬가지로 선택 사항을 선택할 필요가 없습니다. 이것은 일반적으로 5-20%의 순서로 도입 될 때 코드 화가 크게 향상되었습니다!
이 부분에는 모두 많은 아날로그 입력이 있습니다. DA와 DB- 시리즈에는 최대 22 개의 아날로그 입력이 있으며 DD 시리즈에는 HF 크리스탈을 구동하는 데 사용되지 않는 모든 핀에 아날로그 입력이 있습니다 (PORTC의 핀은 있지만 MVIO가 꺼질 때만 지원됩니다). 일반적인 AVR에서와 같이 analogRead()
로 읽을 수 있으며, 우리는 기본적으로 10 비트 해상도입니다. analogReadResolution()
사용하여 전체 12 비트로 변경하고 향상된 Analogread 함수를 사용하여 해상도를 높이기 위해 자동으로 샘플링되고 소멸 된 판독 값을 가져 와서 차동 측정을 수행 할 수 있습니다. 1.024, 2.048, 4.096 및 2.5V에는 4 개의 내부 전압 참조와 외부 참조 전압 (및 VDD)에 대한 지원이 있습니다. ADC 판독 값은 클래식 AVR보다 3 배 빠르게 촬영되며, 측정중인 내 임피던스가 낮 으면 속도가 다시 두 배가 될 수 있거나 매우 높은 임피던스 소스를 읽는 데 샘플링 시간을 크게 연장 할 수 있습니다. 이것은 아날로그 참조에 자세히 설명되어 있습니다.
DX-Series 부품에는 실제 아날로그 전압을 생성 할 수있는 10 비트 DAC가 있습니다 (이것은 낮은 전류를 제공하며 전압 기준 또는 제어 전압으로 만 사용할 수 있습니다.