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;