Programowanie Attiny

Jak zaprogramować Attiny za pomocą Arduino. Na przykładzie Attiny 2313

Słowem wstępu

Attiny to rodzina mikrokontrolerów firmy Atmel, która jest jakby "pomniejszoną" wersją Arduino. Mają one mniej pinów, mniejsze rozmiary pamięci i mniejsze gabaryty. Nie mają też zwykle sprzętowego wspomagania różnych protokołów komunikacyjnych (np. TWI). Ich niekwestionowanymi plusami są za to cena i dostępność. Jakieś wersje Attiny można dostać w prawie każdym sklepie z elektroniką. Zwykle są łatwo dostępne w obudowach do montażu przewlekanego. Z punktu widzenia początkującego elektronika jest to znaczące ułatwienie przy lutowaniu. Jeśli chodzi o pomniejszenie pamięci, to faktycznie może być to na początku problem, lecz w kolejnych lekcjach pokażę, jak kosztem porzucenia kilku wygodnych funkcji oferowanych przez Arduino IDE można oszczędzić naprawdę sporą ilość miejsca. Pokażę też jak poprzez odpowiednie biblioteki realizować komunikację I2C, jednak żeby do tego dojść, musisz się nauczyć, jak szybko i łatwo podłączyć Attiny do swojego komputera i programować je za pomocą Arduino i Arduino IDE.

Czego używam w przykładach?

Co trzeba zainstalować?

Na początku należy pobrać plik(link poniżej), który zmodyfikuje Arduino IDE w taki sposób, że będziemy mieli większy wybór mikrokontrolerów
na liście "Płytka". Definicje nowych płytek

Następnie musisz znaleźć katalog, w którym Arduino zapisuje tworzone przez Ciebie projekty. U mnie to:

C:\Users\Marcin\Documents\Arduino\

Tam utwórz katalog o nazwie: hardware (o ile go nie ma). Kolejnym krokiem jest wypakowanie wcześniej ściągniętego archiwum do katalogu hardware (wystarczy sam folder tiny. Folder Tools jest niepotrzebny) ostatecznie ścieżka powinna wyglądać mniej więcej tak:

C:\Users\Marcin\Documents\Arduino\hardware\tiny

Kolejna rzecz to odpalenie Arduino IDE i sprawdzenie, czy wszystko zrobiliśmy dobrze. W zakładce Narzędzia -> Płytka powinieneś mieć teraz listę powiększoną o dość pokaźną rodzinę Attiny (tak jak na screenie). Nie zmieniaj jednak jeszcze ustawień.

Jeżeli brakuje nowych płytek, wówczas należy skopiować plik hardware/tiny/Prospective Boards.txt do pliku hardware/tiny/boards.txt

Możesz też wyedytować plik hardware/tiny/boards.txt i usunąć 'niepotrzebne' wpisy - pozwoli to znacznie ograniczyć listę płytek w menu, która taka długa może być niewygodna. Oczywiście zachowaj sobie kopię tego pliku, żeby w przyszłości dodać nowy cel (target) gdy będziesz chciał skorzystać z nowego procesora.

Teraz musisz załadować do swojego Arduino projekt ArduinoISP (jest on dostępny w Plik -> Przykłady ->ArduinoISP). ArduinoISP to program, który przekształca twoją płytkę w programator bez konieczności wyciągania kości Atmegi, czy podłączania dodatkowych elementów. Po zaprogramowaniu, poza potwierdzeniem płynącym z kompilatora, możesz dodatkowo podłączyć diodę do pinu 9-tego na Arduino (przez rezystor!). Dioda powinna rytmicznie pulsować. To sygnał, że Twoje arduino jest już gotowe do programowania innych mikrokontrolerów.

Co trzeba podłączyć?

Kolejny krok to połączenie Twojego Arduino (teraz jest programatorem) z Attiny. Szczegółowo opiszę procedurę podłączania Attiny2313. (Na końcu artykułu możesz znaleźć schematy innych Attiny) Szybki rzut oka w kartę techniczną 2313 i już wiesz co z czym połączyć:

Arduino(nrPinu) 10 11 12 13 5V GND
Attiny(nrPinu) 1 17 18 19 20 10

Ostatnia rzecz: Zmień ustawienia Narzędzia -> Płytka na posiadaną przez Ciebie płytkę (w moim przypadku Attiny2313 @8MHz. Teraz zmień Narzędzia -> Programator -> Arduino as ISP wybierz ponownie Narzędzia -> wypal bootloader i GOTOWE!

Opcja „wypal bootloader” tak naprawdę nie wgrywa żadnego kodu na Attiny, więc nie musisz się martwić, że ta operacja uszczupli i tak niewielkie zasoby pamięci. Ustawia ona tylko FuseBity, o których wspomnę w kolejnych artykułach.

UWAGA! W anglojęzycznych opisach znalazłem informacje, że powinno się podłączyć kondensator elektrolityczny 10 mikroF między RESET a GROUND na płytce Arduino. Ja jednak pominąłem ten krok i zdaje się nie mieć to wpływu na funkcjonowanie całości.

Jak programować?

Ostatnia rzecz: W Arduino IDE Zmień ustawienia Narzędzia -> Płytka na posiadaną przez Ciebie płytkę (w moim przypadku Attiny2313 @8MHz). Teraz zmień Narzędzia -> Programator -> Arduino as ISP wybierz ponownie Narzędzia -> wypal bootloader i GOTOWE!

Opcja „wypal bootloader” tak naprawdę nie wgrywa żadnego kodu na Attiny, więc nie musisz się martwić, że ta operacja uszczupli i tak niewielkie zasoby pamięci. Ustawia ona tylko FuseBity (póki co nie musisz zaprzątać Sobie nimi głowy).

Żeby wszystko sprawdzić załaduj nieśmiertelny przykład mrugania diodą (to taki mikrokontrolerowy odpowiednik "Hello Wordl" :) ).

    int led = 1;

    void setup() {                
      pinMode(led, OUTPUT);     
    }

    void loop() {
      digitalWrite(led, HIGH);
      delay(1000);
      digitalWrite(led, LOW);
      delay(1000);
    }

Podłącz przez rezystor diodę do pinu nr 3 swojego Attiny 2313 i podziwiaj!

Masz przyjazne środowisko, łatwość kompilacji, programowania i dobrze znane Ci intuicyjne komendy!

Przykład jak widać działa na standardowych komendach Arduino IDE. Żeby być sprawiedliwym, muszę jednak wspomnieć, że nie wszystkie komendy z Arduino IDE będą działały na Attiny. Oto lista tych, które powinny:

Dodatkowo są jeszcze AnalogRead i AnalogWrite, ale akurat Attiny2313 nie ma pinów z ADC. (Za to Attiny 45 i 85 jak najbardziej i tam te funkcje się przydadzą)

Jeśli Chcesz wrócić do programowania Arduino musisz zmienić:

Jeśli potem znowu chcesz programować Attiny:

Inne mikrokontrolery

Poniżej znajdują się schematy podłączenia innych wybranych mikrokontrolerów:

Attiny25/45/85

Arduino(nrPinu) 10 11 12 13 5V GND
Attiny(nrPinu) 1 5 6 7 8 4




Attiny44/84"

Arduino(nrPinu) 10 11 12 13 5V GND
Attiny(nrPinu) 4 7 8 9 1 14