SDK pro mikrokontroléry ATMEL AVR

(SDK_ATmega128)

    Hlavním tématem mé absolventské práce byla výroba vývojového kitu a popis jeho používání. Jedná se o vývojový kit s mikrokontrolérem ATmega128, který by měl být použit primárně pro podporu a modernizaci výuky mikroprocesorové techniky na SPŠE a VOŠ Pardubice. Obsahuje popis zapojení, schémata a výkresy DPS a poznámky ke stavbě zařízení – je stavebním návodem.

    Vývojový kit se skládá ze dvou desek plošných spojů, MB_ATmega128 (deska procesoru) a SDK_ATmega128 (vlastní vývojový kit).

1    MB_ATmega128 – deska procesoru

    Tato deska je vlastně „srdcem“ celého vývojového kitu. Obsahuje procesor ATmega128, resetovací obvod a zdroj napětí pro A/D převodníky.

Obr.: Zapojení vývodů ATmega128

1.1    Schéma zapojení

    Schéma zapojení je v pdf formátu v plné velikosti zde. Jádrem je mikrokontrolér ATmega128, jehož zapojení vychází z katalogového listu, který je volně ke stažení na stránkách výrobce Atmel. Vývod PEN (Programming ENable) je připojen k +5V přes PULL-UP rezistor a umožňuje programování pomocí SPI. R1 a C1 tvoří jednoduchý resetovací obvod. Tlačítko S1 umožňuje manuální reset mikrokontroléru a dioda D1 chrání programovací obvody programátoru proti zkratu (např. stiskem tlačítka S1). L1 a C2 vyhlazují napájecí napětí pro A/D převodníky, které je přivedeno na vývod AVcc. C4 vyhlazuje napájecí napětí mikrokontroléru. Dioda LED1 indikuje přítomnost napájecího napětí a zároveň slouží jako podsvícení výrobku.

    Většina pinů je vyvedena na konektory KON1 až KON3, které jsou realizovány pinovými lištami (2x 10 pinů) a tvoří tak výborné spojení s deskou SDK_ATmega128.

1.2    Plošný spoj

    Deska plošných spojů je oboustranná (top a bottom), ale je možné ji udělat i jednostranně (pouze „top“) a z druhé strany („bottom“) vézt 6 drátových propojek. K výrobě DPS byla použita metoda „nažehlování toneru“.  Při pájení je dobré dbát na to, aby se „neslily“ sousední vodivé cesty – zvláště při pájení vývodů IC1 (ATmega128). Všechny součástky jsou osazeny ze strany top (osazovací výkres zde), kromě konektorů KON1 až KON3, u tlumivky L1 je způsob osazení libovolný. Po vyleptání, nalakování a vyvrtání DPS je vhodné na prvním místě zapájet průchody mezi vrstvami DPS. Při pájení součástek začneme pasivními součástkami (R, L, C), poté pájíme konektory, diody, tlačítko a mikrokontrolér ATmega128 nakonec.

    Schémata a výkresy DPS jsou nakresleny v návrhovém systému Eagle 4.13!

 

2    SDK_ATmega128 – deska vývojového kitu

    Na této desce jsou umístěny nejdůležitější periferní obvody – programátor, obvody oscilátorů, převodníky signálů na USB a RS-232C, napájecí zdroj, napěťová reference atd.

2.1    Schéma zapojení

    Deska MB_ATmega128 je zde reprezentována stejnojmennou součástkou. Schéma zapojení je relativně rozsáhlé, proto jej v tomto popisu rozdělím do několika logických celků.

    Nejdříve bude popsána zdrojová část. Napájení je možné buď ze síťového adaptéru, nebo z rozhraní USB, což se dá přepínat jumperem JP1 (poloha 1-2 – napájení z adaptéru, poloha 2-3 – napájení z USB). Síťový adaptér by měl mít výstupní napětí v rozsahu 9V až 16V (AC nebo DC) a výstupní proud postačí do 0,5 A. Ze síťového adaptéru je napájení dvoucestně usměrněno Graetzovým můstkem B1 a jištěno vratnou pojistkou POL2. Obvod tvořený R11, R12, T3 a LED6 indikuje přetavení pojistky svitem diody LED6. Dále je napájení vyhlazeno kondenzátory C13 a C14, stabilizováno stabilizátorem IC5 na hodnotu 5V a opět vyhlazeno díky C15 a C16.

    Napájení ze sběrnice USB je nejprve vyhlazeno filtrem tvořeným C1, L1 a C3. Je jištěno vratnou pojistkou POL1 (s identickým indikačním obvodem jako POL2). Díky schopnosti IC1 řídit napájení obvodů připojených k USB, je zde k vývodu PWREN (PoWeR ENable) obvodu IC1 připojen spínací obvod tvořený R5, C12 a T1. Přítomnost správného napájecího napětí indikuje svítivá dioda LED3.

    Nyní se zaměříme na část sběrnice USB, USART a programátor umístěný na desce SDK_ATmega128. Obvody obsluhující sběrnice USB a USART jsem chtěl původně umístit na samostatné DPS jako připojitelné moduly, ale ukázalo se, že jejich implementace přímo na desce vývojového kitu je výhodnější z hlediska kompaktnosti, protože tyto jsou využívány (stejně jako integrovaný programátor) v drtivé většině vyvíjených aplikací. USB rozhraní je implementováno obvodem FT232RL od firmy FTDI Chip (informace v češtině jsou na stránkách firmy Asix). Na straně vývojového kitu převádí signály z RS-232 na signály sběrnice USB a na straně PC jsou data opět převedena na RS-232 (sériový port) - tzv. Virtuální sériový port. Zapojení tohoto obvodu vychází z katalogového zapojení. Vývody CBUS0 až CBUS4 jsou univerzální I/O vývody, jejichž funkci je možné naprogramovat programem MProg. LED1 připojená k CBUS0 indikuje aktivitu signálu TxD (vysílání ve směru z PC) a LED2 připojená k CBUS1 indikuje aktivitu signálu RxD (příjem dat do PC). Výstup signálu PWREN je připojen k CBUS4.

    Obě rozhraní USART jsou na signály RS-232 převáděny pomocí převodníku MAX213CAI (IC3), zapojeném podle katalogového zapojení a zároveň jsou přivedené na konektory CON7 a CON13 společně s napájecím napětím (může být vhodné pro aplikace, kde chceme porty PD a PE připojit ještě k jiným DPS). Kondenzátory C7 až C10 spolu s vnitřními obvody fungují jako nábojová pumpa vytvářející napětí  ± 10V, což odpovídá napěťovým úrovním signálů sériového portu. CON11 a CON12 jsou klasické CANNON9F konektory využívané při realizaci hardwaru obsahujícího sériový port. Signálové vodiče jsou zapojeny tak, aby obvody IC1 a IC3 tvořily převodník USB<->RS-232 použitelný i pro jiné aplikace. Tato úprava znamenala použití přepínačů S1, aby bylo zaručeno správné křížení signálů RxD a TxD.

    Přepínač S1 přepíná vývody RxD0 a TxD0 mikrokontroléru ATmega128 mezi převodníky a programátorem tvořeným IC2. Jeho zapojení vychází z aplikační poznámky AN910 firmy ATMEL. R1 a C6 tvoří jednoduchý resetovací obvod. Sériové rozhraní (vývody RxD a TxD) je využito pro komunikaci s PC. Frekvence krystalu X1 je 7,3728MHz, která je vhodná pro přesné odvození přenosových rychlostí sériového přenosu. Dvoubarevná LED diody LED4 indikuja červenou barvou proces programování a zelenou barvou režim stand-by. Zajímavé je zapojení pinové lišty 2x2 piny JP2. Při spojení pinů 1-2 je možné přehrát firmware programátoru IC2 připojeným externím programátorem. Při spojení pinů 3-4 je možné programovat ATmega128 programátorem tvořeným IC2, nebo externím. V poloze „nezapojeno“ (stejnou funkci má i poloha 1-3; výhodou je, že zkratovací propojka je zapojena a neztratí se) je možné programátorem IC2 programovat mikrokontroléry připojené k ISP konektoru CON8. IC2 zde funguje jako master.

    Pinová lišta 3x2 piny JP10 určuje zdroj referenčního napětí. V poloze 1-2 je referencí GND (0V), v poloze 3-4 je referenční napětí nastavitelné trumfem P1 a v poloze 5-6 je zdrojem reference napájecí napětí A/D převodníků. Obvod tvořený IC7, R13, R14 a P1 tvoří nastavitelný zdroj referenčního napětí pro A/D převodníky mikrokontroléru ATmega128. Je zde použita známá napěťová reference TL431 v provedení SMD. C21 a C22 slouží pro vyhlazení referenčního napětí.

    Dalším důležitým obvodem pro chod mikrokontroléru je zdroj taktovacího kmitočtu. Ten je zde nastavitelný pinovou lištou JP3, na kterou se nasadí dvě zkratovací propojky. V poloze 1-3 (první propojka) a 2-4 (druhá propojka) je možné využít oscilátor sestavený z krystalu (X2), dvou hradel (IC5A a IC5B) a součástek C17, C18, R7 a R8. Je však nutné propojit JP4 v poloze 1-2. JP4 v poloze 2-3 umožňuje připojit externí zdroj hodin přímo na konektor JP5. JP3 s propojkami v polohách 3-5 a 4-6 připojí k ATmega128 krystal X2 v klasickém zapojení krystalového oscilátoru.

 

    Pro připojení periferních obvodů je na desce vývojového kitu 6 konektorů MLW10 (CON1 až CON6) - černé. Reprezentují vývody portů PA až PF mikrokontroléru ATmega128. Jsou zapojeny tak, aby byly pinově kompatibilní s vývojovými kity pana Ing. Davida Matouška (viz obrázek vpravo).

 

    Dále jsou zde konektory MLW10 pro připojení ISP programátoru (CON8) a ladícího rozhraní JTAG (CON9). Konektory JP6 až JP9 slouží pro napájení jiných (externích) aplikací, jelikož je na ně vyvedeno napájecí napětí 5V. Pro případ potřeby je také vyvedeno napětí AVCC na pinech konektoru JP11. Ještě se zde nachází konektor pro externí paměť SRAM. Obvod ATmega128 sice obsahuje dostatečně velkou SRAM pro většinu aplikací (8kB), ale chtěl jsem možnost připojení externí paměti zachovat.

    Závěrem popisu zapojení bych rád podotkl, že při návrhu schématu jsem se nechal inspirovat mnohými vývojovými kity a zapojeními v katalozích výrobců integrovaných obvodů, proto je možné, že některé části mohou být s nimi totožné. Nicméně celková koncepce je pouze má myšlenka, plagiátorství kategoricky odmítám!!!

 

2.2    Plošný spoj

    Deska plošných spojů je oboustranná, ale je možné ji udělat i jednostranně (pouze „bottom“) a z druhé strany („top“) vézt asi 40 drátových propojek. Výkres desky plošných spojů ze strany bottom a top.

    K výrobě DPS byla opět použita metoda nažehlování toneru. Většina součástek na straně bottom je v provedení SMD. Jelikož některé se nevyrábějí v provedení pro klasickou montáž (součástky s drátovými vývody), jako je např. FT232RL, rozhodl jsem se i ostatní součástky (rezistory, kondenzátory, tranzistory i integrované obvody) použít v provedení SMD. Sníží se tím velikost desky, ale na druhou stranu je montáž náročnější na přesnost umístění pouzdra a dobrou techniku pájení.  Dnes je však i ve světě amatérských konstrukcí stále běžnější používat právě součástky pro povrchovou montáž a většina amatérů s pájením SMD pouzder nemá problémy. Po vyleptání desku ořízneme na požadovaný rozměr a vyřízneme čtverce v rozích. Po nalakování a vyvrtání DPS je dalším krokem výroby vývojového kitu proletování „prokovů“ (přechodů mezi vrstvami top a bottom). Toho docílíme tak, že do těchto otvorů vložíme drátek o jen o málo menším průměru než je průměr použitého vrtáku, aby při pájení nevypadl. Poté po obou stranách zapájíme. Osazovací výkres ze strany bottom a top. Při pájení součástek začneme pasivními součástkami v pouzdrech pro povrchovou montáž, poté polovodiče a nakonec integrované obvody. Poté pokračujeme součástkami pro klasickou montáž, jako jsou konektory, tlumivka, polyswitche (vratné pojistky), krystaly, přepínače, LED diody atd.  POZOR! Tranzistory T2 a T3 je nutné připájet obráceně (tzv. „bříškem dolů“), aby se prohodily vývody B a E! Tato chyba je způsobena tím, že jsem si nezkontroloval v návrhovém systému Eagle 4.13 správné rozložení vývodů.

 

3    Oživení vývojového kitu

    Jestliže zhotovení výrobku proběhlo správně, zapojení by mělo fungovat na první pokus. Nyní můžeme přistoupit k samotnému procesu oživování. Jelikož programování se provádí výhradně přes sběrnici USB (jde to ovšem také přes klasický sériový port na konektoru CON11), připojíme nejdříve přípravek k PC kabelem USB. Budeme potřebovat kabel, který se používá např. pro připojení USB tiskárny, tzn. kabel s koncovkami USB-A <–> USB-B. Pokud je vše v pořádku, objeví se v oblasti System Tray podobné upozornění jako na obrázku vpravo a měly by se rozsvítit LED diody „Power On“ a modré podsvícení, případně LED indikující komunikaci připojené k FT232R. Pokud se tak nestane, chyba je pravděpodobně okolo IC1.

 

3.1    Instalace ovladačů D2XX a VCP

    Pokud vše proběhlo v pořádku, objeví se obrazovka:

    Nyní se Windows pokouší nainstalovat ovladače VCP a D2XX knihovny (vhodná pro programování funkcí obvodu FT232RL ve vyšších programovacích jazycích). Dále pokračujeme dle následujících obrázků, které uvádějí postup instalace D2XX.

Použití ovladače z CD:

Zvolíme umístění ovladače:

Průběh instalace ovladačů:

Instalace úspěšně dokončena:

Ohlášení úspěšně nainstalovaného hardware:

    Ovladače jsou umístěny na přiloženém CD v adresáři \Ovladace\ftdi_drivers_cdm-2-02-04_windows_xp_vista_2000plus. Postup při instalaci ovladačů VCP je stejný. Může se stát, že se po instalaci D2XX ovladačů systém nepřihlásí pro instalaci VCP a ve Správci zařízení nebude položka USB Serial Port. Poté je nutné ve Správci zařízení systému Windows (kliknout pravým tlačítkem na ikonu Tento počítač, zvolit položku Vlastnosti a poté záložku Hardware) najít položku  Řadiče sběrnice USB, dále USB Serial Converter. Poté na kartě Advanced zkontrolovat zatržení možnosti Load VCP. Jestliže nebyla zatržena, po jejím aktivování a potvrzení OK by se již měla spustit instalace příslušných ovladačů.

 

3.2    Naprogramování obvodu FT232RL

    Po úspěšné instalaci ovladačů můžeme přistoupit k programování IC1 a IC2. IC1 je, jak již bylo řečeno, převodník USB na RS-232 a obráceně. Má však mnoho dalších funkcí, které je možné naprogramovat. To se provádí programem MProg (zde ve verzi 3.0) přímo od výrobce FTDI. Instalace probíhá standardně, jako jakékoli jiné aplikace pro Windows. Po instalaci a spuštění aplikace se nám zobrazí přehledné okno, kde se nastavují parametry, které budou zapsány do vnitřní paměti EEPROM. Pro naši aplikaci jsou důležité položky USB Power Options, Produkt and Manufacturer Description Strings a vpravo záložka FT232R. Položky nastavíme dle obrázku vpravo, nebo použijeme soubor SDK_ATmega128.ept z přiloženého CD (adresář \Software\MProg). Poté zapíšeme data do EEPROM obvodu FT232RL zvolením Device a poté Program (CTRL+P). Po úspěšném nahrání dat kit odpojíme a opět připojíme k PC a vývojový kit se přihlásí do systému jako zařízení SDK_ATmega128.

 

3.3    Naprogramování ATtiny2313 jako ISP programátoru

            Posledním krokem pro úspěšné oživení vývojového kitu je nahrát firmware do programátoru tvořeného obvodem ATtiny2313 (IC2). Zde se může vyskytnout známý problém „vejce a slepice“, tzn. prvotní naprogramování ATtiny2313, když nemáme ještě žádný ISP programátor. Řešením může být sestavení konstrukčně velmi jednoduchého programátoru dle standartu STK200 (viz kapitola 3.3.1 ), který je (společně s programem PonyProg) schopen do mikrokontroléru nahrát firmware i zapsat fuse bits (propojky).

            Zdrojový kód firmwaru vychází z originálu od ATMELu publikovaném spolu s aplikační poznámkou AN910. Je však upraven pro vyšší komunikační rychlost a modernější řídící procesor (ATtiny2313 místo AT90S1200). Dále je rozšířen o podporu nových typů procesorů, hlavně z řad ATtiny a ATmega. Firmware je dostupný na přiloženém CD v adresáři \Firmware_ATtiny2313, je stažen ze stránek www.serasidis.gr a mírně upraven.

            Nyní se dostáváme již k samotnému nahrání firmwaru. Ze všeho nejdříve si nainstalujeme program AVR Studio, který bude popsán v příští kapitole. Předpokládám, že vlastníte nějaký funkční ISP programátor. Programátor připojíme k PC, programovací rozhraní programátoru připojíme na ISP konektor vývojového kitu a na něm přepneme zkratovací propojku na JP2 do polohy 1-2. Přivedeme napájení k vývojovému kitu (pokud není již zajištěno z programátoru) buď z USB, nebo síťového adaptéru. Poté spustíme program AVR studio a v něm utilitu AVRISP (v menu položka Tools – Program AVR – Auto Connect , nebo kliknutím na ikonu  ). První čtyři záložky by měly být nastaveny jako na obrázcích dole pod tímto odstavcem. Nejprve na záložce Main vybereme typ mikrokontroléru. Můžeme zkusit přečíst signaturu (tlačítko Read Signature), pokud je čtení úspěšné, je to známka nejen správného zapojení. Signatura by měla mít hodnotu „1E 91 0A“, což by mělo být patrné v dolní části okna. Na záložce Fuse by měla být nastavena propojka SPIEN. Brown-out detection (detekce výpadku napájení) jsem nastavil na hodnotu disabled, ale na funkci programátoru to vliv nemá. Propojku SUT_CKSEL nastavíme na hodnotu jako na 4.obrázku (krystal do 8MHz a delší rozběhový čas). Na kartě LockBits nastavíme volbu tak, aby nebyly aktivovány žádné paměťové zámky (aby bylo možné firmware přečíst, popř. nahrát nový). Nyní na kartě Program vybereme v rámu Flash cestu k souboru s firmwarem (na přiloženém CD v adresáři \Firmware_ATtiny2313), zaškrtneme políčka „Erase device before programming“ a „Verify device after programming“ a stiskneme tlačítko Program. V dolní části okna můžeme sledovat průběh programování. Po správném naprogramování by se měla rozsvítit indikační dioda LED4, nejdříve červeně a poté zeleně. Nyní je programátor tvořený ATtiny2313 schopen programování mikrokontrolérů AVR. To se provádí utilitou AVR Prog (v menu Tools – Avr Prog…), kterou je možné použít i bez podpory AVR Studia. Zkratovací propojka na JP2 se zapojí buď do polohy 3-4 (programování hlavního procesoru ATmega128), nebo do polohy 1-3 (programování externě připojených obvodů).

AVRISP, záložka Main:

AVRISP, záložka Program:

AVRISP, záložka Fuses:

AVRISP, záložka LockBits:

            V rámci oživování můžeme ještě ověřit signaturu obvodu ATmega128. Spustíme AVR Prog a po zvolení možnosti „Advanced…“ můžeme vidět signaturu v poli Device Signature.

Výkres krabičky:

    Úprava krabičky je naznačena na obrázku níže.

Fotografie:

     

  

Videa:

 

4    Vývojové prostředí

    Dalším velice podstatným nástrojem pro celkový vývoj aplikací s mikrokontroléry je tzv. vývojové prostředí (IDE). Jedná se o software, který je schopen editovat zdrojový kód (pohodlněji než např. v poznámkovém bloku) a disponující dalšími nástroji a utilitami, jako je programovací a ladící rozhraní, krokování programu, překlad výstupních souborů do použitelných formátů atd.

    Pro mikrokontroléry ATMEL AVR je nejznámější vývojové prostředí AVR Studio®. Můžeme ale najít i jiná vývojová prostředí, jako např. CodeVision nebo Keil.

4.1    Vývojové prostředí AVR Studio®

    ATMEL nabízí ke svým výrobkům vývojové prostředí AVR Studio®. Jeho velkou výhodou oproti jiným je fakt, že je zdarma a o jeho vývoj se stará přímo ATMEL. Tím je zaručena aktuálnost ovladačů, programovacích algoritmů a řešení chyb v GUI. Další výhodou je skutečnost, že v sobě obsahuje:

    Poslední plná verze má označení 4.16. Instalační soubor je možné stáhnout ze stránek firmy ATMEL zde. Instalace probíhá stejně jako jakékoli jiné aplikace pro Windows, jen je třeba dát pozor na volbu adresáře. Po instalaci najdete v menu Start – Všechny programy položku ATMEL AVR TOOLS, kde se také nachází zástupce programu AVR Studio 4. Po spuštění by se mělo zobrazit okno jako na obrázku níže.

 

    Pro založení nového projektu vybereme „New Project“. Tímto postupem bychom vytvořili projekt, ve kterém by bylo možné psát zdrojové kódy v AVR assembleru. Jelikož se budeme zabývat programováním v jazyce C, uvedu nejdříve instalaci softwaru WinAVR a teprve potom bude následovat dokončení založení projektu.

 4.2    WinAVR a programovací jazyk C

    WinAVR je balík knihoven programovacího jazyka C pro Windows, speciálně upravený pro potřeby programování mikrokontrolérů AVR. Obsahuje v sobě všechny potřebné nástroje pro programování: editor, kompilátor GCC a linker, Jedná se o volně šiřitelný software pod licencí GNU. WinAVR je vlastně kompilátor AVR-GCC (AVR – GNU C Compiler) původně napsaný pro Linux, který byl zabalen do instalačního balíčku pro Windows a přidány funkce hlavně pro integraci do AVR Studia. Je umístěn na přiloženém CD v adresáři \Software. Jedná se o verzi ze dne 13.3.2009. Aktuální verzi je možné stáhnout zde nebo zde i s tutoriálem.

    Postup instalace WinAVR je jednoduchý a velmi podobný standardním instalacím v prostředí Windows. Po instalaci najdete v menu Start – Všechny programy položku WinAVR-20090313, kde se nacházejí odkazy na nejdůležitější součásti WinAVR, čímž je také potvrzena úspěšnost instalace. Mezi nejdůležitější součásti patří Programmers Notepad a MFile. Programmers Notepad je v podstatě klasický editor textu jako Poznámkový blok, ale navíc v sobě zahrnuje zvýraznění syntaxe kódu dle zvoleného programovacího jazyka. Další velice důležitou součástí je utilita MFile. „Tento program je velice důležitou součástí instalace. Slouží k vytvoření tzv. Makefile souboru který obsahuje informace o tom jaký soubor budeme kompilovat, pro jaký procesor, jaký stupeň optimalizace bude chtít použít. Tento soubor obsahuje v podstatě veškeré informace o projektu pro překladač.“ [citace z www.caha.cz]

    Na tomto místě pokračujeme v zakládání nového projektu z předchozí kapitoly. Na obrazovce dle  Obr. 5.1 zvolíme New Project a nyní si můžeme vybrat, jestli budeme vyvíjet software v Assembleru nebo GCC. Vybereme volbu AVR GCC a vyplníme jméno projektu (viz obrázek).

    Poté stiskneme Next a objeví se okno s výběrem ladicího nástroje a typu mikrokontroléru .

    Po výběru ladícího nástroje a mikrokontroléru stiskneme Finish. Nyní by prostředí AVR Studio® mělo vypadat jako na obrázku níže.

    Vlevo je umístěno okno pro správu projektu, uprostřed se nachází okno pro psaní kódu, vpravo okno všech dostupných vestavěných periferií a jejich vlastností. V dolní části je informační okno a v pravém rohu okno výpisu registrů.

    Před vlastním vývojem/laděním je ještě vhodné provézt nastavení dialogu pro nastavení konfigurace projektu (ikona  nebo menu Project – Configuration Options) – . Zde je nutné na první záložce vyplnit typ mikrokontroléru, taktovací frekvenci a způsob optimalizace (o tom později; volba –O0 znamená vypnuté optimalizace, tuto hodnotu zatím zachováme). Tím máme vývojové prostředí kompletně připraveno pro vývoj aplikací.

Download:

Komplet dokumentace - zmiňované CD-ROM (očesané o věci ohledně mé absolventské práce)

 

HOME

©Jef (2009)