Egy egyszerű program avr mikrokontrollerre C nyelven
Az utolsó cikkben elemeztük a program struktúráját az AVR Assembler-en, összeállítottunk egy egyszerű áramkört és elvégeztük a mikrokontroller firmware-jét. A mikrokontrollerhez két LED-et csatlakoztattak, amelyeket felváltva villogtunk.
Itt nézd meg a mintaprogram az AVR mikrovezérlő C nyelven (C), amely ugyanazt a fogalmat, mint a példa a program Assembly, ezért meg kell dolgozni ugyanazt az elrendezést, mint a legutóbbi cikket. A LED-eket egyszerűen csak felváltva, de kicsit másképp és késleltetve késlelteti.
Röviden a C programozási nyelvről
Kezdetben a C nyelvet a Unix operációs rendszerben használták az alkalmazások írásához és az operációs rendszer magjához. Később más platformokra terelték, ami rendkívül népszerűvé tette.
Ha a programozás C-ben AVR mikrokontrollerek használt készlet könyvtárak avr-libc és fordító avr-gcc, amelynek a felszerelése a Linux, mi már kitaláltam egy korábbi cikkben.
A C program forráskódja
Lehet, hogy soha nem írtak programokat a C nyelvre - nincs mit aggódni. Annak érdekében, hogy az első programot írja az AVR C-re és kísérletezzen vele, elég alapos ismeret a Linux konzolon való munkához. Később megtalálja a hiányzó információkat, és tanulmányozza mindazt, amire szüksége van.
A C program következő kódja a következő műveleteket hajtja végre (cselekvési algoritmus):
- világítsuk meg az 1 LED-et, és enyhén késleltetjük (kétszer egymás után);
- hosszabb késéssel;
- világítsuk meg a 2-es LED-et, és enyhén késleltessük (kétszer egymás után);
- kezdje újra.
Itt van a program forráskódja, amely a fenti algoritmus szerint működik:
String "#include
A "locate" parancs használatával megtudhatja, hol találhatók ezek a fájlok Linux alatt. Például keressük azokat az útvonalakat, ahol az "io.h" fájlok találhatók, és szűrjük az "avr" kombinációt tartalmazó eredményeket:
Ennek eredményeképpen megkapjuk az összes olyan elérési útvonalat, ahol az "io.h" megjelenik a névben, és az elérési út tartalmazza az "avr" sztringet:
Itt láthatjuk, hogy a szükséges fájl az "/usr/lib/avr/include/avr/io.h" útvonalon van. Tartalmát tekintve látható, hogy tartalmaz más AVR-fájlok (AVR-eszköz-specifikus IO-definíciók) felvételét is, amelyek viszont a választott mikrokontroller típusától függenek. Ebben az esetben a mikrokontroller típusa (MCU típus) a "-mmcu = atmega8" (ATmega8) paraméterre van megadva, amikor az avr-gcc fordítóparancsot hívják.
Az én esetemben, az ATmega8 mikrokontroller segítségével a fájlt „io.h” köti össze a következő fájl - „iom8.h” (Input Output Mega8), ez tárolja az összes definíciót változók, mint például a PD0, PD-1 PB8, DDRD, DDRB, RAMSTART, RAMEND és sok más dolog.
A "cat" parancs használatával csak a megadott karakterkombinációt vagy szót tartalmazhatja a fájlban:
Ez a parancs kiadja ezt a szöveget:
Így láthatod, milyen konstansok és definíciók vannak az avr-gcc könyvtárban az Input-Output műveletekkel, azok értékeivel és sokkal többet az Ön mikrokontrolleréhez!
A "delay.h" fájl tartalmazza a késleltetési funkciók meghatározását, különösen a "_delay_ms" függvény kódját, amelyet a példában használunk. Az időeltolódás kiszámításához ezek a függvények az "F_CPU" állandó értéket használják, amelyet korábban a kód elején deklaráltunk.
A "void main (void)" karakterlánc kezdődik a program testének balkezes göndör gerincjével, és jobb oldali ">" brace-vel fejeződik be a lista alján. Tehát kijelentettük, hogy a fő funkció melyik programot indítja el, a funkciót testületek zárójelben veszi, és a "void" kulcsszavak azt jelentik, hogy a függvény nem fogadja el és nem ad vissza semmilyen adatot, ebben az esetben.
Fontos tudni, hogy C-ben a ";" pontosvessző karakter egy speciális karakter - egy üres operátor (ami nem tesz semmit), és azt mondja a fordítónak, hogy ez a parancs vége.
A vonal „int delay_ms_1 = 100;” bejelentettük egy új változót „delay_ms_1” a típusú „int” (egész, egész típusú értékek -32.768-32.767) és hozzárendelt értéke 100. szolgál ez a programunk, hogy a késedelem ezredmásodperc amikor mindegyik LED villog.
A következő sorban, "int delay_ms_2 = 300;" inicializáljuk a változót is, amely az egyes LED-ek villogása közötti késleltetési időt határozza meg - 300 milliszekundum.
Következő lesz a "DDRD | = (1 < A következő parancs megegyezik az előzővel, kivéve, hogy a DDRD port PD1 csatornáját állítja be. A PD0 és PD1 csatornákhoz (a chip 2 és 3 szekcióihoz) csatlakoztunk LED-eket, amelyek fényerejét mi vezéreljük. A "PORTD | = (1 < Következő, végre egy kis késleltetés „_delay_ms (delay_ms_1);” okozó _delay_ms funkciót, és adja át érvként változó delay_ms_1, amely már tartalmaz egy sor 100. A "PORTD" = (1 < (1 < (1 < "(az összes bit megváltoztatása az ellenkezőre). Az alábbi sorokat ismét végre megadása és bitek Regitra port PD0 PORTD telepítve késleltetett „delay_ms_1”, mint mi, hogy a csatlakoztatott LED csatorna PD0 meggyulladhat, és eloltani (villogás, pislogás). A "_delay_ms (delay_ms_2);" vonal hosszabb késleltetés a "delay_ms_2" változó értéke alatt, amely 300-nál nagyobb (300 milliszekundum késleltetés). Következő gyártunk kétszer megadása és bitek PD-1 (2-edik bit byte-nyilvántartás) a nyilvántartásba PORTD port, mint kényszeríteni a villódzó LED, amely össze van kötve a csatorna port PD-1 PORTD mikrokontroller. A fenti parancsok befejezése után mindent újra végtelen hurokban kezdünk ", míg (1)". A legnehezebb megérteni itt talán a megfelelő bitek telepítését a kikötőkben. Erről részletesebben a következő cikk foglalkozik: Az AVR mikrokontrollerek kezelése C, bitműveletekben. A program összeállításához a forráskódot a "leds_blinking.c" nevű fájlba mentjük. Ha már van Geany környezeted, csak kattints a "Compile" gombra a fordításhoz. A programfájl C-ba történő összeállításához a konzolon a következő parancsot kell futtatnia: Ennek eredményeként a munka, ha nincs hiba, megkapjuk leds_blinking.o objektum fájlt, amelyből ki kell bontania az szükséges adatokat a mikrokontroller firmware (esetemben ATmega8 Activity Kit Manual, paraméterek „-mmcu = atmega8”). Az adatok kivonására és egy firmware fájl létrehozására az Intel Hex formátumban, kattintson a "Build" gombra a Geany-ban. A konzolról a kívánt fájlt a következő paranccsal kaphatja meg: Most, hogy megvan a firmware fájlt Intel HEX formátumú rögzíti annak tartalmát (I) a flash memória a mikrokontroller, a művelet elvégzéséhez, akkor nyomja meg az előkészített környezet Geany kapcsolatfelvétel gomb „Run illetve megtekintheti a jelenlegi file” (végrehajtás). A konzolon végrehajthatja a firmware-t az avrdude paranccsal (ATmega8, "-p m8" paraméter, az USBAsp programozó "-c usbasp"): Közvetlenül a firmware után egy reset parancsot (RESET) küldenek az MC-nek, és a program megkezdi a chip végrehajtását, amelyet a villogó LED jelez. A RESET manuálisan is elvégezhető, ehhez újra csatlakoztatva a mikrokontrollert. Célszerű minden lépést végrehajtani (összeállítás + hex fájl + firmware készítése), és figyelemmel kísérheti a konzolon vagy a Geany információs panelen megjelenő információkat. Ez segít a hibák és megjegyzések észlelésében, ha valami nem működik megfelelően. Brian Kernighan és Dennis Ritchie - C programozási nyelven: brian-kernighan-and-dennis-ritchie-c-language.pdf.zip (2,1Mb, PDF). Herbert Shildt - A C: gerbert-shildt-c-complete-guide.zip teljes útmutatója (912Kb, HTML). Ha lehetséges, vásároljon meg egy jó és friss útmutatót a C papírra, hogy könnyebben tanulhasson és dolgozhasson. A fenti linken olvasható dokumentáció (angol nyelven) közvetlenül a helyszínen, vagy töltse le a fájlt HTML és PDF, akkor az összes szükséges információt a avr-libc programozási AVR mikrokontrollerek. Miután elérted a fenti kód magabiztos munkáját, próbáld meg kísérletezni vele. Győződjön meg arról, hogy minden LED kétszer villog, mint a példában, de három vagy négy. Is kísérletezni kell az idő késleltetésével.A program összeállítása és villogása az MK-ben
C nyelv és AVR Si dokumentáció
következtetés
Kapcsolódó cikkek