MegaTinyCore a Arduino (ATtiny1614 etc)

AVR procesory, používané v deskách Arduino, jsou většinou obvody s mnoha vývody a z tohoto důvodu je jejich využití v amaterském bastlení poněkud komplikovanější. Na druhé straně je pak nepřehlédnutelná existence naprosto minimalistických MCU (jako je ATtiny85), která má naopak naprosto  minimální počet vývodů, jichž pak může být v projektu nedostatek. To platí obzvlášť tehdy, pokud chceme současně něco měřit, zobrazit, ale i zachovat komunikaci s PC či jiným zařízením.

ATtiny1614 (3224) jako optimální MCU

Pro svoje projekty jsem tedy hledal MCU, které by bylo kompromisem mezi těmito "extrémy", a padl mi do oka procesor ATtiny1614. Ten má akorátních 14 vývodů a parametry celkem podobné arduinovému ATmega328. Komu by pak nestačila poloviční flash paměť pro program, může použít modernější ATtiny3224, který patří do 2. série AVR procesorů megaTinyCore (mTC). Kdo by chtěl volbu MCU ještě nějak jinak modifikovat (potřebuje více/méně vývodů či paměti...), toho odkážu na GITHUB, kde najde podrobné informace o celé rodině těchto MCU:
https://github.com/SpenceKonde/megaTinyCore#supported-parts-click-link-for-pinout-diagram-and-details

Doplněno 2025: Zajímavým MCU je také ATtiny3226, o kterém je zajímavý článek na TINDIE.COM, kde je současně nabízena vývojová deska s tímto čipem:
https://www.tindie.com/products/drazzy/attiny322632161606-dev-board-arduino-compatible/

DALŠÍ INFORMACE K TĚMTO MCU LZE TAKÉ NAJÍT V JINÉM ČLÁNKU NA TOMTO WEBU:
MCU Atmega a Attiny, kde jsou mj. PINouty těchto MCU, popř. odkazy na ně.

ATtiny3224/26/27 DATASHEET

Komu stačí vybírat ze zmiňovaných MCU, může si jejich parametry porovnat zde:

  ATmega328 ATtiny1614 ATtiny3224 ATtiny3 226
Velikost programové paměti 32 kB 16 kB 32 kB 32 kB
Velikost paměti SRAM 2 kB 2 kB 3 kB 3 kB
Rychlost procesoru (MIPS/DMIPS) 20 20 20 20
Datová paměť EEPROM (bajty) 1024 b 256 b 256 b 256 b
Časovače 2x 8, 1x 16 b 1x 8, 3x 16 b 0x 8, 3x 16 b 1 RTC, 3x 16 b
Samostatné PWM 6 4 3 6 (8)
Počet ADC 0 2 1 1
Kanály ADC 8 9 (+1 UPDI) 9 (+1 UPDI) 15 (+1 UPDI)
Maximální rozlišení ADC 10 b 10 b 12 b (diff) 12 b (diff)
Počet komparátorů 1 3 1 1
Teplota Rozsah -40...85 °C -40...85/125 °C -40...85/125 °C -40...85/125 °C
Provozní napětí 1.8...5.5 V 1.8...5.5 V 1.8...5.5 V 1.8...5.5 V
Počet pinů 32 14 14 20
Rozhraní UART, SPI, I2C  UART, SPI, I2C UART(2), SPI, I2C UART(2), SPI, I2C

MegaTinyCore a Arduino IDE

Pro jednoduché projekty - takové to "domácí bastlení" je jako vývojové prostředí ideální Arduino IDE, a to především s ohledem na snadno dostupné návody, knihovny funkcí, periferie, atd, atp. Arduino IDE ale zatím bohužel nemá podporu MegaTinyCore MCU integrovanou, není ale složité ji do vývojového prostředí doplnit za pomoci dokumentace na githubu od autora SpenceKonde.

Přestože z této dokumentace lze vyvodit, jak rozšíření IDE provést, přehlednější návod je zde:
https://www.electronics-lab.com/project/using-new-attiny-processors-arduino-ide-attiny412-attiny1614-attiny3216-attiny1616-attiny3217/

Výše uvedený návod obsahuje i část, popisující vytvoření programátoru UPDI, který ale vývojář SpenceKonde již k programování využívat nedoporučuje (především s ohledem na nepřehledný zdrojový kód v C++ s FW tohoto programátoru a programovým chybám). V současnosti doporučené řešení pomocí převodníku USB > TTL com (ideáně založeném na čipu CH340) najdeme ZDE. Informace ohledně úpravy převodníku jsou o něco níže na stejné stránce (tj. ZDE). Ideální variantu dle autora, kdy je na převodníku již integrován rezistor 2.2k na vývodu Tx, přepisuji sem:

interní resistor v adaptéru: 2.2k >= Ra

--------------------                                 Do cílového zařízení
                DTR|                                  __________________
    interní     Rx |--------------,------------------| UPDI---\/\/---------->
  Tx---/\/\/\---Tx |-------|<|---'          .--------| Gnd    470 ohm (100 ~ 1k)
    resistor    Vcc|---------------------------------| Vcc
  typ. 1-2k     CTS|                     /           |__________________
                Gnd|--------------------'             Pokud použijete 3-pinový konektor,
--------------------                                  použijte takovýto pinout

Specifika programování v Arduino IDE

S ohledem na to, že u této rodiny MCU nejsou zcela jednoznačně stanoveny pinouty, je vhodnější v IDE program odkazovat přímo na čísla pinů dle tohoto pinoutu (platí pro x14, u jiných MCU to bude obdobně):

V kódu to pak může vypadat třeba takto:

#define OK 7

void setup(){
  pinMode(OK, OUTPUT);
:
:

  attachInterrupt(digitalPinToInterrupt(9), rpm_1, FALLING);
  Icc2 = analogRead(3) * 50000 / 1024;

Poznámky k čipům "series 2" (3224, 3226...):

(Translated with DeepL.com (free version))
  • Pouze PA1-PA7 lze použít jako zápornou stranu diferenciálního ADC čtení.
  • Existuje několik možností pro různá mapování PWM, které se vybírají v nabídce nástrojů, takže můžete vybrat piny, které se nepřekrývají s jinými periferiemi.
  • K dispozici je 6 událostních kanálů. CCL má 4 LUTy a každý z nich má alespoň 1 výstupní pin na všech vývodech.
  • PA0 má tři možné funkce nastavitelné pojistkou:
    1. Jako linka UPDI pro programování, výchozí režim a jediný režim, který umožňuje programování UPDI.
      Všimněte si, že abyste mohli měnit pojistky, musíte jej mít v režimu UPDI.
    2. Jako linka RESET. Přes UPDI nelze přeprogramovat bez HV UPDI.
    3. Jako linka GPIO. Nejenže ji nelze přeprogramovat přes UPDI, ale dokonce i s HV UPDI musíte použít sekvenci „Powercycle HV“, aby se změnila zpět na pin UPDI.
    • Jako GPIO je to VELMI slabý výstup. Totéž platí pro řízení pinu na nízkou úroveň v režimu UPDI. (pin, který přijímá HV puls, má vždy slabé ovladače, pokud vůbec nějaké jsou).
    • Doporučujeme jej ponechat jako UPDI. V případě potřeby lze jako ErsatzReset použít jiný pin - nejlépe ne plně asynchronní pin, protože ty se snáze spouštějí šumem.

Viz ukázkové náčrty „ErsatzReset“ a „ErsatzReset2“ - ten bez dvojky je nezávislý na knihovně, zatímco ErsatzReset2 používá obal knihovny kolem softwarových resetů.

Odkazy