Vyhledávání

#16 - Náš první klon Arduina

13.07.2014 20:00

Náš první klon Arduina

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í.

Board - ATtiny
Obr. 1: Čipy ATtiny v nabídce Board

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 ATtiny85
Obr. 2: Čip ATtiny
ATiny85 pinout
Obr. 3: Rozložení pinů ATtiny85

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
Zapojení
Obr. 4: 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.

ATmega168
Obr. 5: ATmega168
Piny ATmega168
Obr. 6: Piny ATmega168

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í
Obr. 7: Zapojení

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.

 

Kam pokračovat?


<-- #15 - Arduino a Ethernet shield || #17 - Arduino projekty: Keypad a robotická ruka -->
Zpět

Diskusní téma: #16 - Náš první klon Arduina

Datum
Vložil
Titulek

UNO - komunikace

GE.
Nedaří se :
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x30
Ani ve správě počítače UNO nevidím. "neznámé zařízení" a ovladače nebere.
Co s tím ?
FRI

Datum
Vložil
Titulek

Bootloader atiny85

Zdravim,
chtěl bych se zeptat zda jde atinu85 pouzik ke komunikaci s bt? Zkouse jsem to a asi mam nejaky probem s casovanim, posia me to nesmysy. Je potreba bootoader k tomu?

A jeste bych se zeptal zda nekdo nema bootloader do atmegy 168s internim 8mhz. Nasel jsem ruzne na netu ale kdyz je vypalim do procesoru tak mi pak nejde nahravat pres ex tx.

Datum
Vložil
Titulek

atiny85

Stahl jsem archiv a rozbalil do složky jak je psano a nic noveho se neoběvilo mám arduino Ide1.6.5

Datum
Vložil
Titulek

Re: atiny85

cez FILE/PREFERENCES
zadaj do pola dole Aditional board manager:
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
potom cez Tool/Boards/Board managen vyhladat 'tiny' a naj 'install'

Datum
Vložil
Titulek

snažím se naprogramovat attyny 85 a nejdeto

udělal jsem vše podle návodu a arduino hlásí : Arduino: 1.6.5 (Windows 7), Vývojová deska: "ATtiny85 (internal 1 MHz clock)"

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

java.lang.NullPointerException

at cc.arduino.packages.uploaders.SerialUploader.burnBootloader(SerialUploader.java:305)

at processing.app.Editor$59.run(Editor.java:2578)

at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

a tky hlásí :
Arduino: 1.6.5 (Windows 7), Vývojová deska: "ATtiny85 (internal 1 MHz clock)"

Vybraná vývojová deska závisí na jádře 'arduino' (neinstalováno).




tak bych potřeboval pordit co s tím

Datum
Vložil
Titulek

ATtiny13

Pomohl by mi někdo dát dohromady knihovny pro ATtiny13? Nedaří se mi je na internetu najít, buď nefungují, nebo jsou zastaralé no novou verzi IDE.

Datum
Vložil
Titulek

atmega328

Ahoj

Skusil som tiny85 - vsetko slape v poriadku po uprave arduino ISP :

#define RESET 10

#define LED_HB 13

Potom som skusil megu328, pri programovani cez arduino slape vsetko OK, ale ked som dal prevodnik, tak 1x sa nahral program do chipu OK, ale pri dalsom nahravani som dostal nasledovne hlasky :

avrdude: Version 6.0.1, compiled on Oct 21 2013 at 17:07:18
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "/usr/share/arduino/hardware/tools/avrdude.conf"
User configuration file is "/home/zeus/.avrduderc"
User configuration file does not exist or is not a regular file, skipping

Using Port : /dev/ttyUSB0
Using Programmer : arduino
Overriding Baud Rate : 57600
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [00]
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [00]
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [00]
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [00]
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [00]
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [00]
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [00]
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [e0]
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xe0
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [00]
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [00]
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

avrdude done. Thank you.


Ked stlacim reset na klone, tak sa program nahra a funguje, ale naskoci hlaska :

Problem uploading to board.

Po opatovnom napaleni bootloadera to funguje zase 1x cisto a potom s chybou.

2x som to rozobral a postavil nanovo, tak predpokladam ze chyba v zapojeni nebude.

Kde bude pes zakopany ? :-)

Datum
Vložil
Titulek

Re: atmega328

Takze odpoviem si sam :-)

Po troske googlenia a najdenia si casu sa podarilo vyriesit dany problem.
Moj usb prevodnik nema pin s oznacenim DTR. DTR - Data terminal ready. V podstate ho ma, ale nie je vyvedeny z IO na pin. Takze stacilo mat pevnu ruku pri spajkovani a naspajkovat tenky drot na DTR pin a k nemu dat do serie 2ks 1 mikroFaradove keramicke kondenzatory. Tento vyvod potom prepojit s ATMEGA328 na pin RESET a cuduj sa svete a ono to funguje :-)

Datum
Vložil
Titulek

Programator

Ahoj,
Dovolím si malou připomínku zkoušel jsem to podle návodu naprogramovat ATtinny85 a dostal jsem se do problemu. Musel jsem upravit standartni program co je v knihovne arduina ISP a zmenit hodnnotu #define RESET ss na #define RESET 10
Desku mam arduino uno SMD.

© 2015 Všechna práva vyhrazena.

www.hwkitchen.com