Série Arduino základy
Pokud jste někdy pracovali s Arduinem, určitě víte, že se tato deska programuje přes USB rozhraní a počítači se hlásí jako standardní sériová linka. Díky tomu se na straně počítače (přesněji řečeno na straně USB Host) dá s Arduinem jednoduše komunikovat oběma směry. Na straně Arduina pak komunikace probíhá skrz třídu Serial
.
V tomto článku bych se chtěl podrobněji podívat na možnosti Arduina jako USB device. Vysvětlím, jak přesně komunikace probíhá a také ukážu, jak změnit Arduino na téměř libovolné USB zařízení (tedy nejenom na sériovou linku, ale třeba na MIDI nebo HID).
Zapojení Arduina
![img](http://uart.cz/wp-content/plugins/wp-special-textboxes/images/info.png)
Na schématu níže je vidět zapojení obou mikrokontrolérů Arduina. Ten vpravo je ATMega328, který tvoří srdce desky a který se běžně programuje pomocí Arduino IDE. V levé části schématu je pak vidět ATMega8U2, který obstarává USB komunikaci a hlásí se jako USB device. Oba tyto mikrokontroléry jsou spojeny přes UART rozhraní.
![Arduino-a-USB V pravé části schématu je ATMega328, který je přes UART připojen k ATMega8U2. Ten pak slouží jako UART-USB převodník.](http://uart.cz/wp-content/uploads/2012/01/arduino_avr-schm.png)
Dále jsou ve schématu ještě ICSP konektory, které mohou být užitečné, pokud chcete některý mikrokontrolér programovat externím programátorem (například pokud chcete změnit bootloader). Fyzické umístění ICSP konektorů na Unu verze 2 je následující:
![Arduino-uno-rev2-icsp ICSP konektory a ATMega8U2 na Arduino Uno rev 2.](http://uart.cz/wp-content/uploads/2012/01/ArduinoUnoFront-rev2.jpg)
Pokud máte doma starší Uno (revize 1), pravděpodobně nemáte konektor ICSP1 osazený.
ATMega328 se dá jednoduše přeprogramovat jediným tlačítkem pomocí Arduino IDE. Pro začátečníky je to naprosto vyhovující a dostačující a víc ani vědět nemusí. Občas se ale může stát, že potřebujete přeprogramovat i ATMega8U2 — například chcete aby se Arduino hlásilo počítači jako MIDI zařízení. Nebo chcete aktualizovat stávající firmware tak, aby LED označené RX a TX během komunikace neblikaly, ale svítily (to mě zrovna teď napadlo, nezkoušel jsem to :)). K tomuto je už potřeba více úsilí a nelze to provést z Arduino IDE.
DFU mód
Mikrokontrolér ATMega8U2 (případně 16U2, pokud máte Uno verze 3) má bootloader, který lze přepnout do tzv. DFU módu (Device Firmware Upgrade). Pokud Arduino připojíte k počítači a přepnete jej do DFU módu, je možné přeprogramovat 8U2 přímo skrz USB sběrnici a nepotřebujete k tomu žádný externí programátor.
Postup, jak přepnout Uno do DFU, se maličko liší v revizi 1 a revizi 2 a 3.
Arduino UNO revize 2 a 3
Tyto verze mají osazen ICSP konektor u 8U2 a mají i potřebný rezistor, který spojuje pin HWB (PD7) se zemí. Takže stačí připojit Arduino k počítači a krátce spojit pin RESET se zemí.
![Uno2_3-DFUmode Uno revize 2 nebo 3 lze přepnout do DFU módu krátkým spojením dvou pinů vlevo na ICSP konektoru.](http://uart.cz/wp-content/uploads/2012/02/ArduinoUno_R3_Front.jpg)
Arduino UNO revize 1
Úplně první verze Una ještě nemá osazený ICSP konektor a nemá osazený ani HWB rezistor, takže zde je postup o maličko složitější. Nejdříve je potřeba na zadní stranu připájet HWB rezistor, poté připojit Arduino k počítači a potom krátce spojit RESET se zemí.
![Uno1-hwb_rezistor Na zadní straně Arduina jsou připravené plošky, na které je potřeba připájet rezistor o hodnotě alespoň 1 kOhm.](http://uart.cz/wp-content/uploads/2012/02/ArduinoUnoBack.jpg)
![Uno1-DFUmode Poté co připájíte HWB rezistor stačí krátce spojit RESET se zemí.](http://uart.cz/wp-content/uploads/2012/02/ArduinoUnoFront.jpg)
V tomto okamžiku by mělo být Arduino v DFU módu. To poznáte například v systémových informacích. V normálním režimu se deska hlásí jako Arduino Uno, v DFU módu se pak hlásí jako Arduino Uno DFU.
Nahrání firmwaru
Jakmile máme Arduino v DFU režimu, nic nám již nebrání nahrát do ATMega8U2 nový firmware. Na operačním systému Windows budete k tomuto kroku potřebovat program FLIP vyvíjený firmou Atmel. Na systémech Linux nebo Mac OS je potřebný program dfu-programmer (v Linuxových distribucích by mohl být v systémových repozitářích).
Na Windows pak již stačí spustit FLIP a nahrát hex soubor s novým firmware. Program dfu-programmer se používá z terminálu následovně:
dfu-programmer at90usb82 flash soubor-s-firmware.hex dfu-programmer at90usb82 reset
Poté již stačí odpojit a znovu připojit USB kabel. V tomto okamžiku už by se Arduino mělo hlásit novým firmware.
Firmware pro Uno
- Originální firmware Una — sériový port.
- HIDUINO — MIDI zařízení.
- Uno Keyboard — HID zařízení (USB klávesnice).
Případně si můžete napsat vlastní firmware s pomocí knihovny LUFA.
Závěr
Na závěr ještě jedno upozornění: jakmile změníte firmware ATMega8U2, již nelze Arduino programovat skrz Arduino IDE. Je tedy nutné nejdříve desku naprogramovat a potom změnit firmware. Při jakékoliv další změně programu je nutné nejdříve nahrát původní firmware a teprve potom programovat. Celý tento postup je dost nešikovný a zdlouhavý.
Jedným možným řešením je vyrobit si desku s ATMega8U2, která bude mít vyveden UART. Ten pak připojíme k pinům 0 a 1 na Arduinu.
Druhou možností je mít externí programátor, kterým se bude Arduino programovat. K tomu může posloužit třeba druhé Arduino.