az internet ablakok Android

MK programozása a semmiből. Mikrokontrollerek programozása AVR.

Nem voltam egyszer, és nem két mondván, hogy az MK tanulmányozását el kell kezdeni az összeszerelővel. Ez egy egész tanfolyamot szentelt a helyszínen (bár ez nem túl konzisztens, de fokozatosan fésültem egy megfelelő típusra). Igen, nehéz, az eredmény nem lesz az első napon, de megtanulod megérteni, mi történik a vezérlőn. Tudni fogod, hogyan működik, és nem a majom másolat más emberek forrásait, és megpróbálja megérteni, hogy miért hirtelen abbahagyta a munkát. Ezenkívül az SI sokkal könnyebben felülmúlja a közepén, amely a leginkább inopportune pillanatban villákkal jön ki.

Sajnos mindenki azonnal az eredményt akarja. Ezért úgy döntöttem, hogy másrészről megyek, hogy képzést készítsek Si-en, hanem a fehérnemű showjával. A jó programozó-emelder mindig a vasalót tartja a squall-nek, anélkül, hogy engedélyt adna neki. Tehát az elején lesz a kód, akkor mi született a fordítót, és hogyan működik valójában :)

Másrészt az SI egy erős oldal, a kód hordozhatósága. Ha természetesen mindent ír le. A munka algoritmusainak és vas-megvalósításának elválasztása a projekt különböző részeiben. Ezután át az algoritmus egy másik MK, elég átírni csak az interfész réteget, ahol minden fellebbezést a mirigy van írva, és hagyja az egész dolgozó kód, ahogy van. És természetesen az olvashatóság. Az ablakszárny forrás forrás könnyebb megérteni első látásra (bár .. én például nem érdekel, hogy mit lehet flörtölni legalább si, legalább AFM :)), de újra, ha írsz mindent jól. Ezekkel a pillanatokkal figyelni fogok.

Mint kísérleti hardver, amelyen az oroszlán részesedése az összes példa lesz a hibakeresési fórum.

Első program az AVR-re

A fordító kiválasztása és a környezet felszerelése
Az AVR számára sok különböző C fordító létezik:
Először is IAR AVR C. - szinte egyedülállóan elismert, mint az AVR legjobb fordítója, mert Maga a vezérlőt az Atsel és az IAR szakembereinek szoros együttműködõje hozta létre. De mindazért, amit meg kell fizetned. És ez a fordító nem elég ahhoz, hogy mi a drága kereskedelmi szoftver, hanem olyan reggeli beállításokat is tartalmaz, amelyek csak meg kell adniuk és összeállítják azt. Tényleg nem volt barátságom vele, a projekt furcsa hibákon részeg volt a kapcsolódási szakaszban (később kiderült, hogy repedési görbe volt).

A második jön Winavr GCC. - Erőteljes optimalizáló fordító. Teljes megnyitja, keresztplatformot, általában az élet minden örömét. Ő is tökéletesen integrálódik az AVR stúdióba, amely lehetővé teszi, hogy hibakeresését hozzák létre, hogy a pokol kényelmes. Általában úgy döntöttem.

Is van CodeVision AVR C.- Nagyon népszerű fordító. Az egyszerűségével kapcsolatban népszerűvé vált. Munkaprogram Néhány perc múlva bejuthatsz - a kiindulási kód mestere nagymértékben támogatott, az összes fül inicializálásának bélyegzője. Őszintén szólva, sajnálom, hogy gyanúja van vele - valahogy meg kellett szétszerelni egy PROG-t, amelyet a fordító írott, valamiféle értett, de nem a kódot kapták. A felesleges televíziók és műveletek szörnyű mennyisége, amelyet kis kódokba és lassú sebességgel öntöttünk. Talán azonban hiba történt a DNS-ben, írta az eredeti firmware-t. Plusz pénzt akar. Nem sokkal olyan, mint az IAR, de észrevehető. És Demozhimben nem több, mint 2kb kódot ad.
Persze repedés van, de ha ellopsz, akkor egy millió, az IAR értelemben :)

Van még Kép kézműves avr c és Microc mikroelektronika. Nem használhat más felhasználást, de itt SWG. Nagyon szántás MikropascalAz olvadék rettenetesen kényelmes programozási környezet és könyvtár. Azt hiszem, a mikrok nem lesz rosszabb, de kifizetett.

Ahogy mondtam, én választom Winavr. Három oka: Ingyenes, integrálja az AVR stúdiót, és csak egy zümmögéssel írja befejezett kód minden alkalomra.

Tehát töltse le magad a Winavr C és avr stúdió telepítéséhez. Ezután a stúdió először helyezkedik el, majd felülről, a WinAVR-ről a stúdióra gördül, plugin formájában. Határozottan javaslom a WinAvr telepítését röviden, valami ilyesmi, mint a C: \\ WinAvr, ezáltal elkerülheti a problémák merülését.

Projekt létrehozása
Tehát a stúdió szállítása, SI rögzítve van, itt az ideje, hogy megpróbáljon valamit programozni. Kezdjük egy egyszerű, legegyszerűbb módon. Futtassa a stúdiót, válasszon egy új projektet, mint fordító AVR GCC, és adja meg a projekt nevét.

Megnyitja a munka mezőt üres * .c fájllal.

Most nem akadályozza meg az útvonalak megjelenítését a stúdió lapokon. Ehhez a ferde:
Az Eszközök menü - Opciók - Általános - Filetabs, és válassza a "Csak fájlnév" lehetőséget a legördülő listában. Ellenkező esetben lehetetlen dolgozni - a fülön a fájl teljes elérési útja lesz, és nem lesz több, mint két lap a képernyőn.

Projektbeállítás
Általánosságban elmondható, hogy az összes függőséget le kell írni. És ez valószínűleg helyes. De a teljesen integrált IDE-re nőttem fel uVision vagy AVR stúdió. Ez a megközelítés mélyen idegen. Ezért a saját útján fogok tenni, az összes stúdiót.

Halom a gombhoz egy fogaskerékkel.


Ezek a projekt beállításai, vagy inkább a Make fájl automatikus generációjának beállítása. Az első oldalon csak meg kell adnia az MK-t, amelyen az MK fog működni. Ez a bitek biztosítékaitól függ, ezért úgy véljük, hogy a frekvencia 8000000GZ.
Figyeljen az optimalizálási karakterláncra is. Most van - az optimalizálás mérete. Míg hagyja, ahogy van, akkor megpróbálhat játszani ezzel a paraméterrel. -O0 az eltávolítható optimalizálás egyáltalán.

A következő lépés az útvonalak konfigurálása. Az első dolog, hogy hozzáadja a projekt könyvtárát - van egy harmadik fél könyvtárat. A lista megjelenik ". \\"

A fájl létrehozása, a projekt alapértelmezett mappájában láthatja, csak fut a szemedben, nézze meg, mi van ott.


Ez minden. Jim mindenütt rendben van, és menjen a forráshoz.

A probléma megfogalmazása
Az üres lap olyan integetett, hogy néhány trükkös ötletet testesítse meg, mivel a dióda banális villogása nem helyezkedik el. Hagyjuk azonnal egy bikát a szarvakért, és hajtsa végre a kapcsolatot a számítógéphez - ez az első dolog, amit csinálok.

Ez így fog működni:
A COM port megérkezése alatt a készülék (0x31 kód) megvilágítja a diódozást, és ha a nulla érkezés (0x30 kód) eltűnik. Ráadásul mindent megszakítanak, és a háttérfeladat egy másik diódát villog. Egyszerűen és jelentéssel.

Összegyűjti a rendszert
Az USB-USART Converter modulot a Microcontroller USART konverterekkel kell összekötni. Ehhez vegyen egy jumper két vezetéket, és tegye a keresztet a kereszt csapokba. Vagyis az RX vezérlő csatlakozik a TX Converterrel és a TX átalakítóval az RX vezérlővel.

Ennek eredményeképpen kiderül, ez egy ilyen rendszer:


Egyéb következtetések összekapcsolása, táplálkozás, mentesítés, szabványos

Kódot írunk

Azonnal kell foglalni, hogy nem fogok elmélyíteni kifejezetten az SI nyelv leírásában. Ehhez egyszerűen óriási mennyiségű anyag van, a klasszikusok "SI programozási nyelve" és a különböző technikákkal végződő.

Egy ilyen módszert találtak bennem a méhsejtben, egyszer tanulmányoztam ezt a nyelvet. Minden rövid, érthető és az ügyben. Fokozatosan felállítom és átrendeztem a webhelyemre.

Van valójában nem minden fejezet elhalasztott, de azt hiszem, ez nem sokáig.

Nem valószínű, hogy jobban leírom, így a képzési kurzusból a kék finomságok részletes expozíciója helyett egyszerűen közvetlen linkeket adok a technika bizonyos oldalaihoz.

Könyvtárak hozzáadása.
Először is hozzáadjuk a szükséges könyvtárakat és címeket definíciókkal. Végtére is, az SI univerzális nyelv, és meg kell magyaráznia, hogy az AVR-vel dolgozunk, ezért lépjen be a forrásvonalba:

1 #Inlude.

#Inlude.

Ez a fájl a mappában van Winavr. És tartalmazza az adatkezelő minden nyilvántartását és portját. És ott minden ravasz, hivatkozva egy adott vezérlőre, amelyet a fordító átirányítja készít Fájl a paraméterben Mcu. Ezen változó a projektben, egy fejlécfájl az összes port és regiszter címének leírásával rendelkezik ezen a vezérlőn. Hogyan! Nélkül is lehetséges, de akkor nem fogod használni a regiszterek szimbolikus nevét, mint egy SEGREG vagy UDR, és emlékeznie kell mindegyik, mint a "0xc1", és ez egy fej.

Ugyanaz a csapat maga #Inlude.<имя файла> Lehetővé teszi a projekthez való hozzáadását, például bármely szövegfájl tartalmát, például egy másik kód funkcióját vagy egy darabját leíró fájlt. És így az irányelv megtalálhatja ezt a fájlt, feltüntetettük a projektünk módját (a winavr könyvtár már meg van írva).

Fő funkció.
Az SI nyelven szereplő program funkciókból áll. Bármilyen sorrendben beágyazhatók és hozhatók egymástól különböző utak. Minden funkciónak három szükséges paramétere van:

  • Visszatérési érték, például, sin (x) Visszaadja az x sinus értékét. Mint a matematikában, röviden.
  • Továbbított paraméterek, ugyanaz az X.
  • Testfunkció.

A továbbított és visszaadott értéknek bármilyen típusúnak kell lennie, az adatoktól függően.

A C-n lévő bármely programnak tartalmaznia kell egy funkciót fő. A fő programba való belépéspontjaként, különben NIFIGA NEM SI :). Szerint a fő jelenléte valaki más forrás egy millió fájlból, meg lehet érteni, hogy ez a program vezetője, ahol minden elkezdődik. Tehát kérdezzük:

1 2 3 4 5 Int fő (üresség) (visszatérés 0;)

int fő (üresség) (visszatérés 0;)

Minden, először legegyszerűbb program Írta, nem számít, hogy nem tesz semmit, csak elkezdtük.

Elemezzük, amit tettünk.
int. Ez a fajta adat, amelyet a fő funkció visszatér.

Természetesen egy mikrokontrollerben fő. Nem tudok semmit visszaadni elvben és elméletileg void Main (Void)De a GCC kezdetben a számítógépen élesedik, és a program visszaadhatja az értéket operációs rendszer Befejezésekor. Ezért a GCC void Main (Void) káromkodás figyelmeztetés.

Ez nem hiba, akkor fog működni, de nem szeretem a lendningeket.

Üres. Ez a fajta adat, amelyet ebben az esetben továbbítunk a funkciónak fő. Szintén nem tud semmit sem venni kívülről, a költő Üres. - Dummy. A dugót akkor alkalmazzák, ha nem szükséges semmit vagy visszatérhet.

Ezek { } A táblázatok egy szoftverblokk, ebben az esetben a test funkció fő., a kód lesz.

visszatérés. - Ez a visszatérési érték, amelyet a fő funkció befejeződik, mivel mi vagyunk, vagyis a szám, hogy vissza kell adnunk a számot. Bár még mindig nincs értelme, mert A Microcontroller-en a Main-tól a sehol. Visszatérek nullát. A nonfig számára. És a fordító általában okos, és a kód nem generálja a kódot.
Bár, ha perverz, akkor fő. Elmehetsz az MC-hez - például a bootloader szakaszba esik, és teljesítse azt, de már van egy alacsony szintű firmware szedés, az átmeneti címek beállításához. Az alábbiakban látni fogod és megérted, hogyan kell csinálni. Minek? Ez egy másik kérdés, az esetek 99.999% -ában ez a NAFIG nem szükséges :)

Készült, tovább ment. Változó hozzáadása, ez nem feltétlenül szükséges számunkra, és nem szükséges a változók bevezetése, de tanulunk. Ha a változók a funkció testébe kerülnek - akkor helyiek és csak ebben a funkcióban léteznek. Ha elhagyja a funkciót, ezeket a változóit eltávolítják, és a RAM memóriáját fontosabb igények lehetnek. .

1 2 3 4 5 6 Int fő (érvénytelen) (aláírás nélküli char i, visszatérés 0;)

int fő (érvénytelen) (aláírás nélküli char i, visszatérés 0;)

aláírás nélküli Annyira nem megfelelő. Az a tény, hogy a bináris ábrázolásban van egy rangidős bit a jelhez, ami azt jelenti, hogy egy bájtban (char) a + 127 / -128 szám, de ha a jel eldobja, akkor már 0-tól 255-ig terjed. Általában a jel nem szükséges. Hogy aláírás nélküli.
ÉN. - Ez csak a változó neve. Nem több.

Most be kell inicializálnod a kikötőket és Uart.. Természetesen elvégezheti és csatlakoztathatja a könyvtárat, és hívhat egyfajta Uartinit (9600); De akkor nem fogod tudni, ami valójában történt.

Ezt megtesszük:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Int fő (üres) (aláírás nélküli char i; #define xtal 8000000l #define baudrate 9600l #Define Bauddivider (Xtal / (16 * Baudrate) -1) #Define hi (x) ((x) \u003e\u003e 8) #define lo (x) ((x) & 0xff) ubrrl \u003d lo (Bauddivider); Ubrrh \u003d Hi (Bauddivider); Ucsra \u003d 0; Ucsrb \u003d 1.<< RXEN| 1 << TXEN| 1 << RXCIE| 0 << TXCIE; UCSRC = 1 << URSEL| 1 << UCSZ0| 1 << UCSZ1; }

int Main (üres) (aláíratlan char i; #define xtal 8000000l #define baudrate 9600l #define bauddivider (xtal / (16 * baudrate) -1) #define hi (x) ((x) \u003e\u003e 8) #define lo ( x) ((x) & 0xff) ubrrl \u003d lo (Bauddivider); ubrrh \u003d hi (bauddivider); ucsra \u003d 0; ucsrb \u003d 1<

Ijedős? Tény, hogy az igazi kód itt csak öt utolsó sor. Minden, ami #Define Ez egy makro-nyelv előfeldolgozó. Majdnem ugyanazok a felsők, mint az összeszerelőben, de a szintaxis kissé eltérő.

Ezek megkönnyítik a rutin műveleteket a szükséges együtthatók kiszámításához. Az első sorban azt mondjuk, hogy inkább Xtal Biztonságosan helyettesítheti a 80.000.000-et, és L.- Típus specifikáció, hosszú bevásárlóközpont egy processzor órafrekvencia. Azonos Átviteli sebesség. - az UART adatfrekvenciája.

bauddivider. Már bonyolultabb, a két korábbi képlet által kiszámított kifejezés helyett helyettesíthető.
Jól és Lo és SZIA Ebből az eredményből a fiatalabb és a magas rangú bájtokat veszi figyelembe, mert Egy bájtban egyértelműen nem illeszkedik. BAN BEN SZIA Az ICSE Shift történik (a makró bemeneti paramétere) nyolcszor a jobb oldalon, ennek eredményeképpen csak a legrégebbi bájt marad. B. Lo Készítsünk egy adagot és egy számot, amelynek eredményeként csak a legfiatalabb bájt marad.

Így mindent megtesz #Define Biztonságosan eldobhatja, és a kívánt számok számítanak a számológépre, és azonnal beírják őket az UBBRL \u003d vonalakba. és ubbh \u003d ... ..

Tud. De! Csináld ezt Kategorikusan lehetetlen!

Ez is dolgozni fog, de az úgynevezett mágikus számok - Azok az értékek, amelyeket érthetetlenül, ahonnan nem világos, miért és ha egy ilyen projektet néhány év alatt adományoz, akkor nehéz megérteni, hogy átkozott lesz. Igen, és most meg akarja változtatni a sebességet, vagy megváltoztathatja a kvarc frekvenciáját, és minden újra kell újraszereznie, és így megváltoztatta néhány Tsiferokot a kódban és mindent. Általában, ha nem szeretné élvezni a Bydlokodert, akkor tegye meg a kódot úgy, hogy könnyen olvasható, érthető és könnyen módosított.

Akkor minden egyszerű:
Mindezek az "Ubrrl és Co" az adóegység konfigurációjának nyilvántartásai, amelyekkel kommunikálunk a világgal. És most a szükséges értékeket hozzárendeltük a kívánt sebesség és a megfelelő mód konfigurálásával.

Felvételi nézet 1< A következőket jelenti: vedd 1 és tedd a helyére RXEN. A repülésben. RXEN. Ez a nyilvántartás 4. bitje UCSRB.így 1< 00010000 bináris számot képez, TXEN. - Ez egy harmadik bit, és 1< DAST 00001000. Egyetlen "|" Ez törött VAGYSO 00010000 | 00001000 \u003d 00011000. A fennmaradó szükséges konfigurációs biteket ugyanúgy mutatják ki, és hozzáadjuk az általános csokorhoz. Ennek eredményeként az összeszerelési szám UCSRB-ben van írva. A részleteket az MC-ben lévő adatlapon írják az USART részben. Tehát ne zavarja meg a műszaki részleteket.

Készen áll, itt az ideje, hogy mi történt. Az emuláció összeállítására és elindítására (CTRL + F7).

Hibakeresés
Mindenféle előrehaladási sáv Ran, a stúdió megváltozott, és egy sárga nyíl megjelent a fő funkció közelében. Ez az, ahol a processzor jelenleg aktuális, és a szünet szimulációja.

Az a tény, hogy eredetileg az Ubrrl \u003d Lo (Bauddivider) sorban állt; Végtére is, az a tény, hogy nincs meghatározva, ez nem kód, hanem egyszerűen előzetes számítások, akkor a szimulátor egy kicsit rögzített. De most rájött, az első utasítás befejeződött, és ha egy fára mászik I / O nézet, Az USART szakaszban, és nyerj ott az UBBRL bájton, látni fogod, hogy már létezik már! 0x33.

Készítsen még egy lépést. Nézd meg, hogyan változik egy másik regiszter tartalma. Tehát biztosítsa őket mindannyian, figyeljen arra a tényre, hogy az összes jelzett bitet mutatták ki, ahogy mondtam, és az egész bájt időpontjában áll. A következő visszatérés nem működik, a program vége.

Nyítás
Most állítsa vissza a szimuláció nulla. Kattintson ide Reset (Shift + F5). Nyitott szétszerelési felsorolás, most látni fogja, hogy mi történik a vezérlő ténylegesen. Nézet -\u003e Szétszerelés. És nem yyaaaa !!! Szerelő !!! Uzhos !!! De meg kell. Tehát később, amikor valami rosszul megy, nem mer volt a kódba, és nem kérdezte Lamer kérdéseket a fórumokon, és azonnal felmászott a veszteségbe, és figyelte, hogy hol van egy stand. Nincs semmi szörnyű ott.

Először is, a sorozat teteje lesz:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 +00000000: 940C002A JMP 0x0000002A ugrás 00.000.002: 940C0034 JMP 0x00000034 ugrás 00.000.004: 940C0034 JMP 0x00000034 ugrás 00.000.006: 940C0034 JMP 0x00000034 ugrás 00.000.008: 940C0034 JMP 0x00000034 ugrás + 0000000A: 940C0034 JMP 0x00000034 ugrás + 0000000C: 940C0034 JMP 0x00000034 ugrás + 0000000E: 940C0034 JMP 0x00000034 ugrás 00.000.010: 940C0034 JMP 0x00000034 ugrás 00.000.012: 940C0034 JMP 0x00000034 ugrás 00.000.014: 940C0034 JMP 0x00000034 ugrás 00.000.016: 940C0034 JMP 0x00000034 ugrás 00.000.018: 940C0034 JMP 0x00000034 ugrás + 0000001A: 940C0034 JMP 0x00000034 ugrás + 0000001C : 940C0034 JMP 0x00000034 ugrás + 0000001E: 940C0034 JMP 0x00000034 ugrás 00.000.020: 940C0034 JMP 0x00000034 ugrás 00.000.022: 940C0034 JMP 0x00000034 ugrás 00.000.024: 940C0034 JMP 0x00000034 ugrás 00.000.026: 940C0034 JMP 0x00000034 ugrás 00.000.028: 940C0034 JMP 0x00000034 ugrás

00000000: 940C002A JMP 0x0000002A ugrás 00.000.002: 940C0034 JMP 0x00000034 ugrás 00.000.004: 940C0034 JMP 0x00000034 ugrás 00.000.006: 940C0034 JMP 0x00000034 ugrás 00.000.008: 940C0034 JMP 0x00000034 ugrás + 0000000A: 940C0034 JMP 0x00000034 ugrás + 0000000C: 940C0034 JMP 0x00000034 ugrás + 0000000E : 940C0034 JMP 0x00000034 ugrás 00.000.010: 940C0034 JMP 0x00000034 ugrás 00.000.012: 940C0034 JMP 0x00000034 ugrás 00.000.014: 940C0034 JMP 0x00000034 ugrás 00.000.016: 940C0034 JMP 0x00000034 ugrás 00.000.018: 940C0034 JMP 0x00000034 ugrás + 0000001A: 940C0034 JMP 0x00000034 ugrás + 0000001C: 940C0034 JMP 0x00000034 ugrás + 0000001E: 940C0034 JMP 0x00000034 ugrás 00.000.020: 940C0034 JMP 0x00000034 ugrás 00.000.022: 940C0034 JMP 0x00000034 ugrás 00.000.024: 940C0034 JMP 0x00000034 ugrás 00.000.026: 940C0034 JMP 0x00000034 ugrás 00.000.028: 940C0034 JMP 0x00000034 ugrás

Ez a megszakítási vektorok táblázata. Visszatérünk hozzá, miközben csak látjuk és ne feledje, hogy ez az. Az első oszlop a vaku flash-címe, amelyben a parancs hazudik, a harmadik Mnemonikus csapat második parancskódja, ugyanaz az összeszerelő oktatás, a csapat harmadik operandusa. Nos, automatikus megjegyzés.
Tehát, ha megnézed, akkor szilárd átmenetek vannak. És a JMP parancskód négy byte, tartalmazza a hátrafelé rögzített átmeneti címet - a fiatalabb bájt a fiatalabb cím és az átmeneti parancs kódja 940c

0000002b: be1f ki 0x3f, r1 az I / O helyen

A nulla-0x3f címre való felvétel Ha az I / O nézet oszlopot látja, akkor látni fogja, hogy a 0x3F-cím az SREG - Flag Register Controller regiszter címe. Azok. A programot nulla körülmények között állítjuk be.

1 2 3 4 + 0000002C: E5CF LDI R28.0x5F R28.0x5F terhelés + 0000002D: E0D4 LDI R29.0x04 R29.0x04 Terhelés azonnal + 0000002E: BFDE OUT 0X3E, R29 OUT I / O Helyszín + 0000002F: BFCD OUT 0X3D, R28 OUT I / O Helyszín

0000002C: E5CF LDI R28.0X5F R28.0x5F terhelés + 0000002D: E0D4 LDI R29.0x04 R29.0x04 terhelés + 0000002E: BFDE OUT 0X3E, R29 OUT I / O Helyszín + 0000002F: BFCD OUT 0X3D, R28 Out I / O Helyszín

Ez a köteg mutatójának betöltése. Közvetlenül az I / O regiszterekbe történő szállítás nem, csak a közbenső regiszteren keresztül. Ezért az első LDI a közbenső termékben, majd az I / O-ban. Én is többet fogok mondani a veremről. Időközben ismert, hogy ez egy ilyen dinamikus memória terület, amely a RAM végén lóg, és megőrzi a címeket és a közbenső változókat. Most rámutattunk, hogy hol lesz egy verem.

00000032: 940c0041 JMP 0x00000041 Ugrás

Ugrás a program Saaaeeee végére, és ott van egy tilalom a megszakítások és a hurok szorosan önmagában:

1 2 +00000041: 94F8 CLI globális megszakítás Letiltás +00000042: CFFF RJMP PC-0X0000 Relatív Jump

00000041: 94F8 CLI globális megszakítás Letiltás +00000042: CFFF RJMP PC-0X0000 relatív ugrás

Ez előre nem látható körülmények esetén, például a fő funkcióból származó kimenet. Az ilyen hurokból a vezérlő egy hardveres visszaállítással jeleníthető meg, vagy valószínűleg a Watchdog Dog - Watchdogból való lemerülés. Nos, vagy, ahogy fent mondtam, javítsa ki ezeket a helyeket a hex szerkesztőben és az útválasztásban, ahol van egy lélek. Figyeljen arra is, hogy kétféle JMP és RJMP átmenet van, az első közvetlen áttérés a címre. Négy bájtot igényel, és közvetlen átmenetet készíthet a memóriaterületen. Az átmenet második típusa - RJMP - relatív. A csapata két bájtot vesz igénybe, de az átmenet az aktuális pozícióból (címek) 1024 lépéssel előre vagy hátra. És paramétereiben az aktuális pont eltolását jelzik. Gyakrabban használják, mert Kétszer kevesebb helyet foglal el, és a hosszú tényezők ritkán szükségesek.

1 +000034: 940C0000 JMP 0x00000000 Ugrás

00000034: 940c0000 JMP 0x00000000 Ugrás

És ez a kód elején ugrás. Indítsa újra egyfajta. Ellenőrizheti, hogy az összes vektor itt ugrik. Ebből a kimenetből - ha lehetővé teszi a megszakítások engedélyezését (alapértelmezés szerint tilos), és megszakad, de nincs kezelő, akkor lesz egy program visszaállítása - a program eldobja a programot.

Fő funkció. Minden hasonló, akkor sem írhatja le. Csak a regiszterekre nézve már kiszámították a számot. Preprocessor fordító taxis !!! Tehát nincs "mágia" szám!

1 2 3 4 5 6 7 8 9 10 11 12 <

00000036: E383 LDI R24.0x33 Road azonnali +000037: B989 OUT 0X09, R24 Out I / O Helyszín 15: Ubrrh \u003d Hi (Bauddivider); +000038: BC10 out 0x20, R1 Out I / O Helyszín 16: Ucsra \u003d 0; +000039: B81B ki 0x0b, R1 Out I / O Helyszín 17: UCSRB \u003d 1<

És itt van a Jamb:

1 2 3 + 00003E: E080 LDI R24.0x00 Rakomány közvetlen + 0000003F: E090 LDI R25.0x00 Rakomány azonnal +00000040: 9508 RET szubrutin visszatérés

0000003E: E080 LDI R24.0x00 Rakomány közvetlen + 0000003F: E090 LDI R25.0x00 Rakomány közvetlen +00000040: 9508 RET szubrutin visszatérés

Megkérdezik, hogy miért ez a fordító hozzáadja az ilyen topmaster-t? És ez nem, mint 0, mint 0, akkor azonosítottunk a fő (érvénytelen). Tehát több mint négy bájtot nyertem, nem értem, mit :) és ha Void fő (üres), akkor csak akkor lesz Varning lesz. Mit mondanak, hogy nem adunk vissza semmit a fő funkcióhoz. Általában tetszik neked :)

Bonyolult? Úgy tűnik, nem. A szétszerelési módban lépésről-lépésre átugorom a Procy-t, mivel a processzor egyedi utasításokat hajt végre, amely nyilvántartásokkal történik. Hogyan mozoghat a parancsok és a végső hurok.

A folytatás néhány nap alatt következik ...

Offtop:
Alexei78. A Firefox rögzítő dugója, amely megkönnyíti a navigációt a webhelyemben és a fórumon.
Beszélgetés és letöltés

Az Orosz Föderáció Oktatási és Tudományos Minisztériuma

Állami oktatási intézmény

magasabb szakmai oktatás

"Szentpétervár állam

Naval Műszaki Egyetem "

E. V. KOROTITSKY, YU. E. KOROTITSKAYA

Az SI nyelv alapjai az AVR mikrokontrollerek számára

Tutorial

Szentpétervár

1. A C-nyelv alapjai a Microcontrollers AVR számára

Az univerzális nyelvet C-ként fejlesztették ki egy UNIX operációs környezet megírásához.

Nyelv támogatja az eljárási-orientált programozási paradigmát, azaz Paradigm - egymással összefüggő eljárások.

Az SI nyelvhez a laconicitást egy modern végrehajtási áramlásvezérlés, adatstruktúrák és kiterjedt műveleti készlet jellemzi.

    1. A csapat nyelvének előfeldolgozója

Az előfeldolgozó (makroprocesszor) az SI nyelv szerves része, amely feldolgozza a program forráskódját, mielőtt áthaladna a fordítón keresztül. Az előfeldolgozó elolvassa a szövegsorokat, és elvégzi a parancssorok által meghatározott műveleteket. Ha az első karakter, mint egy szóköz, akkor a #, akkor egy ilyen karakterláncot az előfeldolgozó úgy tekinti, mint egy csapat. A parancssorokat hívják irányelv előfeldolgozó.

Preprocesszor fordító CodeVisionAKEAKEREAKEREAKESS több irányelv. A lapon. Az 1. ábrát a rövid leírásra adják.

Asztal. 1 CODEVISIONAVR COMPILER PROPLOOR PREProCesszorok

Irányelv

Célja

A programba bevont

egy másik fájl

Az Si nyelv néhány lexikai egységének helyettesítésére használják másoknak, valamint makrók létrehozását

A #define irányelv visszavonására használják

Feltételes összeállításhoz használják

A beépített makrók módosítása _line_y_file_

Lehetővé teszi a fordítási és megjelenítési hibaüzenetet

A forrásgyártó kód beillesztésére szolgál

Lehetővé teszi a speciális fordítói irányelveket

Minden előfeldolgozó irányelv egy jelzéssel kezdődik. Az előfeldolgozó irányelvek után a vesszővel rendelkező pontot nem helyezik el.

      1. # Az irányelv

Példa:

Irányelv # tartalmazza.

#A "fájlnév" és a #include<имя_файла>

Fájl néva fájlnévből áll.

Irányelv # tartalmazza.széles körben használják az úgynevezett fejlécfájlok engedélyezéséhez (kiterjesztési fájlok . h.), a használt mikrokontroller perifériás eszközök és megszakítási vektorok meghatározása, a könyvtári funkciók prototípusai, a felhasználó által meghatározott funkciók prototípusai, és így tovább.

#INCTUTE "FILE_NAMEH"

      1. #Define, #uldef irányelvek

Irányelv # meghatároza SI nyelv (konstansok, kulcsszavak, üzemeltetők vagy kifejezések) gyakran felhasznált egyedülálló lexikai egységeit más, ún. azonosítók. Az azonosítók szöveges vagy numerikus konstansok hívását nevezett konstansok. Azonosítók, amelyek a programfragmenseket helyettesítik makró definíciók És a makró definíciók érvei lehetnek.

Irányelv # meghatározkét szintaktikai formája van:

#Define szövegazonosító

#Define azonosító (paraméterlista) szöveg

Az előfeldolgozó program összeállítása előtt az irányelvvel összhangban # meghatározcserélje ki a programban tapasztalt összes azonosítót, hogy megfeleljen a szövegnek.

Példa:

#Define a 15 #define in (A + 20) // Ezek az irányelvek helyettesítik a program szövegét

mindegyik azonosító a 15-ös számra, és mindegyik azonosító a kifejezésben (15 + 20) a környező konzolokkal együtt.

Példa:

#Define x (A, B, C) (a) * (b) - (c) // az ezen irányelvnek megfelelően az Y \u003d X (K + M, K-M, N) töredéket helyettesítjük; Egy töredéken


A modern amatőr lehetetlen elképzelni mikrokontrollerek nélkül, és ez nyilvánvaló. Az elmúlt évtizedekben a különböző gyártók mikrokontrollerek széles körben elterjedtek az emberi tevékenység különböző területeiben. Gyakran megtalálhatók a leginkább váratlan eszközökben és struktúrákban. A körülöttünk lévő folyamatok számítógépesítését és automatizálását tapasztaljuk. Az igazság az, hogy a programozás alapjainak ismerete nélkül a modern versenyképes eszközök létrehozása szinte lehetetlen ...

Ha elolvastad ezt a cikket, akkor valószínűleg vágya, hogy megértse, hogyan működik a mikrokontrollerek, és a legvalószínűbb kérdések megjelentek:

4. Milyen irodalom tanulni?

Próbáljuk meg válaszolni ezeket a kérdéseket.

1. Milyen mikrokontroller úgy dönt, hogy dolgozik?

A 8 bites mikrokontrollerek nagyon népszerűek a rádió amatőrökkel Kép Microchip technológia és AVR. Atsal, 16 bites MSP430. Ti, valamint 32 bites mikrokontrollerek, építészet Kar.

Az iparban, némileg másképp, az első hely, ahol egy nagy margó van Renesas Electronics. a második oldalon Freescale, a harmadik Samsung, akkor menj Microchip. és TiTovábbá a többiek.
A népszerűséget az ár és a hozzáférhetőség határozza meg, a technikai információk rendelkezésre állása és a szoftver kíséretének költsége jelentős szerepet játszik.

8 bites AVR mikrokontrollereket, családokat fogunk tanulni ATMEGA 8 és 16 sorozat. A választás meghatározása, ismét hozzáférhetőség, sok amatőr fejlesztés jelenléte, hatalmas számú oktatási anyag. A különböző beépített alkatrészek és a család funkcionalitásának jelenléte.

2. Mi a fejlesztési környezet használata a kiválasztott mikrokontroller programozásához?

Az AVR-hez különböző integrált fejlesztési környezeteket (IDE, integrált fejlesztési környezetet) hoztak létre.
IDE - Ez a programozók által használt szoftverek (szoftver) fejlesztése, amely magában foglalja:
szöveg szerkesztő,
fordító és / vagy tolmács,
Közgyűlés automatizálási eszközök,
Debugger.

A leggyakoribb Avrstudio, Atmelstudio, WinAvr, CodeVision, IAR EMBEDDED Workbench.
A programok írása érdekében ingyenes leszünk IDE ATMELSTUDIO 6. verzió és magasabb.
Letöltheti az ATMEL Studio-t a hivatalos webhelyről a regisztráció után (a regisztráció teljesen ingyenes, és nem kötelez semmit!)

Az AtmelStudio lehetővé teszi a projektek létrehozását, valamint az összeszerelőben és az SI-ben.

Kezdetben mindig van kérdés: milyen programozási nyelv választani a hatékony programok írására?

Egyszerűen válaszolok: legalább két nyelvű összeszerelő és SI-t kell írni. Az összeszerelő egyszerűen szükséges, ha gyors és kompakt szubrutinokat és makrókat, különböző eszközillesztőket kell írnia. De ha összetett algoritmusokra épülő ömlesztett projektet kell létrehozni, anélkül, hogy az SI-t sok időt tölthet, különösen a hibakeresési folyamatban, és ha van egy vágy, hogy átadjon egy másik platformra, például Pic18-ra, vagy STM-re , lehet, hogy egy kiemelkedő probléma.
Ezenkívül a hardveres számítástechnikai platformok most megjelentek Arduino.Munka, amely az SI ++ nyelv ismeretét igényli.
Ezért az összeszerelő és az SI-ben programokat írunk.

Annak érdekében, hogy egyértelműen látja a munkájának eredményét anélkül, hogy forrasztó vasat vagy olyan bullablót használna, hogy telepítse a programot Proteus..

3. Hogyan villant a vezérlő, és milyen további eszközök és tengelyekre van szükség a kényelmes munkához?

Adatokat használunk. Ezenkívül meg kell vásárolnia a dömpingkártyákat, a tápfeszültségű tápegység 5 volt. Lehetőség van egy kis hullámokkal ellátott tápegységként 5 voltos stabilizáció alkalmazásával.
Talán idővel, egy projektet hozhatunk létre egy hibakeresési fórumon.

4. Milyen irodalom tanulni?

De például:
Gyakorlati programozás AVR az összeszerelőn. Revich, 2011.
1000 és egy mikrokontroller séma. 1-2. Rumik, 2010-2011
10 gyakorlati eszközök az MK AVR könyven 1-2. Kravchenko, 2008-2009
Eszközfejlesztő bemutató az AVR MK-nál. Belov, 2008.
Mk avr családok apró és atména. EFSTIFEEV, 2008.
CodevionAvr. Kézikönyv kezdőknek. Lebedev, 2008.
Az eszközök, tirisztorok, relék mikroprocesszoros vezérlése. Belov, 2008.
Analóg interfészek MK. Steward, Ball, 2007
Hozzon létre eszközöket az MK AVR-en. Belov, 2007.
MK AVR az amatőr gyakorlatban. Attiny2313 teljes elemzése. Belov, 2007.
Hálózati és tűzfal adatcsere az MK-val. Menj, 2007.
Mk avr. Workshop kezdőknek. Hartov, 2007.
Alkalmazás AVR rendszer, algoritmusok, programok. Baranov, 2006.
AVR mikrokontrollerek. Bevezető kurzus. Morton, 2006.
Mérés, ellenőrzés és szabályozás az AVR használatával. Trmpet, 2006.
Programozás a C nyelvben az AVR és PIC MK számára. Shpak, 2006.
Tervezési eszközök az MK-n. Belov, 2005.
Az MK egyszerű, 1-3. Frunze, 2002-2003
SI programozási nyelv, 2. kiadás. KERNIGAN, RITCHCH, 2009
Az Atsal mikrokontrollerek programozása S. Prokopenko, 2012-ben

5. Hol az interneten felteszi a kérdéseket, és kaphat konkrét válaszokat?

Kérdéseket tehetünk fel más fórumunkon, ahol valamilyen módon vagy más módon befolyásolta a mikrokontrollerek témáját. A fórumok legfontosabb dologja helyesen megfogalmazza a kérdéseket, hogy egyértelműen megkapja a válaszokat. Absztrakt kérdések nem szívesen, és valószínűleg a válasz helyett nehéz kritikát kapsz, vagy a kérdésed figyelmen kívül hagyja!

Most vegye figyelembe a kedvenc közelebb, Atmega Microcontroller 8-at

8 bites nagyteljesítményű AVR mikrokontroller alacsony fogyasztással
Progresszív RISC architektúra
130 nagy teljesítményű parancsok, a legtöbb csapatot egy óra ciklusra végzik
32 8-bites általános célú nyilvántartás
Teljesen statikus munka
Közeledik 16 MIPS (16 MHz-es óra frekvenciával)
Beépített 2 ciklusú többszörös

Nem illékony memória és adatmemória
8 KByte intrasystem programozható flash memória (in-rendszer önprogramozható vaku)
1000 törlési / írási ciklust biztosít
További rendszerindítási kódok független blokkoló bitekkel
Biztosított egyidejű olvasási / írási mód (olvasás közben-írás)
512 bájt EEPROM
100 000 törlési / rekord ciklust biztosít
1 Kbyte beépített SRAM
Programozható zárolás A felhasználó szoftverének védelme

Beépített periféria
Két 8 bites időzítő / számláló külön előzetes osztóval, egy összehasonlító móddal
Egy 16 bites időzítő / számláló egy különálló előzetes osztóval és rögzítési és összehasonlító módokkal
Valós idejű számláló külön generátorral
Három csatorna pwm.
8 csatornás analóg-digitális átalakító (TQFP és MLF burkolatokban)
6 csatorna 10 bites pontossággal
6 csatornás analóg-digitális átalakító (PDIP házban)
4 csatorna 10 bites pontossággal
2 csatorna 8 bites pontossággal
Byte-orientált 2-vezetékes soros interfész
Programozható soros USART
SPI soros interfész (ólom / slave)
Programozható Watchdog időzítő külön beépített generátorral
Beépített analóg összehasonlító

Speciális mikrokontroller funkciók
A tápegység visszaállítása és a programozható detektor rövid távú tápfeszültsége
Beépített kalibrált RC generátor
Belső és külső megszakítási források
Öt alacsony fogyasztási mód: tétlen, energiatakarékos, bekapcsolás, készenléti és adc zajcsökkentés

Következtetések I / O és Corps
23 programozható I / O vonalak
28 pólusú PDIP tok, 32 pólusú TQFP ház és 32 pólusú MLF ház

Üzemi stressz
2.7 - 5,5 V (ATMEGA8L)
4.5 - 5,5 V (ATMEGA8)

Működési frekvencia
0 - 8 MHz (Atmega8L)
0 - 16 MHz (Atmega8)

az ATPEGA16 különbségei 8-tól 8-ig
16 KByte intrasztikus programozható flash memória (in-system self-programozható vaku)

Jtag interfész (kompatibilis az IEEE 1149.1-vel)
A Periféria beolvasásának képessége, amely megfelel a JTAG szabványnak
Továbbfejlesztett beépített hibakeresési támogatás
Programozás a JTAG interfészen keresztül: Flash, memória EEPROM, Jumpers and Bits Lock

Négy csatorna PWM / PWM

8 csatornás 10 bites analóg-digitális átalakító
8 aszimmetrikus csatorna
7 Differenciálcsatornák (csak a TQFP-ügyben)
2 Differenciálcsatornák programozható nyereséggel 1, 10 vagy 200 alkalommal (csak a TQFP-ügyben)

Hat alacsony fogyasztási mód: tétlen, energiatakarékos, bekapcsolás, készenlét, kiterjesztett készenléti és adc zajcsökkentés

32 programozható I / O vonalak

40 pólusú PDIP ház és 44 pólusú TQFP ház

AtmelStudio.

Ha csak most kezdődik, letöltenie kell az AtcelStudio programot a hivatalos oldalról Atsel.com
Az Atcelstudio program telepítése után folytathatja a projekt létrehozását.
Projekt - Ez az Ön programja, amelyet írni, hibakeresés és vaku, a mikrokontroller memóriájában történő összeállítását követően.

A projekt létrehozásához meg kell nyitnia egy programot, ez a képernyővédő megjelenik,

és megnyílik a projekt létrehozása oldala

Új projekt létrehozásához kattintson a Tovább gombra "ÚJ PROJEKT ..."
Ebben az esetben egy új ablak nyílik meg, ahol kiválaszthatja a programozási nyelvet, a projekt nevét, annak helyét, a csomag nevét a projektfájlokkal, valamint a katalógus létrehozásának lehetőségét más keresztprojektek további felhasználására. Olyan projekt létrehozásához, ahol programozni fogunk az összeszerelőben, akkor válasszon - Szerelő.Ezt követően változtassa meg a projekt nevét, annak helyét, és válassza ki RENDBEN.

Megjelenik a következő ablak

Választ "Megaavr, 8-bites" és keresse meg a szükséges mikrokontrollert, úgy döntöttünk ATMEGA8. A Screamer jobb oldalán megjelenik a mikrokontrollerrel futó eszközök listája, amelyek közül az egyikünk csatlakozhatunk. Választ RENDBEN.

Megjelenik a Szövegszerkesztő oldal, amely lehetővé teszi a program szerkesztését és hibakeresését. Míg az oldal tiszta, meghatározott idő és a létrehozás és a projektfájl létrehozásának időpontja, felhasználónév. Vannak opcionális I / O eszközök ablak, programkészletek készítése. most mi


tudunk programozni az összeszerelőben.
Hasonlóképpen létrejött az SI nyelv programozására szolgáló projekt. Kiselev Roman, 2007. május Cikk frissítve május 26, 2014

Tehát mi ez a mikrokontroller (a továbbiakban: mk)? Ez, viszonylag beszélve, egy kis számítógép, amely egy integrált chipben található. Van egy processzor (aritmetikai logikai eszköz, vagy ALU), flash memória, EEPROM-memória, sok regiszter, I / O port, valamint további "gerendák", például időzítők, számlálók, komparátorok, USARTS stb. A mikrocontroller be van töltve a bekapcsolás után, és elkezdi végrehajtani a programot a flash memóriájában. Ebben az esetben ellenőrizheti a legkülönbözőbb külső eszközöket az I / O portokon keresztül.

Mit is jelent ez? Ez azt jelenti, hogy az MK-ban bármely olyan logikai rendszert valósíthat meg, amely bizonyos funkciókat végez. Ez azt jelenti, hogy az MK egy mikrocirk, amelynek belső tartalma valójában létrehozunk magukat. Mi lehetővé teszi, hogy néhány teljesen azonos MK-t vásároljon, teljesen különböző rendszereket és eszközöket gyűjtött össze rájuk. Ha módosítani szeretné az elektronikus eszköz működését, akkor nem kell forrasztópadot használni, csak elegendő lesz az MK újraprogramozásához. Ugyanakkor nem szükséges eltávolítani a készülékről, ha az AVR-t használja, mivel ezek az MK intrahemable programozást biztosít. Így a mikrokontrollerek megszüntetik a programozás és az elektronika közötti különbséget.

Az AVR 8-bites mikrokontrollerek, azaz az ALU véglegesen elvégezheti a legegyszerűbb műveleteket 8 bites számokkal. Most itt az ideje, hogy beszéljünk arról, hogy mit fogunk használni. Az ATMEGA16 MK-vel dolgozom. Nagyon gyakori, és szinte minden rádiós komponensben vásárolhat 100 rubel számára. Ha nem találja meg - akkor megvásárolhatja a MEGA sorozat bármely más mk-t, de ebben az esetben meg kell keresnie a dokumentációt, mivel ugyanaz a "láb" különböző MK elvégezhet különböző funkciókat, és Csatlakozás, úgy tűnik, ez helyes, minden következtetést, lehet, hogy van egy működő eszköz, és talán csak a büdös füst felhője. Az ATMEGA16 vásárlásakor ellenőrizze, hogy legyen egy nagy 40 vágású dip-burkolat, és vegyen egy panelt is, amelybe beilleszthető. Ha szeretne dolgozni, további eszközök is szükségük van: LED, gombok, csatlakozók stb.

Az ATMEGA16 nagyon nagy számú számos funkcióval rendelkezik. Íme néhány jellemzője:

  • Maximális órafrekvencia - 16 MHz (8 MHz atmega16l)
  • A legtöbb csapat egy ütésre kerül sor
  • 32 8 bites működési nyilvántartások
  • 4 Full-fledged 8 bites bemeneti / kimeneti portok
  • két 8 bites időzítő / méter és egy 16 bites
  • 10 bites analóg-digitális átalakító (ADC)
  • belső óra generátor 1 MHz-re
  • analóg összehasonlító
  • sPI, I2C, TWI, RS-232, JTAG interfészek
  • biztosítási programozás és önprogramozás
  • pulse modulációs modul (PWM)

Az eszköz teljes jellemzői, valamint az alkalmazásukra vonatkozó utasítások megtalálhatók a könyvtárban (adatlap) az MK-hoz. Igaz, angolul van. Ha tudod angolul, akkor határozottan töltse le ezt az adatlapot, sok hasznos lehet benne.

Végül elkezdek menni. Javasolom, hogy egy speciális maquetting díjat készítsen egy mikrokontroller számára, amelyen bármilyen elektromos áramkört gyűjtsön mikrokontrollerrel. Az ilyen testület használata nagymértékben megkönnyíti az MC-vel való munkát, és felgyorsítja a programozás tanulmányozásának folyamatát. Ez így néz ki:

Mire lesz szüksége?

Először is, a díj szükséges. Vettem egy kész rádióösszetevő raktárat 115 rubel számára. Ezután minden szükséges adatot forrasztott. Hihetetlenül kényelmes dolog, amelyen percek alatt bármilyen elektromos áramkört összegyűjtheted a pár percek alatt a hurkok és a mikrocirkinek és mutatók telepítésével.

Az áramkör elemeinek csatlakoztatásához nagyon kényelmes a hurkok használata, amelynek végén a csatlakozók telepítve vannak. Ezeket a csatlakozókat a "lábak" -ra helyezik, amelyek az MK egyes kikötőjének mellett ragaszkodnak. A mikrokontrolleret a panelen kell felszerelni, és nem forrasztja a fórumon, különben nagyon nehéz lesz eltávolítani abban az esetben, ha felemeli. Az alábbiakban a Cocolevka MK ATMEGA16:

Mutasd elmagyarázzuk, milyen lábakat érdekel.

  • VCC - itt (4,5 - 5,5 V) stabilizált forrásból
  • GND - Föld
  • RESET - RESET (alacsony feszültséggel)
  • Xtal1, Xtal2 - A kvarc rezonátor itt csatlakozik
  • PA, PB, PC, PD - I / O portok (A, B, C és D, illetve).

Energiaforrásként mindazt használhat, amely 7-11-et jelent a DC-ben. A stabil működés érdekében az MK kell stabilizálódott étkezést. Stabilizátorként a 7805-ös sorozatú zsetonokat használhatjuk. Ezek lineáris integrált stabilizátorok, amelyek bemenete 7-11 áll rendelkezésre állandó, nem stabilizált áramban, és a kimenetet stabilizáljuk. 7805 előtt és utána szűrő kondenzátorokat kell elhelyezni (elektrolitikus az alacsony frekvenciájú interferencia szűrésére és a kerámia szűrésére). Ha nem lehet stabilizálószert találni, akkor 4,5 V-os akkumulátort használhat, mivel áramforrást adhat meg, az MK-t közvetlenül kell használni.

Az alábbiakban megadom az MK kapcsolati rendszert:

Lássuk most, mi a mi.

A BQ1 egy kvarc rezonátor, amely az MK működési frekvenciáját állítja be. Akár 16 MHz-t teszel, de mivel a jövőben és a COM porton dolgozni kívánunk, azt javaslom, hogy a rezonátorok a következő frekvenciákra használják: 14.7456 MHz, 11,0592 MHz, 7,3725 MHz, 3 , 6864 MHz vagy 1, 8432 MHz (később világossá válik, miért). 11.0592 MHz-t használtam. Nyilvánvaló, hogy a nagyobb gyakoriság, annál nagyobb az eszköz sebessége.

Az R1 egy szigorító ellenállás, amely támogatja az 5 V feszültséget a reset bemeneten. Alacsony feszültségszint ezen a bemeneti eszközön. A visszaállítás után az MK betöltődik (10-15 ms), és újra elkezdi végrehajtani a programot. Mivel ez egy kiváló minőségű bejárat, lehetetlen elhagyni "beszélgetni a levegőben" - egy kis tipp az MK előre nem látható kisüléséhez vezet. Erre van szükségem, hogy R1-re van szükségem. A megbízhatóság érdekében javaslom a C6 kondenzátor (legfeljebb 20 mikrof) telepítését is.

SB1 - Reset gomb.

A kvarc rezonátort és a C3 szűrő kondenzátort a lehető legközelebb kell elhelyezni az MC-hez (legfeljebb 5-7 cm), mivel a gyártók előfordulhatnak a vezetékekben, ami az MC működésének hibás működéséhez vezethet.

A rendszer kék téglalapja felkeltette a tulajdonosi programozót. Kényelmes a vezeték formájában végrehajtható, amelynek egyik vége az LPT portban van, a másik pedig egy bizonyos csatlakozóban az MK mellett. A huzal nem lehet túl hosszú. Ha problémák merülnek fel ezzel a kábellel (általában nem fordulnak elő, de bármi történik), akkor az Altera byteBlaster adapter forrasztása lesz. Arról, hogyan kell ezt tenni az Avreal programozó leírásában.

Most, amikor rájöttünk a mirigygel, itt az ideje, hogy menjen a szoftverhez.

Az AVR programozásnak számos fejlesztése van. Először is, ez az AVR stúdió - a hivatalos programozó rendszer az Atmel-től. Lehetővé teszi, hogy írjon az összeszerelő és a C ++ -ben írt összeszerelőre és hibakeresési programokra. Az IAR kereskedelmi programozási rendszer a C, C ++ és az összeszerelő. Winavr - fordító nyílt forrásokkal. ATMANAVR az AVR programozói rendszere egy interfésszel, szinte "1-től az egyik" ugyanaz, mint a Visual C ++ 6. Az ATMANAVR lehetővé teszi a programok hibakeresését, és számos kiegészítő funkciót tartalmaz, amelyek megkönnyítik a kód írását. Ez a programozási rendszer kereskedelmi, de az engedély szerint egy hónapra használható "NAKHALYAVA".

Azt javaslom, hogy az IAR-vel végzett munka kezdje el a legtöbb "átlátható" fejlesztési környezetet. Az IAR-ben a projektet teljes egészében a "fogantyúk" hozták létre, amelyek több projektet hoznak létre, akkor már egyértelműen tudod, hogy mit jelent a kód minden sora, és mi fog történni, ha megváltozik. Az ATMANAVR-vel való együttműködésnél egy előre létrehozott sablont használnia kell, amely nagyon terjedelmes és nehéz megérteni egy olyan személy számára, aki nincs tapasztalata, vagy sok problémája van a fejlécfájlokkal, amikor a "Scratch" projektet összeállítja. Az IAR-vel megértették, később más fordítókat is figyelembe vesszük.

Tehát kezdetekre, Раздar. Nagyon gyakori, és a megállapítása nem lehet probléma. Az IAR 3.20 letöltésével állítsa be a fordító / munkakörnyezetet, és futtassa. Ezt követően elkezdheti a munkát.

Az IAR elindítása, válassza ki fájl / Új / Munkaterület, Válassza ki a projektünk elérési útját, és hozzon létre egy mappát, és adjon nevet, például "Prog1" -t. Most hozzon létre egy projektet: Projekt / Új projekt létrehozása ... Azt is nevezzük - "Prog1". Kattintson a Kattintson jobb gombbal a projektfejre a projektfájlba, és válassza az "Opciók" lehetőséget

Itt konfiguráljuk a fordítót egy adott mk számára. Először is ki kell választania az ATMEGA16 processzor típusát a Target fülön, a Könyvtár konfiguráció lapján telepítse az I / O-Incluser fájlok engedélyezési fájljait (így használhatja a különböző MK regiszterek nevét a Programkód) Válassza ki a könyvtár típusát / EU ++ lehetőséget. Az ICCAVR kategóriában telepítenie kell a Engedélyezés Multibyte Támogatás jelölőnégyzetet az Optimizációs lapon, és kapcsolja ki az optimalizálást az Optimizációs lapon (különben elrontja az első programunkat).

Ezután válassza ki az XLINK kategóriát. Itt meg kell határoznia az összeállított fájl formátumát. Mivel most megadjuk a hibakeresési mód (hibakeresés) lehetőséget, a címben szereplő, majd a kimeneten hibakeresési fájlt kell kapnia. Később megnyitjuk az AVR stúdióban. Ehhez válassza ki a kiterjesztést.cof, és a fájl típusa Ubrof 7.

Most kattintson az OK gombra, majd változtassa meg a hibakeresési hibakeresést.

Újra beállunk, ahol az XLINK kivételével az összes paramétert ugyanazt mutatja. Az XLINK-ban változtassa meg a HEX kiterjesztését és az Intel-Standart fájlformátumot.

Ez minden. Most folytathatja az első program írását. Hozzon létre egy új forrás / szöveget, és pontszámot ad a következő kódot:

#Inlude. "IOM16H" rövid aláírás nélkül IM; Üres. Fő ( Üres.) (DDRB \u003d 255, PORTB \u003d 0; míg(1) { ha (Portb \u003d\u003d 255) Portb \u003d 0; mÁS. Portb ++; -Ért (i \u003d 0; én

Az "IOM16H fájl" fájl a mappában van (C: programfájlok) \\ Iar rendszerek \\ Embedded Workbench 3.2 \\ avr \\ Inc. Ha másik MK-t használ, például Atmega64, majd válassza ki az "IOM64H" fájlt. Ezekben a fejlécfájlokban az MK-ról szóló információkat tárolják: a nyilvántartások nevei, a nyilvántartások bitjei, a megszakítások neve meghatározása. Az A, B, C vagy D port minden egyes különálló "lábának" bemenetként vagy kimenetként működhet. Ezt az adatirány-regiszter (DDR) nyilvántartása határozza meg. 1 teszi a "láb" kimenetet, 0 - bemenet. Így például DDRA \u003d 13, a "láb" PB0, PB2, PB3, a fennmaradó bemenetek kimenetét, mert 13 A bináris kódban 00001101 lesz.

Portb olyan nyilvántartás, amelyben a port "láb" állapotát határozzák meg. A 0-at 0 V V. NEXT A KÖRNYEZETVÉDELMI VÉGREHAJTÁSÁT. Az MK programozás során mindig végtelen hurkot készítsen, amelyben az MK bármilyen műveletet hajt végre, amíg csökken, vagy amíg megszakítás nem történik meg. Ebben a ciklusban írnak, ahogy a "háttérkód", amely az MK az utóbbi sorrendben működik. Ez lehet például a kimeneti információk a kijelzőn. A mi esetünkben a Portb nyilvántartásának tartalma növekszik, amíg meg nem töltődik. Ezt követően minden elkezdődik. Végül, tízezer ciklus. Szükség van egy látható késleltetés kialakítására a port állapotának váltására.



Most mentse ezt a fájlt a projekt mappa prog1.c, másolja a mappát a projekt fájlt om16.h válassza Project / Add Files és add „iom16.h” és a „prog1.c”. Válassza kiadás lehetőséget, kattintson az F7 elemre, a program összeállítása és egy üzenet jelenik meg:


A hibák száma: 0
A figyelmeztetések teljes száma: 0

Adok egy fotót a programozójáról:

Töltse le avreal programozó. Másolja el (Avreal32.exe) a kiadás / exe mappába, ahol a prog1.hex fájlnak hazudnia kell. Adjuk hozzá az MK-t, csatlakoztassuk a programozó kábelt. Megnyitjuk a Far Manager (a legkényelmesebb az MK-t), menjen erre a mappára, nyomja meg a Ctrl + O gombot. Mivel van egy vadonatúj mk, elakad

avreal32.exe + mega16 -o11.0592mHz -p1 -fblev \u003d 0, jtagen \u003d 1, cksel \u003d f, sut \u003d 1 -w

Ne felejtse el helyesen megadni a frekvenciát, ha nem használja 11059200 Hz! Ugyanakkor az mk-ben az úgynevezett. Fuss - A munkájuk ellenőrzése (belső generátor, jtag, stb.). Ezt követően készen áll az első program fogadására. A programozót az LPT port, a frekvencia, a fájlnév és mások által használt paraméterekként továbbítják (mindegyikük szerepel az Avreal leírásában). Toborozzunk:

Avreal32.exe + mega16 -o11.0592mHz -p1 -e -w -az -% prog1.hex

Helyes kapcsolat esetén a programozó sikeres programozást jelent. Nincs garancia arra, hogy az első alkalommal fog működni (amikor először hívja a programot). Én magam is programozhatom második alkalommal. Talán az LPT port buggy, vagy megjelenik a kábelen. Ha problémái vannak, gondosan ellenőrizze a kábelt. Saját tapasztalataimban tudom, hogy a hibák 60% -a kapcsolódik a megfelelő helyen való érintkezés hiányával, 20% -kal - szükségtelenül és 15% -kal - hibás forrasztással. Ha semmi sem történik, olvassa el a programozó leírását, próbálja meg összeszerelni a Byte Blaster-t.

Tegyük fel, hogy minden munka. Ha most csatlakozni nyolc LED abba a kikötőbe, MK (csináld letiltott állapotban az MK, és kívánatos, következetesen a LED-ek közé ellenállások 300-400 Ohm), és szolgálni nekem, majd egy kis csoda fog történni - A "hullám" fut!

© Kiselev Roman
2007. május.

A mikrokontrollerek kicsiek, de ugyanakkor nagyon kényelmes eszközök azok számára, akik különböző csodálatos robotos vagy automatizált dolgokat szeretnék létrehozni otthon. E cikk keretein belül az AVR programozás kezdőknek, különböző aspektusai és árnyalatainak e folyamat kerül sor.

Általános információ

A mikrokontrollerek mindenütt megtalálhatók. Hűtőszekrényekben, mosógépekben, telefonokban, gyártásban, intelligens otthonokban és számos különböző technikai eszközben vannak. Széles körű felhasználásuk annak köszönhető, hogy az eszközök összetettebb és nagyméretű analóg rendszereinek cseréje. Az MK AVR programozása lehetővé teszi, hogy autonóm vezérlést biztosítson az elektronikus eszközökön. Ezek a mikrokontrollerek a legegyszerűbb számítógépként jelentkezhetnek, amely kölcsönhatásba léphet a külső berendezésekkel. Tehát a tranzisztorok megnyitása / szoros tranzisztorok, adatokat kapnak az érzékelőktől, és megjelenítik őket a képernyőkön. A mikrokontrollerek is különböző bemeneti feldolgozást is végezhetnek, mint egy személyi számítógép. Ha a mester az AVR programozó nulláról elérjék a szakmai, akkor szinte korlátlan lehetőségeket nyit, hogy ellenőrizzék a különböző eszközök segítségével az I / O portok, valamint változások a kódot.

Egy kicsit az AVR-ról.

A cikk részeként az Atmel által termelt mikrokontrollerek családját veszik figyelembe. Nagyon jó teljesítményük van, ami lehetővé teszi számukra, hogy sok amatőr eszközben használják őket. Széles körben alkalmazzák az iparban. Megtalálható ebben a technikában:

  1. Belföldi. Mosógépek, hűtőszekrények, mikrohullámok és így tovább.
  2. Mobil. Robotok, kommunikációs eszközök és így tovább.
  3. Számítástechnika. Perifériás vezérlőrendszerek, alaplapok.
  4. Szórakoztató. Díszek és gyermekjátékok.
  5. Szállítás. Biztonsági és motorvezérlő rendszerek.
  6. Ipari berendezések. Gépvezérlő rendszerek.

Ez természetesen nem minden gömb. Használják őket, ahol nyereséges, hogy nem használható kontroll chipek, hanem egy mikrokontroller. Ez azért lehetséges, mert az alacsony energiafogyasztás és programokat használnak nyelvek szerelő, egy kicsit megváltozott a mikrokontroller család. Az ilyen változás szükséges a gyenge számítástechnikai képességek miatt, amelyek számolják, általában tíz kilobájtban. Az AVR programozás ezen nyelvek tanulmányozása nélkül nem lehetséges.

Hogyan juthat el az első mikrokontroller?

AVR programozás szükséges:

  1. A szükséges fejlesztési környezet elérhetősége.
  2. Valójában maguk a mikrokontrollerek.

A második bekezdés részletesebben megfontolja. Három lehetőség van arra, hogy megkapja a kívánt eszközt:

  1. Vásárolja meg közvetlenül a mikrokontrollert.
  2. Szerezzen be egy eszközt egy tervező részeként (például - Arduino).
  3. Gyűjtsd össze a mikrokontrollert.

Az első pontban semmi bonyolult, ezért azonnal fordulunk a második és harmadik.

Szerezzen be egy eszközt a tervezőben

Például a híres Arduino lesz kiválasztva. Ez egy részmunkaidős, kényelmes platform a különböző elektronikus eszközök gyors és kiváló minőségű fejlesztéséhez. Az Arduino tartalmaz egy speciális alkatrészkészletet a munkához (különböző konfigurációk is). Ez szükségszerűen AVR vezérlő. Ez a megközelítés lehetővé teszi, hogy gyorsan elkezdje a készülék fejlesztését, nem igényel különleges készségeket és készségeket, jelentős lehetőségekkel rendelkezik a kiegészítő táblák összekapcsolása, valamint az interneten, sok információt találhat az érdeklődési kérdésekről. De nem volt mínusz nélkül. Arduino megvásárlásával egy személy jobban megfosztja magát, hogy jobbra merüljön az AVR programozásba, jobb, ha ismeri a mikrokontrollert, a munkájának sajátosságait. Továbbá, a negatív viszonylag keskeny modellvonalat ad hozzá, ezért gyakran szükséges a díjak vásárlása konkrét feladatokhoz. A funkció is az a tény, hogy a "SI" programozás meglehetősen eltér a szabványos formanyomtatványtól. Az összes hátránya ellenére az Arduino alkalmas kezdők tanulására. De nem szükséges visszaélni.

Független összeszerelés

Meg kell jegyezni, hogy az AVR mikrokontrollereket elegendő barátságos újonnan érhetők el. Megfizethető, egyszerű és olcsó komponensekkel összegyűjtheti őket. Ha beszélünk a profikról, akkor ez a megközelítés lehetővé teszi, hogy jobban megismerje magát az eszközzel, válassza ki a szükséges összetevőket, testreszabja a fejlett követelmények végső eredményét, a szabványos programozási nyelvek használatát és az alacsony költségeket. A mínuszok közül csak az önkészítés összetettsége megjegyezhető, ha először elvégezhető, és nincs szükség a tudás és készségek.

Hogyan dolgozz?

Tehát mondjuk, hogy a mikrokontrollerrel kapcsolatos kérdés döntött. Ezután figyelembe vesszük, hogy megvásárolták vagy megvásárolták egymástól függetlenül. Mire van szükség az AVR programozás elsajátításához? E célból a fejlesztési környezetre van szükség (a rendszeres noteszgép alapul szolgál, de javaslom, hogy megállítsam a Notepad ++ -et). Bár vannak más programok az AVR programozáshoz, a rendelkezésre bocsátott rendelkezés képes lesz megbirkózni az összes követelményrel. Szükségünk van egy programozóra is. Megvásárolható a legközelebbi boltban, megrendelés az interneten, vagy összegyűjti magát. Nem fáj, és a nyomtatott áramköri kártya. Nem kötelező, de a használat lehetővé teszi az idegek és az idő mentését. Szintén vásárolt / létrehozott önállóan. És az utolsó áramforrás. Az AVR esetében az 5V-os feszültség biztosítása szükséges.

Hol és hogyan kell tanulni?

A Scratch remekművek létrehozása nem fog működni. A tudás, a tapasztalatok és a gyakorlat itt szükségesek. De hol vegye őket? Számos mód van. Kezdetben önállóan keresheti a szükséges információkat a globális hálózatban. A programozó tanfolyamok (távoli vagy teljes munkaidőben) írhatok az alapvető munkaeszközök megszerzéséhez. Minden megközelítésnek előnyei vannak. Tehát a programozó tanfolyamok olcsóbbak lesznek, és talán ingyenesek. De ha valami sikertelen, akkor a teljes munkaidős tevékenységeknél egy tapasztalt fejlesztő képes lesz megtalálni a probléma okát. Nem lesz felesleges, hogy megismerje magát a szabad hozzáféréssel rendelkező irodalommal. Persze, ez nem fog működni ki néhány könyvet, de most az alapvető ismereteket a készülék programozása a „SI”, „szerelő” és egyéb üzemi pillanatok tudsz.

I / O portok

Ez rendkívül fontos téma. Anélkül, hogy megértené az I / O portok működését, az intrahemable AVR programozás egyáltalán lehetséges. Végtére is, a mikrokontroller külső eszközökkel való kölcsönhatása pontosan történik, amikor közvetítik őket. Első pillantásra a kezdő úgy tűnik, hogy a kikötő meglehetősen kusza mechanizmus. Az ilyen benyomás elkerülése érdekében részletesen nem fogjuk figyelembe venni munkájának rendszerét, de csak az általános elképzelést kapok erről. Tekintsük a program végrehajtását. A készülék példájaként az ATMEGA8 mikrokontroller volt kiválasztva - az AVR család egyik legnépszerűbbé. Az I / O port három regisztert képvisel, amelyek felelősek a munkájáért. A fizikai szinten olyanok, mint a lábak. Mindegyikük egy bizonyos bitnek felel meg a vezérlési nyilvántartásban. Mindegyik láb mindkettő információt adhat az információ megadásához és annak kimenetéhez. Például leállíthatja a LED gyújtás funkciót, vagy a gomb megnyomásával a gomb megnyomásával. By the way, a három regiszter, melyet mondtak: Portx, Pinx és DDRX. Mindegyikük nyolc kicsit (ne felejtsük el, hogy az ATMEGA8-at tekintjük). Ez az, hogy egy kicsit egy bizonyos lábon van.

Munkakörülmények

Az orientáció szempontjából a legjelentősebb a DDRX irányítása. Ez is nyolcis. Az általa értékelt értékek 0 vagy 1. Hogyan működik a vezérlő működése nullák és egységek használatakor? Ha egy adott bitben állítsa be a 0-t, akkor a lábbal a beviteli módba kapcsolódik. És lehet olvasni a külső eszközökről érkező adatokat. Ha 1-et állít be, a mikrokontroller képes lesz irányítani valamit (például adja meg a tranzisztornak, hogy kihagyja a feszültséget és a LED-et). A második legfontosabb a PortX. A láb állapotvezérlésével foglalkozik. Tekintsünk egy példát. Tegyük fel, hogy van egy kimeneti kikötőnk. Ha logikai egységet állítunk be a PortX-ben, a mikrokontroller jelét a vezérlőberendezés elindításához küldjük el. Például világítsa meg a LED-et. A nulla beállításkor kilép. Azaz, hogy a DDRX Managerrel folyamatosan dolgozzon folyamatosan, nincs szükség. És végül beszéljünk PINX-ről. Ez a regiszter felelős a vezérlő lábak állapotának megjelenítéséért, amikor a bemeneti állapotra van konfigurálva. Meg kell jegyezni, hogy a PINX kizárólag olvasási módban működhet. Írjon semmit, hogy írjon. De itt olvassa el a láb aktuális állapotát, nem probléma.

Munka analógokkal

Az AVR nem az egyetlen mikrokontrollerek. Ez a piac több nagy gyártó, valamint számos kínai imitáló eszköz és házi készítés között oszlik meg. Sok szempontból hasonlóak. Például a Pic / AVR programozás nem túl más. És ha valami megértés van, akkor könnyű megérteni mindent. De azt javasoljuk a módon AVR miatt illetékes szerkezet, barát, hogy a fejlesztő és a jelenléte nagyszámú segédanyagok, ezért a fejlesztési folyamat jelentősen felgyorsult.

Biztonsági technika

Ha az AVR mikrokontrollereket az "SI" vagy az "Assembler" programban programozták, akkor nagyon óvatosan kell működnie. Az a tény, hogy a nyilvántartások határozott kombinációjának beállításával és a belső beállítások megváltoztatásával biztonságosan blokkolhatja a mikrokontrollert. Ez különösen igaz Fuuzra. Ha nincs bizalom a cselekedetek helyességében, akkor jobb, ha elhagyja a használatát. Ugyanez vonatkozik a programozókra is. Ha megvásárolja a gyári berendezéseket, problémamentesen villog a mikrokontrollerek. A saját kezével való összeszerelés során egy szomorú helyzet akkor fordulhat elő, amelyeknél a programozó blokkolja az eszközt. Ez mind a programkód, mind a problémák révén fordulhat elő. By the way, egy másik (ez az idő pozitív) pillanat, amelyet korábban említettek, de soha nem fedezték fel teljesen. Most szinte minden modern mikrokontrollernek van az intra-hem programozás funkciója. Mit jelent? Tegyük fel, hogy a készüléket összeomlott a fedélzeten. És annak érdekében, hogy megváltoztassa a firmware-t, most ez nem szükséges, hogy elég, hogy elég, mert egy ilyen beavatkozás károsítja a mikrokontroller is. Elég ahhoz, hogy csatlakozzon a megfelelő következtetésekhez és átprogramozhasson, amikor közvetítik.

Milyen modellt választhat?

A cikk részeként az ATMEGA8-t figyelembe vették. Ez egy meglehetősen középtisztító mikrokontroller a jellemzői számára, amelyek mindazonáltal elég a legtöbb kézművesség számára. Ha van egy vágy, hogy valami nagyszabású, akkor egyfajta szörnyethet, mint az ATMEGA128. De a tapasztaltabb fejlesztők számára készültek. Ezért, ha nincs elegendő tapasztalat, akkor jobb, ha kis és egyszerű eszközökkel kezdődik. Ezenkívül jelentősen olcsóbbak. Egyetértek, egy dolog véletlenül blokkolja a mikrokontrollert száz rubel, és teljesen más - fél ezer. Jobb, ha kitölti a kezét és foglalkozik a működés különböző aspektusaiban, hogy a későbbiekben ne veszítsen jelentős mennyiségeket. Kezdetben az ATMEGA8-mal kezdődhet, majd navigálhat az Ön igényeinek.

Következtetés

Tehát figyelembe vették az AVR programozás témáját a leggyakoribb jellemzőkben. Természetesen még mindig sok dologról beszélhetsz. Tehát például a mikrokontrollerek jelölését nem vették figyelembe. És sokat mondhat. Tehát a többnyire a mikrokontrollerek 5V-os feszültségen működnek. Mivel jelenléte, például a betűk L lehet mondani, hogy csak 2,7 V elegendő az eszköz, amennyit csak lehet, néha a tudás a címkézés játszhat fontos szerepet tekintve helyes és tartós eszközökkel. A mikrokontrollerek működésének ideje is érdekes téma. Minden eszközt egy bizonyos ideig terveztek. Tehát egyesek ezer órát dolgozhatnak ki. Mások 10 000-es garanciális tartalékkal rendelkeznek!