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 tinyAVR procesorů. 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

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

  ATmega328 ATtiny1614 ATtiny3224
Velikost programové paměti 32 kB 16 kB 32 kB
Velikost paměti SRAM 2 kB 2 kB 3 kB
Rychlost procesoru (MIPS/DMIPS) 20 20 20
Datová paměť EEPROM (bajty) 1024 b 256 b 256 b
Časovače 2x 8, 1x 16 b 1x 8, 3x 16 b 0x 8, 3x 16 b
Samostatné PWM 6 4 3
Počet ADC 0 2 1
Kanály ADC 8 10 9 (Diff)
Maximální rozlišení ADC 10 b 10 b 12 b
Počet komparátorů 1 3 1
Teplota Rozsah -40...85 °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
Počet pinů 32 14 14
I2C 1 1 1

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;

 

Odkazy