Realizace
V této části bude nejprve popsán použitý kit, následně programové vybavení s nutným nastavením a nakonec naprogramování vytvořého jednoduchého programu.
Hardware
Jak již bylo psáno v úvodu, pro pokusy byl vybrán kit od firmy Kramara s mikrokontrolérem AT91SAM7S256 (dokumentace viz [2]). Kit obsahuje veškeré součástky nutné pro běh mikrokontroléru a pro správnou funkci postačuje přivést napájecí napětí, které má být v rozsahu 3,0 až 3,6V. Kmitočet krystalu je 18,432MHz, kit má vyvedeno 32 I/O linek, navíc je vyvedeno rozhraní USB na konektor USB-B a JTAG rozhraní na 20-ti pinový konektror MLW.
Mikrokontrolér AT91SAM7S256 obsahuje 64kB datové paměti RAM, 256kB programové paměti FLASH, jeden USB port, 2 UART rozhraní, SPI rozhraní, TWI, PWM, osmikanálový 10-ti bitový AD převodník.
Software
Pro psaní programu lze použít mnoho různých prostředků, ovšem zde se zaměříme na volně dostupné nástroje. Jako vývojové prostředí bude použito Eclipse IDE s překladačem Yagarto, pro programování program SAM-BA od Atmelu. K používání Eclipse je nutné mít nainstalovány knihovny Sun JAVA Runtime Environment - JRE [3]. Dále nainstalujeme Yagarto (ke stažení [4]), při instalaci nejsou potřebné žádné zvláštní kroky. Nyní můžeme nainstalovat vývojové prostředí Eclipse (ke stažení [6]), instalace taktéž nečiní žádné potíže. Nakonec je třeba nainstalovat Zylin Embedded CDT plugin, jehož instalace se provede již z prostředí Eclipse, podrobný návod v [7]. Pro správnou funkci je ještě nutné nakopírovat GNU ARM Eclipse Plug-in (ke stažení [8]) do adresáře Eclipse/plugins. Nyní máme připravené vývojové prostředí pro psaní programů.
Pro programování je nutné stáhnout a nainstalovat AT91 In-system Programmer [9].
První program
Po prvním spuštění vývojového prostředí Eclipse budeme dotázáni na pracovní adresář, který vybereme. Poté již můžeme zvolit File->New->C Project, v bloku Tolchain vybereme WinARM, Yagarto, zadáme jméno projektu a potvrdíme. Nyní bychom mohli vytvářet všechny zdrojové, hlavičkové a ostatní soubory, ovšem to je pro začátek příliš složité a můžeme s výhodou použít již hotovou kostru či jednoduchý projekt, který rozšíříme podle potřeby. V tomto případě překopírujeme veškeré soubory do adresáře našeho projektu a v prostředí Eclipse zvolíme File->Refresh, tím se nám zobrazí nově vložené soubory. Vybereme Project->Properties->C/C++ Build a odškrtneme položku Generate Make/files automatically (vysvětlení důvodu dále v textu, viz Problémy), dále do položky Build directory: vybereme pracovní adresář (musí tam být Makefile). V C/C++ Build->Settings->Binary Parsers necháme zaškrtnutý pouze GNU Elf Parser.
Nyní pomocí Project->Build Project přeložíme projekt a měli bychom získat výstupní soubor *.bin, ten již lze pomocí programátoru nahrát do mikrokontroléru. Pro jednoduší spouštění programovacího programu lze tento spouštět z prostředí Eclipse: Run->External Tools->External Tools Configurations, zde zvolíme New a jako Location dáme umístění programovacího programu (např: C:\Program /files\ATMEL Corporation\AT91-ISP v1.12\SAM-BA v2.8\SAM-BA.exe) a jako Working Directory zvolíme adresář o úroveň výše (C:\Program /files\ATMEL Corporation\AT91-ISP v1.12\SAM-BA v2.8). Nyní můžeme spustit program SAM-BA pomocí ikony zelené šipky s taškou.
Způsob programování
Mikrokontrolér je vybaven bootloaderem, takže jej lze naprogramovat "velmi pohodlně" přes rozhraní USB, příliš pohodlná není aktivace bootloaderu.
Pro aktivaci bootloaderu odpojíme napájení, spojíme Jumper J2, připojíme napájení, počkáme 10-30s, odpojíme napájení, rozpojíme jumper J2 a připojíme napájení. Nyní po připojení k PC by měl operační systém detekovat nové zařízení Atmel AT91xxxxx Test Board a bude vyžadovat instalaci ovladače, který nalezneme v adresáři s programátorem SAM-BA. Po instalaci ovladače již nic nebrání spuštění programu SAM-BA, vybereme umístění \usb\ARM0 a desku AT91SAM7S256-EK a připojíme se stiskem Connect. V záložce Flash vybereme v položce Send File Name jméno našeho přeloženého programu *.bin a pošleme do mikrokontroléru tlačítkem Send File. Nyní je třeba mikrokontrolér resetovat nebo napsat v příkazovém řádku programu SAM-BA příkaz go 0x100000.
Ukázka zdrojového souboru pro střídavou změnu výstupních pinů (blikání LED):
#include "AT91SAM7S256.h" // hlavickovy soubor s definicemi mikrokontroleru void zpo(unsigned long time); // hlavicka funkce zpozdeni int main (void) { // hlavni funkce volatile AT91PS_PIO pPIO = AT91C_BASE_PIOA; // inicializace pro pristup k portum pPIO->PIO_PER = 0x000000FF; // povoleni PIO Enable Register pro piny 0-7 pPIO->PIO_OER = 0x000000FF; // povoleni Output Enable Register pro piny 0-7 while(1) { // nekonecna smycka pPIO->PIO_SODR = 0x000000F0; // nastaveni bitu 4-7 (Set Output Data Register) zpo(3000); // volani zpozdeni pPIO->PIO_CODR = 0x000000F0; // nulovani bitu 4-7 (Clear Output Data Register) zpo(3000); // volani zpozdeni } return 0; } void zpo(unsigned long time) { // funkce zpozdeni while(time--); }
Problémy
Automaticky generovaný makefile
Pokud jsem při překladu nechal generovat automaticky makefile, fungovalo vše dobře pro požadovaný výstupní soubor *.hex. Když jsem ve vlastnostech projektu dal požadovaný výstupní soubor *.bin, nedošlo ke změně makefile a při překladu mi překladač vytvořil opět jen *.hex. Z tohoto důvodu jsem musel ručně v souboru makefile přepsat požadovaný výstupní soubor na *.bin a ve vlastnostech projektu odškrtnout položku Generate Make/files automatically.
Nefunkční SAM-BA
Občas se mi nepodařilo poslat program do mikrokontroléru programem SAM-BA. Bylo zahájeno programování ale po chvíli došlo k chybě. Při použití programu SAM-PROG v2.4, který je spolu s programem SAM-BA v instalačním balíčku od Atmelu jsem nikdy problém neměl.
Problém s Win7
Při aktivaci bootloaderu a připojení pomocí USB k PC s operačním systémem Windows 7 dojde k automatické detekci a instalaci ovladače, operační systém vyhodnotí zařízení jako GPS Camera Detect (COMx) a ani ruční vnucení správného ovladače nevede ke správné funkčnosti zařízení. Tento problém se mi nepodařilo vyřešit, ve WinXP na stejném PC vše funguje dobře.
Závěr
V práci jsou shrnuty základní kroky nutné pro žačátek vývoje aplikací s využitím mikrokontrolérů s jádrem ARM, konkrétně od firmy Atmel. Podrobnější informace a detailní nastavení nalezne čtenář v odkazech v části literatura. V práci je rovněž popsán jednoduchý program, který má za úkol blikat LED diodou a je ke stažení zde. Při práci se rovněž objevili problémy, za nejvážnější považuji nefunkčnost ovladače programátoru pod operačním systémem Windows 7 a tím nemožnost programování přes vestavěný bootloader. Tento problém se bohužel nepovedlo vyřešit a pro programování byl využit operační systém Windows XP.
Literatura
- [1] Kramara s.r.o. - Vývoj a výroba elektroniky http://www.kramara.com
- [2] Dokumentace AT91SAM7S256-KIT http://www.kramara.com/podklady/AT91SAM7S256-kit/doku_r1.pdf
- [3] JRE download - http://java.sun.com/javase/downloads/index.jsp
- [4] Yagarto download - http://www.yagarto.de/index.html#download
- [5] Yagarto instalace - http://www.yagarto.de/howto/yagarto1/index.html
- [6] Eclipse download - http://eclipse.org/downloads/packages/
- [7] Eclipse nastavení - http://www.yagarto.de/howto/yagarto2/index.html
- [8] GNU ARM Eclipse Plug-in - http://sourceforge.net/projects/gnuarmeclipse/
- [9] AT91AT91 In-system Programmer (SAM-BA) - http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3883
Martin Sobotka, David Polanský UREL, FEKT, VUT Brno
Komentáře
Zdroje
Dobry den,
zajimavy clanek - mohl by jste jeste pripsat zdroje a linky na ktere se odkazujete v textu ?
Diky ;)
Doplneno
UPS, omlouvam se, moje chyba. Mel jsem chybu v kodu, kterou editor prelozil spravne, ale redakcni system uz ne. Opraveno.
Mám nainstalovaný Eclipse
Mám nainstalovaný Eclipse verze 3.3.2. (Europa - je na CD od Kramary) a nedokážu vytvořit bin soubor, ani podle vašeho návodu. Díky, M. Pech.
Tak jsem zjistil, že tu
Tak jsem zjistil, že tu mám účet, tak už nebudu anonymní.
Ještě jednou jsem zkoušel nastavení vytvoření bin souboru.
Eclipse vždy vytvoří soubor s příponou hex. Jeho obsah se však liší od toho, kdy nechám vytvořit hex soubor. Možná, že jen Eclipse nedá správnou příponu, to ještě vyzkoušené nemám.
ovládání zátěže
Lze, prosím, uvedený mikrokontrolér (MK) použít jako free hw/sw náhradu Loxone miniserveru?
Jak, prosím, uvedeným mikrokontrolérem (umístěným v rozvaděči rodinného domu) spínat/ovládat např. světla v místnostech? Tj.
Jak, prosím, naopak informaci posbíranou z (mnoha) spínačů (teplotních a pohybových senzorů apod.) ať již jednotlivými dráty (slaboproudými) (Jakými? Jaká max. délka?) nebo sběrnicí (Jakou? 1-Wire?) předat MK?
Víte, prosím, o nějaké diplomové práci na toto téma?