Close

Náš první klon Arduina

Čip ATtiny 85

V dnešním dílu si ukážeme, jak se dají pomocí Arduina programovat jiné čipy od Atmelu. Na začátek si předvedeme, jak pracovat s malými čipy z řady ATtiny, poté se dostaneme k větším čipům z řady ATmega a jak už název článku napovídá, vytvoříme vlastní klon Arduina.

Už v prvním dílu jsem se zmínil o neoficiálních deskách, tzv. klonech. Nejedná se jenom o sériově vyráběné desky. Takovýto klon si může každý udělat sám. Ještě než se pustíme do stavby vlastní desky, ukážeme si, jak se dají programovat menší čipy z řady ATtiny. A poté už se dostaneme ke tvorbě vlastní plnohodnotné desky.

Příprava Arduina

Než se pustíme do připojování a programování čipů, musíme z Arduina udělat ISP programátor. Ten slouží k nahrávání programů do připojených čipů. To provedeme velmi jednoduše – z Examples otevřeme program ArduinoISP a nahrajeme ho do našeho Arduina. V dalším kroku musíme „identifikovat“ důležité piny, které při programování použijeme. Jsou to: MISO, MOSI, SCK a SS. Jejich umístění se u různých desek může lišit. Příklad rozmístění pinů vidíte v tabulce.

Model MISO MOSI SCK SS
Mega 50 51 52 53
UNO 12 11 13 10

Poznámka: Informace o pinech jsou k nalezení v dokumentaci každé desky. Některé verze ale nemusejí mít tyto piny lehce dostupné. Například Leonardo je nemá vyvedeny standardně. O jeho použití jako ISP programátor pojednává tento článek.

Na vybraném čipu si podle dokumentace najdeme piny MISO, MOSI, SCK a Reset. Poté propojíme sobě odpovídající piny Arduina a čipu. Pin SS Arduina propojíme s pinem Reset čipu. Tímto se budeme podrobněji zabývat dále.

Čipy ATtiny

Jak už jsem zmínil dříve, v řadě ATtiny nalezneme menší a méně výkonnější čipy. To ale nevadí, protože nám v některých situacích budou plně dostačovat. Běžně se setkáme s použitím čipů ATtiny85, ATtiny45, ATtiny84, ATtiny44 a dalšími. Na internetu nalezneme i jiné čipy s této řady. Důležité však je, aby použitý čip měl k sobě odpovídající „popis“ – informaci v podobě textu, která programu říká informace o čipu, jako jsou rychlost, velikost paměti, rychlost komunikace a další. Soubor s informacemi o běžných deskách nalezneme ve složce s Arduino IDE pod hardware/arduino/boards.txt. Abychom si tento soubor nezahltili informacemi, umístíme data o čipech ATtiny do složky, kterou máme nastavenou pro ukládání programů Arduina. Tu většinou najdeme v Dokumentech ve složce Arduino. Stáhneme si tento archiv a rozbalíme jej do složky Arduino v Dokumentech. Pokud máme spuštěné Arduino IDE, restartujeme jej. V nabídce Board by se nám nyní mělo objevit několik nových možností.

Menu Boards v Arduino IDE s ATtiny čipy

Menu Boards

My si předvedeme, jak programovat čip ATtiny85. Ten má osm pinů – dva piny pro napájení, jeden pro restart a pět zbývá na libovolné použití. Popis funkcí pinů vidíme na obrázku 3. Orientaci čipu určíme buď podle půlkruhového symbolu na jedné ze stran (viz obr. 3), nebo podle označení pinu 1 kroužkem. Když budeme chtít v programu pracovat s pinem, dovoláme se ho podle číselného označení popsaného zvenku (čísla uvnitř čipu nás v tuto chvíli nezajímají).

Čip ATtiny 85

ATtiny 85

Piny ATtiny85 a jim odpovídající piny Arduina

ATTiny 85 pinout

Jelikož se jedná o malé čipy s menším výkonem, i škála použitelných funkcí je zde omezena. Většinu základních funkcí zde ale najdeme. Jsou to:

  • pinMode()
  • digitalWrite()
  • digitalRead()
  • analogRead()
  • analogWrite() – připomeňme si, že je tato funkce použitelná jen u pinů PWM
  • millis()
  • micros()
  • delay()
  • delayMicroseconds()

Také můžeme použít ještě neprobrané funkce shiftOut() a pulseIn().

Základ použití máme vysvětlený a můžeme se pustit do propojení Arduina s čipem. Propojení provedeme následovně:

Arduino Čip
MISO MISO
MOSI MOSI
SCK SCK
SS RESET
GND GND
5V 5V
Propojení Arduino Mega a ATtiny85

Zapojení

Po zapojení se ujistíme, že v Arduinu máme nahraný program ArduinoISP (viz výše). Čipy ATtiny85 jsou ve výchozím nastavení taktované na frekvenci 1MHz, proto z nabídky Board vybereme možnost ATtiny85 (internal 1 MHz clock). Pro otestování funkčnosti připojíme mezi Pin 0 (MOSI) a GND přes 330 Ohm resistor LED diodu. Z Examples otevřeme program Blink a proměnnou led nastavíme na hodnotu 0.

int led = 0;

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

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

Poznámka: Změnu taktovací frekvence na 8 MHz provedeme jednoduše – z nabídky vybereme možnost ATtiny85 (internal 8 MHz clock) a v menu Tools klikneme na Burn Bootloader. Stejným postupem čip nastavíme zpět na frekvenci 1 MHz.

Čipy ATmega

Pokud se chceme od malých čipů ATtiny přesunout k něčemu výkonnějšímu, nabízí se nám použití čipů ATmega. Ty jsou větší, výkonnější a mají více použitelných pinů. Stejně jako u ATtiny i zde platí, že můžeme použít všechny piny, ke kterým nalezneme patřičnou modifikaci souboru boards.txt. Jako nejjednodušší se jeví použití těch čipů, na kterých jsou založeny standartní desky Arduina, tedy ATmega168, ATmega328 a další. My si ukážeme použití čipu ATmega168. Stejně jako u ATtiny, i zde musíme najít potřebné piny.

Čip ATmega168

ATmega 168

Rozložení pinů ATmega168

ATmega 168 pinout

Abychom využili celý potenciál čipu, budeme potřebovat ještě 16 MHz oscilátor, 10 kOhm resistor, dva 22 pF kondenzátory a spínač (tlačítko). Také budeme potřebovat USB-serial převodník. Na výběr máme z více možností – FTDI Basic Breakout – 5V, USB 2 Serial Converter a další. Vše zapojíme podle schématu.

Zapojení Arduino on board

Arduino on board

V našem Arduinu máme nahraný program ArduinoISP. Poté z nabídky Board vybereme Arduino Diecimila or Duemilanove w/ ATmega168. V Tools/Programmer vybereme možnost Arduino as ISP a spustíme Burn Bootloader. Po chvilce se ve stavovém řádku zobrazí Done burning bootloader. Tímto jsme nastavili čip tak, aby byl programovatelný pomocí USB-serial převodníku. V dalším kroku připojíme čip s převodníkem. To provedeme tak, že GND čipu propojíme s GND převodníku a stejně tak 5V. Dále propojíme RX pin čipu s TXD převodníku a TX čipu s RXD převodníku. Tím máme čip připravený k programování. Od čipu odpojíme Arduino, kterým jsme jej programovali a připojíme převodník k PC přes USB. V menu Serial Port by se nám měla objevit nová možnost, kterou vybereme. Poté se můžeme pustit do programování našeho nového klonu Arduina tak, jak jsme zvyklí.

Zdroje obrázků

[Rozložení pinů ATtiny85]

[Rozložení pinů ATmega168]

V případě jakýchkoliv dotazů či nejasností se na mě neváhejte obrátit v komentářích.

Zbyšek Voda

17 Comments on “Náš první klon Arduina

poprad
22.10.2018 at 10:39

Zdravím.
Nějak se mi nedaří uložit zavaděč do Arduino UNO. Chci se jen ujistit, jestli dělám správné kroky:
1. Připojil jsem Arduino Mega2560
2. Nahrál jsem do Mega program
3. Připojil jsem piny:
z MEGA MISO 50 do UNO MOSO 12
MOSI 51 MISO 13
SCK 52 SCK 11
SS 53 RESET
4. Nastavil jsem desku UNO (je tam ATMEGA 328P v DIP)
5. Nastavil jsem Programátor Arduino as ISP
6. Spustil jsem Vypálit zavaděč

Stále mi to hlásí:
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xd3
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.

Chyba při vypalování zavaděče.

Kde je chyba v postupu? To UNO někdo přepálil na ovládáni joystiku a vymazal zavaděč. Tak to chci dát zpět na ARDUINO UNO.

Diego
5.11.2016 at 12:56

Ahoj, dal by se někde stáhnout soubor na používání čipů ATmega místo ATtiny? Konkrétně mě zajímá ATmega1284. Díky

Michal
28.9.2016 at 21:14
Radek
30.1.2016 at 16:10

Dobrý den,
zkoušel jsem vytvořit klon z Atiny85. Bohužel jsem nebyl úspěšný. Nejdříve jsem měl nainstalováno IDE 1.6.7. Když jsem doplnil adresář „hardware“ k Atiny, tak kompilace vykazovala chyby a nebyl jsem úspěšný. Když jsem poslední verzi odinstaloval a nainstaloval IDE 1.0.6, tak to adresář „hardware“ implementovalo v pořádku. Po kompilaci se objevila hláška avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85. Nicméně se to nepovedlo, zapojení i pak připojení diody je v pořádku. Zajímalo by mne, kde by mohla být chyba a zda vůbec lze implementovat data o Atiny do poslední verze IDE. Děkuji Radek

Jan Štěpánek
4.8.2015 at 18:02

Dobrý den
Práce s čipem ATtiny 45 se mě dařila.Ale nedávno jsem při programování pomocí arduina,odlkepl external clock 16Mhz a teď se na něj nijak nejde dostat,je nějaká možnost jak to napravit.Děkuji …

Pavel
28.7.2015 at 14:48
Pavel
28.7.2015 at 14:26

To ano ale tam je jen:
attiny85.name=ATtiny85 (internal 1 MHz clock)
attiny85.bootloader.low_fuses=0x62
attiny85.bootloader.high_fuses=0xdf
attiny85.bootloader.extended_fuses=0xff
attiny85.upload.maximum_size=8192
attiny85.build.mcu=attiny85
attiny85.build.f_cpu=1000000L
attiny85.build.core=arduino:arduino
attiny85.build.variant=tiny8

signatura čipu tam nikde není – nejspíš ji má někde přímo avrdude ale nepodařilo se mi zjistit kde.

Zbyšek Voda
28.7.2015 at 14:30
Pavel
28.7.2015 at 14:12

Děkuji. Ještě bych měl jeden dotázek.
Z e-bay mi dorazil asi nějaký klon Attiny85 a při nahrávání mi avrdude hlásí:
„avrdude: Device signature = 0x1e930b
avrdude: Expected signature for ATtiny45 is 1E 92 06
Double check chip, or use -F to override this check.“
Předpokládám tedy že mám buďto možnost nastudovat spoustu nastavení které avrdude má a spouštět jej ručně s parametrem -F. To je ale při častějším programování poněkud nepraktické. Dá se někam přidat Device signature i té mojí Attiny85? Kam?
Děkuji.

Zbyšek Voda
28.7.2015 at 14:19

Popisy čipů jsou uložené v boards.txt 🙂

mar3k
22.3.2017 at 19:43

caw Pavel, počúvaj mal by som na teba jednu otázku ako si vyriešil tento problém

avrdude: Expected signature for ATMEGA328P is 1E 95 0F
Double check chip, or use -F to override this check.

lebo už som skúšal XY návodov a nedarí sa mi to rozbehať ….. ďakujem

Pavel
7.7.2015 at 14:01

Nejde mi stáhnout soubor s informacemi o boards – odkaz nespustí stahování ani ve FF aniv IE. 🙁

doraktomi
22.6.2015 at 21:51

Napsat komentář