ATtiny – zjednodušené Arduino na maličkom čipe

Dosiaľ sme v našom seriáli používali rôzne vývojové dosky s mikrokontrolérmi, či už to boli rôzne verzie Arduina, doska BBC Micro:bit populárna hlavne v školách, výkonná doska Raspberry Pi, či dosky s WiFi mikrokontrolérom ESP 32.

Výhodou vývojových dosiek je, že nemusíte nič spájkovať stačí dosku pripojiť vodičmi s pinmi k svojej konštrukcii a taktiež to, že do vývojovej dosky sa cez USB port ľahko dá zaviesť programový kód. Nevýhodou vývojových dosiek v porovnaní so samotnými mikrokontrolérmi je ich veľkosť a hmotnosť, čo u niektorých zariadení, ktoré musia byť miniatúrne, prípadne ľahké môže byť problém. Pri zariadeniach napájaných z batérie je u niektorých dosiek problémom aj spotreba. Preto ukážeme aj možnosti použitia samotných mikrokontrolérov a začneme čipom ATtiny, ktorý  má rovnaké jadro ako ATmega328P integrovaný v Arduine, avšak má len osem vývodov. ATtiny je preto výhodné hlavne pre tých, čo už majú skúsenosti z programovaním Arduina.

V seriáli sa zameriame na čipy ATtiny45 a ATtiny85 a ukážeme aj ako je možné naprogramovať mikrokontrolér ATmega328, ktorý po odladení zapojenia na Arduine môžete použiť priamo na plošnom spoji vašej konštrukcie.

Video ukazuje pripojenie Arduina ako programovacieho nástroja pre ATtiny a konfiguráciu vývojového prostredia Arduino IDE

Najskôr predstavíme parametre mikrokontrolérov ATtiny45 a ATtiny85 v puzdrách DIL (Dual in Line) s ôsmimi vývodmi, čiže 2 x 4 vývodmi na každej strane.

V tabuľke sú na porovnanie aj parametre čipu ATmega328 použitého v Arduino UNO

Parameter ATtiny45 ATtiny85 ATmega328
Pamäť Flash pre program 4 kB 8 kB 32 kB
RAM 256 bajtov 512 bajtov 2 kB
EEPROM 256 bajtov 512 bajtov 1 kb
GPIO piny 5 5 14
Z toho PWM 3 3 6
AD prevodníky 3 3 6
Taktovanie 16 MHz 16 MHz 16 MHz

 

Popis pinov

Štandardne má ATtiny 5 digitálnych vstupno – výstupných pinov. Síce môžete do režimu vstupu/výstupu aj pin 0 (RESET), avšak prepnutie tohoto pinu si treba premyslieť. Je totiž jednorazové, po prepnutí už nebudete môcť ATtiny programovať pomocou Arduina.

Uvedieme príklad ovládanie digitálnych výstupov:

digitalWrite(0, HIGH); // PB0(5)
digitalWrite(1, HIGH); // PB1(6)
digitalWrite(2, HIGH); // PB2(7)
digitalWrite(3, HIGH); // PB3(2)
digitalWrite(4, HIGH); // PB4(3)

Niektoré piny môžu fungovať ako PWM výstupy

analogWrite(0, 128); // PB0(5)
analogWrite(1, 128); // PB1(6)
analogWrite(4, 128); // PB4(3)

Pre analógové hodnoty máte tri AD prevodníky na vstupoch:

ADC1 - analogRead(1);  // PB2(7)
ADC1 - analogRead(2);  // PB4(3)
ADC1 - analogRead(3);  // PB3(2)

ATtiny85 má jedno sériové rozhranie USI (Universal Serial Interface),  ktoré sa dá použiť s vhodnou knižnicou ako I2C, alebo SPI. Nemôžete ale použiť knižnice pre Arduino, ale špeciálne knižnice pre ATtiny.

Príklad s LED diódami pre ATtiny 45, alebo ATtiny 85

Primárnym cieľom takéhoto príkladu je uistiť sa, že máte správna nainštalované a nakonfigurované vývojárske nástroje a správne pripojené zariadenie, na ktorom aplikáciu testujete. Námetom je blikanie troch diód. Príklad využíva porty PB0, PB1 a PB2, ktoré sú na pinoch (vývodoch) integrovaného obvodu 5,6 a 7.

void setup() {
pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT);
}

void loop() {
digitalWrite(0, HIGH); delay(500); digitalWrite(0, LOW);
digitalWrite(1, HIGH); delay(500); digitalWrite(1, LOW);
digitalWrite(2, HIGH); delay(500); digitalWrite(2, LOW);
}

Ako dostať programový kód do mikrokontroléra ATtiny buď pomocou Arduina, alebo externého programátora je popísané v ďalších statiach.

Arduino ako programátor pre ATtiny

Aby ste mohli čipy ATtiny použiť, potrebujete do nich nahrať program. Ako programátor môžete použijť ľubovoľné Arduino a pomocou niekoľkých vodičov ho pripojíte na piny mikrokontroléra. Potrebujete pripojiť:

Medzi piny RESET a GND na Arduine pripojte 10 uF elektrolytický kondenzátor. Plus pól kondenzátora je pripojený  na RESET. Ostatné porty prepojte podľa tabuľky. V tabuľke sú označené aj porty aj PINy, čiže v prípade Arduina číslovanie sna systémovom konektore a v prípade integrovaného obvodu ATTiny jeho „nožičky“. Napríklad Pin 0 je na vývode 5.

Arduino ATtiny
5 V VCC PIN 8
GND GND PIN 4
PIN10 RESET  (PIN 1)
PIN11 PB0 (PIN 5)
PIN12 PB1 (PIN 6)
PIN13 PB2 (PIN 7)

Aby ste mohli sledovať fungovanie programátora, je užitočné pripojiť aj tri LED diódy k pinom:

  • PIN7 – bliká počas programovania podriadeného Mikrokontroléra.
  • PIN8 – signalizuje chybu.
  • PIN9 – Blikanie so stmievaním pomocou PWM signalizujem že programátor je funkčný

Konfigurácia vývojového prostredia Arduino IDE

Ak nemáte nainštalované vývojové prostredie Arduino IDE stiahnete si ho na stránke https://www.arduino.cc v sekcii Software. K dispozícii je pre platformy Windows, Mac OS aj Linux. Vývojové prostredie sa neinštaluje, z internetu si stiahnete priamo aplikáciu, ktorú vo Windows umiestnite do vhodného adresára a na platforme Mac OS ju z adresára Stiahnuté prekopírujete do adresára Aplikácie. V novom MacOS Catalina je potrebné povoliť fungovanie aplikácie tretej strany.

Po spustení vývojového prostredia v menu aktivujte položku File > Preferences (v slovenskej verzii Súbor > Vlastnosti). Adresu rozšírenia pre prídavnú dosku v našom prípade

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

alebo alternatívne rozšírenie s podporou viacerých obvodov

http://drazzy.com/package_drazzy.com_index.json

skopírujte do poľa  Additional Board Manager URLs (v slovenskej verzii Manažér prídavných dosiek URL).

Teraz aktivujte menu Tools > Board menu (alebo v slovenskej verzii Nástroje > Manažér Dosiek). Do poľa pre vyhľadávanie zadajte ATtiny a nainštalujte najnovšiu verziu doplnkov pre dosky ATtiny. Následne do menu Tools/Boards pribudnú nové položky pre dosky ATtiny.

Aby ste mohli použiť Arduino ako programátor pre ATtiny spustite vývojové prostredie  Arduino IDE a otvorte príklad File>Examples>ArduinoISP. Tento program nahrajte do Arduina. Nemusíte riešiť ako program funguje, je to len nástroj na nahratie kódu do mikrokontroléra ATtiny. Funkcie Arduina ako ISP programátora sú indikované tromi LED diódami, ktoré môžete a nemusíte zapojiť, programovanie ATtiny bude fungovať aj bez nich

  • PIN7 – bliká počas programovania podriadeného mikrokontroléra.
  • PIN8 – signalizuje chybu.
  • PIN9 – Blikanie so stmievaním pomocou PWM signalizujem že programátor je funkčný

Ako prvý je potrebné do mikrokontroléra zaviesť bootloader, čiže zavádzač pomocou menu Nástroje > Vypáliť zavádzač (bootloader). Mikrokontrolér, či už je to ATtiny, alebo ATmega má totiž z výroby pamäť flash, pre používateľský kód úplne prázdny. Výrobca predpokladá, že obvod sa bude programovať pomocou špeciálneho programátora. V Arduine a aj v našich zapojeniach však programujeme mikrokontrolér zapojený v obvode, čiže používame metódu ISP (In-System Programmer). Ten umožňuje programovanie mikrokontroléra cez sériové rozhranie. Vo flash pamäti  je špeciálny kód nazývaný bootloader, umiestnený na konci pamäti. Na začiatku pamäti sa predpokladá umiestnenie používateľského kódu. Po resete sa spustí bootloader, ktorý zistí, či na piny sériového rozhrania prišla špeciálna postupnosť znakov signalizujúca, že sa bude programovať. Ak áno, bootloader číta zo sériového rozhrania údaje a programuje nimi flash pamäť.

Predpokladajme, že vo vývojovom prostredí máte program pre ATtiny, trebárs náš príklad s blikaním troch LED diód. V menu vyberte Tools>Board>ATtiny25/45/85. Taktovací kmitočet nastavte na 8 MHz (internal) a v menu vyberte Tools>Programmer>Arduino as ISP.

Následne v menu vyberte položku Sketch>Upload Using Programmer, alebo v slovenskej verzii Projekt>Nahrať Pomocou Programátora.

Ak všetko dopadlo dobre, odpojte programovacie vodiče a zapojte cez rezistor na PIN0 diódu. Ak ste to zvládli, dióda bude blikať. Programovanie bude vo väčšine prípadov fungovať aj v prípade ak máte k pinom ATtiny pripojené súčiastky. V našom prípade bude Arduino pri programovaní môcť bez problémom meniť logické úrovne na pinoch. Len keby bol niektorý z pinov pripojený natvrdo k napájaciemu napätiu, alebo GND, programovanie by nefungovalo.

Programovanie ATtiny pomocou Arduina je jednoduché a môžete použiť akékoľvek Arduino, vrátane „malého“ Arduino Nano.

Programovanie pomocou USBasp programátora

Na naprogramovanie ATtiny môžete použiť aj programátor USBasp, ktorý je v ponuke obchodov a e-shopov s elektronickými súčiastkami za 3 – 4 eurá. Je to jednoúčelové zariadenie s 8 pinovým konektorom. Súčasťou dodávky je aj plochý kábel. Ten potrebovať nebudeme, pomocou vodičov, ktoré majú na jednej strane dutinku a druhej strane pin ho pripojíme k obvodu ATtiny takto:

Pin programátora Pin ATtiny
MOSI MOSI (Pin 5)
MISO MISO (Pin 6)
SCK (clock) SCK (Pin 7)
RESET RESET (Pin 1)
Vcc (5V) Vcc (Pin 8)
GND GND (Pin 4)

Aby ste mohli použiť USBasp programátor, potrebujete vhodný ovládač pre Windows 10, nám sa osvedčil ovládač https://www.protostack.com/blog/2015/01/usbasp-windows-driver-version-3-0-7/

popis konektora programátora

V menu vývojového prostredia Arduino IDE Tools>Programmer>USBasp vyberte typ programátora a môžete do ATtiny nahrať program. Na rozdiel od programovania cez Arduino, kedy súčiastky pripojené na pinoch 5,6 a 7 väčšinou nevadia, pri programovaní cez USBasp programátor je vo väčšine prípadov potrebné tieto súčiastky pripojiť až po naprogramovaní mikrokontroléra.