SVETELEKTRO

30. januára 2012   Verzia pre tlač Verzia pre tlač

Programujeme AVR v jazyku C – 1. časť


zawin

Úvod k mikropočítačom Atmel AVR, inštalácia a vytvorenie prvého projektu v prostredí AVR Studio 4.

V prvej časti seriálu o programovaní AVR v jazyku C sa budeme venovať popisu mikropočítača Atmel AVR, spôsobu programovania a vytvoreniu prvého projektu v prostredí programu AVR Studio 4.

1) Úvod k Atmel AVR

V roku 1997 uviedla na trh firma Atmel nové osembitové mikropočítače AVR.
Oproti predošlému jadru 8051 nastalo viacero zmien.
Mikropočítač Atmel AVR začal využívať architektúru RISC (Reduced instruction set computing), čo prinieslo značne zvýšenie výkonu.
Taktiež oproti mikroprocesorom 8051 nastalo zväčšenie šírky inštrukčného slova na 16 bitov. To umožnilo zrýchlenie načítavania inštrukcií, kde až na niekoľko výnimiek dochádza k ich načítaniu v priebehu jedného strojového cyklu.

Mikropočítač AVR je optimalizovaný pre programovanie v jazyku C.

Architektúra mikropočítača Atmel AVR:

V tomto mikropočítači sa nachádzajú tri druhy pamäte:
Pamäť FLASH – má šírku 16 bitov a využíva sa na uloženie programu, dá sa zmazať a opätovne zapísať, pričom výrobca garantuje až 10 000 cyklov zmazanie/zápis. Dá sa programovať sériovo, čo zjednodušilo nahrávanie programu z PC do mikropočítača.
Pamäť RAM – má šírku 8 bitov, je rýchla a slúži na dočasné ukladanie výsledkov a dát. Po odpojení napätia sa zmaže.
Pamäť EEPROM – slúži na ukladanie dát, ktoré sa uschovajú aj po odpojení napájacieho napätia.

Mikropočítače AVR taktiež ponúkajú bohatú výbavu čo sa periférii týka sú to napríklad:
– Čítač/časovač s možnosťou PWM modulácie
– AD prevodník
– SPI, TWI, USART
– Watchdog
– A iné…

Týmto perifériám sa budeme podrobnejšie venovať v ďalších častiach seriálu.

Mikropočítač podporuje taktiež aj viacero zdrojov hodinového signálu:
– externý kryštál / rezonátor
– externý nízkofrekvenčný kryštál (32,768 kHz)
– externý RC oscilátor
– interný kalibrovaný RC oscilátor
– externý zdroj taktovacej frekvencie

2) Programovanie Atmel AVR

V ďalšej časti článku si ukážeme ako možno vytvoriť program v jazyku C a prostredí AVR Studia 4. Upozorňujem čitateľov že je potrebná aspoň základná znalosť jazyka C.

Inštalácia AVR Studia 4
Z oficiálnej stránky Atmel-u stiahneme súbory:
– AVR Studio
– AVR Toolchain

Pred sťahovaním treba vyplniť registračné údaje aby sa súbory dali stiahnuť.

Nainštalujeme teda AVR Studio a následne AVR Toolchain. AVR studio je pracovné prostredie na vývoj programu, AVR toolchain je compiler, linker a zjednodušená verzia stdlib jazyka C. Po nainštalovaní spustíme program AVR Studio a skúsime vytvoriť nás prvý projekt.

Vytvorenie projektu
Po spustení programu AVR studio sa objaví welcome obrazovka kde zvolíme možnosť „Create new project“.

Keďže programovať ideme v jazyku C, zvolíme možnosť AVR GCC. Napíšeme názov projektu a určíme pracovný adresár projektu. Odporúčam zaškrknúť možnosť „Create folder“, ktorá spôsobí že projekt sa vytvorí vo vlastnom adresári.

Na ďalšej obrazovke si zvolíme debugovaciu platformu – čiže ako chceme program ladiť. Pokiaľ nemáte JTAG programátor zvoľte možnosť AVR simulátor. Dôležité je vpravo vybrať správny mikropočítač. Nakoniec klikneme na tlačidlo Finish a tým vytvoríme nový projekt.

Popis pracovného prostredia

Po vytvorení projektu môžeme písať samotný projekt v jazyku C. Naľavo hore sa nachádza rozbaľovacia ponuka, kde si môžeme zvoliť zdrojové a hlavičkové súbory, ktoré následne cez
#include môžeme pridať do projektu. Slúži to na lepší prehľad v projekte. Napr. jeden zdrojový súbor bude slúžiť na komunikáciu s UART, ďalší na komunikáciu s EEPROM a v hlavnom súbore ich potom pridáme.
V strede sa nachádza editor, v ktorom píšeme program. Nevýhodou je však to že je to len holý editor bez žiadneho zvýraznenia syntaxe, takže treba dbať na väčšiu pozornosť pri písaní programu.

Napravo sú ovládacie registre procesora, ktoré môžeme počas debugovania nastavovať alebo sledovať počas behu programu ako sa nastavili. Činnosť a funkcia registrov bude podrobnejšie vysvetlená v ďalšej časti.
Naspodku sa nachádza okno, ktoré nás informuje o úspešnom, alebo neúspešnom skompilovaní projektu. Vypíše chyby, alebo varovania, ktoré počas kompilovania nastali a zobrazí využitie pamäte FLASH a RAM pri použití nášho programu.

Nastavenie projektu

V hornom menu zvolíme možnosť Project – Configuration Options

Tu nastavíme minimálne frekvenciu použitých hodín v Hz. Možnosť Optimalization nastavuje ako chcem program optimalizovať na rýchlosť. Možné sú úrovne -O0 až -O3.
Ďalšími možnosťami sú -O0 (vypnutie všetkých optimalizácií) a -Os, ktorý povolí možnosti
-O2 okrem tých, ktoré zväčšujú kód a pokúsi sa viac zmenšiť výsledný hex súbor. Všeobecne si vystačíme s voľbou –Os. Ďalšie možnosti zatiaľ nastavovať netreba, stačí potvrdiť tlačidlom OK.

Kompilácia projektu
Väčšina netriviálnych projektov sa skladá z viac, ako jedného .c súboru. Je to spôsobené tým, že program je takto lepšie štruktúrovaný a niektoré jeho časti sa dajú opakovane použiť (napríklad podprogramy pre ovládanie periférií a podobne). Aby sa tieto súbory správne „zložili“ do jediného výstupného .hex súboru, je potrebná spolupráca viacerých programov a súborov, preto popíšem postup kompilácie takéhoto projektu.

Ako príklad som si vybral projekt, ktorý generuje pulzy rôznej dĺžky nastaviteľnej z PC cez USB-VCP (virtual COM port)-UART prevodník. Tento projekt sa skladá z nasledujúcich súborov :
 main.c – zdrojový súbor, obsahuje hlavný program
 ansiterm.c – zdrojový súbor, obsahuje rutiny pre obsluhu ANSI terminálu
 ansiterm.h – hlavičkový súbor, obsahuje deklarácie rutín z ansiterm.c
 Makefile – súbor, ktorý kontroluje preklad a napálenie projektu


Aby sa projekt mohol zostaviť, je najprv potrebné preložiť jednotlivé .c súbory. Prvé, čo sa v tejto chvíli stane je, že sa súbor otvorí a prejde cez preprocesor. To je program, ktorý odstráni komentáre, rôzne pripraví súbor, ale hlavne spracuje direktívy preprocesora (riadky začínajúce sa znakom #). Tam sa radia hlavne include guardy, makrá, includy.
Napríklad pomocou direktívy #include sa vkladajú do .c súboru požadované .h súbory, ktoré obsahujú deklarácie. Tie oznamujú, aký tvar majú jednotlivé funkcie a tak podobne. Preto je napríklad pri kompilácii main.c projektu z príkladu potrebné vložiť ansiterm.h, ktorý obsahuje deklarácie funkcií pre ANSI terminál.
Tento predspracovaný súbor ďalej spracuje kompilátor, ktorý pri bezchybnom preklade vygeneruje súbor .o. Tomuto súboru sa hovorí objektový súbor (nepliesť s OOP – objektovým programovaním). Tento súbor obsahuje preložené telá funkcií, definície premenných a tak podobne.
Po kompilácii potrebných .c súborov výsledné .o súbory idú na spracovanie do linkera, ktorý „pospája“ jednotlivé moduly – doplní adresy funkcií a premenných z iných modulov a pod. Preto sú niektoré chyby zistené až v tejto fáze. To znamená, že ak linker píše, že niektorá funkcia nie je definovaná, je to práve kvôli chýbajúcemu objektovému, alebo knižničnému súboru.
Keď prebehne v poriadku aj linkovanie, dostaneme výsledný binárny súbor, ktorý sa už len pretransformuje do vhodného .hex formátu a môže nasledovať vypálenie programu do MCU.
Celý tento proces je riadený programom make, ktorý spracováva súbor Makefile. Tento obsahuje popis úloh a pre každú úlohu závislosti. Na základe nich sa spracuje celý projekt. Napríklad výsledný súbor .hex závisí od skompilovanej binárky .out, tá od súborov .o a tie zasa od .c a .h súborov.

A týmto spôsobom sa kompiluje väčšina (ak nie všetky) programy v jazyku C, aj keď o tom programátor vďaka moderným prostrediam často ani nevie.

A sme na konci prvej časti seriálu. V ďalšej, poradí druhej časti si povieme o spôsoboch nahratia programu do mikropočítača a vytvoríme si náš prvý program – blikanie LED.

Na záver sa chcem poďakovať všetkým, ktorí mi pomáhajú pri tvorbe tohto seriálu!

Ako sa vám páčil tento článok?
  • Páči sa mi (0)
  • Súhlasím (0)
  • Zábavné (0)
  • Informatívne (0)

Komentáre (11)

  1. marek181818 píše:

    SUPER clanok ,pre nas zaciatocnikov je ako stvoren,Je presne bod po bode a uz sa tesim na svoj prvy program 😀 blikanie LED

  2. Axwell píše:

    Pekne velmi ,len tak dalej, rad sa naucim aj zaklady programovania AVR, kedze v jazyku C/C++ mam iste skusenosti uz.

  3. martin63 píše:

    Super. Uz sa tesim na dalsi clanok. Inak existuje nejaky editor aj pre Mac OS X?

  4. Prcek111 píše:

    Pekný článok, teším sa na ďalšiu časť.

  5. stagro1 píše:

    akurát, keď to najviac potrebujem 🙂 chválim a teším sa samozrejme na pokračovanie 🙂 (to slovo “1.časť” ma uvádza do nedočkavosti na pokračovanie… :))

  6. instrukcion píše:

    no konecne nieco poriadne a svetelektre .. .:D

  7. rambo píše:

    zawín, kedy mi to vysvetlíš? nechce sa mi to čítať 🙂

  8. kevinn13 píše:

    Môžem sa vas opitat že co vsetko mi trebe ked chcem zacat programovať atmel AVR a kde to kupiť …. dakujem

Pridaj komentár