ATtiny85

Po delší době se hlásím s nějakým tím návodem, který se bude hodit hlavně mě, ale i Vám ostatním by se mé zkušenosti mohly hodit. Potřeboval jsem nahrát program do ATtiny85, který využívá funkci tone(). Tato funkce využívá interní Timer pro generování frekvence od 30 Hz do 65535 Hz. Více o této funkci najdete na stránkách arduina. Lidé tuto funkci používají ve spojení s piezo měničem. Tak z arduina vyloudí nějaký ten zvuk. Nebudu tu ale popisovat jak postavit elektronické klávesy či domovní zvonek. Já se chci zaměřit právě na to, jak do ATtiny program dostat a tuto funkci využívat. Jelikož mi to dnes dalo docela zabrat. Nicméně čeká nás šťastný konec, tak hurá do toho.

Tvorba a kompilace programu

Program se píše prakticky stejně jako pro jakékoliv jiné arduino. Je třeba si ale dávat pozor na některé věci. ATtiny totiž nepodporuje všechny funkce jako UNO. Seznam podporovaných funkcí najdete zde. Je tam také návod, možná trochu podrobnější. Já ale na rozdíl od návodu v odkazu nenašel v boards manageru záložku s ATtiny a musel si ji dohrát. Našel jsem knihovnu na google code. Jak ji nahrát i do Arduino IDE, mi není stále jasné, ale třeba vám bude. Já to udělal trochu humpoláčtěji. Podle návodu knihovny stačí jít do složky, kam arduino ukládá projekty. Většinou Dokument/Arduino. Tam vytvořit složku hardware a složku tiny i s jejím obsahem sem nakopírovat. Nevím proč, mě to moc nešlo. Tak jsem se rozhodl použít složku Arduina v program files. Nejprve jsem si do boards.txt přidal jen ten ATtiny, který mě zajímal, tedy ATtiny85, a zkontroloval pojistky (fuses) ve fusecalculatoru. Ověřil jsem si tak, že nastavují to co chci. Potom bylo třeba ještě několik úkonů. Z git hubu jsem stáhl složku variants, který obsahovala soubor pins_arduino.h. Je to pro to, že když kompilujete projekt, tak při použití desky ATtiny (či jakékoliv jiné), máte v boards.txt, v položce „build.variant=“ řečeno, odkud se tento soubor bude číst. Proto si na to dejte pozor. Teď budete vědět, co to znamená, když kompilace skončí problémem s pins_arduino.h . Další věc, kterou je nutno řešit je položka „build.core=“. Tím se dostávám k dalšímu problému, se kterým jsem bojoval celé dopoledne. Protože pokud tam máte napsáno „arduino“ a nepoužijete core soubory pro ATtiny, pak vám bude fungovat jen něco (kompilace proběhne bez problému). Funkce tone() a analogWrite fungovat nebudou. Pokud se vám vše funguje jak má, a zkusili jste postup z google code stránek výše, tak je to paráda, a adresář core se použil správný. Pokud vám to však nefunguje, jako mě, tak musíte udělat trochu prasárnu. Tou je opět ve složce Arduino v program files najít adresář cores a v něm přejmenovat složku arduino (stačí přidat i jedno písmenko do názvu). do této složky pak nahrajete core soubory pro ATtiny a adresář pojmenujete arduino. Nahradíte tak core soubory. Samozřejmě teď nepřekládejte pro nic jiného než tiny!!! Tímhle způsobem máte vše nastaveno na tiny a překlad upravdu udělá co má. Ještě bych chtěl upozornit na to, že vlastně ještě nevíte, který pin na ATtiny je který. K tomu na internetu najdete spousty obrázků „arduino ATtiny pinouts“. Dokonce si můžete otevřít přímo soubor pins_arduino.h, ve kterém jsou piny rozkresleny. Nezajímají vás čísla nožiček, nýbrž označení D 0 – D 5 či Ain 0 – Ain 3. To jsou čísla, která budete používat v Arduino IDE.

Vyvolání externího přerušení pin_change

Protože ve svém projektu potřebuji využít externího přerušení na pinu, resp. při změně jeho stavu, musel jsem zapnout přerušení. Návod jsem našel na thewanderingengineer.com . Já jen zkráceně. Při nastavování registrů postupujte podle datasheetu. Všechno tam najdete. Já nastavil registry takto:

#include "avr/interrupt.h"
volatile int value=0;
void setup()
{
 GIMSK = 0b00100000; // zapne preruseni
 PCMSK = 0b00001000; // zapne preruseni na pinu D3
 sei(); // enables interrupts
}
 
void loop()
{
}
 
ISR(PCINT0_vect)
{
 value = 1; // Increment volatile variable
}

Tak to bychom měli. Teď to nahrajeme do MCU.

Nahrání ATtiny

Já už byl na Arduino IDE poměrně naštvaný a tak jsem zvolil jinou cestu. Programování pomocí USBASP. Tenhle jednoduchý programátor udělá velmi dobrou službu ve spojení s avrdude. Samozřejmě vám bude stačit nahrát do Arduina UNO projekt Arduino ISP a máte to stejné. Fungujete to, jako jsem ukazoval v případě rozcházení 3D tiskárny. Já ale použil USBASP. Propojíte MOSI, MISO, SCK, reset, Vcc, Gnd a je to. Já na čerstvý čip musel použít ještě propojku Slow_SCK (taky mi to trvalo), v podstatě by ale stejnou službu mělo zvládnout snížení baudrate (někam hodně nízko, klidně i pod 4000 baudů). Pak zapínám avrdude (příkazový řádek spuštěný jako administrátor). Program pak nahrávám následovně (využijte návod na ladyada.net):

Nejprve pojistky

avrdude -b 9600 -c usbasp -p t85 -v -U lfuse:w:0xE2 -U hfuse:w:0xDF

Potom samotný hex (nepoužívám bootloader):

avrdude -b 9600 -c usbasp -p t85 -v -U flash:w:C:\Users\uzivatel\AppData\Local\
Temp\build79d34214ddc9b7048504bbb47a6b1bde.tmp\sketch_feb03a.ino.hex:i -v

Všimněte si cesty k hex souboru. Je trochu nestandardní. To je proto, že v arduino IDE program pouze kompiluji (tou šipkou) ale nenahrávám. V uvedené složce temp se objeví složka build……. a v ní najdete hex soubor. Nechcete-li o něj přijít, nahrajte jej někam jinam. Po zavření IDE se smaže. Program v hex je kompletní, a teď nemusíte řešit problémy s arduino ide (a novými verzemi, kde může všechno fungovat jinak) a budete stále nahrávat hex soubor přes avrdude bez větších problémů.

Snad jsem vám trochu poradil, jak docílit svého i když Arduino IDE je trochu tvrdohlavé a nechce spolupracovat. Cesta přes avrdude, ať už s Arduino as ISP či USBASP, je mnohem méně problémová a pohodlnější.

 

Reklamy

Zanechat odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

Logo WordPress.com

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit /  Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Odhlásit /  Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit /  Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit /  Změnit )

Připojování k %s