Svetelektro.com

Svetelektro.com

Meno:
Heslo:

Programujeme AVR v jazyku C - 1. časť

Kategória: Mikroprocesory | 30.01.2012 | Autor: 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!
 

02.07.2013

Mikropájka 2011

 10832   8  Hodnotenie: 4.5Hodnotenie: 4.5Hodnotenie: 4.5Hodnotenie: 4.5Hodnotenie: 4.5

14.03.2009

My Binary Clock

 18910   12  Hodnotenie: 4.1904761904762Hodnotenie: 4.1904761904762Hodnotenie: 4.1904761904762Hodnotenie: 4.1904761904762Hodnotenie: 4.1904761904762

Priemerné hodnotenie: 4.84
Hlasov: 32

Vynikajúci

Zvoľte počet hviezdičiek:
Vynikajúci
Veľmi dobrý
Dobrý
Priemerný
Zlý



Za obsah komentárov je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok.

Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: marek181818 - 30.01.2012
(O užívateľovi | Poslať súkromú správu) http://elektronic.cekuj.net/
SUPER clanok ,pre nas zaciatocnikov je ako stvoren,Je presne bod po bode a uz sa tesim na svoj prvy program :D blikanie LED

Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: Axwell - 30.01.2012
(O užívateľovi | Poslať súkromú správu)
Pekne velmi ,len tak dalej, rad sa naucim aj zaklady programovania AVR, kedze v jazyku C/C++ mam iste skusenosti uz.

Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: martin63 - 30.01.2012
(O užívateľovi | Poslať súkromú správu)
Super. Uz sa tesim na dalsi clanok. Inak existuje nejaky editor aj pre Mac OS X?

Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: Prcek111 - 30.01.2012
(O užívateľovi | Poslať súkromú správu)
Pekný článok, teším sa na ďalšiu časť.

Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: stagro1 - 30.01.2012
(O užívateľovi | Poslať súkromú správu)
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... :))

Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: instrukcion - 06.02.2012
(O užívateľovi | Poslať súkromú správu)
no konecne nieco poriadne a svetelektre .. .:D

Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: instrukcion - 06.02.2012
(O užívateľovi | Poslať súkromú správu)
a preco nie avr studio 5 ??

Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: rambo - 15.02.2012
(O užívateľovi | Poslať súkromú správu)
zawín, kedy mi to vysvetlíš? nechce sa mi to čítať :)

Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: kevinn13 - 24.03.2012
(O užívateľovi | Poslať súkromú správu)
Môžem sa vas opitat že co vsetko mi trebe ked chcem zacat programovať atmel AVR a kde to kupiť .... dakujem
Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: michalSR - 01.12.2012
(O užívateľovi | Poslať súkromú správu)
 
staci ti spravit programator a stiahnut avr studio ja som si spravil takz jednoduchy usb prog s jednzmi mcu attiny2313, ale musim si tam napalit ten hex . takze ak ti to nema kto napalit sku si kupit. nie je to az take drahe. ta moja napalovacka : http://www.ladyada.net/make/usbtinyisp/download.html v tom avr studiu 5 treba volat externe ten avrdude ale to sa ti tam vytvori elegantne tlacitko, ked chces dam ti link aj na to
Re: Programujeme AVR v jazyku C - 1. časť (Hodnotenie: 1)
Od: michalSR - 01.12.2012
(O užívateľovi | Poslať súkromú správu)
 
ale nasiel som aj s 8 pinomvym MCU, ale ten som neskusal http://www.recursion.jp/avrcdc/cdc-spi.html#schematic
Autor stránky je Ondrej Závodský(zawin), o graficky design sa stará Ľuboš Fabo(BUFU).

TOPlist

Powered by Copyright © UNITED-NUKE CMS. All Rights Reserved.
Čas potrebný k spracovaniu stránky 0.03 sekúnd