我們現在有一個 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 資料夾中手動安裝 core 時,手動安裝 megaTinyCore 會導致 IDE V1.8.14 由於此錯誤而崩潰。 1.8.14及更高版本的使用者必須使用megaTinyCore 2.6.0版本。
我在速賣通買了很多電子產品。對於中國公司製造的產品來說,這是一個很好的市場,而且大部分都是通用的,包括大量西方國家的個人無法以任何其他方式獲得的組件(例如,最小訂單是捲軸或類似的東西- 如果你甚至可以找到一個)與無名中國晶片製造商合作的組件供應商)。對於西方主要製造商的最新半導體產品線來說,這並不是一個好地方,特別是在上述晶片歷史性短缺的情況下。現代 AVR 設備在透過這些管道可用時,經常被報告為假冒或有缺陷(例如 ATtiny412 認為自己是 416,可能無法正確執行開機重設)。就這一點而言,您可能不想在速賣通上購買任何 AVR 微控制器……如果您避免使用第三方LGT8 晶片並留意使用ATmega168p 的主機板,那麼組裝板(如Arduino Nano 克隆版)通常可以工作。關於這些假晶片的來源有很多有趣的理論,而 Microchip 在這個問題上完全保持沉默。
本文檔最好在線查看(而不是在您喜歡的文本編輯器中打開 Markdown 文件),以便可以單擊鏈接並顯示內聯圖像,並且可能最重要的是,有時可以使表格正確呈現。同樣,這個[文件可以在 github 上找到](https://github.com/SpenceKonde/megaTinyCore)(https://github.com/SpenceKonde/megaTinyCore)
舊版無法正確處理工具 -> 程式設計師選單中的程式設計師,隨著安裝的核心數量的增加,使用者體驗會迅速下降。他們不合適。從 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 之前,我們使用Arduino7 版本的avr-gcc(gcc 7.3.0 和avrlibc 3.6.1)以及截至2020 年6 月的最新ATpack。鏈,其中已更新所有新支援部件的 ATpack。 2.2.7 使用Azduino3,2.3.0+ 使用Azduino4,從2.6.0 開始,我們使用Azduino5(儘管它對我們沒有任何好處,除了節省四分之一GB 的HDD 空間和40mb 的下載頻寬(如果同時安裝) megaTinyCore 和 DxCore 透過董事會經理。
手動安裝更加複雜 - 特別是如果您想要支援 2 系列;有關詳細信息,請參閱安裝指南。
適用於 tinyAVR 0 系列、1 系列和現在的 2 系列的 Arduino 核心。與「經典」tinyAVR 部件(由 ATTinyCore 支援)相比,這些部件具有改進的架構,具有改進的周邊和改進的某些指令的執行時間(這些部件在兩個方面與高級 AVR Dx 系列相似,以及megaAVR 0 系列晶片(如官方Nano Every 和Uno Wifi Rev. 2 上使用的ATmega4809(儘管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 價格”)。所有這些部件的額定運行頻率為 16 MHz 或 20 MHz(4.5-5.5v),無需外部晶體,並且內部振盪器對於 UART 通訊來說足夠準確。
這些使用 UPDI 編程,而不是像經典 ATtiny 元件那樣的傳統 ISP。請參閱下文以了解更多資訊。獲得 UPDI 編程器很簡單 - 您可以使用基於 328p 的經典 Arduino 作為使用 jtag2updi 的編程器 - 或者為了使用更便宜的硬體獲得更好的結果,您可以使用任何 USB 串行適配器和電阻器(最好是二極體),使用隨附的SerialUPDI工具,或者您可以將AVRdude 與Microchip 編程器之一(開發板上基於mEDBG/nEDBG/EDBG 的編程器、Atmel-ICE 或SNAP)或任何模擬其中之一的UPDI 編程工具(據我所知)一起使用,所有這些都支持 - 如果有一個 avrdude 支持而我的核心不支持,請打開一個問題讓我知道! )。
這些元件支援串行引導程式Optiboot_x(基於與經典Arduino Uno 引導程式相同的程式碼庫,儘管經過了很大改動)(0/1 系列支援目前已上線,2 系列預計在5 月第一周提供) ;對新部件的調整是微不足道的),允許它們透過傳統的串行端口進行編程。有關此內容以及相關選項的更多信息,請參閱下面的 Optiboot 部分。安裝引導程式確實需要 UPDI 編程器。我在 Tindie 上銷售的組裝分線板可以預先引導加載(它們是根據需要引導加載的)。話雖這麼說, 0/1 系列部件以及 14 引腳 2 系列部件的 Optiboot 的用戶體驗有點令人失望,因為它們缺少可與通常的自動重置電路一起使用的硬體重置引腳作為串行端口打開時自動重置到引導程式。您需要完全停用 UPDI 編程(如果在初始引導加載後需要更改保險絲設定或引導程序,則需要 HV 編程器)或保持 UPDI 啟用,但在通電後 8 秒內開始任何上傳。 20 引腳和 24 引腳 2 系列零件支援“備用重置引腳”,使它們的行為更像傳統的 Arduino。
UPDI 編程接口是用於編程(和調試 -通用編程和調試接口)的單線接口,用於 tinyAVR 0/1/2 系列以及所有其他現代 AVR 微控制器。雖然人們總是可以從 Microchip 購買一款專用的 UPDI 編程器,但當您使用 Arduino IDE 而不是 Microchip 的(極其複雜的)IDE 時,不建議這樣做。關於 Microchip 官方程式設計師在 Linux 上出現問題的廣泛報導。有兩種非常低成本的替代方法來創建 UPDI 編程器,Arduino 社群在這兩種方法上比官方程式設計器擁有更多的經驗。
在 megaTinyCore 出現之前,有一個名為 pyupdi 的工具 - 一個簡單的 Python 程序,用於使用通過添加單個電阻修改的串行適配器上傳到配備 UPDI 的微控制器。但 pyupdi 無法在 Arduino IDE 中輕鬆使用,因此這不是一個選項。從 2.2.0 開始,megaTinyCore 引入了可移植的 Python 實現,這打開了許多大門;最初我們計劃改編 pyupdi,但在其作者和幾位 Microchip 員工的敦促下,我們將此功能基於 pymcuprog,這是一個「更強大」的工具,由 Microchip 開發和維護,其中包括相同的串行端口上傳功能,僅沒有效能優化。如果手動安裝,您必須新增適合您的作業系統的 Python 套件才能使用此上傳方法(系統 Python 安裝是不夠的,也不是必要的)。
有關接線的信息,請閱讀SerialUPDI 文件。
從 2.3.2 開始,隨著性能的顯著改進,以及使用二極管代替電阻器的接線方案的可靠性得到驗證,並且考慮到 jtag2updi 固件的不穩定,現在這是推薦的編程方法。從這個版本開始,編程速度提高了 20 倍,現在遠遠超過了 jtag2updi 的速度(通過 jtag2updi 進行編程的速度大致與通過“SLOW”速度選項上的 SerialUPDI 進行編程相當,57600波特率;普通230400 波特版本的程式大約比SLOW 版本或jtag2updi 快三倍,而「TURBO」選項(以460800 波特運行,上傳速度比普通版本提高約50%。TURBO 速度版本應僅為與以4.5v 或更高電壓運行的設備一起使用,因為我們必須更快地運行UPDI 時脈才能跟上(它也不期望與所有串行適配器兼容- 這是提高性能的有意權衡),但它允許4 秒內上傳並驗證 32kB 草圖。
正在迭代三種設計:雙端口串行適配器,其中兩個端口都是串行端口,雙端口串行適配器,其中一個端口始終為UPDI,以及單端口一個,其中一個開關用於選擇模式,以及一個選購的附加板LED 指示調變解調器控制線路的狀態。
這些將允許使用 SMT JST-XH 連接器或杜邦連接器 - 無論哪種方式,都有 6 個引腳用於串列(FTDI 引腳排列如所標記)和 3 個引腳(用於 UPDI)。
這三個都能夠提供 3.3 或 Vusb(額定值 5V),或斷開 Vusb 和 3V3 的電源,並期望目標設備的供電電壓為 5.5V > Vdd > 1.8V。在這種情況下使用的邏輯電平將是所施加的電壓。請注意,在雙串行設備上,VccIO 電源軌是共享的!它們必須運行在相同的電壓下,屬於同一設備,或者必須將適配器設定為為它們供電並斷開電源。
根據適配器型號和作業系統的不同,需要不同的計時設定;然而,在 Linux/Mac 上,即使是 230400 波特率也需要進行設置,以防止在大多數適配器上失敗,而在 Windows 上,作業系統的串行處理速度足夠慢,不需要任何延遲…
這裡所說的「寫延遲」是為了讓頁擦寫指令執行完成;這需要非零時間。根據適配器、USB 延遲和隱式2 或3 位元組緩衝區(它就像USART,並且可能在內部實現為一個。到達的第三個位元組無處可去,因為硬體緩衝區只有2 位元組深)可能是足以讓它在沒有明顯延遲的情況下工作。或者,它可能會中途失敗並報告“Error with st”。適配器的延遲逾時越快,作業系統的串列處理越快,出現問題的可能性就越大。如果手動執行 prog.py,則由-wd
命令列參數控制。從 2.5.6 開始,此寫入延遲更接近請求的實際時間(以毫秒為單位),以前它的粒度為幾毫秒,而 1 就足夠了,因此,它施加的懲罰是殘酷的,特別是在視窗。
選用指南:
460800+ 波特率要求目標在 4.5V+ 下運行才能保持在規格範圍內(實際上,它可能不需要那麼高 - 但它必須是足夠高的電壓才能穩定在 16 MHz。我們設定對於高於230400 波特的所有速度,將接口時鐘設置為最大- 雖然一些適配器有時在沒有此步驟的情況下以460800 工作(這本身很奇怪- 460800 波特是460800 波特,對嗎?),大多數適配器都沒有,並且SerialUPDI 沒有一種確定適配器是什麼的方法。
基於 CH340 的適配器在大多數平台上都具有足夠高的延遲,並且幾乎總是以任何速度工作,而無需訴諸寫入延遲。所有選項都可以在不使用寫入延遲的情況下工作。
幾乎所有適配器都可以在 Windows 上以 230.4k 速度運行,而不使用寫入延遲。極少數不這樣做,包括一些編程為串行適配器的本機 USB 微控制器(例如:SAMD11C)。
除了基於 CH340 的適配器之外,無論平台如何,幾乎沒有任何適配器都可以在 460.8k 或更高速度下工作而不會出現寫入延遲。
在 Windows 上,許多適配器(甚至是真正應該支援它的適配器)將無法成功切換到 921600 波特。我不知道為什麼。症狀是在嘗試開始時暫停幾秒鐘,然後以 115200 波特率上傳。奇怪的是,迄今為止我唯一成功使用的是 CH340。
Windows 上具有寫入延遲的 460800 波特率通常比沒有寫入延遲的 230400 波特慢。在 Linux/Mac 上並非如此,頁面大小越小,寫入延遲對效能的影響就越大。
如果其他選項不起作用或在 Vcc = < 2.7V 下編程時,應使用 57600 波特率。
在某些適配器上,460800 波特率可以在沒有寫入延遲的情況下工作,這些適配器在TX 和RX 之間的肖特基二極體上放置了10k 電阻器,而沒有該電阻則無法工作,除非啟用了寫入延遲。不,我也不明白這是怎麼回事!
從上面可以看出,這些資訊很大程度上是經驗性的;目前尚不清楚如何預測這種行為。
FTDI 轉接器(FT232、FT2232 和 FT4232 等),包括在 eBay/AliExpress 上以約 2 美元的價格出售的假冒適配器,在 Windows 上默認有 16 毫秒的長得令人難以忍受的延遲時間。即使我們為了限制必須等待的延遲時間段的數量而設定了長度,這也會將 2.2 秒的上傳時間延長到超過 15 秒。您必須更改此設定才能獲得可接受的上傳速度:
開啟控制面板、裝置管理員。
擴展連接埠(COM 和 LPT)
右鍵單擊連接埠並選擇屬性
按一下連接埠設定標籤
點選“進階...”開啟進階設定視窗。
在“BM Options”部分下,找到“Latency Timer”選單,該選單可能會設定為 16。
按一下「確定」退出高級選項窗口,然後再次按一下「確定」退出屬性。您將看到裝置管理員刷新硬體清單。
現在上傳應該要快得多了。
一個可以由經典的 AVR Uno/Nano/Pro Mini 製作;廉價的 Nano 克隆是通常的選擇,因為價格足夠便宜,可以將其連接起來然後就這樣離開。我們不再提供此過程的詳細文件; jtag2updi 已棄用。如果您仍在使用它,您應該從工具->程式設計師選單中選擇 jtag2updi。這是我們之前推薦的選項。由於持續存在 jtag2updi 錯誤,以及它對很大程度上未維護的「avrdude」工具的依賴(該工具會在使用它進行的所有 UPDI 上傳中插入虛假錯誤訊息),因此不再建議這樣做。
顯然 Arduino 沒有打包最新 avrdude 的 32 位元版本。我定義了一個新的工具定義,它是 arduino18(最新)的副本,只不過它在 32 位元 Linux 上引入版本 17,因為這是該平台可用的最佳版本。 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
任何名為“AVR##XX##”的東西,其中 X 是字母,# 是數字 - 您需要我的 DxCore 來滿足這些需求
所有經典(2016 年之前)tinyAVR 部件 - 這些幾乎都由我的其他核心 ATTinyCore 之一支持
ATtiny 25/45/85、24/44/84、261/461/861、48/88,兩個小號和一個(奇怪的43和4313/2313),在2.0.0中,26號以及決賽-四個(顯示了現代AVR 方向實驗的跡象),ATtiny 441/841、1634 和828 以及更奇怪的26。
其他任何內容請參閱本文檔,以了解 AVR 部件系列以及它們使用的 arduino 核心的列表- 幾乎所有東西都有一個提供支援的核心,通常由我自己或 MCUdude 提供支援。
請參閱此文檔,涵蓋所有現代 AVR
特徵 | 0系列 | 1系列 | 1+系列 | 2系列 |
---|---|---|---|---|
閃光 | 2k-16k | 2k-8k | 16k/32k | 4k-32k |
針數 | 8-24 | 8-24 | 14-24日 | 14-24日 |
靜態隨機記憶體 | 128b-1k | 128b-512b | 2k | 512b-3k |
TCD | 不 | 是的 | 是的 | 不 |
TCB | 1 | 1 | 2 | 2 |
類比數位轉換器 | 1x10位 | 1x10 位元 | 2x10 位 | 1x12 位 帶PGA |
VREF腳 | 不 | 不 | 是的 | 是的 |
交流電 | 1 | 1 | 3 | 1 |
事件 * | 3 陳 | 6 陳 | 6 陳 | 6 陳 |
覆銅板** | 2個查找表 | 2個查找表 | 2個查找表 | 4個查找表 |
*
除 2 系列 tinyAVR(以及所有非微型現代 AVR)外,事件通道分為兩種類型 - 同步(針對系統時鐘)和非同步。並非所有產生器都可以使用同步通道,且某些事件使用者只能使用同步通道,且通道清單不太一致且較多。這種瘋狂的做法一有機會就被放棄了——甚至連 mega0 也取消了這種區別。
**
只有 2 系列和非小型部件可以根據 CCL 狀態觸發中斷。
所有裝置的大多數引腳上都提供類比輸入(PORTA 和 PORTB 0-1 和 4-5 上的所有引腳)。 1-series+ 上的第二個 ADC 也可以使用 PORTC 上的引腳作為輸入(有關使用這些引腳的信息,請參閱模擬參考)。
這些是預算選項。儘管它們受到支持,但不建議使用。這些永遠不會獲得tinyAVR 1系列在16k時獲得的“提升”,在任何配置中都沒有第二個TCB,沒有TCD,只有3個事件通道,其中沒有一個可以承載RTC事件輸出。這些裝置與 1 系列一樣具有 2 個 CCL LUT,並可在 14、20 和 24 引腳配置中配備高達 16k 的快閃記憶體(8 引腳元件僅為 4k)以及高達 1k SRAM。
這些具有 2k、4k 或 8k 閃存以及 128、256 或 512b 內存,就像 0 系列一樣。他們沒有第二個 ADC、三重 AC 配置或第二個 TCB,儘管他們有 TCD。
突然之間,在 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 約定,儘管從那時起已經過去了一年多,我仍然不斷尋找我稱之為 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 部件,並且在不幸的情況下,我需要討論這些非常令人失望的部件,我將它們稱為“精簡核心 AVR ”部件,因為這是它們的官方名稱,儘管我有很多為他們提供更多豐富多彩的短語。建議任何設計都不要使用精簡核心 AVR 。並不是說它們過時了,而是它們很糟糕。建議所有新設計使用「現代 AVR 」(具有新周邊和AVRxt指令集的 AVR) - Ex 系列、Dx 系列、tinyAVR 0/1/2 或 mega0
新的tinyAVR 2系列的數據表 - 雖然數據表僅「涵蓋」16k部件,但它們明確指出具有相同引腳數的部件之間在功能上沒有差異(也就是說,不存在像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 元件獲得 128 位元組 EEPROM,較大的元件獲得 256 位元組14 位元引腳裝置採用SOIC 和TSSOP,20 引腳裝置採用(寬)SOIC、SSOP,以及像1616 這樣的小型QFN(這次他們也在該封裝中為我們提供了32k 器件,但祝您好運。 ,它到處都缺貨- 我無法獲得一個)和24 針,採用與3217 相同的VQFN。
TWI、SPI、USART0、AC0 未更改,NVMCTRL 也未更改(引導程式所需的更改僅與支援第二個 USART 有關)。時鐘選項不變。 TCB0 和 TCB1 已升級到 Dx 系列中的版本:時脈關閉事件選項、級聯以及用於 OVF 和 CAPT 的單獨 INTCTRL 位元(很好的補充,但與核心本身無關),並且所有部件都具有 TCB。我們現在有 4 個 CCL LUT 和 2 個定序器,而不是 2 個和 1 個 - 它們可以像其他具有 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。 (可憐的'841又發出一聲痛苦的哀嚎,它也有一個令人難以置信的奇特ADC,具有出色的差分選項,但與新的ADC相比,它看起來完全過時了)...從我已經發表的不同主題的帖子數量來看看來,我有一種感覺,差分ADC 並不是您大多數願望清單中的首選- 但它卻位於主要芯片客戶的首選清單中,所以這就是我們所得到的。我們很快就需要一款合適的差分 ADC,而不是 Dx 系列上的 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 作為第一個引腳,最後一個數字是如果不設定保險絲就無法使用的引腳,這會使晶片難以編程。我更希望能夠從 A0 開始逆時針編號,而不破壞 Arduino 程式碼的不成文約定。有人可能會說我在引腳映射上做出了一個糟糕的決定——也許他們應該從PA0(除非設置保險絲否則不可用,在這種情況下芯片很難編程)作為引腳0 開始,然後按逆時針方向對引腳進行編號。但是,如果所有連接埠都按順序排列,您仍然無法實現這種技巧,除非您將 PORTB 引腳向後編號。如果您能夠擺脫所有引腳按順序編號的期望(並且僅使用 PIN_Pxn 表示法),則可以實現顯著的節省
我預測,在 2-4 年內,將會出現 AVR DA、DB、DD。 DU(USB 之一)、EA 和 D/E/F 系列裝置的引腳數降至 8(或至少 14),以及具有 128k 快閃記憶體和新 ADC 的 64 引腳裝置。沒有其他任何品牌的 ATtiny。剩下的最大問題可能是他們是否會用總引腳數為 100 個(可能其中 80-88 個是 I/O)且閃存選項高達 256k 的現代 AVR 來取代 ATmega2560;這將帶來三個問題 - 首先,過去 56 個 I/O 引腳不再剩下 VPORT 暫存器 - 低 I/O 空間已滿,有 28 個 VPORT 和 4 個 GPIOR。他們將如何處理這 4 個額外的連接埠? (在 2560 上,它們只是訪問速度較慢且沒有單週期訪問的二類端口。我對此有一些思考,以及附錄 A 中可用操作碼的可行性。第二,違反閃存中的128k 屏障,您必須轉到17 位元程式計數器。 RAM。
我在Tindie Shop以及Baare Boards上使用監管機構,Updi標頭和串行標頭出售突破板。從我的商店購買有助於支持核心的進一步發展,這是開始使用Arduino使用這些令人興奮的新部分的好方法。目前可以使用Attiny1624板,但直到新修訂的PCB設計從董事會返回以啟用Autoreset上的Alt-Reset PIN,才能將20和24針零件作為組裝板出售。還有一個14針板修訂 - 認為它在很大程度上是化妝品。黃色焊料面膜必須走,因為在最後幾批批次中的可讀性似乎變得更糟。新板還標準化了一排針之間的0.6“間距,而不是當前的0.7”間距,因此您將可以將加工的銷釘標頭放在它們上,並將其插入寬dip插座或將它們與針對此行間距進行最佳化的原型板一起使用。組裝的0系列板正在停止,一旦售罄,就不會被補貨。一旦有32k的零件,16k 2系列的零件也會發生同樣的情況。
在2系和EA系列的ADC是現代AVR時代在AVR上發布的最好的ADC。除了這兩個。最接近的比較是經典的AVR,它具有具有頂級功能的差異ADC(T841,Mega2560和(令人驚訝的是)T861是最強大的競爭對手)。雖然在經典的AVR時代某些部分吹噓的是瘋狂的100倍和200倍,但對我來說,放大的內容中的多少是噪音(考慮到我公認使用差異ADC的經驗有限的經驗,我要說的是“大概大部分,如果您讓我設計硬件,我不知道模擬!”)。這個新的ADC當然具有很高的能力,具有真正的差異能力(與DA和DB系列不同),迄今為止其他任何現代AVR上可用的任何東西都抬高了頭部和肩膀。可程式增益放大器是一種新功能,人們能夠擺脫類比測量的壯舉是什麼樣的;當然,這似乎很有希望。了解使用PGA以1倍增益,與不使用PGA的差異以及這樣做的益處和缺點之間的差異將非常有趣。 (在一般情況下,Microchip將由一份文件進行良好的服務,該文件討論瞭如何為任務選擇正確的ADC配置;我已經對Microchip和我交談的人提出了這種關注,並表示這是一個很高的優先事項;而這是一個很高的優先事項;而這種情況得到了極大的改善,看來DOC組被專門指示不要對任何類型的任何實際具體建議。
出於過度採樣和拆卸的目的增加了1024個樣本的累積是一個受歡迎的補充,儘管這也有可能低估了偏移誤差的幅度和相關性。 (取1024個樣本(所有均具有給定的偏移錯誤),然後刪除總和以產生17位元ADC測量,可以輕鬆地想像任何錯誤都將局限於最低的幾個位元。但是,如果錯誤是,在單一測量中說5 LSB,當您累積1024個樣品並脫節時,您的偏移誤差為160,很容易看到它,並認為它是訊號而不是雜訊。
帶有新ADC的第一個完整尺寸(非小)晶片可在28-48 PIN包中提供,最多可容納64K閃光燈。通常有人猜測是否會有什麼變化從兩個系列變為EA系列:似乎答案是,一個令人困惑的旋鈕被刪除了,並且自動簽名砍伐以進行累積的測量(
D Type D計時器僅在預設的PWM PIN設定上的20/24 PIN 1-SERIES零件上用於PWM。在較小的零件上,它不會讓我們增加PWM引腳的總數。僅WOC和WOD腳(分別在PC0和PC1上)上沒有TCA驅動的PWM。因此,由於AnalogWrite()不支援透過關閉拆分模式(例如16位元PWM)或透過使用D Type D Timer(例如調整頻率)來增強的任何功能,因此會更糟,因為它需要額外的空間來存儲例程以從兩種類型的計時器而不是一個類型的PWM開啟和關閉PWM。這在較小的閃光零件上不可忽略。它的訂單為600個位元組。 150對於DigitalWrite(),對於AnalogWrite(),如果曾經在TCD PWM引腳上呼叫這些()。在這種情況下,優化器應該能夠優化這些功能的部分,只要這些功能與這些功能使用的引腳不包括任何TCD PWM引腳。請注意,優化器將獨立考慮它們,也就是說,DigitalWrite()將包含程式碼以關閉TCD PWM,如果它與PIN一起使用,該PIN使用TCD用於PWM,無論您是否曾在該引腳上調用AlaigWrite()。
與幾乎所有其他AVR不同(我可以想到3個示例,其中只有一個是“獎金”不是“ unbonus”),基於家庭中零件的閃光燈,還有其他“獎勵”功能。 16K和32K版本(僅)具有一些額外的功能(似乎也沒有考慮到定價) - 它們都有2K RAM,無論是16K還是32K,它們都有3個模擬比較器(包括視窗模式選項),第二個- 迫切需要的- B型計時器- 最奇怪的是,它們具有第二個ADC,僅在銷售頻道對應的銷釘中有所不同!
與經典的AVR不同,在這些部分上,閃光燈映射到與其餘記憶體的位址空間相同的位址空間。這表示不需要直接從Flash讀取pgm_read_*_near()
。因此,編譯器會自動將所有聲明const
的變數放入progmem中,並適當地存取它 - 您不再需要明確將其聲明為Progmem。這包括引用的字串文字,因此不再需要f()宏,儘管為了保持與某些第三方庫的兼容性,但F()仍然聲明其參數progmem。
但是,請注意,如果您明確聲明可變的progmem,則必須像在經典AVR上一樣使用pgm_read
函數來讀取它。當變數在具有記憶體映射閃光燈的零件上聲明變數時,指標被偏移(位址相對於快閃記憶體的開始,而不是位址空間的啟動);使用pgm_read_*_near()
巨集時,也會套用相同的偏移量。請注意,聲明progmem並使用pgm_read_*_near
存取功能的內容雖然效果很好,但較慢,並且浪費了少量的閃存(與簡單地聲明變數const相比);對於2.1.0和更高版本的F()宏的F()宏也是如此(在2.1.0之前的一段時間內, F()
什麼也沒做 - 但這引起了第三方庫的問題)。作者堅持認為,問題與核心有關,而不是庫,我的選擇是接受較低的效率,或拒絕我的用戶訪問流行的庫)。使用F()
巨集可能是與某些第三方庫的相容(迫使F()
向我們返回的具體情況並非如此)可能是必需的f() - AS-NOOP程式碼,因此它們少了幾個位元組)。
汽車版本也應起作用。您必須始終在這些零件上選擇16個MHz衍生的時脈速度。它們不支援20 MHz操作,不應使用調諧的時脈選項。
現在,我們可以在這裡談論MegatinyCore如何揭露這一切。我們將從如何參考PIN以獲取最佳結果的問題開始,然後轉到核心功能,菜單選項,然後再以一系列鏈接到文檔的鏈接,並提供有關各種子系統的詳細信息。
如何指稱Alagread()和DigitalRead()的PIN(尤其是在非標準硬體上)的簡單問題一直是Arduino用戶混淆的持續來源。我認為,大部分的責任都取決於Arduino團隊(以及在他們面前的佈線作者)所做的關於針刺決定的決定;將某些引腳稱為“類比別針”使人們認為這些銷釘不能用於數位操作(它們可以更好地認為是“具有類比輸入的銷釘”,例如有“可以輸出PWM”的“銷釘”)。傳統上銷售銷釘的事實進一步使水混淆了。對於非標準的經典AVR零件,多年來,由多個作者創建的多個不相容的“ PIN映射”通常使事情變得更糟以這種方式混亂,某些部分具有三個完全不同的引腳映射,在至少一種情況下,其中一種替代映射是一部受魔鬼啟發的純粹邪惡的作品,不需要額外的查找表即可將模擬銷轉換為數字引腳)。
核心使用一個簡單的方案來分配Arduino引腳編號:PIN從最接近VCC的I/O引腳開始編號為引腳0,然後逆時針繼續執行,然後跳過(主要是)不可用的Updi Pin 。然後將UPDI PIN分配給最後一個引腳號(如上所述,即使不是將其設定為GPIO,也可以讀取Updi Pin(類比和數位讀取工作)。我們建議這樣做是最後的度假勝地:Updi Pin在未設定為GPIO PIN時始終啟用其引體式,並且看起來太像Updi啟用序列的訊號會導致不想要的操作。
為了防止所有有關引腳身份的混亂並消除歧義,我們建議使用PIN_PXN符號來指示引腳,除非您使用具有不同數字或名稱的開發板上列印的引腳。這將使您的程式碼的可移植性最大化到其他類似的硬件,並使您在相關資料表中使用的引腳上查找信息,如果有必要的話。
這是指參考#defines
的建議方法,其中PIN_Pxn
的形式為x, x
是a,b或c,而n
為a number 0-7-(不要與下面描述的PIN_AN定義相混淆)。這些只是解決了相關PIN的數位引腳編號 - 它們不會經歷其他代碼路徑或其他任何內容。但是,它們在編寫程式碼方面具有特殊的實用性,這些程式碼與大多數週邊設備一樣,與與某些引腳相關的周邊設備(透過連接埠)連結的外圍設備。文件中的幾個演示程式碼利用了這一點。直接的連接埠操縱也是可能的 - 實際上,它可以使用幾種強大的其他選項 - 請參閱直接連接埠操縱。
PIN_Pxn
不是Pxn
,而不是PIN_xn
這些意思是不同的東西!
當單一數字用於引用PIN時 - 在文件中或您的程式碼中 - 始終是「 Arduino Pin Number」。這些是橙色(適用於Analogread())和藍色(針對未銷釘的銷釘的銷釘)的引腳編號。所有其他參考引腳的方法均定義為對應的Arduino Pin編號。
核心也提供An
和PIN_An
常數(其中n
是0到11的數字)。與官方核心一樣, PIN_An
定義為與類比通道共享的PIN的數位引腳編號,這些n是指ADC0通道編號。這個命名系統類似於許多經典的AVR核心上使用的命名系統,但在這裡,它們只是#DEDINES作為相應的Arduino Pin編號。如果您需要在數位引腳上取得類比通道編號,請使用digitalPinToAnalogInput(pin)
巨集 - 但是,只有在編寫高級ADC庫時才需要它。
這些零件(嗯,至少是1/2系列 - 0系列是預算選項,除了它們未能縮小預算,而且它們只有幾美分便宜)提供了一種出色的工具箱和強大的外圍設備;高階與經典的Megaavr零件相當或更好 - 價格為Tinyavr。與我的其他核心一樣,MegatinyCore設計的指導原則之一是允許受支持的部分發揮其全部潛力 - 或在Arduino的局限性內盡可能接近它。這部分(非常大)涵蓋了這些部分的特徵以及它們如何被MegatinyCore揭露,以及核心本身的特徵。這個(非常大)的部分試圖覆蓋每個特徵區域。如果您想使用一些晶片功能並遇到麻煩,請嘗試找到正在使用的功能!
20 MHz內部(4.5V -5.5V-典型的5V系統)
16 MHz內部(4.5V -5.5V-典型的5V系統)
10 MHz內部(2.7V -5.5V-典型的3.3V系統)
8 MHz內部(2.7V -5.5V-典型的3.3V系統)
5 MHz內部(1.8V-5.5V)
4 MHz內部(1.8V-5.5V)
2個MHz內部(1.8V-5.5V,測試不佳)
1 MHz內部(1.8V-5.5V,測試不佳)
20 MHz外時脈(4.5V-5.5V,測試不佳)
16 MHz外時脈(4.5V-5.5V,測試率較差)
12 MHz外時脈(2.7V-5.5V,測試不佳)
10 MHz外時脈(2.7V-5.5V,測試不佳)
8 MHz外時脈(2.7V-5.5V,測試不佳)
6 MHz內部(經過調整,未經測試)
5 MHz內部(調諧,測試不佳)
4 MHz內部(經過調整,測試不佳)
2 MHz內部(調諧,測試不佳)
1 MHz內部(調諧,測試不佳))
7 MHz內部(對受虐狂,未經測試)進行調整)
8 MHz內部(經過調整,測試不佳)
10 MHz內部(經過調整,測試不佳)
12 MHz內部(調整,未經測試)
14 MHz內部(對受虐狂,未經測試)進行調整)
16 MHz內部(調諧)
內部20 MHz(調諧)
24 MHz內部(調諧,超頻,測試效果不佳)
25 MHz內部(調諧,超頻,測試效果不佳)
30 MHz內部(調諧,超頻,測試率較差)-0/1系列需要「 20MHz」 OSCCFG保險絲設定;選擇「 16 MHz」的兩個系列零件可能無法達到30。
32 MHz內部(調諧,超頻,測試較差) - 僅2系,非常樂觀的超頻,可能是不穩定的。
24 MHz外時脈(超頻,測試不佳)
25 MHz外時脈(超頻,測試不佳)
30 MHz外時脈(超頻,測試不佳)
32 MHz外時脈(超頻,測試不佳)
我們對超頻零件的電壓或溫度範圍沒有任何要求 - 我們聲稱的是,我們至少在室溫下以這種速度工作的晶片中的至少有一個晶片,在5V時運行特定的草圖。您的里程預計會有所不同,但通常使用F規格與N或U規格部分更好。
重要的 - 在選擇任何調整選項之前,請閱讀有關調整的資訊!
有關這些時脈速度的更多資訊可以在時鐘參考中找到
顯示的電壓是製造商規格保證工作的電壓(除非按下操作溫度範圍的邊界,否則這些零件通常會做得更好(通常在32 MHz和5V @室溫下,即使從內部振盪器則可以工作; 0 /1系列同樣,如果電源為穩定的5.0-5.5V,則通常在32 MHz的情況下使用32 MHz。
當草圖透過UPDI上傳時,無需採取任何措施來設定OSCCFG
保險絲。當透過Optiboot上傳時,將無法更改保險絲,因此在燃燒引導程式時選擇的任何選擇是所使用的,並且只有「燃燒啟動載入程式」或透過UPDI上傳素描才能改變。
除非選擇“調諧”選項,否則所有內部振盪器時脈速度選項都使用出廠預設校準,在這種情況下,按照調整參考中的記錄進行了調整校準。這可用於在20 MHz的Optiboot晶片上進行16 MHz操作,反之亦然。
有關製造商的速度等級的更多信息,請參見速度等級參考。請注意,這些是保證它可以正常工作的電壓和時脈速度。這些零件旨在適合在應用程式中使用,在某種程度上出乎意料的故障可能會對人或財產構成危害(例如汽車,工業設備,飛機,核反應器- 如果零件發生故障,人們可能死亡)和我僅出於相反的原因,也相信軍事應用有相似的可靠性要求。典型的愛好用戶將在穩定問題的潛力上更加放鬆,崩潰只不過是一個麻煩,而且延長溫度範圍零件的極端遠遠超出了我們所需要的。假設板上有防水塗層,則n等級零件應能夠在一鍋沸水中每個速度等級起作用。那隻是n-spec。 F-Spec應該好至125!
已經確定,延長的溫度零件越過超頻,這是有道理的。預計在125C下以20 MHz運行的部分在室溫下以32 MHz運行的機會比僅在105C下以20 MHz運行的機會更高
從2.4.0版開始,我們現在提供「官方微晶片板」選項。除了將LED_BUILTIN
定義為具有LED在該板上而不是A7的PIN之外,並定義一個宏PIN_BUTTON_BUILTIN
定義為帶有用戶按鈕的PIN並用非非負載“上載”,這無需做任何特別的事情。版本始終使用板載程式設計師/調試器;工具 - >程式設計師將僅用於「 Burn Boot Loader」和「使用程式設計師上傳」。對於Attiny416 Xplained nano,它還選擇了使用替代引腳的引導程序的版本,該銷售端端端口 - 它不會自動使用usart0的備用銷釘,就好像您完成了serial.swap(1)一樣- 支持串行引腳的預設交換的功能將在以後的更新中進行,以及PINSWAP機制基礎機械的其他一些更改,這也有望減少閃光使用。
如上所述,這些可能無法在32位元Linux平台上正確運作。這是我無法控制的;我不建置Avrdude二進位檔案AMD,我也沒有承擔該任務。我已經太多了。
blink()
在Xpl的Mini和Xplained Pro上會閃爍更多?兩者都有相同的attiny817!它們如何與眾不同?
基於相同的原因,如果將閃光更改為使用PIN_PC0
而不是Xplained mini上使用的PIN_PB4
:PC0,則需要更多的閃光燈,而Xplained Pro使用的PB4則不是。由於這是使用DigitalWrite()使用的唯一PIN,因此編譯器可以免費優化該PIN上DigitalWrite()不需要的任何內容,包括在支援PWM的PIN上關閉PWM輸出的功能。如果digitalwrite()也用於支援兩個裝置上的PWM(導致較高的閃光使用結果)或DigitalWrite()替換為DigitalWriteFast(),那麼差異就會消失。
每當使用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上傳時在16 MHz衍生和20 MHz衍生的速度之間切換
此核心始終使用連結時間優化來減少閃光使用 - 支援TinyAVR 0/1/2系列零件的所有版本也支援LTO,因此無需像AttinyCore那樣使其可選。這是在引入時的代碼方面的巨大改進,通常以5-20%的訂單!
這些部分都有大量的類比輸入- DA和DB系列具有多達22個類比輸入,而DD系列的每個引腳都在不用於驅動HF晶體的每個引腳上輸入類比輸入(儘管Portc上的PINS是僅當關閉MVIO時才支援)。可以像在正常的AVR上一樣用analogRead()
讀取它們,我們預設為10位元解析度。您可以使用analogReadResolution()
更改為完整的12位,並使用增強的分析函數自動進行過度採樣,衰減的讀數,以進行更高的分辨率並進行差異測量。 1.024、2.048、4.096和2.5V中有4個內部電壓參考,加上對外部參考電壓的支援(當然是VDD)。 ADC讀數的速度比經典的AVR快3倍,如果您的測量值是低阻抗,或者將取樣時間擴展到了一個因素,則可以將速度再次加倍,以讀取非常高阻抗來源。這在模擬參考中詳細介紹。
DX系列零件具有10位DAC,可以產生真實的類比電壓(請注意,這提供了低電流,並且只能用作電壓參考或控制電壓,不能是